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-java.cabal b/hydra-java.cabal
--- a/hydra-java.cabal
+++ b/hydra-java.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hydra-java
-version:        0.17.7
+version:        0.18.0
 synopsis:       Hydra's Java coder: emit Java 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". Java support for Hydra
 category:       Data
@@ -27,12 +27,12 @@
 
 library
   exposed-modules:
-      Hydra.Dsl.Java.Environment
-      Hydra.Dsl.Java.Language
-      Hydra.Dsl.Java.Syntax
-      Hydra.Gradle
       Hydra.Java.Coder
+      Hydra.Java.Dsl.Environment
+      Hydra.Java.Dsl.Language
+      Hydra.Java.Dsl.Syntax
       Hydra.Java.Environment
+      Hydra.Java.Gradle
       Hydra.Java.Language
       Hydra.Java.Names
       Hydra.Java.Serde
@@ -46,7 +46,7 @@
   build-depends:
       base >=4.19.0 && <4.22
     , containers >=0.6.7 && <0.8
-    , hydra-jvm ==0.17.7
-    , hydra-kernel ==0.17.7
+    , hydra-jvm ==0.18.0
+    , hydra-kernel ==0.18.0
     , scientific >=0.3.7 && <0.4
   default-language: Haskell2010
diff --git a/src/main/haskell/Hydra/Dsl/Java/Environment.hs b/src/main/haskell/Hydra/Dsl/Java/Environment.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Dsl/Java/Environment.hs
+++ /dev/null
@@ -1,1559 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | DSL functions for hydra.java.environment
-
-module Hydra.Dsl.Java.Environment where
-
-import qualified Hydra.Core as Core
-import qualified Hydra.Dsl.Java.Syntax as JavaSyntax
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Java.Environment as Environment
-import qualified Hydra.Java.Syntax as Syntax
-import qualified Hydra.Packaging as Packaging
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-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
-
--- | DSL constructor for hydra.java.environment.Aliases
-aliases :: Typed.TypedTerm Packaging.ModuleName -> Typed.TypedTerm (M.Map Packaging.ModuleName Syntax.PackageName) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm (M.Map Core.Name Core.Name) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm (M.Map Core.Name Core.Name) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm (Maybe Core.Type) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliases currentNamespace packages branchVars recursiveVars inScopeTypeParams polymorphicLocals inScopeJavaVars varRenames lambdaVars typeVarSubst trustedTypeVars methodCodomain thunkedVars =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Typed.unTypedTerm currentNamespace)},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Typed.unTypedTerm packages)},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Typed.unTypedTerm branchVars)},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Typed.unTypedTerm recursiveVars)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Typed.unTypedTerm inScopeTypeParams)},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Typed.unTypedTerm polymorphicLocals)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Typed.unTypedTerm inScopeJavaVars)},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Typed.unTypedTerm varRenames)},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Typed.unTypedTerm lambdaVars)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Typed.unTypedTerm typeVarSubst)},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Typed.unTypedTerm trustedTypeVars)},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Typed.unTypedTerm methodCodomain)},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Typed.unTypedTerm thunkedVars)}]}))
-
--- | DSL name token for hydra.java.environment.Aliases
-aliasesAliases :: Typed.TypedName Environment.Aliases
-aliasesAliases = Typed.TypedName (Core.Name "hydra.java.environment.Aliases")
-
--- | DSL accessor for the branchVars field of hydra.java.environment.Aliases
-aliasesBranchVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name)
-aliasesBranchVars x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "branchVars")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the currentNamespace field of hydra.java.environment.Aliases
-aliasesCurrentNamespace :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm Packaging.ModuleName
-aliasesCurrentNamespace x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "currentNamespace")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the inScopeJavaVars field of hydra.java.environment.Aliases
-aliasesInScopeJavaVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name)
-aliasesInScopeJavaVars x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the inScopeTypeParams field of hydra.java.environment.Aliases
-aliasesInScopeTypeParams :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name)
-aliasesInScopeTypeParams x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the lambdaVars field of hydra.java.environment.Aliases
-aliasesLambdaVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name)
-aliasesLambdaVars x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "lambdaVars")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the methodCodomain field of hydra.java.environment.Aliases
-aliasesMethodCodomain :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (Maybe Core.Type)
-aliasesMethodCodomain x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "methodCodomain")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the packages field of hydra.java.environment.Aliases
-aliasesPackages :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Packaging.ModuleName Syntax.PackageName)
-aliasesPackages x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "packages")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the polymorphicLocals field of hydra.java.environment.Aliases
-aliasesPolymorphicLocals :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name)
-aliasesPolymorphicLocals x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the recursiveVars field of hydra.java.environment.Aliases
-aliasesRecursiveVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name)
-aliasesRecursiveVars x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "recursiveVars")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the thunkedVars field of hydra.java.environment.Aliases
-aliasesThunkedVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name)
-aliasesThunkedVars x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "thunkedVars")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the trustedTypeVars field of hydra.java.environment.Aliases
-aliasesTrustedTypeVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name)
-aliasesTrustedTypeVars x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeVarSubst field of hydra.java.environment.Aliases
-aliasesTypeVarSubst :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Core.Name Core.Name)
-aliasesTypeVarSubst x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the varRenames field of hydra.java.environment.Aliases
-aliasesVarRenames :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Core.Name Core.Name)
-aliasesVarRenames x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-        Core.projectionFieldName = (Core.Name "varRenames")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the branchVars field of hydra.java.environment.Aliases
-aliasesWithBranchVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithBranchVars original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the currentNamespace field of hydra.java.environment.Aliases
-aliasesWithCurrentNamespace :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm Packaging.ModuleName -> Typed.TypedTerm Environment.Aliases
-aliasesWithCurrentNamespace original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the inScopeJavaVars field of hydra.java.environment.Aliases
-aliasesWithInScopeJavaVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithInScopeJavaVars original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the inScopeTypeParams field of hydra.java.environment.Aliases
-aliasesWithInScopeTypeParams :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithInScopeTypeParams original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the lambdaVars field of hydra.java.environment.Aliases
-aliasesWithLambdaVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithLambdaVars original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the methodCodomain field of hydra.java.environment.Aliases
-aliasesWithMethodCodomain :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (Maybe Core.Type) -> Typed.TypedTerm Environment.Aliases
-aliasesWithMethodCodomain original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the packages field of hydra.java.environment.Aliases
-aliasesWithPackages :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Packaging.ModuleName Syntax.PackageName) -> Typed.TypedTerm Environment.Aliases
-aliasesWithPackages original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the polymorphicLocals field of hydra.java.environment.Aliases
-aliasesWithPolymorphicLocals :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithPolymorphicLocals original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the recursiveVars field of hydra.java.environment.Aliases
-aliasesWithRecursiveVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithRecursiveVars original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the thunkedVars field of hydra.java.environment.Aliases
-aliasesWithThunkedVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithThunkedVars original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the trustedTypeVars field of hydra.java.environment.Aliases
-aliasesWithTrustedTypeVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithTrustedTypeVars original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeVarSubst field of hydra.java.environment.Aliases
-aliasesWithTypeVarSubst :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Core.Name Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithTypeVarSubst original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "varRenames")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the varRenames field of hydra.java.environment.Aliases
-aliasesWithVarRenames :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Core.Name Core.Name) -> Typed.TypedTerm Environment.Aliases
-aliasesWithVarRenames original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.Aliases"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "currentNamespace"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "currentNamespace")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "packages"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "packages")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "branchVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "branchVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "recursiveVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "recursiveVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeTypeParams"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeTypeParams")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "polymorphicLocals"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "polymorphicLocals")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inScopeJavaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "inScopeJavaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "varRenames"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "lambdaVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "lambdaVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeVarSubst"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "typeVarSubst")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trustedTypeVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "trustedTypeVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "methodCodomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "methodCodomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "thunkedVars"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.Aliases"),
-              Core.projectionFieldName = (Core.Name "thunkedVars")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.environment.JavaEnvironment
-javaEnvironment :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Environment.JavaEnvironment
-javaEnvironment aliases graph =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.JavaEnvironment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "aliases"),
-          Core.fieldTerm = (Typed.unTypedTerm aliases)},
-        Core.Field {
-          Core.fieldName = (Core.Name "graph"),
-          Core.fieldTerm = (Typed.unTypedTerm graph)}]}))
-
--- | DSL accessor for the aliases field of hydra.java.environment.JavaEnvironment
-javaEnvironmentAliases :: Typed.TypedTerm Environment.JavaEnvironment -> Typed.TypedTerm Environment.Aliases
-javaEnvironmentAliases x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.JavaEnvironment"),
-        Core.projectionFieldName = (Core.Name "aliases")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the graph field of hydra.java.environment.JavaEnvironment
-javaEnvironmentGraph :: Typed.TypedTerm Environment.JavaEnvironment -> Typed.TypedTerm Graph.Graph
-javaEnvironmentGraph x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.JavaEnvironment"),
-        Core.projectionFieldName = (Core.Name "graph")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.environment.JavaEnvironment
-javaEnvironmentJavaEnvironment :: Typed.TypedName Environment.JavaEnvironment
-javaEnvironmentJavaEnvironment = Typed.TypedName (Core.Name "hydra.java.environment.JavaEnvironment")
-
--- | DSL updater for the aliases field of hydra.java.environment.JavaEnvironment
-javaEnvironmentWithAliases :: Typed.TypedTerm Environment.JavaEnvironment -> Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm Environment.JavaEnvironment
-javaEnvironmentWithAliases original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.JavaEnvironment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "aliases"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "graph"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.JavaEnvironment"),
-              Core.projectionFieldName = (Core.Name "graph")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the graph field of hydra.java.environment.JavaEnvironment
-javaEnvironmentWithGraph :: Typed.TypedTerm Environment.JavaEnvironment -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Environment.JavaEnvironment
-javaEnvironmentWithGraph original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.JavaEnvironment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "aliases"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.environment.JavaEnvironment"),
-              Core.projectionFieldName = (Core.Name "aliases")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "graph"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.environment.JavaFeatures
-javaFeatures :: Typed.TypedTerm Bool -> Typed.TypedTerm Environment.JavaFeatures
-javaFeatures supportsDiamondOperator =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.JavaFeatures"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "supportsDiamondOperator"),
-          Core.fieldTerm = (Typed.unTypedTerm supportsDiamondOperator)}]}))
-
--- | DSL name token for hydra.java.environment.JavaFeatures
-javaFeaturesJavaFeatures :: Typed.TypedName Environment.JavaFeatures
-javaFeaturesJavaFeatures = Typed.TypedName (Core.Name "hydra.java.environment.JavaFeatures")
-
--- | DSL accessor for the supportsDiamondOperator field of hydra.java.environment.JavaFeatures
-javaFeaturesSupportsDiamondOperator :: Typed.TypedTerm Environment.JavaFeatures -> Typed.TypedTerm Bool
-javaFeaturesSupportsDiamondOperator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.environment.JavaFeatures"),
-        Core.projectionFieldName = (Core.Name "supportsDiamondOperator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the supportsDiamondOperator field of hydra.java.environment.JavaFeatures
-javaFeaturesWithSupportsDiamondOperator :: Typed.TypedTerm Environment.JavaFeatures -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.JavaFeatures
-javaFeaturesWithSupportsDiamondOperator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.environment.JavaFeatures"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "supportsDiamondOperator"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the constant variant of hydra.java.environment.JavaSymbolClass
-javaSymbolClassConstant :: Typed.TypedTerm Environment.JavaSymbolClass
-javaSymbolClassConstant =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.environment.JavaSymbolClass"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "constant"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the hoistedLambda variant of hydra.java.environment.JavaSymbolClass
-javaSymbolClassHoistedLambda :: Typed.TypedTerm Int -> Typed.TypedTerm Environment.JavaSymbolClass
-javaSymbolClassHoistedLambda x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.environment.JavaSymbolClass"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "hoistedLambda"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.environment.JavaSymbolClass
-javaSymbolClassJavaSymbolClass :: Typed.TypedName Environment.JavaSymbolClass
-javaSymbolClassJavaSymbolClass = Typed.TypedName (Core.Name "hydra.java.environment.JavaSymbolClass")
-
--- | DSL injection for the localVariable variant of hydra.java.environment.JavaSymbolClass
-javaSymbolClassLocalVariable :: Typed.TypedTerm Environment.JavaSymbolClass
-javaSymbolClassLocalVariable =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.environment.JavaSymbolClass"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "localVariable"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the nullaryFunction variant of hydra.java.environment.JavaSymbolClass
-javaSymbolClassNullaryFunction :: Typed.TypedTerm Environment.JavaSymbolClass
-javaSymbolClassNullaryFunction =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.environment.JavaSymbolClass"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "nullaryFunction"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the unaryFunction variant of hydra.java.environment.JavaSymbolClass
-javaSymbolClassUnaryFunction :: Typed.TypedTerm Environment.JavaSymbolClass
-javaSymbolClassUnaryFunction =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.environment.JavaSymbolClass"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unaryFunction"),
-        Core.fieldTerm = Core.TermUnit}}))
diff --git a/src/main/haskell/Hydra/Dsl/Java/Language.hs b/src/main/haskell/Hydra/Dsl/Java/Language.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Dsl/Java/Language.hs
+++ /dev/null
@@ -1,47 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | DSL functions for hydra.java.language
-
-module Hydra.Dsl.Java.Language where
-
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Classes as Classes
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Errors as Errors
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Java.Language as Language
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Lexical as Lexical
-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.Relational as Relational
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-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
-
--- | DSL reference to hydra.java.language.javaLanguage
-javaLanguage :: Typed.TypedTerm Coders.Language
-javaLanguage = Typed.TypedTerm (Core.TermVariable (Core.Name "hydra.java.language.javaLanguage"))
-
--- | DSL reference to hydra.java.language.javaMaxTupleLength
-javaMaxTupleLength :: Typed.TypedTerm Int
-javaMaxTupleLength = Typed.TypedTerm (Core.TermVariable (Core.Name "hydra.java.language.javaMaxTupleLength"))
-
--- | DSL reference to hydra.java.language.reservedWords
-reservedWords :: Typed.TypedTerm (S.Set String)
-reservedWords = Typed.TypedTerm (Core.TermVariable (Core.Name "hydra.java.language.reservedWords"))
diff --git a/src/main/haskell/Hydra/Dsl/Java/Syntax.hs b/src/main/haskell/Hydra/Dsl/Java/Syntax.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Dsl/Java/Syntax.hs
+++ /dev/null
@@ -1,16885 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | DSL functions for hydra.java.syntax
-
-module Hydra.Dsl.Java.Syntax where
-
-import qualified Hydra.Core as Core
-import qualified Hydra.Java.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
-
--- | DSL constructor for the hydra.java.syntax.AdditionalBound wrapper
-additionalBound :: Typed.TypedTerm Syntax.InterfaceType -> Typed.TypedTerm Syntax.AdditionalBound
-additionalBound x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.AdditionalBound"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.AdditionalBound
-additionalBoundAdditionalBound :: Typed.TypedName Syntax.AdditionalBound
-additionalBoundAdditionalBound = Typed.TypedName (Core.Name "hydra.java.syntax.AdditionalBound")
-
--- | DSL name token for hydra.java.syntax.AdditiveExpression
-additiveExpressionAdditiveExpression :: Typed.TypedName Syntax.AdditiveExpression
-additiveExpressionAdditiveExpression = Typed.TypedName (Core.Name "hydra.java.syntax.AdditiveExpression")
-
--- | DSL injection for the minus variant of hydra.java.syntax.AdditiveExpression
-additiveExpressionMinus :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression
-additiveExpressionMinus x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "minus"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the plus variant of hydra.java.syntax.AdditiveExpression
-additiveExpressionPlus :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression
-additiveExpressionPlus x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "plus"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the unary variant of hydra.java.syntax.AdditiveExpression
-additiveExpressionUnary :: Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.AdditiveExpression
-additiveExpressionUnary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.AdditiveExpression_Binary
-additiveExpression_Binary :: Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.AdditiveExpression_Binary
-additiveExpression_Binary lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL name token for hydra.java.syntax.AdditiveExpression_Binary
-additiveExpression_BinaryAdditiveExpression_Binary :: Typed.TypedName Syntax.AdditiveExpression_Binary
-additiveExpression_BinaryAdditiveExpression_Binary =
-    Typed.TypedName (Core.Name "hydra.java.syntax.AdditiveExpression_Binary")
-
--- | DSL accessor for the lhs field of hydra.java.syntax.AdditiveExpression_Binary
-additiveExpression_BinaryLhs :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression
-additiveExpression_BinaryLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression_Binary"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the rhs field of hydra.java.syntax.AdditiveExpression_Binary
-additiveExpression_BinaryRhs :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
-additiveExpression_BinaryRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression_Binary"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.AdditiveExpression_Binary
-additiveExpression_BinaryWithLhs :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.AdditiveExpression_Binary
-additiveExpression_BinaryWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression_Binary"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.AdditiveExpression_Binary
-additiveExpression_BinaryWithRhs :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.AdditiveExpression_Binary
-additiveExpression_BinaryWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AdditiveExpression_Binary"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for the hydra.java.syntax.AmbiguousName wrapper
-ambiguousName :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.AmbiguousName
-ambiguousName x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.AmbiguousName"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.AmbiguousName
-ambiguousNameAmbiguousName :: Typed.TypedName Syntax.AmbiguousName
-ambiguousNameAmbiguousName = Typed.TypedName (Core.Name "hydra.java.syntax.AmbiguousName")
-
--- | DSL constructor for the hydra.java.syntax.AndExpression wrapper
-andExpression :: Typed.TypedTerm [Syntax.EqualityExpression] -> Typed.TypedTerm Syntax.AndExpression
-andExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.AndExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.AndExpression
-andExpressionAndExpression :: Typed.TypedName Syntax.AndExpression
-andExpressionAndExpression = Typed.TypedName (Core.Name "hydra.java.syntax.AndExpression")
-
--- | DSL constructor for hydra.java.syntax.AnnotatedIdentifier
-annotatedIdentifier :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.AnnotatedIdentifier
-annotatedIdentifier annotations identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotatedIdentifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL name token for hydra.java.syntax.AnnotatedIdentifier
-annotatedIdentifierAnnotatedIdentifier :: Typed.TypedName Syntax.AnnotatedIdentifier
-annotatedIdentifierAnnotatedIdentifier = Typed.TypedName (Core.Name "hydra.java.syntax.AnnotatedIdentifier")
-
--- | DSL accessor for the annotations field of hydra.java.syntax.AnnotatedIdentifier
-annotatedIdentifierAnnotations :: Typed.TypedTerm Syntax.AnnotatedIdentifier -> Typed.TypedTerm [Syntax.Annotation]
-annotatedIdentifierAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotatedIdentifier"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.AnnotatedIdentifier
-annotatedIdentifierIdentifier :: Typed.TypedTerm Syntax.AnnotatedIdentifier -> Typed.TypedTerm Syntax.Identifier
-annotatedIdentifierIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotatedIdentifier"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the annotations field of hydra.java.syntax.AnnotatedIdentifier
-annotatedIdentifierWithAnnotations :: Typed.TypedTerm Syntax.AnnotatedIdentifier -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.AnnotatedIdentifier
-annotatedIdentifierWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotatedIdentifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotatedIdentifier"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.AnnotatedIdentifier
-annotatedIdentifierWithIdentifier :: Typed.TypedTerm Syntax.AnnotatedIdentifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.AnnotatedIdentifier
-annotatedIdentifierWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotatedIdentifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotatedIdentifier"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.Annotation
-annotationAnnotation :: Typed.TypedName Syntax.Annotation
-annotationAnnotation = Typed.TypedName (Core.Name "hydra.java.syntax.Annotation")
-
--- | DSL constructor for the hydra.java.syntax.AnnotationInterfaceBody wrapper
-annotationInterfaceBody :: Typed.TypedTerm [Syntax.AnnotationInterfaceMemberDeclaration] -> Typed.TypedTerm Syntax.AnnotationInterfaceBody
-annotationInterfaceBody x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceBody"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.AnnotationInterfaceBody
-annotationInterfaceBodyAnnotationInterfaceBody :: Typed.TypedName Syntax.AnnotationInterfaceBody
-annotationInterfaceBodyAnnotationInterfaceBody = Typed.TypedName (Core.Name "hydra.java.syntax.AnnotationInterfaceBody")
-
--- | DSL constructor for hydra.java.syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclaration :: Typed.TypedTerm [Syntax.InterfaceModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.AnnotationInterfaceBody -> Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclaration modifiers identifier body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL name token for hydra.java.syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationAnnotationInterfaceDeclaration :: Typed.TypedName Syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationAnnotationInterfaceDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration")
-
--- | DSL accessor for the body field of hydra.java.syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationBody :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceBody
-annotationInterfaceDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationIdentifier :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
-annotationInterfaceDeclarationIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationModifiers :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceModifier]
-annotationInterfaceDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationWithBody :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceBody -> Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationWithIdentifier :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          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.java.syntax.AnnotationInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationWithModifiers :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceModifier] -> Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration
-annotationInterfaceDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.AnnotationInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclaration :: Typed.TypedTerm [Syntax.AnnotationInterfaceElementModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm (Maybe Syntax.DefaultValue) -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclaration modifiers type_ identifier dims default_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm dims)},
-        Core.Field {
-          Core.fieldName = (Core.Name "default"),
-          Core.fieldTerm = (Typed.unTypedTerm default_)}]}))
-
--- | DSL name token for hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationAnnotationInterfaceElementDeclaration :: Typed.TypedName Syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationAnnotationInterfaceElementDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration")
-
--- | DSL accessor for the default field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationDefault :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm (Maybe Syntax.DefaultValue)
-annotationInterfaceElementDeclarationDefault x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-        Core.projectionFieldName = (Core.Name "default")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the dims field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationDims :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm (Maybe Syntax.Dims)
-annotationInterfaceElementDeclarationDims x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-        Core.projectionFieldName = (Core.Name "dims")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationIdentifier :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.Identifier
-annotationInterfaceElementDeclarationIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationModifiers :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm [Syntax.AnnotationInterfaceElementModifier]
-annotationInterfaceElementDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationType :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.UnannType
-annotationInterfaceElementDeclarationType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the default field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithDefault :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm (Maybe Syntax.DefaultValue) -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithDefault original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "default"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the dims field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithDims :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithDims original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          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.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "default")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithIdentifier :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            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.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "default")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithModifiers :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm [Syntax.AnnotationInterfaceElementModifier] -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            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.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "default")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithType :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
-annotationInterfaceElementDeclarationWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            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.java.syntax.AnnotationInterfaceElementDeclaration"),
-              Core.projectionFieldName = (Core.Name "default")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the abstract variant of hydra.java.syntax.AnnotationInterfaceElementModifier
-annotationInterfaceElementModifierAbstract :: Typed.TypedTerm Syntax.AnnotationInterfaceElementModifier
-annotationInterfaceElementModifierAbstract =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "abstract"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the annotation variant of hydra.java.syntax.AnnotationInterfaceElementModifier
-annotationInterfaceElementModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.AnnotationInterfaceElementModifier
-annotationInterfaceElementModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.AnnotationInterfaceElementModifier
-annotationInterfaceElementModifierAnnotationInterfaceElementModifier :: Typed.TypedName Syntax.AnnotationInterfaceElementModifier
-annotationInterfaceElementModifierAnnotationInterfaceElementModifier =
-    Typed.TypedName (Core.Name "hydra.java.syntax.AnnotationInterfaceElementModifier")
-
--- | DSL injection for the public variant of hydra.java.syntax.AnnotationInterfaceElementModifier
-annotationInterfaceElementModifierPublic :: Typed.TypedTerm Syntax.AnnotationInterfaceElementModifier
-annotationInterfaceElementModifierPublic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceElementModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "public"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the annotationInterface variant of hydra.java.syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationAnnotationInterface :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationAnnotationInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotationInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationAnnotationInterfaceMemberDeclaration :: Typed.TypedName Syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationAnnotationInterfaceMemberDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration")
-
--- | DSL injection for the class variant of hydra.java.syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationClass x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "class"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the constant variant of hydra.java.syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationConstant :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationConstant x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "constant"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the interface variant of hydra.java.syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceMemberDeclaration
-annotationInterfaceMemberDeclarationInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "interface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the marker variant of hydra.java.syntax.Annotation
-annotationMarker :: Typed.TypedTerm Syntax.MarkerAnnotation -> Typed.TypedTerm Syntax.Annotation
-annotationMarker x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Annotation"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "marker"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the normal variant of hydra.java.syntax.Annotation
-annotationNormal :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm Syntax.Annotation
-annotationNormal x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Annotation"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "normal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the singleElement variant of hydra.java.syntax.Annotation
-annotationSingleElement :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm Syntax.Annotation
-annotationSingleElement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Annotation"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "singleElement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ArrayAccess
-arrayAccess :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ArrayAccess_Variant -> Typed.TypedTerm Syntax.ArrayAccess
-arrayAccess expression variant =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayAccess"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Typed.unTypedTerm variant)}]}))
-
--- | DSL name token for hydra.java.syntax.ArrayAccess
-arrayAccessArrayAccess :: Typed.TypedName Syntax.ArrayAccess
-arrayAccessArrayAccess = Typed.TypedName (Core.Name "hydra.java.syntax.ArrayAccess")
-
--- | DSL accessor for the expression field of hydra.java.syntax.ArrayAccess
-arrayAccessExpression :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm (Maybe Syntax.Expression)
-arrayAccessExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayAccess"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the variant field of hydra.java.syntax.ArrayAccess
-arrayAccessVariant :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm Syntax.ArrayAccess_Variant
-arrayAccessVariant x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayAccess"),
-        Core.projectionFieldName = (Core.Name "variant")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the expression field of hydra.java.syntax.ArrayAccess
-arrayAccessWithExpression :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ArrayAccess
-arrayAccessWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayAccess"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayAccess"),
-              Core.projectionFieldName = (Core.Name "variant")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the variant field of hydra.java.syntax.ArrayAccess
-arrayAccessWithVariant :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm Syntax.ArrayAccess_Variant -> Typed.TypedTerm Syntax.ArrayAccess
-arrayAccessWithVariant original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayAccess"),
-      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.java.syntax.ArrayAccess"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.ArrayAccess_Variant
-arrayAccess_VariantArrayAccess_Variant :: Typed.TypedName Syntax.ArrayAccess_Variant
-arrayAccess_VariantArrayAccess_Variant = Typed.TypedName (Core.Name "hydra.java.syntax.ArrayAccess_Variant")
-
--- | DSL injection for the arrayCreationWithInitializer variant of hydra.java.syntax.ArrayAccess_Variant
-arrayAccess_VariantArrayCreationWithInitializer :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer -> Typed.TypedTerm Syntax.ArrayAccess_Variant
-arrayAccess_VariantArrayCreationWithInitializer x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayAccess_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "arrayCreationWithInitializer"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the name variant of hydra.java.syntax.ArrayAccess_Variant
-arrayAccess_VariantName :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.ArrayAccess_Variant
-arrayAccess_VariantName x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayAccess_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "name"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the primary variant of hydra.java.syntax.ArrayAccess_Variant
-arrayAccess_VariantPrimary :: Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression -> Typed.TypedTerm Syntax.ArrayAccess_Variant
-arrayAccess_VariantPrimary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayAccess_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ArrayCreationExpression
-arrayCreationExpressionArrayCreationExpression :: Typed.TypedName Syntax.ArrayCreationExpression
-arrayCreationExpressionArrayCreationExpression = Typed.TypedName (Core.Name "hydra.java.syntax.ArrayCreationExpression")
-
--- | DSL injection for the noInit variant of hydra.java.syntax.ArrayCreationExpression
-arrayCreationExpressionNoInit :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpression
-arrayCreationExpressionNoInit x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "noInit"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the withInit variant of hydra.java.syntax.ArrayCreationExpression
-arrayCreationExpressionWithInit :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpression
-arrayCreationExpressionWithInit x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "withInit"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithInitializer
-arrayCreationExpressionWithInitializerArrayCreationExpressionWithInitializer :: Typed.TypedName Syntax.ArrayCreationExpressionWithInitializer
-arrayCreationExpressionWithInitializerArrayCreationExpressionWithInitializer =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer")
-
--- | DSL injection for the classOrInterface variant of hydra.java.syntax.ArrayCreationExpressionWithInitializer
-arrayCreationExpressionWithInitializerClassOrInterface :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer
-arrayCreationExpressionWithInitializerClassOrInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classOrInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the primitive variant of hydra.java.syntax.ArrayCreationExpressionWithInitializer
-arrayCreationExpressionWithInitializerPrimitive :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer
-arrayCreationExpressionWithInitializerPrimitive x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primitive"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm [Syntax.Dims] -> Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterface type_ dims array =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm dims)},
-        Core.Field {
-          Core.fieldName = (Core.Name "array"),
-          Core.fieldTerm = (Typed.unTypedTerm array)}]}))
-
--- | DSL accessor for the array field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceArray :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ArrayInitializer
-arrayCreationExpressionWithInitializer_ClassOrInterfaceArray x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-        Core.projectionFieldName = (Core.Name "array")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceArrayCreationExpressionWithInitializer_ClassOrInterface :: Typed.TypedName Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceArrayCreationExpressionWithInitializer_ClassOrInterface =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface")
-
--- | DSL accessor for the dims field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm [Syntax.Dims]
-arrayCreationExpressionWithInitializer_ClassOrInterfaceDims x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-        Core.projectionFieldName = (Core.Name "dims")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType
-arrayCreationExpressionWithInitializer_ClassOrInterfaceType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the array field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceWithArray :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceWithArray original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "array"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the dims field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceWithDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm [Syntax.Dims] -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceWithDims original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "array"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "array")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceWithType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
-arrayCreationExpressionWithInitializer_ClassOrInterfaceWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "array"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "array")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_Primitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm [Syntax.Dims] -> Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_Primitive type_ dims array =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm dims)},
-        Core.Field {
-          Core.fieldName = (Core.Name "array"),
-          Core.fieldTerm = (Typed.unTypedTerm array)}]}))
-
--- | DSL accessor for the array field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveArray :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.ArrayInitializer
-arrayCreationExpressionWithInitializer_PrimitiveArray x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-        Core.projectionFieldName = (Core.Name "array")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveArrayCreationExpressionWithInitializer_Primitive :: Typed.TypedName Syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveArrayCreationExpressionWithInitializer_Primitive =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive")
-
--- | DSL accessor for the dims field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm [Syntax.Dims]
-arrayCreationExpressionWithInitializer_PrimitiveDims x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-        Core.projectionFieldName = (Core.Name "dims")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
-arrayCreationExpressionWithInitializer_PrimitiveType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the array field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveWithArray :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveWithArray original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "array"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the dims field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveWithDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm [Syntax.Dims] -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveWithDims original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "array"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "array")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveWithType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive
-arrayCreationExpressionWithInitializer_PrimitiveWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "array"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "array")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer
-arrayCreationExpressionWithoutInitializerArrayCreationExpressionWithoutInitializer :: Typed.TypedName Syntax.ArrayCreationExpressionWithoutInitializer
-arrayCreationExpressionWithoutInitializerArrayCreationExpressionWithoutInitializer =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer")
-
--- | DSL injection for the classOrInterface variant of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer
-arrayCreationExpressionWithoutInitializerClassOrInterface :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer
-arrayCreationExpressionWithoutInitializerClassOrInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classOrInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the primitive variant of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer
-arrayCreationExpressionWithoutInitializerPrimitive :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer
-arrayCreationExpressionWithoutInitializerPrimitive x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primitive"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm [Syntax.DimExpr] -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterface type_ dimExprs dims =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dimExprs"),
-          Core.fieldTerm = (Typed.unTypedTerm dimExprs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm dims)}]}))
-
--- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceArrayCreationExpressionWithoutInitializer_ClassOrInterface :: Typed.TypedName Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceArrayCreationExpressionWithoutInitializer_ClassOrInterface =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface")
-
--- | DSL accessor for the dimExprs field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDimExprs :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm [Syntax.DimExpr]
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDimExprs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-        Core.projectionFieldName = (Core.Name "dimExprs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the dims field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm (Maybe Syntax.Dims)
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDims x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-        Core.projectionFieldName = (Core.Name "dims")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the dimExprs field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithDimExprs :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm [Syntax.DimExpr] -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithDimExprs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dimExprs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the dims field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithDims original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dimExprs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "dimExprs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dimExprs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "dimExprs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_Primitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm [Syntax.DimExpr] -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_Primitive type_ dimExprs dims =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dimExprs"),
-          Core.fieldTerm = (Typed.unTypedTerm dimExprs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm dims)}]}))
-
--- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveArrayCreationExpressionWithoutInitializer_Primitive :: Typed.TypedName Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveArrayCreationExpressionWithoutInitializer_Primitive =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive")
-
--- | DSL accessor for the dimExprs field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveDimExprs :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm [Syntax.DimExpr]
-arrayCreationExpressionWithoutInitializer_PrimitiveDimExprs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-        Core.projectionFieldName = (Core.Name "dimExprs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the dims field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm (Maybe Syntax.Dims)
-arrayCreationExpressionWithoutInitializer_PrimitiveDims x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-        Core.projectionFieldName = (Core.Name "dims")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
-arrayCreationExpressionWithoutInitializer_PrimitiveType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the dimExprs field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveWithDimExprs :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm [Syntax.DimExpr] -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveWithDimExprs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dimExprs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the dims field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveWithDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveWithDims original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dimExprs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "dimExprs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveWithType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
-arrayCreationExpressionWithoutInitializer_PrimitiveWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dimExprs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "dimExprs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.ArrayInitializer wrapper
-arrayInitializer :: Typed.TypedTerm [[Syntax.VariableInitializer]] -> Typed.TypedTerm Syntax.ArrayInitializer
-arrayInitializer x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ArrayInitializer"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ArrayInitializer
-arrayInitializerArrayInitializer :: Typed.TypedName Syntax.ArrayInitializer
-arrayInitializerArrayInitializer = Typed.TypedName (Core.Name "hydra.java.syntax.ArrayInitializer")
-
--- | DSL constructor for hydra.java.syntax.ArrayType
-arrayType :: Typed.TypedTerm Syntax.Dims -> Typed.TypedTerm Syntax.ArrayType_Variant -> Typed.TypedTerm Syntax.ArrayType
-arrayType dims variant =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm dims)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Typed.unTypedTerm variant)}]}))
-
--- | DSL name token for hydra.java.syntax.ArrayType
-arrayTypeArrayType :: Typed.TypedName Syntax.ArrayType
-arrayTypeArrayType = Typed.TypedName (Core.Name "hydra.java.syntax.ArrayType")
-
--- | DSL accessor for the dims field of hydra.java.syntax.ArrayType
-arrayTypeDims :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.Dims
-arrayTypeDims x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayType"),
-        Core.projectionFieldName = (Core.Name "dims")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the variant field of hydra.java.syntax.ArrayType
-arrayTypeVariant :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.ArrayType_Variant
-arrayTypeVariant x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayType"),
-        Core.projectionFieldName = (Core.Name "variant")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the dims field of hydra.java.syntax.ArrayType
-arrayTypeWithDims :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.Dims -> Typed.TypedTerm Syntax.ArrayType
-arrayTypeWithDims original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayType"),
-              Core.projectionFieldName = (Core.Name "variant")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the variant field of hydra.java.syntax.ArrayType
-arrayTypeWithVariant :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.ArrayType_Variant -> Typed.TypedTerm Syntax.ArrayType
-arrayTypeWithVariant original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ArrayType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ArrayType"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.ArrayType_Variant
-arrayType_VariantArrayType_Variant :: Typed.TypedName Syntax.ArrayType_Variant
-arrayType_VariantArrayType_Variant = Typed.TypedName (Core.Name "hydra.java.syntax.ArrayType_Variant")
-
--- | DSL injection for the classOrInterface variant of hydra.java.syntax.ArrayType_Variant
-arrayType_VariantClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ArrayType_Variant
-arrayType_VariantClassOrInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayType_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classOrInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the primitive variant of hydra.java.syntax.ArrayType_Variant
-arrayType_VariantPrimitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.ArrayType_Variant
-arrayType_VariantPrimitive x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayType_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primitive"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the variable variant of hydra.java.syntax.ArrayType_Variant
-arrayType_VariantVariable :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.ArrayType_Variant
-arrayType_VariantVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ArrayType_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.AssertStatement
-assertStatementAssertStatement :: Typed.TypedName Syntax.AssertStatement
-assertStatementAssertStatement = Typed.TypedName (Core.Name "hydra.java.syntax.AssertStatement")
-
--- | DSL injection for the pair variant of hydra.java.syntax.AssertStatement
-assertStatementPair :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.AssertStatement
-assertStatementPair x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssertStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "pair"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the single variant of hydra.java.syntax.AssertStatement
-assertStatementSingle :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement
-assertStatementSingle x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssertStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "single"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.AssertStatement_Pair
-assertStatement_Pair :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement_Pair
-assertStatement_Pair first second =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AssertStatement_Pair"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "first"),
-          Core.fieldTerm = (Typed.unTypedTerm first)},
-        Core.Field {
-          Core.fieldName = (Core.Name "second"),
-          Core.fieldTerm = (Typed.unTypedTerm second)}]}))
-
--- | DSL name token for hydra.java.syntax.AssertStatement_Pair
-assertStatement_PairAssertStatement_Pair :: Typed.TypedName Syntax.AssertStatement_Pair
-assertStatement_PairAssertStatement_Pair = Typed.TypedName (Core.Name "hydra.java.syntax.AssertStatement_Pair")
-
--- | DSL accessor for the first field of hydra.java.syntax.AssertStatement_Pair
-assertStatement_PairFirst :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.Expression
-assertStatement_PairFirst x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AssertStatement_Pair"),
-        Core.projectionFieldName = (Core.Name "first")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the second field of hydra.java.syntax.AssertStatement_Pair
-assertStatement_PairSecond :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.Expression
-assertStatement_PairSecond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.AssertStatement_Pair"),
-        Core.projectionFieldName = (Core.Name "second")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the first field of hydra.java.syntax.AssertStatement_Pair
-assertStatement_PairWithFirst :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement_Pair
-assertStatement_PairWithFirst original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AssertStatement_Pair"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "first"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "second"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AssertStatement_Pair"),
-              Core.projectionFieldName = (Core.Name "second")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the second field of hydra.java.syntax.AssertStatement_Pair
-assertStatement_PairWithSecond :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement_Pair
-assertStatement_PairWithSecond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.AssertStatement_Pair"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "first"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.AssertStatement_Pair"),
-              Core.projectionFieldName = (Core.Name "first")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "second"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.Assignment
-assignment :: Typed.TypedTerm Syntax.LeftHandSide -> Typed.TypedTerm Syntax.AssignmentOperator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Assignment
-assignment lhs op expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "op"),
-          Core.fieldTerm = (Typed.unTypedTerm op)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL name token for hydra.java.syntax.Assignment
-assignmentAssignment :: Typed.TypedName Syntax.Assignment
-assignmentAssignment = Typed.TypedName (Core.Name "hydra.java.syntax.Assignment")
-
--- | DSL accessor for the expression field of hydra.java.syntax.Assignment
-assignmentExpression :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.Expression
-assignmentExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL injection for the assignment variant of hydra.java.syntax.AssignmentExpression
-assignmentExpressionAssignment :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.AssignmentExpression
-assignmentExpressionAssignment x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "assignment"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.AssignmentExpression
-assignmentExpressionAssignmentExpression :: Typed.TypedName Syntax.AssignmentExpression
-assignmentExpressionAssignmentExpression = Typed.TypedName (Core.Name "hydra.java.syntax.AssignmentExpression")
-
--- | DSL injection for the conditional variant of hydra.java.syntax.AssignmentExpression
-assignmentExpressionConditional :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.AssignmentExpression
-assignmentExpressionConditional x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "conditional"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL accessor for the lhs field of hydra.java.syntax.Assignment
-assignmentLhs :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.LeftHandSide
-assignmentLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the op field of hydra.java.syntax.Assignment
-assignmentOp :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOp x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-        Core.projectionFieldName = (Core.Name "op")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL injection for the and variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorAnd :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorAnd =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "and"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.AssignmentOperator
-assignmentOperatorAssignmentOperator :: Typed.TypedName Syntax.AssignmentOperator
-assignmentOperatorAssignmentOperator = Typed.TypedName (Core.Name "hydra.java.syntax.AssignmentOperator")
-
--- | DSL injection for the div variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorDiv :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorDiv =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "div"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the minus variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorMinus :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorMinus =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "minus"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the mod variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorMod :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorMod =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "mod"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the or variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorOr :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorOr =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "or"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the plus variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorPlus :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorPlus =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "plus"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the shiftLeft variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorShiftLeft :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorShiftLeft =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "shiftLeft"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the shiftRight variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorShiftRight :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorShiftRight =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "shiftRight"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the shiftRightZeroFill variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorShiftRightZeroFill :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorShiftRightZeroFill =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "shiftRightZeroFill"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the simple variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorSimple :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorSimple =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the times variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorTimes :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorTimes =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "times"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the xor variant of hydra.java.syntax.AssignmentOperator
-assignmentOperatorXor :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorXor =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "xor"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL updater for the expression field of hydra.java.syntax.Assignment
-assignmentWithExpression :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Assignment
-assignmentWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "op"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-              Core.projectionFieldName = (Core.Name "op")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.Assignment
-assignmentWithLhs :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.LeftHandSide -> Typed.TypedTerm Syntax.Assignment
-assignmentWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "op"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-              Core.projectionFieldName = (Core.Name "op")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the op field of hydra.java.syntax.Assignment
-assignmentWithOp :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.AssignmentOperator -> Typed.TypedTerm Syntax.Assignment
-assignmentWithOp original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "op"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Assignment"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.BasicForStatement
-basicForStatement :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.BasicForStatement
-basicForStatement cond body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.BasicForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL name token for hydra.java.syntax.BasicForStatement
-basicForStatementBasicForStatement :: Typed.TypedName Syntax.BasicForStatement
-basicForStatementBasicForStatement = Typed.TypedName (Core.Name "hydra.java.syntax.BasicForStatement")
-
--- | DSL accessor for the body field of hydra.java.syntax.BasicForStatement
-basicForStatementBody :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.Statement
-basicForStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.BasicForStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.BasicForStatement
-basicForStatementCond :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.ForCond
-basicForStatementCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.BasicForStatement"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for hydra.java.syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIf :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIf cond body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL name token for hydra.java.syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIfBasicForStatementNoShortIf :: Typed.TypedName Syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIfBasicForStatementNoShortIf =
-    Typed.TypedName (Core.Name "hydra.java.syntax.BasicForStatementNoShortIf")
-
--- | DSL accessor for the body field of hydra.java.syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIfBody :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-basicForStatementNoShortIfBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIfCond :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.ForCond
-basicForStatementNoShortIfCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIfWithBody :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIfWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIfWithCond :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm Syntax.BasicForStatementNoShortIf
-basicForStatementNoShortIfWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          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.java.syntax.BasicForStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the body field of hydra.java.syntax.BasicForStatement
-basicForStatementWithBody :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.BasicForStatement
-basicForStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.BasicForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.BasicForStatement"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.BasicForStatement
-basicForStatementWithCond :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm Syntax.BasicForStatement
-basicForStatementWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.BasicForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          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.java.syntax.BasicForStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.Block wrapper
-block :: Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.Block
-block x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.Block"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.Block
-blockBlock :: Typed.TypedName Syntax.Block
-blockBlock = Typed.TypedName (Core.Name "hydra.java.syntax.Block")
-
--- | DSL name token for hydra.java.syntax.BlockStatement
-blockStatementBlockStatement :: Typed.TypedName Syntax.BlockStatement
-blockStatementBlockStatement = Typed.TypedName (Core.Name "hydra.java.syntax.BlockStatement")
-
--- | DSL injection for the localClassOrInterface variant of hydra.java.syntax.BlockStatement
-blockStatementLocalClassOrInterface :: Typed.TypedTerm Syntax.LocalClassOrInterfaceDeclaration -> Typed.TypedTerm Syntax.BlockStatement
-blockStatementLocalClassOrInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.BlockStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "localClassOrInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the localVariableDeclaration variant of hydra.java.syntax.BlockStatement
-blockStatementLocalVariableDeclaration :: Typed.TypedTerm Syntax.LocalVariableDeclarationStatement -> Typed.TypedTerm Syntax.BlockStatement
-blockStatementLocalVariableDeclaration x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.BlockStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "localVariableDeclaration"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the statement variant of hydra.java.syntax.BlockStatement
-blockStatementStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.BlockStatement
-blockStatementStatement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.BlockStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "statement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the array variant of hydra.java.syntax.BooleanArray
-booleanArrayArray :: Typed.TypedTerm Syntax.BooleanArray -> Typed.TypedTerm Syntax.BooleanArray
-booleanArrayArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.BooleanArray"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "array"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.BooleanArray
-booleanArrayBooleanArray :: Typed.TypedName Syntax.BooleanArray
-booleanArrayBooleanArray = Typed.TypedName (Core.Name "hydra.java.syntax.BooleanArray")
-
--- | DSL injection for the simple variant of hydra.java.syntax.BooleanArray
-booleanArraySimple :: Typed.TypedTerm Syntax.BooleanArray
-booleanArraySimple =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.BooleanArray"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for the hydra.java.syntax.BreakStatement wrapper
-breakStatement :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.BreakStatement
-breakStatement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.BreakStatement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.BreakStatement
-breakStatementBreakStatement :: Typed.TypedName Syntax.BreakStatement
-breakStatementBreakStatement = Typed.TypedName (Core.Name "hydra.java.syntax.BreakStatement")
-
--- | DSL constructor for the hydra.java.syntax.CaseConstant wrapper
-caseConstant :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.CaseConstant
-caseConstant x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.CaseConstant"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.CaseConstant
-caseConstantCaseConstant :: Typed.TypedName Syntax.CaseConstant
-caseConstantCaseConstant = Typed.TypedName (Core.Name "hydra.java.syntax.CaseConstant")
-
--- | DSL constructor for hydra.java.syntax.CasePattern
-casePattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm (Maybe Syntax.Guard) -> Typed.TypedTerm Syntax.CasePattern
-casePattern pattern guard =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CasePattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Typed.unTypedTerm pattern)},
-        Core.Field {
-          Core.fieldName = (Core.Name "guard"),
-          Core.fieldTerm = (Typed.unTypedTerm guard)}]}))
-
--- | DSL name token for hydra.java.syntax.CasePattern
-casePatternCasePattern :: Typed.TypedName Syntax.CasePattern
-casePatternCasePattern = Typed.TypedName (Core.Name "hydra.java.syntax.CasePattern")
-
--- | DSL accessor for the guard field of hydra.java.syntax.CasePattern
-casePatternGuard :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm (Maybe Syntax.Guard)
-casePatternGuard x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CasePattern"),
-        Core.projectionFieldName = (Core.Name "guard")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the pattern field of hydra.java.syntax.CasePattern
-casePatternPattern :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm Syntax.Pattern
-casePatternPattern x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CasePattern"),
-        Core.projectionFieldName = (Core.Name "pattern")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the guard field of hydra.java.syntax.CasePattern
-casePatternWithGuard :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm (Maybe Syntax.Guard) -> Typed.TypedTerm Syntax.CasePattern
-casePatternWithGuard original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CasePattern"),
-      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.java.syntax.CasePattern"),
-              Core.projectionFieldName = (Core.Name "pattern")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "guard"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the pattern field of hydra.java.syntax.CasePattern
-casePatternWithPattern :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.CasePattern
-casePatternWithPattern original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CasePattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "guard"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CasePattern"),
-              Core.projectionFieldName = (Core.Name "guard")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.CastExpression
-castExpressionCastExpression :: Typed.TypedName Syntax.CastExpression
-castExpressionCastExpression = Typed.TypedName (Core.Name "hydra.java.syntax.CastExpression")
-
--- | DSL injection for the lambda variant of hydra.java.syntax.CastExpression
-castExpressionLambda :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.CastExpression
-castExpressionLambda x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.CastExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "lambda"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the notPlusMinus variant of hydra.java.syntax.CastExpression
-castExpressionNotPlusMinus :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.CastExpression
-castExpressionNotPlusMinus x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.CastExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "notPlusMinus"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the primitive variant of hydra.java.syntax.CastExpression
-castExpressionPrimitive :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.CastExpression
-castExpressionPrimitive x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.CastExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primitive"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.CastExpression_Lambda
-castExpression_Lambda :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.CastExpression_Lambda
-castExpression_Lambda refAndBounds expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_Lambda"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "refAndBounds"),
-          Core.fieldTerm = (Typed.unTypedTerm refAndBounds)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL name token for hydra.java.syntax.CastExpression_Lambda
-castExpression_LambdaCastExpression_Lambda :: Typed.TypedName Syntax.CastExpression_Lambda
-castExpression_LambdaCastExpression_Lambda = Typed.TypedName (Core.Name "hydra.java.syntax.CastExpression_Lambda")
-
--- | DSL accessor for the expression field of hydra.java.syntax.CastExpression_Lambda
-castExpression_LambdaExpression :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.LambdaExpression
-castExpression_LambdaExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_Lambda"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the refAndBounds field of hydra.java.syntax.CastExpression_Lambda
-castExpression_LambdaRefAndBounds :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
-castExpression_LambdaRefAndBounds x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_Lambda"),
-        Core.projectionFieldName = (Core.Name "refAndBounds")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the expression field of hydra.java.syntax.CastExpression_Lambda
-castExpression_LambdaWithExpression :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.CastExpression_Lambda
-castExpression_LambdaWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_Lambda"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "refAndBounds"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_Lambda"),
-              Core.projectionFieldName = (Core.Name "refAndBounds")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the refAndBounds field of hydra.java.syntax.CastExpression_Lambda
-castExpression_LambdaWithRefAndBounds :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.CastExpression_Lambda
-castExpression_LambdaWithRefAndBounds original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_Lambda"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "refAndBounds"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_Lambda"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinus :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinus refAndBounds expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "refAndBounds"),
-          Core.fieldTerm = (Typed.unTypedTerm refAndBounds)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL name token for hydra.java.syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinusCastExpression_NotPlusMinus :: Typed.TypedName Syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinusCastExpression_NotPlusMinus =
-    Typed.TypedName (Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus")
-
--- | DSL accessor for the expression field of hydra.java.syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinusExpression :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.UnaryExpression
-castExpression_NotPlusMinusExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the refAndBounds field of hydra.java.syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinusRefAndBounds :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
-castExpression_NotPlusMinusRefAndBounds x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
-        Core.projectionFieldName = (Core.Name "refAndBounds")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the expression field of hydra.java.syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinusWithExpression :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinusWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "refAndBounds"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
-              Core.projectionFieldName = (Core.Name "refAndBounds")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the refAndBounds field of hydra.java.syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinusWithRefAndBounds :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.CastExpression_NotPlusMinus
-castExpression_NotPlusMinusWithRefAndBounds original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "refAndBounds"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.CastExpression_Primitive
-castExpression_Primitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.CastExpression_Primitive
-castExpression_Primitive type_ expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL name token for hydra.java.syntax.CastExpression_Primitive
-castExpression_PrimitiveCastExpression_Primitive :: Typed.TypedName Syntax.CastExpression_Primitive
-castExpression_PrimitiveCastExpression_Primitive =
-    Typed.TypedName (Core.Name "hydra.java.syntax.CastExpression_Primitive")
-
--- | DSL accessor for the expression field of hydra.java.syntax.CastExpression_Primitive
-castExpression_PrimitiveExpression :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.UnaryExpression
-castExpression_PrimitiveExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_Primitive"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.CastExpression_Primitive
-castExpression_PrimitiveType :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
-castExpression_PrimitiveType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_Primitive"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the expression field of hydra.java.syntax.CastExpression_Primitive
-castExpression_PrimitiveWithExpression :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.CastExpression_Primitive
-castExpression_PrimitiveWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_Primitive"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.CastExpression_Primitive
-castExpression_PrimitiveWithType :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.CastExpression_Primitive
-castExpression_PrimitiveWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_Primitive"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_Primitive"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.CastExpression_RefAndBounds
-castExpression_RefAndBounds :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm [Syntax.AdditionalBound] -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
-castExpression_RefAndBounds type_ bounds =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "bounds"),
-          Core.fieldTerm = (Typed.unTypedTerm bounds)}]}))
-
--- | DSL accessor for the bounds field of hydra.java.syntax.CastExpression_RefAndBounds
-castExpression_RefAndBoundsBounds :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm [Syntax.AdditionalBound]
-castExpression_RefAndBoundsBounds x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
-        Core.projectionFieldName = (Core.Name "bounds")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.CastExpression_RefAndBounds
-castExpression_RefAndBoundsCastExpression_RefAndBounds :: Typed.TypedName Syntax.CastExpression_RefAndBounds
-castExpression_RefAndBoundsCastExpression_RefAndBounds =
-    Typed.TypedName (Core.Name "hydra.java.syntax.CastExpression_RefAndBounds")
-
--- | DSL accessor for the type field of hydra.java.syntax.CastExpression_RefAndBounds
-castExpression_RefAndBoundsType :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.ReferenceType
-castExpression_RefAndBoundsType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the bounds field of hydra.java.syntax.CastExpression_RefAndBounds
-castExpression_RefAndBoundsWithBounds :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm [Syntax.AdditionalBound] -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
-castExpression_RefAndBoundsWithBounds original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "bounds"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.CastExpression_RefAndBounds
-castExpression_RefAndBoundsWithType :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
-castExpression_RefAndBoundsWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "bounds"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
-              Core.projectionFieldName = (Core.Name "bounds")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.CatchClause
-catchClause :: Typed.TypedTerm (Maybe Syntax.CatchFormalParameter) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.CatchClause
-catchClause parameter block =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchClause"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameter"),
-          Core.fieldTerm = (Typed.unTypedTerm parameter)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm block)}]}))
-
--- | DSL accessor for the block field of hydra.java.syntax.CatchClause
-catchClauseBlock :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm Syntax.Block
-catchClauseBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchClause"),
-        Core.projectionFieldName = (Core.Name "block")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.CatchClause
-catchClauseCatchClause :: Typed.TypedName Syntax.CatchClause
-catchClauseCatchClause = Typed.TypedName (Core.Name "hydra.java.syntax.CatchClause")
-
--- | DSL accessor for the parameter field of hydra.java.syntax.CatchClause
-catchClauseParameter :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm (Maybe Syntax.CatchFormalParameter)
-catchClauseParameter x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchClause"),
-        Core.projectionFieldName = (Core.Name "parameter")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the block field of hydra.java.syntax.CatchClause
-catchClauseWithBlock :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.CatchClause
-catchClauseWithBlock original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchClause"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameter"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchClause"),
-              Core.projectionFieldName = (Core.Name "parameter")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the parameter field of hydra.java.syntax.CatchClause
-catchClauseWithParameter :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm (Maybe Syntax.CatchFormalParameter) -> Typed.TypedTerm Syntax.CatchClause
-catchClauseWithParameter original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchClause"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameter"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchClause"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.CatchFormalParameter
-catchFormalParameter :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.CatchFormalParameter
-catchFormalParameter modifiers type_ id =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm id)}]}))
-
--- | DSL name token for hydra.java.syntax.CatchFormalParameter
-catchFormalParameterCatchFormalParameter :: Typed.TypedName Syntax.CatchFormalParameter
-catchFormalParameterCatchFormalParameter = Typed.TypedName (Core.Name "hydra.java.syntax.CatchFormalParameter")
-
--- | DSL accessor for the id field of hydra.java.syntax.CatchFormalParameter
-catchFormalParameterId :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm Syntax.VariableDeclaratorId
-catchFormalParameterId x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-        Core.projectionFieldName = (Core.Name "id")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.CatchFormalParameter
-catchFormalParameterModifiers :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm [Syntax.VariableModifier]
-catchFormalParameterModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.CatchFormalParameter
-catchFormalParameterType :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm Syntax.CatchType
-catchFormalParameterType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the id field of hydra.java.syntax.CatchFormalParameter
-catchFormalParameterWithId :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.CatchFormalParameter
-catchFormalParameterWithId original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.CatchFormalParameter"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.CatchFormalParameter
-catchFormalParameterWithModifiers :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.CatchFormalParameter
-catchFormalParameterWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.CatchFormalParameter"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.CatchFormalParameter
-catchFormalParameterWithType :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm Syntax.CatchFormalParameter
-catchFormalParameterWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchFormalParameter"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.CatchType
-catchType :: Typed.TypedTerm Syntax.UnannClassType -> Typed.TypedTerm [Syntax.ClassType] -> Typed.TypedTerm Syntax.CatchType
-catchType type_ types =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Typed.unTypedTerm types)}]}))
-
--- | DSL name token for hydra.java.syntax.CatchType
-catchTypeCatchType :: Typed.TypedName Syntax.CatchType
-catchTypeCatchType = Typed.TypedName (Core.Name "hydra.java.syntax.CatchType")
-
--- | DSL accessor for the type field of hydra.java.syntax.CatchType
-catchTypeType :: Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm Syntax.UnannClassType
-catchTypeType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchType"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the types field of hydra.java.syntax.CatchType
-catchTypeTypes :: Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm [Syntax.ClassType]
-catchTypeTypes x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchType"),
-        Core.projectionFieldName = (Core.Name "types")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the type field of hydra.java.syntax.CatchType
-catchTypeWithType :: Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm Syntax.UnannClassType -> Typed.TypedTerm Syntax.CatchType
-catchTypeWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchType"),
-              Core.projectionFieldName = (Core.Name "types")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the types field of hydra.java.syntax.CatchType
-catchTypeWithTypes :: Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm [Syntax.ClassType] -> Typed.TypedTerm Syntax.CatchType
-catchTypeWithTypes original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CatchType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CatchType"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for the hydra.java.syntax.Catches wrapper
-catches :: Typed.TypedTerm [Syntax.CatchClause] -> Typed.TypedTerm Syntax.Catches
-catches x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.Catches"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.Catches
-catchesCatches :: Typed.TypedName Syntax.Catches
-catchesCatches = Typed.TypedName (Core.Name "hydra.java.syntax.Catches")
-
--- | DSL constructor for the hydra.java.syntax.ClassBody wrapper
-classBody :: Typed.TypedTerm [Syntax.ClassBodyDeclarationWithComments] -> Typed.TypedTerm Syntax.ClassBody
-classBody x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ClassBody"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ClassBody
-classBodyClassBody :: Typed.TypedName Syntax.ClassBody
-classBodyClassBody = Typed.TypedName (Core.Name "hydra.java.syntax.ClassBody")
-
--- | DSL name token for hydra.java.syntax.ClassBodyDeclaration
-classBodyDeclarationClassBodyDeclaration :: Typed.TypedName Syntax.ClassBodyDeclaration
-classBodyDeclarationClassBodyDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.ClassBodyDeclaration")
-
--- | DSL injection for the classMember variant of hydra.java.syntax.ClassBodyDeclaration
-classBodyDeclarationClassMember :: Typed.TypedTerm Syntax.ClassMemberDeclaration -> Typed.TypedTerm Syntax.ClassBodyDeclaration
-classBodyDeclarationClassMember x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classMember"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the constructorDeclaration variant of hydra.java.syntax.ClassBodyDeclaration
-classBodyDeclarationConstructorDeclaration :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ClassBodyDeclaration
-classBodyDeclarationConstructorDeclaration x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "constructorDeclaration"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the instanceInitializer variant of hydra.java.syntax.ClassBodyDeclaration
-classBodyDeclarationInstanceInitializer :: Typed.TypedTerm Syntax.InstanceInitializer -> Typed.TypedTerm Syntax.ClassBodyDeclaration
-classBodyDeclarationInstanceInitializer x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "instanceInitializer"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the staticInitializer variant of hydra.java.syntax.ClassBodyDeclaration
-classBodyDeclarationStaticInitializer :: Typed.TypedTerm Syntax.StaticInitializer -> Typed.TypedTerm Syntax.ClassBodyDeclaration
-classBodyDeclarationStaticInitializer x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "staticInitializer"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithComments :: Typed.TypedTerm Syntax.ClassBodyDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithComments value comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm value)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL name token for hydra.java.syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithCommentsClassBodyDeclarationWithComments :: Typed.TypedName Syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithCommentsClassBodyDeclarationWithComments =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ClassBodyDeclarationWithComments")
-
--- | DSL accessor for the comments field of hydra.java.syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments -> Typed.TypedTerm (Maybe String)
-classBodyDeclarationWithCommentsComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the value field of hydra.java.syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithCommentsValue :: Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments -> Typed.TypedTerm Syntax.ClassBodyDeclaration
-classBodyDeclarationWithCommentsValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the comments field of hydra.java.syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithCommentsWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
-      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.java.syntax.ClassBodyDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the value field of hydra.java.syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithCommentsWithValue :: Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments -> Typed.TypedTerm Syntax.ClassBodyDeclaration -> Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments
-classBodyDeclarationWithCommentsWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          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.java.syntax.ClassBodyDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.ClassDeclaration
-classDeclarationClassDeclaration :: Typed.TypedName Syntax.ClassDeclaration
-classDeclarationClassDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.ClassDeclaration")
-
--- | DSL injection for the enum variant of hydra.java.syntax.ClassDeclaration
-classDeclarationEnum :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.ClassDeclaration
-classDeclarationEnum x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "enum"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the normal variant of hydra.java.syntax.ClassDeclaration
-classDeclarationNormal :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.ClassDeclaration
-classDeclarationNormal x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "normal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the record variant of hydra.java.syntax.ClassDeclaration
-classDeclarationRecord :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.ClassDeclaration
-classDeclarationRecord x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "record"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ClassInstanceCreationExpression
-classInstanceCreationExpression :: Typed.TypedTerm (Maybe Syntax.ClassInstanceCreationExpression_Qualifier) -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression
-classInstanceCreationExpression qualifier expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm qualifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL name token for hydra.java.syntax.ClassInstanceCreationExpression
-classInstanceCreationExpressionClassInstanceCreationExpression :: Typed.TypedName Syntax.ClassInstanceCreationExpression
-classInstanceCreationExpressionClassInstanceCreationExpression =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression")
-
--- | DSL accessor for the expression field of hydra.java.syntax.ClassInstanceCreationExpression
-classInstanceCreationExpressionExpression :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
-classInstanceCreationExpressionExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the qualifier field of hydra.java.syntax.ClassInstanceCreationExpression
-classInstanceCreationExpressionQualifier :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm (Maybe Syntax.ClassInstanceCreationExpression_Qualifier)
-classInstanceCreationExpressionQualifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
-        Core.projectionFieldName = (Core.Name "qualifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the expression field of hydra.java.syntax.ClassInstanceCreationExpression
-classInstanceCreationExpressionWithExpression :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression
-classInstanceCreationExpressionWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "qualifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the qualifier field of hydra.java.syntax.ClassInstanceCreationExpression
-classInstanceCreationExpressionWithQualifier :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm (Maybe Syntax.ClassInstanceCreationExpression_Qualifier) -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression
-classInstanceCreationExpressionWithQualifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.ClassInstanceCreationExpression_Qualifier
-classInstanceCreationExpression_QualifierClassInstanceCreationExpression_Qualifier :: Typed.TypedName Syntax.ClassInstanceCreationExpression_Qualifier
-classInstanceCreationExpression_QualifierClassInstanceCreationExpression_Qualifier =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression_Qualifier")
-
--- | DSL injection for the expression variant of hydra.java.syntax.ClassInstanceCreationExpression_Qualifier
-classInstanceCreationExpression_QualifierExpression :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression_Qualifier
-classInstanceCreationExpression_QualifierExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression_Qualifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the primary variant of hydra.java.syntax.ClassInstanceCreationExpression_Qualifier
-classInstanceCreationExpression_QualifierPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression_Qualifier
-classInstanceCreationExpression_QualifierPrimary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassInstanceCreationExpression_Qualifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the boolean variant of hydra.java.syntax.ClassLiteral
-classLiteralBoolean :: Typed.TypedTerm Syntax.BooleanArray -> Typed.TypedTerm Syntax.ClassLiteral
-classLiteralBoolean x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassLiteral"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "boolean"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ClassLiteral
-classLiteralClassLiteral :: Typed.TypedName Syntax.ClassLiteral
-classLiteralClassLiteral = Typed.TypedName (Core.Name "hydra.java.syntax.ClassLiteral")
-
--- | DSL injection for the numericType variant of hydra.java.syntax.ClassLiteral
-classLiteralNumericType :: Typed.TypedTerm Syntax.NumericTypeArray -> Typed.TypedTerm Syntax.ClassLiteral
-classLiteralNumericType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassLiteral"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "numericType"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the type variant of hydra.java.syntax.ClassLiteral
-classLiteralType :: Typed.TypedTerm Syntax.TypeNameArray -> Typed.TypedTerm Syntax.ClassLiteral
-classLiteralType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassLiteral"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "type"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the void variant of hydra.java.syntax.ClassLiteral
-classLiteralVoid :: Typed.TypedTerm Syntax.ClassLiteral
-classLiteralVoid =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassLiteral"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "void"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the class variant of hydra.java.syntax.ClassMemberDeclaration
-classMemberDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.ClassMemberDeclaration
-classMemberDeclarationClass x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "class"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ClassMemberDeclaration
-classMemberDeclarationClassMemberDeclaration :: Typed.TypedName Syntax.ClassMemberDeclaration
-classMemberDeclarationClassMemberDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.ClassMemberDeclaration")
-
--- | DSL injection for the field variant of hydra.java.syntax.ClassMemberDeclaration
-classMemberDeclarationField :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm Syntax.ClassMemberDeclaration
-classMemberDeclarationField x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "field"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the interface variant of hydra.java.syntax.ClassMemberDeclaration
-classMemberDeclarationInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.ClassMemberDeclaration
-classMemberDeclarationInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "interface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the method variant of hydra.java.syntax.ClassMemberDeclaration
-classMemberDeclarationMethod :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.ClassMemberDeclaration
-classMemberDeclarationMethod x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "method"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the none variant of hydra.java.syntax.ClassMemberDeclaration
-classMemberDeclarationNone :: Typed.TypedTerm Syntax.ClassMemberDeclaration
-classMemberDeclarationNone =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "none"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the abstract variant of hydra.java.syntax.ClassModifier
-classModifierAbstract :: Typed.TypedTerm Syntax.ClassModifier
-classModifierAbstract =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "abstract"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the annotation variant of hydra.java.syntax.ClassModifier
-classModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.ClassModifier
-classModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ClassModifier
-classModifierClassModifier :: Typed.TypedName Syntax.ClassModifier
-classModifierClassModifier = Typed.TypedName (Core.Name "hydra.java.syntax.ClassModifier")
-
--- | DSL injection for the final variant of hydra.java.syntax.ClassModifier
-classModifierFinal :: Typed.TypedTerm Syntax.ClassModifier
-classModifierFinal =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "final"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the nonSealed variant of hydra.java.syntax.ClassModifier
-classModifierNonSealed :: Typed.TypedTerm Syntax.ClassModifier
-classModifierNonSealed =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "nonSealed"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the private variant of hydra.java.syntax.ClassModifier
-classModifierPrivate :: Typed.TypedTerm Syntax.ClassModifier
-classModifierPrivate =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "private"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the protected variant of hydra.java.syntax.ClassModifier
-classModifierProtected :: Typed.TypedTerm Syntax.ClassModifier
-classModifierProtected =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "protected"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the public variant of hydra.java.syntax.ClassModifier
-classModifierPublic :: Typed.TypedTerm Syntax.ClassModifier
-classModifierPublic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "public"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the sealed variant of hydra.java.syntax.ClassModifier
-classModifierSealed :: Typed.TypedTerm Syntax.ClassModifier
-classModifierSealed =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "sealed"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the static variant of hydra.java.syntax.ClassModifier
-classModifierStatic :: Typed.TypedTerm Syntax.ClassModifier
-classModifierStatic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "static"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the strictfp variant of hydra.java.syntax.ClassModifier
-classModifierStrictfp :: Typed.TypedTerm Syntax.ClassModifier
-classModifierStrictfp =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "strictfp"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the class variant of hydra.java.syntax.ClassOrInterfaceType
-classOrInterfaceTypeClass :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.ClassOrInterfaceType
-classOrInterfaceTypeClass x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "class"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ClassOrInterfaceType
-classOrInterfaceTypeClassOrInterfaceType :: Typed.TypedName Syntax.ClassOrInterfaceType
-classOrInterfaceTypeClassOrInterfaceType = Typed.TypedName (Core.Name "hydra.java.syntax.ClassOrInterfaceType")
-
--- | DSL injection for the interface variant of hydra.java.syntax.ClassOrInterfaceType
-classOrInterfaceTypeInterface :: Typed.TypedTerm Syntax.InterfaceType -> Typed.TypedTerm Syntax.ClassOrInterfaceType
-classOrInterfaceTypeInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "interface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiate :: Typed.TypedTerm [Syntax.AnnotatedIdentifier] -> Typed.TypedTerm (Maybe Syntax.TypeArgumentsOrDiamond) -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiate identifiers typeArguments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm identifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)}]}))
-
--- | DSL name token for hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiateClassOrInterfaceTypeToInstantiate :: Typed.TypedName Syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiateClassOrInterfaceTypeToInstantiate =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate")
-
--- | DSL accessor for the identifiers field of hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiateIdentifiers :: Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm [Syntax.AnnotatedIdentifier]
-classOrInterfaceTypeToInstantiateIdentifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
-        Core.projectionFieldName = (Core.Name "identifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiateTypeArguments :: Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm (Maybe Syntax.TypeArgumentsOrDiamond)
-classOrInterfaceTypeToInstantiateTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifiers field of hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiateWithIdentifiers :: Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm [Syntax.AnnotatedIdentifier] -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiateWithIdentifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiateWithTypeArguments :: Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm (Maybe Syntax.TypeArgumentsOrDiamond) -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate
-classOrInterfaceTypeToInstantiateWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
-              Core.projectionFieldName = (Core.Name "identifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.ClassType
-classType :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.ClassTypeQualifier -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.ClassType
-classType annotations qualifier identifier arguments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm qualifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm arguments)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.ClassType
-classTypeAnnotations :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.Annotation]
-classTypeAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the arguments field of hydra.java.syntax.ClassType
-classTypeArguments :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.TypeArgument]
-classTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-        Core.projectionFieldName = (Core.Name "arguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ClassType
-classTypeClassType :: Typed.TypedName Syntax.ClassType
-classTypeClassType = Typed.TypedName (Core.Name "hydra.java.syntax.ClassType")
-
--- | DSL accessor for the identifier field of hydra.java.syntax.ClassType
-classTypeIdentifier :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.TypeIdentifier
-classTypeIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the qualifier field of hydra.java.syntax.ClassType
-classTypeQualifier :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.ClassTypeQualifier
-classTypeQualifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-        Core.projectionFieldName = (Core.Name "qualifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ClassTypeQualifier
-classTypeQualifierClassTypeQualifier :: Typed.TypedName Syntax.ClassTypeQualifier
-classTypeQualifierClassTypeQualifier = Typed.TypedName (Core.Name "hydra.java.syntax.ClassTypeQualifier")
-
--- | DSL injection for the none variant of hydra.java.syntax.ClassTypeQualifier
-classTypeQualifierNone :: Typed.TypedTerm Syntax.ClassTypeQualifier
-classTypeQualifierNone =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassTypeQualifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "none"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the package variant of hydra.java.syntax.ClassTypeQualifier
-classTypeQualifierPackage :: Typed.TypedTerm Syntax.PackageName -> Typed.TypedTerm Syntax.ClassTypeQualifier
-classTypeQualifierPackage x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassTypeQualifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "package"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the parent variant of hydra.java.syntax.ClassTypeQualifier
-classTypeQualifierParent :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ClassTypeQualifier
-classTypeQualifierParent x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ClassTypeQualifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "parent"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL updater for the annotations field of hydra.java.syntax.ClassType
-classTypeWithAnnotations :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.ClassType
-classTypeWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "qualifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the arguments field of hydra.java.syntax.ClassType
-classTypeWithArguments :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.ClassType
-classTypeWithArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "qualifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.ClassType
-classTypeWithIdentifier :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.ClassType
-classTypeWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "qualifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          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.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the qualifier field of hydra.java.syntax.ClassType
-classTypeWithQualifier :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.ClassTypeQualifier -> Typed.TypedTerm Syntax.ClassType
-classTypeWithQualifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.ClassType"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.CompactConstructorDeclaration
-compactConstructorDeclaration :: Typed.TypedTerm [Syntax.ConstructorModifier] -> Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm Syntax.CompactConstructorDeclaration
-compactConstructorDeclaration modifiers name body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.CompactConstructorDeclaration
-compactConstructorDeclarationBody :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorBody
-compactConstructorDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.CompactConstructorDeclaration
-compactConstructorDeclarationCompactConstructorDeclaration :: Typed.TypedName Syntax.CompactConstructorDeclaration
-compactConstructorDeclarationCompactConstructorDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.CompactConstructorDeclaration")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.CompactConstructorDeclaration
-compactConstructorDeclarationModifiers :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm [Syntax.ConstructorModifier]
-compactConstructorDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.java.syntax.CompactConstructorDeclaration
-compactConstructorDeclarationName :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.SimpleTypeName
-compactConstructorDeclarationName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.CompactConstructorDeclaration
-compactConstructorDeclarationWithBody :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm Syntax.CompactConstructorDeclaration
-compactConstructorDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.CompactConstructorDeclaration
-compactConstructorDeclarationWithModifiers :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm [Syntax.ConstructorModifier] -> Typed.TypedTerm Syntax.CompactConstructorDeclaration
-compactConstructorDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            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.java.syntax.CompactConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the name field of hydra.java.syntax.CompactConstructorDeclaration
-compactConstructorDeclarationWithName :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm Syntax.CompactConstructorDeclaration
-compactConstructorDeclarationWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.CompactConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          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.java.syntax.CompactConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.CompilationUnit
-compilationUnitCompilationUnit :: Typed.TypedName Syntax.CompilationUnit
-compilationUnitCompilationUnit = Typed.TypedName (Core.Name "hydra.java.syntax.CompilationUnit")
-
--- | DSL injection for the modular variant of hydra.java.syntax.CompilationUnit
-compilationUnitModular :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm Syntax.CompilationUnit
-compilationUnitModular x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.CompilationUnit"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "modular"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the ordinary variant of hydra.java.syntax.CompilationUnit
-compilationUnitOrdinary :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm Syntax.CompilationUnit
-compilationUnitOrdinary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.CompilationUnit"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "ordinary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.ConditionalAndExpression wrapper
-conditionalAndExpression :: Typed.TypedTerm [Syntax.InclusiveOrExpression] -> Typed.TypedTerm Syntax.ConditionalAndExpression
-conditionalAndExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ConditionalAndExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ConditionalAndExpression
-conditionalAndExpressionConditionalAndExpression :: Typed.TypedName Syntax.ConditionalAndExpression
-conditionalAndExpressionConditionalAndExpression =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ConditionalAndExpression")
-
--- | DSL name token for hydra.java.syntax.ConditionalExpression
-conditionalExpressionConditionalExpression :: Typed.TypedName Syntax.ConditionalExpression
-conditionalExpressionConditionalExpression = Typed.TypedName (Core.Name "hydra.java.syntax.ConditionalExpression")
-
--- | DSL injection for the simple variant of hydra.java.syntax.ConditionalExpression
-conditionalExpressionSimple :: Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.ConditionalExpression
-conditionalExpressionSimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the ternaryCond variant of hydra.java.syntax.ConditionalExpression
-conditionalExpressionTernaryCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalExpression
-conditionalExpressionTernaryCond x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "ternaryCond"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the ternaryLambda variant of hydra.java.syntax.ConditionalExpression
-conditionalExpressionTernaryLambda :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.ConditionalExpression
-conditionalExpressionTernaryLambda x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "ternaryLambda"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCond :: Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCond cond ifTrue ifFalse =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifTrue"),
-          Core.fieldTerm = (Typed.unTypedTerm ifTrue)},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifFalse"),
-          Core.fieldTerm = (Typed.unTypedTerm ifFalse)}]}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalOrExpression
-conditionalExpression_TernaryCondCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondConditionalExpression_TernaryCond :: Typed.TypedName Syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondConditionalExpression_TernaryCond =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond")
-
--- | DSL accessor for the ifFalse field of hydra.java.syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondIfFalse :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalExpression
-conditionalExpression_TernaryCondIfFalse x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-        Core.projectionFieldName = (Core.Name "ifFalse")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the ifTrue field of hydra.java.syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondIfTrue :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.Expression
-conditionalExpression_TernaryCondIfTrue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-        Core.projectionFieldName = (Core.Name "ifTrue")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the cond field of hydra.java.syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondWithCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifTrue"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-              Core.projectionFieldName = (Core.Name "ifTrue")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifFalse"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-              Core.projectionFieldName = (Core.Name "ifFalse")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the ifFalse field of hydra.java.syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondWithIfFalse :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondWithIfFalse original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifTrue"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-              Core.projectionFieldName = (Core.Name "ifTrue")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifFalse"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the ifTrue field of hydra.java.syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondWithIfTrue :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond
-conditionalExpression_TernaryCondWithIfTrue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifTrue"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifFalse"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
-              Core.projectionFieldName = (Core.Name "ifFalse")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambda :: Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambda cond ifTrue ifFalse =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifTrue"),
-          Core.fieldTerm = (Typed.unTypedTerm ifTrue)},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifFalse"),
-          Core.fieldTerm = (Typed.unTypedTerm ifFalse)}]}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.ConditionalOrExpression
-conditionalExpression_TernaryLambdaCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaConditionalExpression_TernaryLambda :: Typed.TypedName Syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaConditionalExpression_TernaryLambda =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda")
-
--- | DSL accessor for the ifFalse field of hydra.java.syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaIfFalse :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.LambdaExpression
-conditionalExpression_TernaryLambdaIfFalse x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-        Core.projectionFieldName = (Core.Name "ifFalse")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the ifTrue field of hydra.java.syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaIfTrue :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.Expression
-conditionalExpression_TernaryLambdaIfTrue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-        Core.projectionFieldName = (Core.Name "ifTrue")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the cond field of hydra.java.syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaWithCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifTrue"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-              Core.projectionFieldName = (Core.Name "ifTrue")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifFalse"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-              Core.projectionFieldName = (Core.Name "ifFalse")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the ifFalse field of hydra.java.syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaWithIfFalse :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaWithIfFalse original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifTrue"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-              Core.projectionFieldName = (Core.Name "ifTrue")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifFalse"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the ifTrue field of hydra.java.syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaWithIfTrue :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda
-conditionalExpression_TernaryLambdaWithIfTrue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifTrue"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "ifFalse"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
-              Core.projectionFieldName = (Core.Name "ifFalse")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.ConditionalOrExpression wrapper
-conditionalOrExpression :: Typed.TypedTerm [Syntax.ConditionalAndExpression] -> Typed.TypedTerm Syntax.ConditionalOrExpression
-conditionalOrExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ConditionalOrExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ConditionalOrExpression
-conditionalOrExpressionConditionalOrExpression :: Typed.TypedName Syntax.ConditionalOrExpression
-conditionalOrExpressionConditionalOrExpression = Typed.TypedName (Core.Name "hydra.java.syntax.ConditionalOrExpression")
-
--- | DSL constructor for hydra.java.syntax.ConstantDeclaration
-constantDeclaration :: Typed.TypedTerm [Syntax.ConstantModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.ConstantDeclaration
-constantDeclaration modifiers type_ variables =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variables"),
-          Core.fieldTerm = (Typed.unTypedTerm variables)}]}))
-
--- | DSL name token for hydra.java.syntax.ConstantDeclaration
-constantDeclarationConstantDeclaration :: Typed.TypedName Syntax.ConstantDeclaration
-constantDeclarationConstantDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.ConstantDeclaration")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.ConstantDeclaration
-constantDeclarationModifiers :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm [Syntax.ConstantModifier]
-constantDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.ConstantDeclaration
-constantDeclarationType :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm Syntax.UnannType
-constantDeclarationType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the variables field of hydra.java.syntax.ConstantDeclaration
-constantDeclarationVariables :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator]
-constantDeclarationVariables x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-        Core.projectionFieldName = (Core.Name "variables")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.ConstantDeclaration
-constantDeclarationWithModifiers :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm [Syntax.ConstantModifier] -> Typed.TypedTerm Syntax.ConstantDeclaration
-constantDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.ConstantDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "variables"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-              Core.projectionFieldName = (Core.Name "variables")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.ConstantDeclaration
-constantDeclarationWithType :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.ConstantDeclaration
-constantDeclarationWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variables"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-              Core.projectionFieldName = (Core.Name "variables")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the variables field of hydra.java.syntax.ConstantDeclaration
-constantDeclarationWithVariables :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.ConstantDeclaration
-constantDeclarationWithVariables original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstantDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.ConstantDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "variables"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for the hydra.java.syntax.ConstantExpression wrapper
-constantExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConstantExpression
-constantExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ConstantExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ConstantExpression
-constantExpressionConstantExpression :: Typed.TypedName Syntax.ConstantExpression
-constantExpressionConstantExpression = Typed.TypedName (Core.Name "hydra.java.syntax.ConstantExpression")
-
--- | DSL injection for the annotation variant of hydra.java.syntax.ConstantModifier
-constantModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.ConstantModifier
-constantModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConstantModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ConstantModifier
-constantModifierConstantModifier :: Typed.TypedName Syntax.ConstantModifier
-constantModifierConstantModifier = Typed.TypedName (Core.Name "hydra.java.syntax.ConstantModifier")
-
--- | DSL injection for the final variant of hydra.java.syntax.ConstantModifier
-constantModifierFinal :: Typed.TypedTerm Syntax.ConstantModifier
-constantModifierFinal =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConstantModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "final"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the public variant of hydra.java.syntax.ConstantModifier
-constantModifierPublic :: Typed.TypedTerm Syntax.ConstantModifier
-constantModifierPublic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConstantModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "public"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the static variant of hydra.java.syntax.ConstantModifier
-constantModifierStatic :: Typed.TypedTerm Syntax.ConstantModifier
-constantModifierStatic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConstantModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "static"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for hydra.java.syntax.ConstructorBody
-constructorBody :: Typed.TypedTerm (Maybe Syntax.ExplicitConstructorInvocation) -> Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.ConstructorBody
-constructorBody invocation statements =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorBody"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "invocation"),
-          Core.fieldTerm = (Typed.unTypedTerm invocation)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statements"),
-          Core.fieldTerm = (Typed.unTypedTerm statements)}]}))
-
--- | DSL name token for hydra.java.syntax.ConstructorBody
-constructorBodyConstructorBody :: Typed.TypedName Syntax.ConstructorBody
-constructorBodyConstructorBody = Typed.TypedName (Core.Name "hydra.java.syntax.ConstructorBody")
-
--- | DSL accessor for the invocation field of hydra.java.syntax.ConstructorBody
-constructorBodyInvocation :: Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm (Maybe Syntax.ExplicitConstructorInvocation)
-constructorBodyInvocation x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorBody"),
-        Core.projectionFieldName = (Core.Name "invocation")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the statements field of hydra.java.syntax.ConstructorBody
-constructorBodyStatements :: Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm [Syntax.BlockStatement]
-constructorBodyStatements x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorBody"),
-        Core.projectionFieldName = (Core.Name "statements")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the invocation field of hydra.java.syntax.ConstructorBody
-constructorBodyWithInvocation :: Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm (Maybe Syntax.ExplicitConstructorInvocation) -> Typed.TypedTerm Syntax.ConstructorBody
-constructorBodyWithInvocation original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorBody"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "invocation"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorBody"),
-              Core.projectionFieldName = (Core.Name "statements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the statements field of hydra.java.syntax.ConstructorBody
-constructorBodyWithStatements :: Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.ConstructorBody
-constructorBodyWithStatements original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorBody"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "invocation"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorBody"),
-              Core.projectionFieldName = (Core.Name "invocation")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "statements"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.ConstructorDeclaration
-constructorDeclaration :: Typed.TypedTerm [Syntax.ConstructorModifier] -> Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm (Maybe Syntax.Throws) -> Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm Syntax.ConstructorDeclaration
-constructorDeclaration modifiers constructor throws body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructor"),
-          Core.fieldTerm = (Typed.unTypedTerm constructor)},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Typed.unTypedTerm throws)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationBody :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorBody
-constructorDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the constructor field of hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationConstructor :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorDeclarator
-constructorDeclarationConstructor x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-        Core.projectionFieldName = (Core.Name "constructor")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationConstructorDeclaration :: Typed.TypedName Syntax.ConstructorDeclaration
-constructorDeclarationConstructorDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.ConstructorDeclaration")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationModifiers :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm [Syntax.ConstructorModifier]
-constructorDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the throws field of hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationThrows :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm (Maybe Syntax.Throws)
-constructorDeclarationThrows x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-        Core.projectionFieldName = (Core.Name "throws")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationWithBody :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm Syntax.ConstructorDeclaration
-constructorDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructor"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "constructor")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "throws")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the constructor field of hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationWithConstructor :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm Syntax.ConstructorDeclaration
-constructorDeclarationWithConstructor original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructor"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "throws")})),
-            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.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationWithModifiers :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm [Syntax.ConstructorModifier] -> Typed.TypedTerm Syntax.ConstructorDeclaration
-constructorDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructor"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "constructor")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "throws")})),
-            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.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the throws field of hydra.java.syntax.ConstructorDeclaration
-constructorDeclarationWithThrows :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm (Maybe Syntax.Throws) -> Typed.TypedTerm Syntax.ConstructorDeclaration
-constructorDeclarationWithThrows original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructor"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "constructor")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          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.java.syntax.ConstructorDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.ConstructorDeclarator
-constructorDeclarator :: Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter) -> Typed.TypedTerm [Syntax.FormalParameter] -> Typed.TypedTerm Syntax.ConstructorDeclarator
-constructorDeclarator parameters name receiverParameter formalParameters =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm parameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Typed.unTypedTerm receiverParameter)},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm formalParameters)}]}))
-
--- | DSL name token for hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorConstructorDeclarator :: Typed.TypedName Syntax.ConstructorDeclarator
-constructorDeclaratorConstructorDeclarator = Typed.TypedName (Core.Name "hydra.java.syntax.ConstructorDeclarator")
-
--- | DSL accessor for the formalParameters field of hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorFormalParameters :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm [Syntax.FormalParameter]
-constructorDeclaratorFormalParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-        Core.projectionFieldName = (Core.Name "formalParameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorName :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm Syntax.SimpleTypeName
-constructorDeclaratorName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the parameters field of hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorParameters :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm [Syntax.TypeParameter]
-constructorDeclaratorParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-        Core.projectionFieldName = (Core.Name "parameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the receiverParameter field of hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorReceiverParameter :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter)
-constructorDeclaratorReceiverParameter x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-        Core.projectionFieldName = (Core.Name "receiverParameter")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the formalParameters field of hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorWithFormalParameters :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm [Syntax.FormalParameter] -> Typed.TypedTerm Syntax.ConstructorDeclarator
-constructorDeclaratorWithFormalParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "receiverParameter")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorWithName :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm Syntax.ConstructorDeclarator
-constructorDeclaratorWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "receiverParameter")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "formalParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the parameters field of hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorWithParameters :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.ConstructorDeclarator
-constructorDeclaratorWithParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "receiverParameter")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "formalParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the receiverParameter field of hydra.java.syntax.ConstructorDeclarator
-constructorDeclaratorWithReceiverParameter :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter) -> Typed.TypedTerm Syntax.ConstructorDeclarator
-constructorDeclaratorWithReceiverParameter original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ConstructorDeclarator"),
-              Core.projectionFieldName = (Core.Name "formalParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the annotation variant of hydra.java.syntax.ConstructorModifier
-constructorModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.ConstructorModifier
-constructorModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConstructorModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ConstructorModifier
-constructorModifierConstructorModifier :: Typed.TypedName Syntax.ConstructorModifier
-constructorModifierConstructorModifier = Typed.TypedName (Core.Name "hydra.java.syntax.ConstructorModifier")
-
--- | DSL injection for the private variant of hydra.java.syntax.ConstructorModifier
-constructorModifierPrivate :: Typed.TypedTerm Syntax.ConstructorModifier
-constructorModifierPrivate =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConstructorModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "private"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the protected variant of hydra.java.syntax.ConstructorModifier
-constructorModifierProtected :: Typed.TypedTerm Syntax.ConstructorModifier
-constructorModifierProtected =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConstructorModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "protected"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the public variant of hydra.java.syntax.ConstructorModifier
-constructorModifierPublic :: Typed.TypedTerm Syntax.ConstructorModifier
-constructorModifierPublic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ConstructorModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "public"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for the hydra.java.syntax.ContinueStatement wrapper
-continueStatement :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ContinueStatement
-continueStatement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ContinueStatement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ContinueStatement
-continueStatementContinueStatement :: Typed.TypedName Syntax.ContinueStatement
-continueStatementContinueStatement = Typed.TypedName (Core.Name "hydra.java.syntax.ContinueStatement")
-
--- | DSL constructor for the hydra.java.syntax.DefaultValue wrapper
-defaultValue :: Typed.TypedTerm Syntax.ElementValue -> Typed.TypedTerm Syntax.DefaultValue
-defaultValue x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.DefaultValue"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.DefaultValue
-defaultValueDefaultValue :: Typed.TypedName Syntax.DefaultValue
-defaultValueDefaultValue = Typed.TypedName (Core.Name "hydra.java.syntax.DefaultValue")
-
--- | DSL constructor for hydra.java.syntax.DimExpr
-dimExpr :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.DimExpr
-dimExpr annotations expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.DimExpr"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.DimExpr
-dimExprAnnotations :: Typed.TypedTerm Syntax.DimExpr -> Typed.TypedTerm [Syntax.Annotation]
-dimExprAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.DimExpr"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.DimExpr
-dimExprDimExpr :: Typed.TypedName Syntax.DimExpr
-dimExprDimExpr = Typed.TypedName (Core.Name "hydra.java.syntax.DimExpr")
-
--- | DSL accessor for the expression field of hydra.java.syntax.DimExpr
-dimExprExpression :: Typed.TypedTerm Syntax.DimExpr -> Typed.TypedTerm (Maybe Syntax.Expression)
-dimExprExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.DimExpr"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the annotations field of hydra.java.syntax.DimExpr
-dimExprWithAnnotations :: Typed.TypedTerm Syntax.DimExpr -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.DimExpr
-dimExprWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.DimExpr"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.DimExpr"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the expression field of hydra.java.syntax.DimExpr
-dimExprWithExpression :: Typed.TypedTerm Syntax.DimExpr -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.DimExpr
-dimExprWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.DimExpr"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.DimExpr"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for the hydra.java.syntax.Dims wrapper
-dims :: Typed.TypedTerm [[Syntax.Annotation]] -> Typed.TypedTerm Syntax.Dims
-dims x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.Dims"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.Dims
-dimsDims :: Typed.TypedName Syntax.Dims
-dimsDims = Typed.TypedName (Core.Name "hydra.java.syntax.Dims")
-
--- | DSL constructor for hydra.java.syntax.DoStatement
-doStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DoStatement
-doStatement body cond =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.DoStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.DoStatement
-doStatementBody :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.Statement
-doStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.DoStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.DoStatement
-doStatementCond :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.Expression
-doStatementCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.DoStatement"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.DoStatement
-doStatementDoStatement :: Typed.TypedName Syntax.DoStatement
-doStatementDoStatement = Typed.TypedName (Core.Name "hydra.java.syntax.DoStatement")
-
--- | DSL updater for the body field of hydra.java.syntax.DoStatement
-doStatementWithBody :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.DoStatement
-doStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.DoStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.DoStatement"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.DoStatement
-doStatementWithCond :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DoStatement
-doStatementWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.DoStatement"),
-      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.java.syntax.DoStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the annotation variant of hydra.java.syntax.ElementValue
-elementValueAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.ElementValue
-elementValueAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ElementValue"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.ElementValueArrayInitializer wrapper
-elementValueArrayInitializer :: Typed.TypedTerm [Syntax.ElementValue] -> Typed.TypedTerm Syntax.ElementValueArrayInitializer
-elementValueArrayInitializer x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ElementValueArrayInitializer"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ElementValueArrayInitializer
-elementValueArrayInitializerElementValueArrayInitializer :: Typed.TypedName Syntax.ElementValueArrayInitializer
-elementValueArrayInitializerElementValueArrayInitializer =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ElementValueArrayInitializer")
-
--- | DSL injection for the conditionalExpression variant of hydra.java.syntax.ElementValue
-elementValueConditionalExpression :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.ElementValue
-elementValueConditionalExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ElementValue"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "conditionalExpression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ElementValue
-elementValueElementValue :: Typed.TypedName Syntax.ElementValue
-elementValueElementValue = Typed.TypedName (Core.Name "hydra.java.syntax.ElementValue")
-
--- | DSL injection for the elementValueArrayInitializer variant of hydra.java.syntax.ElementValue
-elementValueElementValueArrayInitializer :: Typed.TypedTerm Syntax.ElementValueArrayInitializer -> Typed.TypedTerm Syntax.ElementValue
-elementValueElementValueArrayInitializer x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ElementValue"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "elementValueArrayInitializer"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ElementValuePair
-elementValuePair :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ElementValue -> Typed.TypedTerm Syntax.ElementValuePair
-elementValuePair key value =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ElementValuePair"),
-      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)}]}))
-
--- | DSL name token for hydra.java.syntax.ElementValuePair
-elementValuePairElementValuePair :: Typed.TypedName Syntax.ElementValuePair
-elementValuePairElementValuePair = Typed.TypedName (Core.Name "hydra.java.syntax.ElementValuePair")
-
--- | DSL accessor for the key field of hydra.java.syntax.ElementValuePair
-elementValuePairKey :: Typed.TypedTerm Syntax.ElementValuePair -> Typed.TypedTerm Syntax.Identifier
-elementValuePairKey x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ElementValuePair"),
-        Core.projectionFieldName = (Core.Name "key")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the value field of hydra.java.syntax.ElementValuePair
-elementValuePairValue :: Typed.TypedTerm Syntax.ElementValuePair -> Typed.TypedTerm Syntax.ElementValue
-elementValuePairValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ElementValuePair"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the key field of hydra.java.syntax.ElementValuePair
-elementValuePairWithKey :: Typed.TypedTerm Syntax.ElementValuePair -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ElementValuePair
-elementValuePairWithKey original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ElementValuePair"),
-      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.java.syntax.ElementValuePair"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the value field of hydra.java.syntax.ElementValuePair
-elementValuePairWithValue :: Typed.TypedTerm Syntax.ElementValuePair -> Typed.TypedTerm Syntax.ElementValue -> Typed.TypedTerm Syntax.ElementValuePair
-elementValuePairWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ElementValuePair"),
-      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.java.syntax.ElementValuePair"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.EnhancedForCond
-enhancedForCond :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.EnhancedForCond
-enhancedForCond declaration expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "declaration"),
-          Core.fieldTerm = (Typed.unTypedTerm declaration)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL accessor for the declaration field of hydra.java.syntax.EnhancedForCond
-enhancedForCondDeclaration :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.LocalVariableDeclaration
-enhancedForCondDeclaration x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForCond"),
-        Core.projectionFieldName = (Core.Name "declaration")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.EnhancedForCond
-enhancedForCondEnhancedForCond :: Typed.TypedName Syntax.EnhancedForCond
-enhancedForCondEnhancedForCond = Typed.TypedName (Core.Name "hydra.java.syntax.EnhancedForCond")
-
--- | DSL accessor for the expression field of hydra.java.syntax.EnhancedForCond
-enhancedForCondExpression :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.Expression
-enhancedForCondExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForCond"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the declaration field of hydra.java.syntax.EnhancedForCond
-enhancedForCondWithDeclaration :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.EnhancedForCond
-enhancedForCondWithDeclaration original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "declaration"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForCond"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the expression field of hydra.java.syntax.EnhancedForCond
-enhancedForCondWithExpression :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.EnhancedForCond
-enhancedForCondWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "declaration"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForCond"),
-              Core.projectionFieldName = (Core.Name "declaration")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.EnhancedForStatement
-enhancedForStatement :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.EnhancedForStatement
-enhancedForStatement cond body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.EnhancedForStatement
-enhancedForStatementBody :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.Statement
-enhancedForStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.EnhancedForStatement
-enhancedForStatementCond :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.EnhancedForCond
-enhancedForStatementCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatement"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.EnhancedForStatement
-enhancedForStatementEnhancedForStatement :: Typed.TypedName Syntax.EnhancedForStatement
-enhancedForStatementEnhancedForStatement = Typed.TypedName (Core.Name "hydra.java.syntax.EnhancedForStatement")
-
--- | DSL constructor for hydra.java.syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIf :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIf cond body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIfBody :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-enhancedForStatementNoShortIfBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIfCond :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.EnhancedForCond
-enhancedForStatementNoShortIfCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIfEnhancedForStatementNoShortIf :: Typed.TypedName Syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIfEnhancedForStatementNoShortIf =
-    Typed.TypedName (Core.Name "hydra.java.syntax.EnhancedForStatementNoShortIf")
-
--- | DSL updater for the body field of hydra.java.syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIfWithBody :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIfWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIfWithCond :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf
-enhancedForStatementNoShortIfWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          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.java.syntax.EnhancedForStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the body field of hydra.java.syntax.EnhancedForStatement
-enhancedForStatementWithBody :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.EnhancedForStatement
-enhancedForStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatement"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.EnhancedForStatement
-enhancedForStatementWithCond :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.EnhancedForStatement
-enhancedForStatementWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnhancedForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          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.java.syntax.EnhancedForStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.EnumBody wrapper
-enumBody :: Typed.TypedTerm [Syntax.EnumBody_Element] -> Typed.TypedTerm Syntax.EnumBody
-enumBody x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.EnumBody"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.EnumBody
-enumBodyEnumBody :: Typed.TypedName Syntax.EnumBody
-enumBodyEnumBody = Typed.TypedName (Core.Name "hydra.java.syntax.EnumBody")
-
--- | DSL constructor for hydra.java.syntax.EnumBody_Element
-enumBody_Element :: Typed.TypedTerm [Syntax.EnumConstant] -> Typed.TypedTerm [Syntax.ClassBodyDeclaration] -> Typed.TypedTerm Syntax.EnumBody_Element
-enumBody_Element constants bodyDeclarations =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumBody_Element"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "constants"),
-          Core.fieldTerm = (Typed.unTypedTerm constants)},
-        Core.Field {
-          Core.fieldName = (Core.Name "bodyDeclarations"),
-          Core.fieldTerm = (Typed.unTypedTerm bodyDeclarations)}]}))
-
--- | DSL accessor for the bodyDeclarations field of hydra.java.syntax.EnumBody_Element
-enumBody_ElementBodyDeclarations :: Typed.TypedTerm Syntax.EnumBody_Element -> Typed.TypedTerm [Syntax.ClassBodyDeclaration]
-enumBody_ElementBodyDeclarations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumBody_Element"),
-        Core.projectionFieldName = (Core.Name "bodyDeclarations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the constants field of hydra.java.syntax.EnumBody_Element
-enumBody_ElementConstants :: Typed.TypedTerm Syntax.EnumBody_Element -> Typed.TypedTerm [Syntax.EnumConstant]
-enumBody_ElementConstants x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumBody_Element"),
-        Core.projectionFieldName = (Core.Name "constants")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.EnumBody_Element
-enumBody_ElementEnumBody_Element :: Typed.TypedName Syntax.EnumBody_Element
-enumBody_ElementEnumBody_Element = Typed.TypedName (Core.Name "hydra.java.syntax.EnumBody_Element")
-
--- | DSL updater for the bodyDeclarations field of hydra.java.syntax.EnumBody_Element
-enumBody_ElementWithBodyDeclarations :: Typed.TypedTerm Syntax.EnumBody_Element -> Typed.TypedTerm [Syntax.ClassBodyDeclaration] -> Typed.TypedTerm Syntax.EnumBody_Element
-enumBody_ElementWithBodyDeclarations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumBody_Element"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "constants"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumBody_Element"),
-              Core.projectionFieldName = (Core.Name "constants")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "bodyDeclarations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the constants field of hydra.java.syntax.EnumBody_Element
-enumBody_ElementWithConstants :: Typed.TypedTerm Syntax.EnumBody_Element -> Typed.TypedTerm [Syntax.EnumConstant] -> Typed.TypedTerm Syntax.EnumBody_Element
-enumBody_ElementWithConstants original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumBody_Element"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "constants"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "bodyDeclarations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumBody_Element"),
-              Core.projectionFieldName = (Core.Name "bodyDeclarations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.EnumConstant
-enumConstant :: Typed.TypedTerm [Syntax.EnumConstantModifier] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe [Syntax.Expression]) -> Typed.TypedTerm (Maybe Syntax.ClassBody) -> Typed.TypedTerm Syntax.EnumConstant
-enumConstant modifiers identifier arguments body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm arguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the arguments field of hydra.java.syntax.EnumConstant
-enumConstantArguments :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm (Maybe [Syntax.Expression])
-enumConstantArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-        Core.projectionFieldName = (Core.Name "arguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body field of hydra.java.syntax.EnumConstant
-enumConstantBody :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm (Maybe Syntax.ClassBody)
-enumConstantBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.EnumConstant
-enumConstantEnumConstant :: Typed.TypedName Syntax.EnumConstant
-enumConstantEnumConstant = Typed.TypedName (Core.Name "hydra.java.syntax.EnumConstant")
-
--- | DSL accessor for the identifier field of hydra.java.syntax.EnumConstant
-enumConstantIdentifier :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm Syntax.Identifier
-enumConstantIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for the hydra.java.syntax.EnumConstantModifier wrapper
-enumConstantModifier :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.EnumConstantModifier
-enumConstantModifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.EnumConstantModifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.EnumConstantModifier
-enumConstantModifierEnumConstantModifier :: Typed.TypedName Syntax.EnumConstantModifier
-enumConstantModifierEnumConstantModifier = Typed.TypedName (Core.Name "hydra.java.syntax.EnumConstantModifier")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.EnumConstant
-enumConstantModifiers :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm [Syntax.EnumConstantModifier]
-enumConstantModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the arguments field of hydra.java.syntax.EnumConstant
-enumConstantWithArguments :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm (Maybe [Syntax.Expression]) -> Typed.TypedTerm Syntax.EnumConstant
-enumConstantWithArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          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.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the body field of hydra.java.syntax.EnumConstant
-enumConstantWithBody :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm (Maybe Syntax.ClassBody) -> Typed.TypedTerm Syntax.EnumConstant
-enumConstantWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.EnumConstant
-enumConstantWithIdentifier :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.EnumConstant
-enumConstantWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          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.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            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.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.EnumConstant
-enumConstantWithModifiers :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm [Syntax.EnumConstantModifier] -> Typed.TypedTerm Syntax.EnumConstant
-enumConstantWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            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.java.syntax.EnumConstant"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.EnumDeclaration
-enumDeclaration :: Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.EnumBody -> Typed.TypedTerm Syntax.EnumDeclaration
-enumDeclaration modifiers identifier implements body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Typed.unTypedTerm implements)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.EnumDeclaration
-enumDeclarationBody :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.EnumBody
-enumDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.EnumDeclaration
-enumDeclarationEnumDeclaration :: Typed.TypedName Syntax.EnumDeclaration
-enumDeclarationEnumDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.EnumDeclaration")
-
--- | DSL accessor for the identifier field of hydra.java.syntax.EnumDeclaration
-enumDeclarationIdentifier :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
-enumDeclarationIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the implements field of hydra.java.syntax.EnumDeclaration
-enumDeclarationImplements :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm [Syntax.InterfaceType]
-enumDeclarationImplements x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-        Core.projectionFieldName = (Core.Name "implements")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.EnumDeclaration
-enumDeclarationModifiers :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm [Syntax.ClassModifier]
-enumDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.EnumDeclaration
-enumDeclarationWithBody :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.EnumBody -> Typed.TypedTerm Syntax.EnumDeclaration
-enumDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.EnumDeclaration
-enumDeclarationWithIdentifier :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.EnumDeclaration
-enumDeclarationWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            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.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the implements field of hydra.java.syntax.EnumDeclaration
-enumDeclarationWithImplements :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.EnumDeclaration
-enumDeclarationWithImplements original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          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.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.EnumDeclaration
-enumDeclarationWithModifiers :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.EnumDeclaration
-enumDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            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.java.syntax.EnumDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the equal variant of hydra.java.syntax.EqualityExpression
-equalityExpressionEqual :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.EqualityExpression
-equalityExpressionEqual x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.EqualityExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "equal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.EqualityExpression
-equalityExpressionEqualityExpression :: Typed.TypedName Syntax.EqualityExpression
-equalityExpressionEqualityExpression = Typed.TypedName (Core.Name "hydra.java.syntax.EqualityExpression")
-
--- | DSL injection for the notEqual variant of hydra.java.syntax.EqualityExpression
-equalityExpressionNotEqual :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.EqualityExpression
-equalityExpressionNotEqual x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.EqualityExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "notEqual"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the unary variant of hydra.java.syntax.EqualityExpression
-equalityExpressionUnary :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.EqualityExpression
-equalityExpressionUnary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.EqualityExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.EqualityExpression_Binary
-equalityExpression_Binary :: Typed.TypedTerm Syntax.EqualityExpression -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.EqualityExpression_Binary
-equalityExpression_Binary lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EqualityExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL name token for hydra.java.syntax.EqualityExpression_Binary
-equalityExpression_BinaryEqualityExpression_Binary :: Typed.TypedName Syntax.EqualityExpression_Binary
-equalityExpression_BinaryEqualityExpression_Binary =
-    Typed.TypedName (Core.Name "hydra.java.syntax.EqualityExpression_Binary")
-
--- | DSL accessor for the lhs field of hydra.java.syntax.EqualityExpression_Binary
-equalityExpression_BinaryLhs :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.EqualityExpression
-equalityExpression_BinaryLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EqualityExpression_Binary"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the rhs field of hydra.java.syntax.EqualityExpression_Binary
-equalityExpression_BinaryRhs :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.RelationalExpression
-equalityExpression_BinaryRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.EqualityExpression_Binary"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.EqualityExpression_Binary
-equalityExpression_BinaryWithLhs :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.EqualityExpression -> Typed.TypedTerm Syntax.EqualityExpression_Binary
-equalityExpression_BinaryWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EqualityExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EqualityExpression_Binary"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.EqualityExpression_Binary
-equalityExpression_BinaryWithRhs :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.EqualityExpression_Binary
-equalityExpression_BinaryWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.EqualityExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.EqualityExpression_Binary"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the class variant of hydra.java.syntax.ExceptionType
-exceptionTypeClass :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.ExceptionType
-exceptionTypeClass x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ExceptionType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "class"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ExceptionType
-exceptionTypeExceptionType :: Typed.TypedName Syntax.ExceptionType
-exceptionTypeExceptionType = Typed.TypedName (Core.Name "hydra.java.syntax.ExceptionType")
-
--- | DSL injection for the variable variant of hydra.java.syntax.ExceptionType
-exceptionTypeVariable :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.ExceptionType
-exceptionTypeVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ExceptionType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.ExclusiveOrExpression wrapper
-exclusiveOrExpression :: Typed.TypedTerm [Syntax.AndExpression] -> Typed.TypedTerm Syntax.ExclusiveOrExpression
-exclusiveOrExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ExclusiveOrExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ExclusiveOrExpression
-exclusiveOrExpressionExclusiveOrExpression :: Typed.TypedName Syntax.ExclusiveOrExpression
-exclusiveOrExpressionExclusiveOrExpression = Typed.TypedName (Core.Name "hydra.java.syntax.ExclusiveOrExpression")
-
--- | DSL constructor for hydra.java.syntax.ExplicitConstructorInvocation
-explicitConstructorInvocation :: Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation
-explicitConstructorInvocation typeArguments arguments variant =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm arguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Typed.unTypedTerm variant)}]}))
-
--- | DSL accessor for the arguments field of hydra.java.syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationArguments :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm [Syntax.Expression]
-explicitConstructorInvocationArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-        Core.projectionFieldName = (Core.Name "arguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationExplicitConstructorInvocation :: Typed.TypedName Syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationExplicitConstructorInvocation =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation")
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationTypeArguments :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm [Syntax.TypeArgument]
-explicitConstructorInvocationTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the variant field of hydra.java.syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationVariant :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocationVariant x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-        Core.projectionFieldName = (Core.Name "variant")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the arguments field of hydra.java.syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationWithArguments :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationWithArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-              Core.projectionFieldName = (Core.Name "variant")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationWithTypeArguments :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          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.java.syntax.ExplicitConstructorInvocation"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-              Core.projectionFieldName = (Core.Name "variant")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the variant field of hydra.java.syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationWithVariant :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation
-explicitConstructorInvocationWithVariant original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            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.java.syntax.ExplicitConstructorInvocation"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocation_VariantExplicitConstructorInvocation_Variant :: Typed.TypedName Syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocation_VariantExplicitConstructorInvocation_Variant =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant")
-
--- | DSL injection for the primary variant of hydra.java.syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocation_VariantPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocation_VariantPrimary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the super variant of hydra.java.syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocation_VariantSuper :: Typed.TypedTerm (Maybe Syntax.ExpressionName) -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocation_VariantSuper x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "super"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the this variant of hydra.java.syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocation_VariantThis :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant
-explicitConstructorInvocation_VariantThis =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "this"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the assignment variant of hydra.java.syntax.Expression
-expressionAssignment :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression
-expressionAssignment x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "assignment"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.Expression
-expressionExpression :: Typed.TypedName Syntax.Expression
-expressionExpression = Typed.TypedName (Core.Name "hydra.java.syntax.Expression")
-
--- | DSL injection for the lambda variant of hydra.java.syntax.Expression
-expressionLambda :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.Expression
-expressionLambda x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "lambda"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ExpressionName
-expressionName :: Typed.TypedTerm (Maybe Syntax.AmbiguousName) -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExpressionName
-expressionName qualifier identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ExpressionName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm qualifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL name token for hydra.java.syntax.ExpressionName
-expressionNameExpressionName :: Typed.TypedName Syntax.ExpressionName
-expressionNameExpressionName = Typed.TypedName (Core.Name "hydra.java.syntax.ExpressionName")
-
--- | DSL accessor for the identifier field of hydra.java.syntax.ExpressionName
-expressionNameIdentifier :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.Identifier
-expressionNameIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExpressionName"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the qualifier field of hydra.java.syntax.ExpressionName
-expressionNameQualifier :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm (Maybe Syntax.AmbiguousName)
-expressionNameQualifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExpressionName"),
-        Core.projectionFieldName = (Core.Name "qualifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.ExpressionName
-expressionNameWithIdentifier :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExpressionName
-expressionNameWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ExpressionName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExpressionName"),
-              Core.projectionFieldName = (Core.Name "qualifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the qualifier field of hydra.java.syntax.ExpressionName
-expressionNameWithQualifier :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm (Maybe Syntax.AmbiguousName) -> Typed.TypedTerm Syntax.ExpressionName
-expressionNameWithQualifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ExpressionName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ExpressionName"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.ExpressionStatement wrapper
-expressionStatement :: Typed.TypedTerm Syntax.StatementExpression -> Typed.TypedTerm Syntax.ExpressionStatement
-expressionStatement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ExpressionStatement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ExpressionStatement
-expressionStatementExpressionStatement :: Typed.TypedName Syntax.ExpressionStatement
-expressionStatementExpressionStatement = Typed.TypedName (Core.Name "hydra.java.syntax.ExpressionStatement")
-
--- | DSL constructor for hydra.java.syntax.FieldAccess
-fieldAccess :: Typed.TypedTerm Syntax.FieldAccess_Qualifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.FieldAccess
-fieldAccess qualifier identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FieldAccess"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm qualifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL name token for hydra.java.syntax.FieldAccess
-fieldAccessFieldAccess :: Typed.TypedName Syntax.FieldAccess
-fieldAccessFieldAccess = Typed.TypedName (Core.Name "hydra.java.syntax.FieldAccess")
-
--- | DSL accessor for the identifier field of hydra.java.syntax.FieldAccess
-fieldAccessIdentifier :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.Identifier
-fieldAccessIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldAccess"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the qualifier field of hydra.java.syntax.FieldAccess
-fieldAccessQualifier :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.FieldAccess_Qualifier
-fieldAccessQualifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldAccess"),
-        Core.projectionFieldName = (Core.Name "qualifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.FieldAccess
-fieldAccessWithIdentifier :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.FieldAccess
-fieldAccessWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FieldAccess"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldAccess"),
-              Core.projectionFieldName = (Core.Name "qualifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the qualifier field of hydra.java.syntax.FieldAccess
-fieldAccessWithQualifier :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.FieldAccess_Qualifier -> Typed.TypedTerm Syntax.FieldAccess
-fieldAccessWithQualifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FieldAccess"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldAccess"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.FieldAccess_Qualifier
-fieldAccess_QualifierFieldAccess_Qualifier :: Typed.TypedName Syntax.FieldAccess_Qualifier
-fieldAccess_QualifierFieldAccess_Qualifier = Typed.TypedName (Core.Name "hydra.java.syntax.FieldAccess_Qualifier")
-
--- | DSL injection for the primary variant of hydra.java.syntax.FieldAccess_Qualifier
-fieldAccess_QualifierPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.FieldAccess_Qualifier
-fieldAccess_QualifierPrimary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldAccess_Qualifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the super variant of hydra.java.syntax.FieldAccess_Qualifier
-fieldAccess_QualifierSuper :: Typed.TypedTerm Syntax.FieldAccess_Qualifier
-fieldAccess_QualifierSuper =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldAccess_Qualifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "super"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the typed variant of hydra.java.syntax.FieldAccess_Qualifier
-fieldAccess_QualifierTyped :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.FieldAccess_Qualifier
-fieldAccess_QualifierTyped x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldAccess_Qualifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typed"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.FieldDeclaration
-fieldDeclaration :: Typed.TypedTerm [Syntax.FieldModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.FieldDeclaration
-fieldDeclaration modifiers unannType variableDeclarators =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "unannType"),
-          Core.fieldTerm = (Typed.unTypedTerm unannType)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variableDeclarators"),
-          Core.fieldTerm = (Typed.unTypedTerm variableDeclarators)}]}))
-
--- | DSL name token for hydra.java.syntax.FieldDeclaration
-fieldDeclarationFieldDeclaration :: Typed.TypedName Syntax.FieldDeclaration
-fieldDeclarationFieldDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.FieldDeclaration")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.FieldDeclaration
-fieldDeclarationModifiers :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm [Syntax.FieldModifier]
-fieldDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the unannType field of hydra.java.syntax.FieldDeclaration
-fieldDeclarationUnannType :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm Syntax.UnannType
-fieldDeclarationUnannType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-        Core.projectionFieldName = (Core.Name "unannType")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the variableDeclarators field of hydra.java.syntax.FieldDeclaration
-fieldDeclarationVariableDeclarators :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator]
-fieldDeclarationVariableDeclarators x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-        Core.projectionFieldName = (Core.Name "variableDeclarators")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.FieldDeclaration
-fieldDeclarationWithModifiers :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm [Syntax.FieldModifier] -> Typed.TypedTerm Syntax.FieldDeclaration
-fieldDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "unannType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-              Core.projectionFieldName = (Core.Name "unannType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "variableDeclarators"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-              Core.projectionFieldName = (Core.Name "variableDeclarators")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the unannType field of hydra.java.syntax.FieldDeclaration
-fieldDeclarationWithUnannType :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.FieldDeclaration
-fieldDeclarationWithUnannType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "unannType"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "variableDeclarators"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-              Core.projectionFieldName = (Core.Name "variableDeclarators")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the variableDeclarators field of hydra.java.syntax.FieldDeclaration
-fieldDeclarationWithVariableDeclarators :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.FieldDeclaration
-fieldDeclarationWithVariableDeclarators original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "unannType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FieldDeclaration"),
-              Core.projectionFieldName = (Core.Name "unannType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "variableDeclarators"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the annotation variant of hydra.java.syntax.FieldModifier
-fieldModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.FieldModifier
-fieldModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.FieldModifier
-fieldModifierFieldModifier :: Typed.TypedName Syntax.FieldModifier
-fieldModifierFieldModifier = Typed.TypedName (Core.Name "hydra.java.syntax.FieldModifier")
-
--- | DSL injection for the final variant of hydra.java.syntax.FieldModifier
-fieldModifierFinal :: Typed.TypedTerm Syntax.FieldModifier
-fieldModifierFinal =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "final"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the private variant of hydra.java.syntax.FieldModifier
-fieldModifierPrivate :: Typed.TypedTerm Syntax.FieldModifier
-fieldModifierPrivate =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "private"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the protected variant of hydra.java.syntax.FieldModifier
-fieldModifierProtected :: Typed.TypedTerm Syntax.FieldModifier
-fieldModifierProtected =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "protected"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the public variant of hydra.java.syntax.FieldModifier
-fieldModifierPublic :: Typed.TypedTerm Syntax.FieldModifier
-fieldModifierPublic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "public"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the static variant of hydra.java.syntax.FieldModifier
-fieldModifierStatic :: Typed.TypedTerm Syntax.FieldModifier
-fieldModifierStatic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "static"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the transient variant of hydra.java.syntax.FieldModifier
-fieldModifierTransient :: Typed.TypedTerm Syntax.FieldModifier
-fieldModifierTransient =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "transient"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the volatile variant of hydra.java.syntax.FieldModifier
-fieldModifierVolatile :: Typed.TypedTerm Syntax.FieldModifier
-fieldModifierVolatile =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FieldModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "volatile"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for the hydra.java.syntax.Finally wrapper
-finally :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.Finally
-finally x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.Finally"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.Finally
-finallyFinally :: Typed.TypedName Syntax.Finally
-finallyFinally = Typed.TypedName (Core.Name "hydra.java.syntax.Finally")
-
--- | DSL constructor for the hydra.java.syntax.FloatingPointLiteral wrapper
-floatingPointLiteral :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.FloatingPointLiteral
-floatingPointLiteral x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.FloatingPointLiteral"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.FloatingPointLiteral
-floatingPointLiteralFloatingPointLiteral :: Typed.TypedName Syntax.FloatingPointLiteral
-floatingPointLiteralFloatingPointLiteral = Typed.TypedName (Core.Name "hydra.java.syntax.FloatingPointLiteral")
-
--- | DSL injection for the double variant of hydra.java.syntax.FloatingPointType
-floatingPointTypeDouble :: Typed.TypedTerm Syntax.FloatingPointType
-floatingPointTypeDouble =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FloatingPointType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "double"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the float variant of hydra.java.syntax.FloatingPointType
-floatingPointTypeFloat :: Typed.TypedTerm Syntax.FloatingPointType
-floatingPointTypeFloat =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FloatingPointType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "float"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.FloatingPointType
-floatingPointTypeFloatingPointType :: Typed.TypedName Syntax.FloatingPointType
-floatingPointTypeFloatingPointType = Typed.TypedName (Core.Name "hydra.java.syntax.FloatingPointType")
-
--- | DSL constructor for hydra.java.syntax.ForCond
-forCond :: Typed.TypedTerm (Maybe Syntax.ForInit) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.ForUpdate) -> Typed.TypedTerm Syntax.ForCond
-forCond init cond update =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Typed.unTypedTerm init)},
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "update"),
-          Core.fieldTerm = (Typed.unTypedTerm update)}]}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.ForCond
-forCondCond :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.Expression)
-forCondCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ForCond
-forCondForCond :: Typed.TypedName Syntax.ForCond
-forCondForCond = Typed.TypedName (Core.Name "hydra.java.syntax.ForCond")
-
--- | DSL accessor for the init field of hydra.java.syntax.ForCond
-forCondInit :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.ForInit)
-forCondInit x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-        Core.projectionFieldName = (Core.Name "init")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the update field of hydra.java.syntax.ForCond
-forCondUpdate :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.ForUpdate)
-forCondUpdate x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-        Core.projectionFieldName = (Core.Name "update")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the cond field of hydra.java.syntax.ForCond
-forCondWithCond :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ForCond
-forCondWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-      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.java.syntax.ForCond"),
-              Core.projectionFieldName = (Core.Name "init")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          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.java.syntax.ForCond"),
-              Core.projectionFieldName = (Core.Name "update")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the init field of hydra.java.syntax.ForCond
-forCondWithInit :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.ForInit) -> Typed.TypedTerm Syntax.ForCond
-forCondWithInit original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            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.java.syntax.ForCond"),
-              Core.projectionFieldName = (Core.Name "update")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the update field of hydra.java.syntax.ForCond
-forCondWithUpdate :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.ForUpdate) -> Typed.TypedTerm Syntax.ForCond
-forCondWithUpdate original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-      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.java.syntax.ForCond"),
-              Core.projectionFieldName = (Core.Name "init")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ForCond"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "update"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.ForInit
-forInitForInit :: Typed.TypedName Syntax.ForInit
-forInitForInit = Typed.TypedName (Core.Name "hydra.java.syntax.ForInit")
-
--- | DSL injection for the localVariable variant of hydra.java.syntax.ForInit
-forInitLocalVariable :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.ForInit
-forInitLocalVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ForInit"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "localVariable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the statements variant of hydra.java.syntax.ForInit
-forInitStatements :: Typed.TypedTerm [Syntax.StatementExpression] -> Typed.TypedTerm Syntax.ForInit
-forInitStatements x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ForInit"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "statements"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the basic variant of hydra.java.syntax.ForStatement
-forStatementBasic :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.ForStatement
-forStatementBasic x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ForStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "basic"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the enhanced variant of hydra.java.syntax.ForStatement
-forStatementEnhanced :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.ForStatement
-forStatementEnhanced x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ForStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "enhanced"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ForStatement
-forStatementForStatement :: Typed.TypedName Syntax.ForStatement
-forStatementForStatement = Typed.TypedName (Core.Name "hydra.java.syntax.ForStatement")
-
--- | DSL injection for the basic variant of hydra.java.syntax.ForStatementNoShortIf
-forStatementNoShortIfBasic :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.ForStatementNoShortIf
-forStatementNoShortIfBasic x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ForStatementNoShortIf"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "basic"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the enhanced variant of hydra.java.syntax.ForStatementNoShortIf
-forStatementNoShortIfEnhanced :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.ForStatementNoShortIf
-forStatementNoShortIfEnhanced x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ForStatementNoShortIf"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "enhanced"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ForStatementNoShortIf
-forStatementNoShortIfForStatementNoShortIf :: Typed.TypedName Syntax.ForStatementNoShortIf
-forStatementNoShortIfForStatementNoShortIf = Typed.TypedName (Core.Name "hydra.java.syntax.ForStatementNoShortIf")
-
--- | DSL constructor for the hydra.java.syntax.ForUpdate wrapper
-forUpdate :: Typed.TypedTerm [Syntax.StatementExpression] -> Typed.TypedTerm Syntax.ForUpdate
-forUpdate x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ForUpdate"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ForUpdate
-forUpdateForUpdate :: Typed.TypedName Syntax.ForUpdate
-forUpdateForUpdate = Typed.TypedName (Core.Name "hydra.java.syntax.ForUpdate")
-
--- | DSL name token for hydra.java.syntax.FormalParameter
-formalParameterFormalParameter :: Typed.TypedName Syntax.FormalParameter
-formalParameterFormalParameter = Typed.TypedName (Core.Name "hydra.java.syntax.FormalParameter")
-
--- | DSL injection for the simple variant of hydra.java.syntax.FormalParameter
-formalParameterSimple :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.FormalParameter
-formalParameterSimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the variableArity variant of hydra.java.syntax.FormalParameter
-formalParameterVariableArity :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.FormalParameter
-formalParameterVariableArity x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variableArity"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.FormalParameter_Simple
-formalParameter_Simple :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.FormalParameter_Simple
-formalParameter_Simple modifiers type_ id =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm id)}]}))
-
--- | DSL name token for hydra.java.syntax.FormalParameter_Simple
-formalParameter_SimpleFormalParameter_Simple :: Typed.TypedName Syntax.FormalParameter_Simple
-formalParameter_SimpleFormalParameter_Simple = Typed.TypedName (Core.Name "hydra.java.syntax.FormalParameter_Simple")
-
--- | DSL accessor for the id field of hydra.java.syntax.FormalParameter_Simple
-formalParameter_SimpleId :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.VariableDeclaratorId
-formalParameter_SimpleId x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-        Core.projectionFieldName = (Core.Name "id")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.FormalParameter_Simple
-formalParameter_SimpleModifiers :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm [Syntax.VariableModifier]
-formalParameter_SimpleModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.FormalParameter_Simple
-formalParameter_SimpleType :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.UnannType
-formalParameter_SimpleType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the id field of hydra.java.syntax.FormalParameter_Simple
-formalParameter_SimpleWithId :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.FormalParameter_Simple
-formalParameter_SimpleWithId original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.FormalParameter_Simple"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.FormalParameter_Simple
-formalParameter_SimpleWithModifiers :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.FormalParameter_Simple
-formalParameter_SimpleWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.FormalParameter_Simple"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.FormalParameter_Simple
-formalParameter_SimpleWithType :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.FormalParameter_Simple
-formalParameter_SimpleWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.FormalParameter_Simple"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.Guard wrapper
-guard :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Guard
-guard x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.Guard"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.Guard
-guardGuard :: Typed.TypedName Syntax.Guard
-guardGuard = Typed.TypedName (Core.Name "hydra.java.syntax.Guard")
-
--- | DSL constructor for the hydra.java.syntax.Identifier wrapper
-identifier :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Identifier
-identifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.Identifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.Identifier
-identifierIdentifier :: Typed.TypedName Syntax.Identifier
-identifierIdentifier = Typed.TypedName (Core.Name "hydra.java.syntax.Identifier")
-
--- | DSL constructor for hydra.java.syntax.IfThenElseStatement
-ifThenElseStatement :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfThenElseStatement
-ifThenElseStatement cond then_ else_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "then"),
-          Core.fieldTerm = (Typed.unTypedTerm then_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "else"),
-          Core.fieldTerm = (Typed.unTypedTerm else_)}]}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.IfThenElseStatement
-ifThenElseStatementCond :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
-ifThenElseStatementCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the else field of hydra.java.syntax.IfThenElseStatement
-ifThenElseStatementElse :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.Statement
-ifThenElseStatementElse x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-        Core.projectionFieldName = (Core.Name "else")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.IfThenElseStatement
-ifThenElseStatementIfThenElseStatement :: Typed.TypedName Syntax.IfThenElseStatement
-ifThenElseStatementIfThenElseStatement = Typed.TypedName (Core.Name "hydra.java.syntax.IfThenElseStatement")
-
--- | DSL constructor for hydra.java.syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIf :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIf cond then_ else_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "then"),
-          Core.fieldTerm = (Typed.unTypedTerm then_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "else"),
-          Core.fieldTerm = (Typed.unTypedTerm else_)}]}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfCond :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm (Maybe Syntax.Expression)
-ifThenElseStatementNoShortIfCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the else field of hydra.java.syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfElse :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-ifThenElseStatementNoShortIfElse x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "else")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfIfThenElseStatementNoShortIf :: Typed.TypedName Syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfIfThenElseStatementNoShortIf =
-    Typed.TypedName (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf")
-
--- | DSL accessor for the then field of hydra.java.syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfThen :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-ifThenElseStatementNoShortIfThen x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "then")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the cond field of hydra.java.syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfWithCond :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "then"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "then")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "else"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "else")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the else field of hydra.java.syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfWithElse :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfWithElse original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "then"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "then")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "else"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the then field of hydra.java.syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfWithThen :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf
-ifThenElseStatementNoShortIfWithThen original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "then"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "else"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "else")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL accessor for the then field of hydra.java.syntax.IfThenElseStatement
-ifThenElseStatementThen :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.StatementNoShortIf
-ifThenElseStatementThen x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-        Core.projectionFieldName = (Core.Name "then")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the cond field of hydra.java.syntax.IfThenElseStatement
-ifThenElseStatementWithCond :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.IfThenElseStatement
-ifThenElseStatementWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "then"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-              Core.projectionFieldName = (Core.Name "then")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "else"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-              Core.projectionFieldName = (Core.Name "else")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the else field of hydra.java.syntax.IfThenElseStatement
-ifThenElseStatementWithElse :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfThenElseStatement
-ifThenElseStatementWithElse original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "then"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-              Core.projectionFieldName = (Core.Name "then")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "else"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the then field of hydra.java.syntax.IfThenElseStatement
-ifThenElseStatementWithThen :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.IfThenElseStatement
-ifThenElseStatementWithThen original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "then"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "else"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenElseStatement"),
-              Core.projectionFieldName = (Core.Name "else")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.IfThenStatement
-ifThenStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfThenStatement
-ifThenStatement expression statement =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Typed.unTypedTerm statement)}]}))
-
--- | DSL accessor for the expression field of hydra.java.syntax.IfThenStatement
-ifThenStatementExpression :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Expression
-ifThenStatementExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenStatement"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.IfThenStatement
-ifThenStatementIfThenStatement :: Typed.TypedName Syntax.IfThenStatement
-ifThenStatementIfThenStatement = Typed.TypedName (Core.Name "hydra.java.syntax.IfThenStatement")
-
--- | DSL accessor for the statement field of hydra.java.syntax.IfThenStatement
-ifThenStatementStatement :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Statement
-ifThenStatementStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenStatement"),
-        Core.projectionFieldName = (Core.Name "statement")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the expression field of hydra.java.syntax.IfThenStatement
-ifThenStatementWithExpression :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfThenStatement
-ifThenStatementWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.IfThenStatement"),
-              Core.projectionFieldName = (Core.Name "statement")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the statement field of hydra.java.syntax.IfThenStatement
-ifThenStatementWithStatement :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfThenStatement
-ifThenStatementWithStatement original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.IfThenStatement"),
-      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.java.syntax.IfThenStatement"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.ImportDeclaration
-importDeclarationImportDeclaration :: Typed.TypedName Syntax.ImportDeclaration
-importDeclarationImportDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.ImportDeclaration")
-
--- | DSL injection for the singleStaticImport variant of hydra.java.syntax.ImportDeclaration
-importDeclarationSingleStaticImport :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.ImportDeclaration
-importDeclarationSingleStaticImport x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ImportDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "singleStaticImport"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the singleType variant of hydra.java.syntax.ImportDeclaration
-importDeclarationSingleType :: Typed.TypedTerm Syntax.SingleTypeImportDeclaration -> Typed.TypedTerm Syntax.ImportDeclaration
-importDeclarationSingleType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ImportDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "singleType"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the staticImportOnDemand variant of hydra.java.syntax.ImportDeclaration
-importDeclarationStaticImportOnDemand :: Typed.TypedTerm Syntax.StaticImportOnDemandDeclaration -> Typed.TypedTerm Syntax.ImportDeclaration
-importDeclarationStaticImportOnDemand x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ImportDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "staticImportOnDemand"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the typeImportOnDemand variant of hydra.java.syntax.ImportDeclaration
-importDeclarationTypeImportOnDemand :: Typed.TypedTerm Syntax.TypeImportOnDemandDeclaration -> Typed.TypedTerm Syntax.ImportDeclaration
-importDeclarationTypeImportOnDemand x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ImportDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typeImportOnDemand"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.InclusiveOrExpression wrapper
-inclusiveOrExpression :: Typed.TypedTerm [Syntax.ExclusiveOrExpression] -> Typed.TypedTerm Syntax.InclusiveOrExpression
-inclusiveOrExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.InclusiveOrExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.InclusiveOrExpression
-inclusiveOrExpressionInclusiveOrExpression :: Typed.TypedName Syntax.InclusiveOrExpression
-inclusiveOrExpressionInclusiveOrExpression = Typed.TypedName (Core.Name "hydra.java.syntax.InclusiveOrExpression")
-
--- | DSL constructor for the hydra.java.syntax.InstanceInitializer wrapper
-instanceInitializer :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.InstanceInitializer
-instanceInitializer x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.InstanceInitializer"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.InstanceInitializer
-instanceInitializerInstanceInitializer :: Typed.TypedName Syntax.InstanceInitializer
-instanceInitializerInstanceInitializer = Typed.TypedName (Core.Name "hydra.java.syntax.InstanceInitializer")
-
--- | DSL constructor for hydra.java.syntax.InstanceofExpression
-instanceofExpression :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs -> Typed.TypedTerm Syntax.InstanceofExpression
-instanceofExpression lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL name token for hydra.java.syntax.InstanceofExpression
-instanceofExpressionInstanceofExpression :: Typed.TypedName Syntax.InstanceofExpression
-instanceofExpressionInstanceofExpression = Typed.TypedName (Core.Name "hydra.java.syntax.InstanceofExpression")
-
--- | DSL accessor for the lhs field of hydra.java.syntax.InstanceofExpression
-instanceofExpressionLhs :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.RelationalExpression
-instanceofExpressionLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the rhs field of hydra.java.syntax.InstanceofExpression
-instanceofExpressionRhs :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs
-instanceofExpressionRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.InstanceofExpression
-instanceofExpressionWithLhs :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.InstanceofExpression
-instanceofExpressionWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.InstanceofExpression
-instanceofExpressionWithRhs :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs -> Typed.TypedTerm Syntax.InstanceofExpression
-instanceofExpressionWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.InstanceofExpression_Rhs
-instanceofExpression_RhsInstanceofExpression_Rhs :: Typed.TypedName Syntax.InstanceofExpression_Rhs
-instanceofExpression_RhsInstanceofExpression_Rhs =
-    Typed.TypedName (Core.Name "hydra.java.syntax.InstanceofExpression_Rhs")
-
--- | DSL injection for the pattern variant of hydra.java.syntax.InstanceofExpression_Rhs
-instanceofExpression_RhsPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs
-instanceofExpression_RhsPattern x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression_Rhs"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "pattern"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the referenceType variant of hydra.java.syntax.InstanceofExpression_Rhs
-instanceofExpression_RhsReferenceType :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs
-instanceofExpression_RhsReferenceType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InstanceofExpression_Rhs"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "referenceType"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.IntegerLiteral wrapper
-integerLiteral :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.IntegerLiteral
-integerLiteral x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.IntegerLiteral"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.IntegerLiteral
-integerLiteralIntegerLiteral :: Typed.TypedName Syntax.IntegerLiteral
-integerLiteralIntegerLiteral = Typed.TypedName (Core.Name "hydra.java.syntax.IntegerLiteral")
-
--- | DSL injection for the byte variant of hydra.java.syntax.IntegralType
-integralTypeByte :: Typed.TypedTerm Syntax.IntegralType
-integralTypeByte =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.IntegralType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "byte"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the char variant of hydra.java.syntax.IntegralType
-integralTypeChar :: Typed.TypedTerm Syntax.IntegralType
-integralTypeChar =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.IntegralType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "char"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the int variant of hydra.java.syntax.IntegralType
-integralTypeInt :: Typed.TypedTerm Syntax.IntegralType
-integralTypeInt =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.IntegralType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "int"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.IntegralType
-integralTypeIntegralType :: Typed.TypedName Syntax.IntegralType
-integralTypeIntegralType = Typed.TypedName (Core.Name "hydra.java.syntax.IntegralType")
-
--- | DSL injection for the long variant of hydra.java.syntax.IntegralType
-integralTypeLong :: Typed.TypedTerm Syntax.IntegralType
-integralTypeLong =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.IntegralType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "long"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the short variant of hydra.java.syntax.IntegralType
-integralTypeShort :: Typed.TypedTerm Syntax.IntegralType
-integralTypeShort =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.IntegralType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "short"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for the hydra.java.syntax.InterfaceBody wrapper
-interfaceBody :: Typed.TypedTerm [Syntax.InterfaceMemberDeclarationWithComments] -> Typed.TypedTerm Syntax.InterfaceBody
-interfaceBody x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.InterfaceBody"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.InterfaceBody
-interfaceBodyInterfaceBody :: Typed.TypedName Syntax.InterfaceBody
-interfaceBodyInterfaceBody = Typed.TypedName (Core.Name "hydra.java.syntax.InterfaceBody")
-
--- | DSL injection for the annotationInterface variant of hydra.java.syntax.InterfaceDeclaration
-interfaceDeclarationAnnotationInterface :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceDeclaration
-interfaceDeclarationAnnotationInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotationInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.InterfaceDeclaration
-interfaceDeclarationInterfaceDeclaration :: Typed.TypedName Syntax.InterfaceDeclaration
-interfaceDeclarationInterfaceDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.InterfaceDeclaration")
-
--- | DSL injection for the normalInterface variant of hydra.java.syntax.InterfaceDeclaration
-interfaceDeclarationNormalInterface :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceDeclaration
-interfaceDeclarationNormalInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "normalInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the class variant of hydra.java.syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationClass x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "class"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the constant variant of hydra.java.syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationConstant :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationConstant x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "constant"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the interface variant of hydra.java.syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "interface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationInterfaceMemberDeclaration :: Typed.TypedName Syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationInterfaceMemberDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.InterfaceMemberDeclaration")
-
--- | DSL injection for the interfaceMethod variant of hydra.java.syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationInterfaceMethod :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationInterfaceMethod x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "interfaceMethod"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithComments :: Typed.TypedTerm Syntax.InterfaceMemberDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithComments value comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm value)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.java.syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments -> Typed.TypedTerm (Maybe String)
-interfaceMemberDeclarationWithCommentsComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithCommentsInterfaceMemberDeclarationWithComments :: Typed.TypedName Syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithCommentsInterfaceMemberDeclarationWithComments =
-    Typed.TypedName (Core.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments")
-
--- | DSL accessor for the value field of hydra.java.syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithCommentsValue :: Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
-interfaceMemberDeclarationWithCommentsValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the comments field of hydra.java.syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithCommentsWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
-      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.java.syntax.InterfaceMemberDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the value field of hydra.java.syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithCommentsWithValue :: Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments
-interfaceMemberDeclarationWithCommentsWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          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.java.syntax.InterfaceMemberDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.InterfaceMethodDeclaration
-interfaceMethodDeclaration :: Typed.TypedTerm [Syntax.InterfaceMethodModifier] -> Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodBody -> Typed.TypedTerm Syntax.InterfaceMethodDeclaration
-interfaceMethodDeclaration modifiers header body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Typed.unTypedTerm header)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationBody :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.MethodBody
-interfaceMethodDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the header field of hydra.java.syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationHeader :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.MethodHeader
-interfaceMethodDeclarationHeader x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-        Core.projectionFieldName = (Core.Name "header")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationInterfaceMethodDeclaration :: Typed.TypedName Syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationInterfaceMethodDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationModifiers :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm [Syntax.InterfaceMethodModifier]
-interfaceMethodDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationWithBody :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.MethodBody -> Typed.TypedTerm Syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the header field of hydra.java.syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationWithHeader :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationWithHeader original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          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.java.syntax.InterfaceMethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationWithModifiers :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm [Syntax.InterfaceMethodModifier] -> Typed.TypedTerm Syntax.InterfaceMethodDeclaration
-interfaceMethodDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            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.java.syntax.InterfaceMethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the abstract variant of hydra.java.syntax.InterfaceMethodModifier
-interfaceMethodModifierAbstract :: Typed.TypedTerm Syntax.InterfaceMethodModifier
-interfaceMethodModifierAbstract =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "abstract"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the annotation variant of hydra.java.syntax.InterfaceMethodModifier
-interfaceMethodModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.InterfaceMethodModifier
-interfaceMethodModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the default variant of hydra.java.syntax.InterfaceMethodModifier
-interfaceMethodModifierDefault :: Typed.TypedTerm Syntax.InterfaceMethodModifier
-interfaceMethodModifierDefault =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "default"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.InterfaceMethodModifier
-interfaceMethodModifierInterfaceMethodModifier :: Typed.TypedName Syntax.InterfaceMethodModifier
-interfaceMethodModifierInterfaceMethodModifier = Typed.TypedName (Core.Name "hydra.java.syntax.InterfaceMethodModifier")
-
--- | DSL injection for the private variant of hydra.java.syntax.InterfaceMethodModifier
-interfaceMethodModifierPrivate :: Typed.TypedTerm Syntax.InterfaceMethodModifier
-interfaceMethodModifierPrivate =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "private"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the public variant of hydra.java.syntax.InterfaceMethodModifier
-interfaceMethodModifierPublic :: Typed.TypedTerm Syntax.InterfaceMethodModifier
-interfaceMethodModifierPublic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "public"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the static variant of hydra.java.syntax.InterfaceMethodModifier
-interfaceMethodModifierStatic :: Typed.TypedTerm Syntax.InterfaceMethodModifier
-interfaceMethodModifierStatic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "static"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the strictfp variant of hydra.java.syntax.InterfaceMethodModifier
-interfaceMethodModifierStrictfp :: Typed.TypedTerm Syntax.InterfaceMethodModifier
-interfaceMethodModifierStrictfp =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceMethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "strictfp"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the abstract variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierAbstract :: Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierAbstract =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "abstract"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the annotation variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.InterfaceModifier
-interfaceModifierInterfaceModifier :: Typed.TypedName Syntax.InterfaceModifier
-interfaceModifierInterfaceModifier = Typed.TypedName (Core.Name "hydra.java.syntax.InterfaceModifier")
-
--- | DSL injection for the nonSealed variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierNonSealed :: Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierNonSealed =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "nonSealed"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the private variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierPrivate :: Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierPrivate =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "private"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the protected variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierProtected :: Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierProtected =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "protected"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the public variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierPublic :: Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierPublic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "public"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the sealed variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierSealed :: Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierSealed =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "sealed"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the static variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierStatic :: Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierStatic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "static"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the strictfp variant of hydra.java.syntax.InterfaceModifier
-interfaceModifierStrictfp :: Typed.TypedTerm Syntax.InterfaceModifier
-interfaceModifierStrictfp =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.InterfaceModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "strictfp"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for the hydra.java.syntax.InterfaceType wrapper
-interfaceType :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.InterfaceType
-interfaceType x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.InterfaceType"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.InterfaceType
-interfaceTypeInterfaceType :: Typed.TypedName Syntax.InterfaceType
-interfaceTypeInterfaceType = Typed.TypedName (Core.Name "hydra.java.syntax.InterfaceType")
-
--- | DSL constructor for hydra.java.syntax.LabeledStatement
-labeledStatement :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStatement
-labeledStatement identifier statement =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LabeledStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Typed.unTypedTerm statement)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.LabeledStatement
-labeledStatementIdentifier :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Identifier
-labeledStatementIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LabeledStatement"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.LabeledStatement
-labeledStatementLabeledStatement :: Typed.TypedName Syntax.LabeledStatement
-labeledStatementLabeledStatement = Typed.TypedName (Core.Name "hydra.java.syntax.LabeledStatement")
-
--- | DSL constructor for hydra.java.syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIf :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIf identifier statement =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Typed.unTypedTerm statement)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIfIdentifier :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.Identifier
-labeledStatementNoShortIfIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIfLabeledStatementNoShortIf :: Typed.TypedName Syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIfLabeledStatementNoShortIf =
-    Typed.TypedName (Core.Name "hydra.java.syntax.LabeledStatementNoShortIf")
-
--- | DSL accessor for the statement field of hydra.java.syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIfStatement :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-labeledStatementNoShortIfStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "statement")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIfWithIdentifier :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIfWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "statement")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the statement field of hydra.java.syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIfWithStatement :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.LabeledStatementNoShortIf
-labeledStatementNoShortIfWithStatement original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL accessor for the statement field of hydra.java.syntax.LabeledStatement
-labeledStatementStatement :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement
-labeledStatementStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LabeledStatement"),
-        Core.projectionFieldName = (Core.Name "statement")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.LabeledStatement
-labeledStatementWithIdentifier :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LabeledStatement
-labeledStatementWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LabeledStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LabeledStatement"),
-              Core.projectionFieldName = (Core.Name "statement")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the statement field of hydra.java.syntax.LabeledStatement
-labeledStatementWithStatement :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStatement
-labeledStatementWithStatement original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LabeledStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LabeledStatement"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "statement"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the block variant of hydra.java.syntax.LambdaBody
-lambdaBodyBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.LambdaBody
-lambdaBodyBlock x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LambdaBody"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "block"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the expression variant of hydra.java.syntax.LambdaBody
-lambdaBodyExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LambdaBody
-lambdaBodyExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LambdaBody"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.LambdaBody
-lambdaBodyLambdaBody :: Typed.TypedName Syntax.LambdaBody
-lambdaBodyLambdaBody = Typed.TypedName (Core.Name "hydra.java.syntax.LambdaBody")
-
--- | DSL constructor for hydra.java.syntax.LambdaExpression
-lambdaExpression :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm Syntax.LambdaBody -> Typed.TypedTerm Syntax.LambdaExpression
-lambdaExpression parameters body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LambdaExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm parameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.LambdaExpression
-lambdaExpressionBody :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.LambdaBody
-lambdaExpressionBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaExpression"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.LambdaExpression
-lambdaExpressionLambdaExpression :: Typed.TypedName Syntax.LambdaExpression
-lambdaExpressionLambdaExpression = Typed.TypedName (Core.Name "hydra.java.syntax.LambdaExpression")
-
--- | DSL accessor for the parameters field of hydra.java.syntax.LambdaExpression
-lambdaExpressionParameters :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.LambdaParameters
-lambdaExpressionParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaExpression"),
-        Core.projectionFieldName = (Core.Name "parameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.LambdaExpression
-lambdaExpressionWithBody :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.LambdaBody -> Typed.TypedTerm Syntax.LambdaExpression
-lambdaExpressionWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LambdaExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaExpression"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the parameters field of hydra.java.syntax.LambdaExpression
-lambdaExpressionWithParameters :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm Syntax.LambdaExpression
-lambdaExpressionWithParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LambdaExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          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.java.syntax.LambdaExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.LambdaParameter
-lambdaParameterLambdaParameter :: Typed.TypedName Syntax.LambdaParameter
-lambdaParameterLambdaParameter = Typed.TypedName (Core.Name "hydra.java.syntax.LambdaParameter")
-
--- | DSL injection for the normal variant of hydra.java.syntax.LambdaParameter
-lambdaParameterNormal :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.LambdaParameter
-lambdaParameterNormal x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "normal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.LambdaParameterType
-lambdaParameterTypeLambdaParameterType :: Typed.TypedName Syntax.LambdaParameterType
-lambdaParameterTypeLambdaParameterType = Typed.TypedName (Core.Name "hydra.java.syntax.LambdaParameterType")
-
--- | DSL injection for the type variant of hydra.java.syntax.LambdaParameterType
-lambdaParameterTypeType :: Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.LambdaParameterType
-lambdaParameterTypeType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameterType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "type"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the var variant of hydra.java.syntax.LambdaParameterType
-lambdaParameterTypeVar :: Typed.TypedTerm Syntax.LambdaParameterType
-lambdaParameterTypeVar =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameterType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "var"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the variableArity variant of hydra.java.syntax.LambdaParameter
-lambdaParameterVariableArity :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.LambdaParameter
-lambdaParameterVariableArity x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variableArity"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.LambdaParameter_Normal
-lambdaParameter_Normal :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LambdaParameterType -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.LambdaParameter_Normal
-lambdaParameter_Normal modifiers type_ id =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm id)}]}))
-
--- | DSL accessor for the id field of hydra.java.syntax.LambdaParameter_Normal
-lambdaParameter_NormalId :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.VariableDeclaratorId
-lambdaParameter_NormalId x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-        Core.projectionFieldName = (Core.Name "id")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.LambdaParameter_Normal
-lambdaParameter_NormalLambdaParameter_Normal :: Typed.TypedName Syntax.LambdaParameter_Normal
-lambdaParameter_NormalLambdaParameter_Normal = Typed.TypedName (Core.Name "hydra.java.syntax.LambdaParameter_Normal")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.LambdaParameter_Normal
-lambdaParameter_NormalModifiers :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm [Syntax.VariableModifier]
-lambdaParameter_NormalModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.LambdaParameter_Normal
-lambdaParameter_NormalType :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.LambdaParameterType
-lambdaParameter_NormalType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the id field of hydra.java.syntax.LambdaParameter_Normal
-lambdaParameter_NormalWithId :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.LambdaParameter_Normal
-lambdaParameter_NormalWithId original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.LambdaParameter_Normal"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.LambdaParameter_Normal
-lambdaParameter_NormalWithModifiers :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LambdaParameter_Normal
-lambdaParameter_NormalWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.LambdaParameter_Normal"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.LambdaParameter_Normal
-lambdaParameter_NormalWithType :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.LambdaParameterType -> Typed.TypedTerm Syntax.LambdaParameter_Normal
-lambdaParameter_NormalWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameter_Normal"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.LambdaParameters
-lambdaParametersLambdaParameters :: Typed.TypedName Syntax.LambdaParameters
-lambdaParametersLambdaParameters = Typed.TypedName (Core.Name "hydra.java.syntax.LambdaParameters")
-
--- | DSL injection for the single variant of hydra.java.syntax.LambdaParameters
-lambdaParametersSingle :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LambdaParameters
-lambdaParametersSingle x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameters"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "single"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the tuple variant of hydra.java.syntax.LambdaParameters
-lambdaParametersTuple :: Typed.TypedTerm [Syntax.LambdaParameters] -> Typed.TypedTerm Syntax.LambdaParameters
-lambdaParametersTuple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LambdaParameters"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "tuple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the arrayAccess variant of hydra.java.syntax.LeftHandSide
-leftHandSideArrayAccess :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm Syntax.LeftHandSide
-leftHandSideArrayAccess x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LeftHandSide"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "arrayAccess"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the expressionName variant of hydra.java.syntax.LeftHandSide
-leftHandSideExpressionName :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.LeftHandSide
-leftHandSideExpressionName x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LeftHandSide"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expressionName"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the fieldAccess variant of hydra.java.syntax.LeftHandSide
-leftHandSideFieldAccess :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.LeftHandSide
-leftHandSideFieldAccess x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LeftHandSide"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "fieldAccess"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.LeftHandSide
-leftHandSideLeftHandSide :: Typed.TypedName Syntax.LeftHandSide
-leftHandSideLeftHandSide = Typed.TypedName (Core.Name "hydra.java.syntax.LeftHandSide")
-
--- | DSL injection for the boolean variant of hydra.java.syntax.Literal
-literalBoolean :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Literal
-literalBoolean x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "boolean"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the character variant of hydra.java.syntax.Literal
-literalCharacter :: Typed.TypedTerm Int -> Typed.TypedTerm Syntax.Literal
-literalCharacter x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "character"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the floatingPoint variant of hydra.java.syntax.Literal
-literalFloatingPoint :: Typed.TypedTerm Syntax.FloatingPointLiteral -> Typed.TypedTerm Syntax.Literal
-literalFloatingPoint x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "floatingPoint"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the integer variant of hydra.java.syntax.Literal
-literalInteger :: Typed.TypedTerm Syntax.IntegerLiteral -> Typed.TypedTerm Syntax.Literal
-literalInteger x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "integer"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.Literal
-literalLiteral :: Typed.TypedName Syntax.Literal
-literalLiteral = Typed.TypedName (Core.Name "hydra.java.syntax.Literal")
-
--- | DSL injection for the null variant of hydra.java.syntax.Literal
-literalNull :: Typed.TypedTerm Syntax.Literal
-literalNull =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "null"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the string variant of hydra.java.syntax.Literal
-literalString :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.Literal
-literalString x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "string"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the textBlock variant of hydra.java.syntax.Literal
-literalTextBlock :: Typed.TypedTerm Syntax.TextBlock -> Typed.TypedTerm Syntax.Literal
-literalTextBlock x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "textBlock"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the class variant of hydra.java.syntax.LocalClassOrInterfaceDeclaration
-localClassOrInterfaceDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.LocalClassOrInterfaceDeclaration
-localClassOrInterfaceDeclarationClass x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LocalClassOrInterfaceDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "class"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.LocalClassOrInterfaceDeclaration
-localClassOrInterfaceDeclarationLocalClassOrInterfaceDeclaration :: Typed.TypedName Syntax.LocalClassOrInterfaceDeclaration
-localClassOrInterfaceDeclarationLocalClassOrInterfaceDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.LocalClassOrInterfaceDeclaration")
-
--- | DSL injection for the normalInterface variant of hydra.java.syntax.LocalClassOrInterfaceDeclaration
-localClassOrInterfaceDeclarationNormalInterface :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.LocalClassOrInterfaceDeclaration
-localClassOrInterfaceDeclarationNormalInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LocalClassOrInterfaceDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "normalInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.LocalVariableDeclaration
-localVariableDeclaration :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LocalVariableType -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.LocalVariableDeclaration
-localVariableDeclaration modifiers type_ declarators =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarators"),
-          Core.fieldTerm = (Typed.unTypedTerm declarators)}]}))
-
--- | DSL accessor for the declarators field of hydra.java.syntax.LocalVariableDeclaration
-localVariableDeclarationDeclarators :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator]
-localVariableDeclarationDeclarators x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-        Core.projectionFieldName = (Core.Name "declarators")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.LocalVariableDeclaration
-localVariableDeclarationLocalVariableDeclaration :: Typed.TypedName Syntax.LocalVariableDeclaration
-localVariableDeclarationLocalVariableDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.LocalVariableDeclaration")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.LocalVariableDeclaration
-localVariableDeclarationModifiers :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm [Syntax.VariableModifier]
-localVariableDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for the hydra.java.syntax.LocalVariableDeclarationStatement wrapper
-localVariableDeclarationStatement :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.LocalVariableDeclarationStatement
-localVariableDeclarationStatement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclarationStatement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.LocalVariableDeclarationStatement
-localVariableDeclarationStatementLocalVariableDeclarationStatement :: Typed.TypedName Syntax.LocalVariableDeclarationStatement
-localVariableDeclarationStatementLocalVariableDeclarationStatement =
-    Typed.TypedName (Core.Name "hydra.java.syntax.LocalVariableDeclarationStatement")
-
--- | DSL accessor for the type field of hydra.java.syntax.LocalVariableDeclaration
-localVariableDeclarationType :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.LocalVariableType
-localVariableDeclarationType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the declarators field of hydra.java.syntax.LocalVariableDeclaration
-localVariableDeclarationWithDeclarators :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.LocalVariableDeclaration
-localVariableDeclarationWithDeclarators original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.LocalVariableDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarators"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.LocalVariableDeclaration
-localVariableDeclarationWithModifiers :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LocalVariableDeclaration
-localVariableDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.LocalVariableDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarators"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-              Core.projectionFieldName = (Core.Name "declarators")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.LocalVariableDeclaration
-localVariableDeclarationWithType :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.LocalVariableType -> Typed.TypedTerm Syntax.LocalVariableDeclaration
-localVariableDeclarationWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarators"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableDeclaration"),
-              Core.projectionFieldName = (Core.Name "declarators")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.LocalVariableType
-localVariableTypeLocalVariableType :: Typed.TypedName Syntax.LocalVariableType
-localVariableTypeLocalVariableType = Typed.TypedName (Core.Name "hydra.java.syntax.LocalVariableType")
-
--- | DSL injection for the type variant of hydra.java.syntax.LocalVariableType
-localVariableTypeType :: Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.LocalVariableType
-localVariableTypeType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "type"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the var variant of hydra.java.syntax.LocalVariableType
-localVariableTypeVar :: Typed.TypedTerm Syntax.LocalVariableType
-localVariableTypeVar =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.LocalVariableType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "var"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for the hydra.java.syntax.MarkerAnnotation wrapper
-markerAnnotation :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.MarkerAnnotation
-markerAnnotation x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.MarkerAnnotation"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MarkerAnnotation
-markerAnnotationMarkerAnnotation :: Typed.TypedName Syntax.MarkerAnnotation
-markerAnnotationMarkerAnnotation = Typed.TypedName (Core.Name "hydra.java.syntax.MarkerAnnotation")
-
--- | DSL injection for the block variant of hydra.java.syntax.MethodBody
-methodBodyBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.MethodBody
-methodBodyBlock x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodBody"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "block"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.MethodBody
-methodBodyMethodBody :: Typed.TypedName Syntax.MethodBody
-methodBodyMethodBody = Typed.TypedName (Core.Name "hydra.java.syntax.MethodBody")
-
--- | DSL injection for the none variant of hydra.java.syntax.MethodBody
-methodBodyNone :: Typed.TypedTerm Syntax.MethodBody
-methodBodyNone =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodBody"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "none"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for hydra.java.syntax.MethodDeclaration
-methodDeclaration :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm [Syntax.MethodModifier] -> Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodBody -> Typed.TypedTerm Syntax.MethodDeclaration
-methodDeclaration annotations modifiers header body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Typed.unTypedTerm header)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.MethodDeclaration
-methodDeclarationAnnotations :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm [Syntax.Annotation]
-methodDeclarationAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body field of hydra.java.syntax.MethodDeclaration
-methodDeclarationBody :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.MethodBody
-methodDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the header field of hydra.java.syntax.MethodDeclaration
-methodDeclarationHeader :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.MethodHeader
-methodDeclarationHeader x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-        Core.projectionFieldName = (Core.Name "header")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodDeclaration
-methodDeclarationMethodDeclaration :: Typed.TypedName Syntax.MethodDeclaration
-methodDeclarationMethodDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.MethodDeclaration")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.MethodDeclaration
-methodDeclarationModifiers :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm [Syntax.MethodModifier]
-methodDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the annotations field of hydra.java.syntax.MethodDeclaration
-methodDeclarationWithAnnotations :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.MethodDeclaration
-methodDeclarationWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            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.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the body field of hydra.java.syntax.MethodDeclaration
-methodDeclarationWithBody :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.MethodBody -> Typed.TypedTerm Syntax.MethodDeclaration
-methodDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the header field of hydra.java.syntax.MethodDeclaration
-methodDeclarationWithHeader :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodDeclaration
-methodDeclarationWithHeader original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          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.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.MethodDeclaration
-methodDeclarationWithModifiers :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm [Syntax.MethodModifier] -> Typed.TypedTerm Syntax.MethodDeclaration
-methodDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            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.java.syntax.MethodDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.MethodDeclarator
-methodDeclarator :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter) -> Typed.TypedTerm [Syntax.FormalParameter] -> Typed.TypedTerm Syntax.MethodDeclarator
-methodDeclarator identifier receiverParameter formalParameters =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Typed.unTypedTerm receiverParameter)},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm formalParameters)}]}))
-
--- | DSL accessor for the formalParameters field of hydra.java.syntax.MethodDeclarator
-methodDeclaratorFormalParameters :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm [Syntax.FormalParameter]
-methodDeclaratorFormalParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-        Core.projectionFieldName = (Core.Name "formalParameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.MethodDeclarator
-methodDeclaratorIdentifier :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm Syntax.Identifier
-methodDeclaratorIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodDeclarator
-methodDeclaratorMethodDeclarator :: Typed.TypedName Syntax.MethodDeclarator
-methodDeclaratorMethodDeclarator = Typed.TypedName (Core.Name "hydra.java.syntax.MethodDeclarator")
-
--- | DSL accessor for the receiverParameter field of hydra.java.syntax.MethodDeclarator
-methodDeclaratorReceiverParameter :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter)
-methodDeclaratorReceiverParameter x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-        Core.projectionFieldName = (Core.Name "receiverParameter")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the formalParameters field of hydra.java.syntax.MethodDeclarator
-methodDeclaratorWithFormalParameters :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm [Syntax.FormalParameter] -> Typed.TypedTerm Syntax.MethodDeclarator
-methodDeclaratorWithFormalParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-              Core.projectionFieldName = (Core.Name "receiverParameter")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.MethodDeclarator
-methodDeclaratorWithIdentifier :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodDeclarator
-methodDeclaratorWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-              Core.projectionFieldName = (Core.Name "receiverParameter")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-              Core.projectionFieldName = (Core.Name "formalParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the receiverParameter field of hydra.java.syntax.MethodDeclarator
-methodDeclaratorWithReceiverParameter :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter) -> Typed.TypedTerm Syntax.MethodDeclarator
-methodDeclaratorWithReceiverParameter original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "receiverParameter"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "formalParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodDeclarator"),
-              Core.projectionFieldName = (Core.Name "formalParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.MethodHeader
-methodHeader :: Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.Result -> Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm (Maybe Syntax.Throws) -> Typed.TypedTerm Syntax.MethodHeader
-methodHeader parameters result declarator throws =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm parameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "result"),
-          Core.fieldTerm = (Typed.unTypedTerm result)},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarator"),
-          Core.fieldTerm = (Typed.unTypedTerm declarator)},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Typed.unTypedTerm throws)}]}))
-
--- | DSL accessor for the declarator field of hydra.java.syntax.MethodHeader
-methodHeaderDeclarator :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodDeclarator
-methodHeaderDeclarator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-        Core.projectionFieldName = (Core.Name "declarator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodHeader
-methodHeaderMethodHeader :: Typed.TypedName Syntax.MethodHeader
-methodHeaderMethodHeader = Typed.TypedName (Core.Name "hydra.java.syntax.MethodHeader")
-
--- | DSL accessor for the parameters field of hydra.java.syntax.MethodHeader
-methodHeaderParameters :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm [Syntax.TypeParameter]
-methodHeaderParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-        Core.projectionFieldName = (Core.Name "parameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the result field of hydra.java.syntax.MethodHeader
-methodHeaderResult :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.Result
-methodHeaderResult x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-        Core.projectionFieldName = (Core.Name "result")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the throws field of hydra.java.syntax.MethodHeader
-methodHeaderThrows :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm (Maybe Syntax.Throws)
-methodHeaderThrows x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-        Core.projectionFieldName = (Core.Name "throws")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the declarator field of hydra.java.syntax.MethodHeader
-methodHeaderWithDeclarator :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm Syntax.MethodHeader
-methodHeaderWithDeclarator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "result"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "result")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarator"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "throws")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the parameters field of hydra.java.syntax.MethodHeader
-methodHeaderWithParameters :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.MethodHeader
-methodHeaderWithParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "result"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "result")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "declarator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "throws")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the result field of hydra.java.syntax.MethodHeader
-methodHeaderWithResult :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.Result -> Typed.TypedTerm Syntax.MethodHeader
-methodHeaderWithResult original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "result"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "declarator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "throws")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the throws field of hydra.java.syntax.MethodHeader
-methodHeaderWithThrows :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm (Maybe Syntax.Throws) -> Typed.TypedTerm Syntax.MethodHeader
-methodHeaderWithThrows original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "result"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "result")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodHeader"),
-              Core.projectionFieldName = (Core.Name "declarator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "throws"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.MethodInvocation
-methodInvocation :: Typed.TypedTerm Syntax.MethodInvocation_Header -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.MethodInvocation
-methodInvocation header arguments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodInvocation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Typed.unTypedTerm header)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm arguments)}]}))
-
--- | DSL accessor for the arguments field of hydra.java.syntax.MethodInvocation
-methodInvocationArguments :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm [Syntax.Expression]
-methodInvocationArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation"),
-        Core.projectionFieldName = (Core.Name "arguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the header field of hydra.java.syntax.MethodInvocation
-methodInvocationHeader :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm Syntax.MethodInvocation_Header
-methodInvocationHeader x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation"),
-        Core.projectionFieldName = (Core.Name "header")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodInvocation
-methodInvocationMethodInvocation :: Typed.TypedName Syntax.MethodInvocation
-methodInvocationMethodInvocation = Typed.TypedName (Core.Name "hydra.java.syntax.MethodInvocation")
-
--- | DSL updater for the arguments field of hydra.java.syntax.MethodInvocation
-methodInvocationWithArguments :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.MethodInvocation
-methodInvocationWithArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodInvocation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the header field of hydra.java.syntax.MethodInvocation
-methodInvocationWithHeader :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm Syntax.MethodInvocation_Header -> Typed.TypedTerm Syntax.MethodInvocation
-methodInvocationWithHeader original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodInvocation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          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.java.syntax.MethodInvocation"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.MethodInvocation_Complex
-methodInvocation_Complex :: Typed.TypedTerm Syntax.MethodInvocation_Variant -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodInvocation_Complex
-methodInvocation_Complex variant typeArguments identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Typed.unTypedTerm variant)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.MethodInvocation_Complex
-methodInvocation_ComplexIdentifier :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.Identifier
-methodInvocation_ComplexIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodInvocation_Complex
-methodInvocation_ComplexMethodInvocation_Complex :: Typed.TypedName Syntax.MethodInvocation_Complex
-methodInvocation_ComplexMethodInvocation_Complex =
-    Typed.TypedName (Core.Name "hydra.java.syntax.MethodInvocation_Complex")
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodInvocation_Complex
-methodInvocation_ComplexTypeArguments :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm [Syntax.TypeArgument]
-methodInvocation_ComplexTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the variant field of hydra.java.syntax.MethodInvocation_Complex
-methodInvocation_ComplexVariant :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.MethodInvocation_Variant
-methodInvocation_ComplexVariant x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-        Core.projectionFieldName = (Core.Name "variant")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.MethodInvocation_Complex
-methodInvocation_ComplexWithIdentifier :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodInvocation_Complex
-methodInvocation_ComplexWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-              Core.projectionFieldName = (Core.Name "variant")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.MethodInvocation_Complex
-methodInvocation_ComplexWithTypeArguments :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodInvocation_Complex
-methodInvocation_ComplexWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-              Core.projectionFieldName = (Core.Name "variant")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the variant field of hydra.java.syntax.MethodInvocation_Complex
-methodInvocation_ComplexWithVariant :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.MethodInvocation_Variant -> Typed.TypedTerm Syntax.MethodInvocation_Complex
-methodInvocation_ComplexWithVariant original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "variant"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Complex"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the complex variant of hydra.java.syntax.MethodInvocation_Header
-methodInvocation_HeaderComplex :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.MethodInvocation_Header
-methodInvocation_HeaderComplex x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Header"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "complex"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.MethodInvocation_Header
-methodInvocation_HeaderMethodInvocation_Header :: Typed.TypedName Syntax.MethodInvocation_Header
-methodInvocation_HeaderMethodInvocation_Header = Typed.TypedName (Core.Name "hydra.java.syntax.MethodInvocation_Header")
-
--- | DSL injection for the simple variant of hydra.java.syntax.MethodInvocation_Header
-methodInvocation_HeaderSimple :: Typed.TypedTerm Syntax.MethodName -> Typed.TypedTerm Syntax.MethodInvocation_Header
-methodInvocation_HeaderSimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Header"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the expression variant of hydra.java.syntax.MethodInvocation_Variant
-methodInvocation_VariantExpression :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.MethodInvocation_Variant
-methodInvocation_VariantExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.MethodInvocation_Variant
-methodInvocation_VariantMethodInvocation_Variant :: Typed.TypedName Syntax.MethodInvocation_Variant
-methodInvocation_VariantMethodInvocation_Variant =
-    Typed.TypedName (Core.Name "hydra.java.syntax.MethodInvocation_Variant")
-
--- | DSL injection for the primary variant of hydra.java.syntax.MethodInvocation_Variant
-methodInvocation_VariantPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.MethodInvocation_Variant
-methodInvocation_VariantPrimary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the super variant of hydra.java.syntax.MethodInvocation_Variant
-methodInvocation_VariantSuper :: Typed.TypedTerm Syntax.MethodInvocation_Variant
-methodInvocation_VariantSuper =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "super"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the type variant of hydra.java.syntax.MethodInvocation_Variant
-methodInvocation_VariantType :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.MethodInvocation_Variant
-methodInvocation_VariantType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "type"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the typeSuper variant of hydra.java.syntax.MethodInvocation_Variant
-methodInvocation_VariantTypeSuper :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.MethodInvocation_Variant
-methodInvocation_VariantTypeSuper x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodInvocation_Variant"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typeSuper"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the abstract variant of hydra.java.syntax.MethodModifier
-methodModifierAbstract :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierAbstract =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "abstract"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the annotation variant of hydra.java.syntax.MethodModifier
-methodModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.MethodModifier
-methodModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the final variant of hydra.java.syntax.MethodModifier
-methodModifierFinal :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierFinal =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "final"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.MethodModifier
-methodModifierMethodModifier :: Typed.TypedName Syntax.MethodModifier
-methodModifierMethodModifier = Typed.TypedName (Core.Name "hydra.java.syntax.MethodModifier")
-
--- | DSL injection for the native variant of hydra.java.syntax.MethodModifier
-methodModifierNative :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierNative =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "native"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the private variant of hydra.java.syntax.MethodModifier
-methodModifierPrivate :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierPrivate =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "private"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the protected variant of hydra.java.syntax.MethodModifier
-methodModifierProtected :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierProtected =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "protected"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the public variant of hydra.java.syntax.MethodModifier
-methodModifierPublic :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierPublic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "public"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the static variant of hydra.java.syntax.MethodModifier
-methodModifierStatic :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierStatic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "static"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the strictfp variant of hydra.java.syntax.MethodModifier
-methodModifierStrictfp :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierStrictfp =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "strictfp"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the synchronized variant of hydra.java.syntax.MethodModifier
-methodModifierSynchronized :: Typed.TypedTerm Syntax.MethodModifier
-methodModifierSynchronized =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "synchronized"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for the hydra.java.syntax.MethodName wrapper
-methodName :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodName
-methodName x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.MethodName"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodName
-methodNameMethodName :: Typed.TypedName Syntax.MethodName
-methodNameMethodName = Typed.TypedName (Core.Name "hydra.java.syntax.MethodName")
-
--- | DSL injection for the array variant of hydra.java.syntax.MethodReference
-methodReferenceArray :: Typed.TypedTerm Syntax.MethodReference_Array -> Typed.TypedTerm Syntax.MethodReference
-methodReferenceArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodReference"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "array"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the expression variant of hydra.java.syntax.MethodReference
-methodReferenceExpression :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.MethodReference
-methodReferenceExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodReference"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.MethodReference
-methodReferenceMethodReference :: Typed.TypedName Syntax.MethodReference
-methodReferenceMethodReference = Typed.TypedName (Core.Name "hydra.java.syntax.MethodReference")
-
--- | DSL injection for the new variant of hydra.java.syntax.MethodReference
-methodReferenceNew :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm Syntax.MethodReference
-methodReferenceNew x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodReference"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "new"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the primary variant of hydra.java.syntax.MethodReference
-methodReferencePrimary :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.MethodReference
-methodReferencePrimary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodReference"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the referenceType variant of hydra.java.syntax.MethodReference
-methodReferenceReferenceType :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.MethodReference
-methodReferenceReferenceType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodReference"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "referenceType"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the super variant of hydra.java.syntax.MethodReference
-methodReferenceSuper :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Syntax.MethodReference
-methodReferenceSuper x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MethodReference"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "super"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.MethodReference_Array wrapper
-methodReference_Array :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.MethodReference_Array
-methodReference_Array x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.MethodReference_Array"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodReference_Array
-methodReference_ArrayMethodReference_Array :: Typed.TypedName Syntax.MethodReference_Array
-methodReference_ArrayMethodReference_Array = Typed.TypedName (Core.Name "hydra.java.syntax.MethodReference_Array")
-
--- | DSL constructor for hydra.java.syntax.MethodReference_Expression
-methodReference_Expression :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Expression
-methodReference_Expression name typeArguments identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.MethodReference_Expression
-methodReference_ExpressionIdentifier :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.Identifier
-methodReference_ExpressionIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodReference_Expression
-methodReference_ExpressionMethodReference_Expression :: Typed.TypedName Syntax.MethodReference_Expression
-methodReference_ExpressionMethodReference_Expression =
-    Typed.TypedName (Core.Name "hydra.java.syntax.MethodReference_Expression")
-
--- | DSL accessor for the name field of hydra.java.syntax.MethodReference_Expression
-methodReference_ExpressionName :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.ExpressionName
-methodReference_ExpressionName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_Expression
-methodReference_ExpressionTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm [Syntax.TypeArgument]
-methodReference_ExpressionTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.MethodReference_Expression
-methodReference_ExpressionWithIdentifier :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Expression
-methodReference_ExpressionWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-      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.java.syntax.MethodReference_Expression"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.java.syntax.MethodReference_Expression
-methodReference_ExpressionWithName :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.MethodReference_Expression
-methodReference_ExpressionWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_Expression
-methodReference_ExpressionWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_Expression
-methodReference_ExpressionWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-      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.java.syntax.MethodReference_Expression"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Expression"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.MethodReference_New
-methodReference_New :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_New
-methodReference_New classType typeArguments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_New"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "classType"),
-          Core.fieldTerm = (Typed.unTypedTerm classType)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)}]}))
-
--- | DSL accessor for the classType field of hydra.java.syntax.MethodReference_New
-methodReference_NewClassType :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm Syntax.ClassType
-methodReference_NewClassType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_New"),
-        Core.projectionFieldName = (Core.Name "classType")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodReference_New
-methodReference_NewMethodReference_New :: Typed.TypedName Syntax.MethodReference_New
-methodReference_NewMethodReference_New = Typed.TypedName (Core.Name "hydra.java.syntax.MethodReference_New")
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_New
-methodReference_NewTypeArguments :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm [Syntax.TypeArgument]
-methodReference_NewTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_New"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the classType field of hydra.java.syntax.MethodReference_New
-methodReference_NewWithClassType :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.MethodReference_New
-methodReference_NewWithClassType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_New"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "classType"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_New"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_New
-methodReference_NewWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_New
-methodReference_NewWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_New"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "classType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_New"),
-              Core.projectionFieldName = (Core.Name "classType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.MethodReference_Primary
-methodReference_Primary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Primary
-methodReference_Primary primary typeArguments identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "primary"),
-          Core.fieldTerm = (Typed.unTypedTerm primary)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.MethodReference_Primary
-methodReference_PrimaryIdentifier :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.Identifier
-methodReference_PrimaryIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodReference_Primary
-methodReference_PrimaryMethodReference_Primary :: Typed.TypedName Syntax.MethodReference_Primary
-methodReference_PrimaryMethodReference_Primary = Typed.TypedName (Core.Name "hydra.java.syntax.MethodReference_Primary")
-
--- | DSL accessor for the primary field of hydra.java.syntax.MethodReference_Primary
-methodReference_PrimaryPrimary :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.Primary
-methodReference_PrimaryPrimary x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-        Core.projectionFieldName = (Core.Name "primary")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_Primary
-methodReference_PrimaryTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm [Syntax.TypeArgument]
-methodReference_PrimaryTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.MethodReference_Primary
-methodReference_PrimaryWithIdentifier :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Primary
-methodReference_PrimaryWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "primary"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-              Core.projectionFieldName = (Core.Name "primary")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the primary field of hydra.java.syntax.MethodReference_Primary
-methodReference_PrimaryWithPrimary :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.MethodReference_Primary
-methodReference_PrimaryWithPrimary original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "primary"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_Primary
-methodReference_PrimaryWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_Primary
-methodReference_PrimaryWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "primary"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-              Core.projectionFieldName = (Core.Name "primary")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Primary"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.MethodReference_ReferenceType
-methodReference_ReferenceType :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_ReferenceType
-methodReference_ReferenceType referenceType typeArguments identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "referenceType"),
-          Core.fieldTerm = (Typed.unTypedTerm referenceType)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeIdentifier :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.Identifier
-methodReference_ReferenceTypeIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeMethodReference_ReferenceType :: Typed.TypedName Syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeMethodReference_ReferenceType =
-    Typed.TypedName (Core.Name "hydra.java.syntax.MethodReference_ReferenceType")
-
--- | DSL accessor for the referenceType field of hydra.java.syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeReferenceType :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.ReferenceType
-methodReference_ReferenceTypeReferenceType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-        Core.projectionFieldName = (Core.Name "referenceType")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeTypeArguments :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm [Syntax.TypeArgument]
-methodReference_ReferenceTypeTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeWithIdentifier :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "referenceType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-              Core.projectionFieldName = (Core.Name "referenceType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the referenceType field of hydra.java.syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeWithReferenceType :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeWithReferenceType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "referenceType"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_ReferenceType
-methodReference_ReferenceTypeWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "referenceType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-              Core.projectionFieldName = (Core.Name "referenceType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_ReferenceType"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.MethodReference_Super
-methodReference_Super :: Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodReference_Super
-methodReference_Super typeArguments identifier super =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "super"),
-          Core.fieldTerm = (Typed.unTypedTerm super)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.MethodReference_Super
-methodReference_SuperIdentifier :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Syntax.Identifier
-methodReference_SuperIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MethodReference_Super
-methodReference_SuperMethodReference_Super :: Typed.TypedName Syntax.MethodReference_Super
-methodReference_SuperMethodReference_Super = Typed.TypedName (Core.Name "hydra.java.syntax.MethodReference_Super")
-
--- | DSL accessor for the super field of hydra.java.syntax.MethodReference_Super
-methodReference_SuperSuper :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Bool
-methodReference_SuperSuper x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-        Core.projectionFieldName = (Core.Name "super")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_Super
-methodReference_SuperTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm [Syntax.TypeArgument]
-methodReference_SuperTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.MethodReference_Super
-methodReference_SuperWithIdentifier :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Super
-methodReference_SuperWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "super"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-              Core.projectionFieldName = (Core.Name "super")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the super field of hydra.java.syntax.MethodReference_Super
-methodReference_SuperWithSuper :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodReference_Super
-methodReference_SuperWithSuper original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "super"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_Super
-methodReference_SuperWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_Super
-methodReference_SuperWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "super"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MethodReference_Super"),
-              Core.projectionFieldName = (Core.Name "super")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.ModularCompilationUnit
-modularCompilationUnit :: Typed.TypedTerm [Syntax.ImportDeclaration] -> Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm Syntax.ModularCompilationUnit
-modularCompilationUnit imports module_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModularCompilationUnit"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Typed.unTypedTerm imports)},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Typed.unTypedTerm module_)}]}))
-
--- | DSL accessor for the imports field of hydra.java.syntax.ModularCompilationUnit
-modularCompilationUnitImports :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm [Syntax.ImportDeclaration]
-modularCompilationUnitImports x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModularCompilationUnit"),
-        Core.projectionFieldName = (Core.Name "imports")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ModularCompilationUnit
-modularCompilationUnitModularCompilationUnit :: Typed.TypedName Syntax.ModularCompilationUnit
-modularCompilationUnitModularCompilationUnit = Typed.TypedName (Core.Name "hydra.java.syntax.ModularCompilationUnit")
-
--- | DSL accessor for the module field of hydra.java.syntax.ModularCompilationUnit
-modularCompilationUnitModule :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm Syntax.ModuleDeclaration
-modularCompilationUnitModule x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModularCompilationUnit"),
-        Core.projectionFieldName = (Core.Name "module")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the imports field of hydra.java.syntax.ModularCompilationUnit
-modularCompilationUnitWithImports :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm [Syntax.ImportDeclaration] -> Typed.TypedTerm Syntax.ModularCompilationUnit
-modularCompilationUnitWithImports original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModularCompilationUnit"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModularCompilationUnit"),
-              Core.projectionFieldName = (Core.Name "module")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the module field of hydra.java.syntax.ModularCompilationUnit
-modularCompilationUnitWithModule :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm Syntax.ModularCompilationUnit
-modularCompilationUnitWithModule original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModularCompilationUnit"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModularCompilationUnit"),
-              Core.projectionFieldName = (Core.Name "imports")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.ModuleDeclaration
-moduleDeclaration :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Bool -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm [Syntax.ModuleDirective] -> Typed.TypedTerm Syntax.ModuleDeclaration
-moduleDeclaration annotations open identifiers directives =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "open"),
-          Core.fieldTerm = (Typed.unTypedTerm open)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm identifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "directives"),
-          Core.fieldTerm = (Typed.unTypedTerm directives)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.ModuleDeclaration
-moduleDeclarationAnnotations :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.Annotation]
-moduleDeclarationAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the directives field of hydra.java.syntax.ModuleDeclaration
-moduleDeclarationDirectives :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.ModuleDirective]
-moduleDeclarationDirectives x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-        Core.projectionFieldName = (Core.Name "directives")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifiers field of hydra.java.syntax.ModuleDeclaration
-moduleDeclarationIdentifiers :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.Identifier]
-moduleDeclarationIdentifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ModuleDeclaration
-moduleDeclarationModuleDeclaration :: Typed.TypedName Syntax.ModuleDeclaration
-moduleDeclarationModuleDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.ModuleDeclaration")
-
--- | DSL accessor for the open field of hydra.java.syntax.ModuleDeclaration
-moduleDeclarationOpen :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm Bool
-moduleDeclarationOpen x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-        Core.projectionFieldName = (Core.Name "open")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the annotations field of hydra.java.syntax.ModuleDeclaration
-moduleDeclarationWithAnnotations :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.ModuleDeclaration
-moduleDeclarationWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "open"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "open")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "directives"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "directives")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the directives field of hydra.java.syntax.ModuleDeclaration
-moduleDeclarationWithDirectives :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.ModuleDirective] -> Typed.TypedTerm Syntax.ModuleDeclaration
-moduleDeclarationWithDirectives original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "open"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "open")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "directives"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifiers field of hydra.java.syntax.ModuleDeclaration
-moduleDeclarationWithIdentifiers :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.ModuleDeclaration
-moduleDeclarationWithIdentifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "open"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "open")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "directives"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "directives")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the open field of hydra.java.syntax.ModuleDeclaration
-moduleDeclarationWithOpen :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ModuleDeclaration
-moduleDeclarationWithOpen original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "open"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "directives"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDeclaration"),
-              Core.projectionFieldName = (Core.Name "directives")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the exports variant of hydra.java.syntax.ModuleDirective
-moduleDirectiveExports :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm Syntax.ModuleDirective
-moduleDirectiveExports x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "exports"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ModuleDirective
-moduleDirectiveModuleDirective :: Typed.TypedName Syntax.ModuleDirective
-moduleDirectiveModuleDirective = Typed.TypedName (Core.Name "hydra.java.syntax.ModuleDirective")
-
--- | DSL injection for the opens variant of hydra.java.syntax.ModuleDirective
-moduleDirectiveOpens :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm Syntax.ModuleDirective
-moduleDirectiveOpens x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "opens"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the provides variant of hydra.java.syntax.ModuleDirective
-moduleDirectiveProvides :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm Syntax.ModuleDirective
-moduleDirectiveProvides x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "provides"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the requires variant of hydra.java.syntax.ModuleDirective
-moduleDirectiveRequires :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm Syntax.ModuleDirective
-moduleDirectiveRequires x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "requires"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the uses variant of hydra.java.syntax.ModuleDirective
-moduleDirectiveUses :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.ModuleDirective
-moduleDirectiveUses x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "uses"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpens :: Typed.TypedTerm Syntax.PackageName -> Typed.TypedTerm [Syntax.ModuleName] -> Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpens package modules =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "package"),
-          Core.fieldTerm = (Typed.unTypedTerm package)},
-        Core.Field {
-          Core.fieldName = (Core.Name "modules"),
-          Core.fieldTerm = (Typed.unTypedTerm modules)}]}))
-
--- | DSL name token for hydra.java.syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpensModuleDirective_ExportsOrOpens :: Typed.TypedName Syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpensModuleDirective_ExportsOrOpens =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens")
-
--- | DSL accessor for the modules field of hydra.java.syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpensModules :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm [Syntax.ModuleName]
-moduleDirective_ExportsOrOpensModules x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
-        Core.projectionFieldName = (Core.Name "modules")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the package field of hydra.java.syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpensPackage :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm Syntax.PackageName
-moduleDirective_ExportsOrOpensPackage x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
-        Core.projectionFieldName = (Core.Name "package")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the modules field of hydra.java.syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpensWithModules :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm [Syntax.ModuleName] -> Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpensWithModules original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "package"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
-              Core.projectionFieldName = (Core.Name "package")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "modules"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the package field of hydra.java.syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpensWithPackage :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm Syntax.PackageName -> Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens
-moduleDirective_ExportsOrOpensWithPackage original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "package"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "modules"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
-              Core.projectionFieldName = (Core.Name "modules")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.ModuleDirective_Provides
-moduleDirective_Provides :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.ModuleDirective_Provides
-moduleDirective_Provides to with =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Provides"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "to"),
-          Core.fieldTerm = (Typed.unTypedTerm to)},
-        Core.Field {
-          Core.fieldName = (Core.Name "with"),
-          Core.fieldTerm = (Typed.unTypedTerm with)}]}))
-
--- | DSL name token for hydra.java.syntax.ModuleDirective_Provides
-moduleDirective_ProvidesModuleDirective_Provides :: Typed.TypedName Syntax.ModuleDirective_Provides
-moduleDirective_ProvidesModuleDirective_Provides =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ModuleDirective_Provides")
-
--- | DSL accessor for the to field of hydra.java.syntax.ModuleDirective_Provides
-moduleDirective_ProvidesTo :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm Syntax.TypeName
-moduleDirective_ProvidesTo x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Provides"),
-        Core.projectionFieldName = (Core.Name "to")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the with field of hydra.java.syntax.ModuleDirective_Provides
-moduleDirective_ProvidesWith :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm [Syntax.TypeName]
-moduleDirective_ProvidesWith x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Provides"),
-        Core.projectionFieldName = (Core.Name "with")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the to field of hydra.java.syntax.ModuleDirective_Provides
-moduleDirective_ProvidesWithTo :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.ModuleDirective_Provides
-moduleDirective_ProvidesWithTo original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Provides"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "to"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "with"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Provides"),
-              Core.projectionFieldName = (Core.Name "with")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the with field of hydra.java.syntax.ModuleDirective_Provides
-moduleDirective_ProvidesWithWith :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.ModuleDirective_Provides
-moduleDirective_ProvidesWithWith original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Provides"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "to"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Provides"),
-              Core.projectionFieldName = (Core.Name "to")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "with"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.ModuleDirective_Requires
-moduleDirective_Requires :: Typed.TypedTerm [Syntax.RequiresModifier] -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.ModuleDirective_Requires
-moduleDirective_Requires modifiers module_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Requires"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Typed.unTypedTerm module_)}]}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.ModuleDirective_Requires
-moduleDirective_RequiresModifiers :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm [Syntax.RequiresModifier]
-moduleDirective_RequiresModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Requires"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the module field of hydra.java.syntax.ModuleDirective_Requires
-moduleDirective_RequiresModule :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm Syntax.ModuleName
-moduleDirective_RequiresModule x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Requires"),
-        Core.projectionFieldName = (Core.Name "module")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ModuleDirective_Requires
-moduleDirective_RequiresModuleDirective_Requires :: Typed.TypedName Syntax.ModuleDirective_Requires
-moduleDirective_RequiresModuleDirective_Requires =
-    Typed.TypedName (Core.Name "hydra.java.syntax.ModuleDirective_Requires")
-
--- | DSL updater for the modifiers field of hydra.java.syntax.ModuleDirective_Requires
-moduleDirective_RequiresWithModifiers :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm [Syntax.RequiresModifier] -> Typed.TypedTerm Syntax.ModuleDirective_Requires
-moduleDirective_RequiresWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Requires"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Requires"),
-              Core.projectionFieldName = (Core.Name "module")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the module field of hydra.java.syntax.ModuleDirective_Requires
-moduleDirective_RequiresWithModule :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.ModuleDirective_Requires
-moduleDirective_RequiresWithModule original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Requires"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleDirective_Requires"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.ModuleName
-moduleName :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.ModuleName) -> Typed.TypedTerm Syntax.ModuleName
-moduleName identifier name =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.ModuleName
-moduleNameIdentifier :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.Identifier
-moduleNameIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleName"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ModuleName
-moduleNameModuleName :: Typed.TypedName Syntax.ModuleName
-moduleNameModuleName = Typed.TypedName (Core.Name "hydra.java.syntax.ModuleName")
-
--- | DSL accessor for the name field of hydra.java.syntax.ModuleName
-moduleNameName :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm (Maybe Syntax.ModuleName)
-moduleNameName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleName"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.ModuleName
-moduleNameWithIdentifier :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ModuleName
-moduleNameWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleName"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the name field of hydra.java.syntax.ModuleName
-moduleNameWithName :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm (Maybe Syntax.ModuleName) -> Typed.TypedTerm Syntax.ModuleName
-moduleNameWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ModuleName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ModuleName"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the divide variant of hydra.java.syntax.MultiplicativeExpression
-multiplicativeExpressionDivide :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
-multiplicativeExpressionDivide x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "divide"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the mod variant of hydra.java.syntax.MultiplicativeExpression
-multiplicativeExpressionMod :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
-multiplicativeExpressionMod x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "mod"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.MultiplicativeExpression
-multiplicativeExpressionMultiplicativeExpression :: Typed.TypedName Syntax.MultiplicativeExpression
-multiplicativeExpressionMultiplicativeExpression =
-    Typed.TypedName (Core.Name "hydra.java.syntax.MultiplicativeExpression")
-
--- | DSL injection for the times variant of hydra.java.syntax.MultiplicativeExpression
-multiplicativeExpressionTimes :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
-multiplicativeExpressionTimes x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "times"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the unary variant of hydra.java.syntax.MultiplicativeExpression
-multiplicativeExpressionUnary :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression
-multiplicativeExpressionUnary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_Binary :: Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_Binary lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL accessor for the lhs field of hydra.java.syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_BinaryLhs :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
-multiplicativeExpression_BinaryLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_BinaryMultiplicativeExpression_Binary :: Typed.TypedName Syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_BinaryMultiplicativeExpression_Binary =
-    Typed.TypedName (Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary")
-
--- | DSL accessor for the rhs field of hydra.java.syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_BinaryRhs :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.UnaryExpression
-multiplicativeExpression_BinaryRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_BinaryWithLhs :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_BinaryWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_BinaryWithRhs :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression_Binary
-multiplicativeExpression_BinaryWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.NormalAnnotation
-normalAnnotation :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm [Syntax.ElementValuePair] -> Typed.TypedTerm Syntax.NormalAnnotation
-normalAnnotation typeName pairs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalAnnotation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeName"),
-          Core.fieldTerm = (Typed.unTypedTerm typeName)},
-        Core.Field {
-          Core.fieldName = (Core.Name "pairs"),
-          Core.fieldTerm = (Typed.unTypedTerm pairs)}]}))
-
--- | DSL name token for hydra.java.syntax.NormalAnnotation
-normalAnnotationNormalAnnotation :: Typed.TypedName Syntax.NormalAnnotation
-normalAnnotationNormalAnnotation = Typed.TypedName (Core.Name "hydra.java.syntax.NormalAnnotation")
-
--- | DSL accessor for the pairs field of hydra.java.syntax.NormalAnnotation
-normalAnnotationPairs :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm [Syntax.ElementValuePair]
-normalAnnotationPairs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalAnnotation"),
-        Core.projectionFieldName = (Core.Name "pairs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeName field of hydra.java.syntax.NormalAnnotation
-normalAnnotationTypeName :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm Syntax.TypeName
-normalAnnotationTypeName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalAnnotation"),
-        Core.projectionFieldName = (Core.Name "typeName")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the pairs field of hydra.java.syntax.NormalAnnotation
-normalAnnotationWithPairs :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm [Syntax.ElementValuePair] -> Typed.TypedTerm Syntax.NormalAnnotation
-normalAnnotationWithPairs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalAnnotation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeName"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalAnnotation"),
-              Core.projectionFieldName = (Core.Name "typeName")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "pairs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the typeName field of hydra.java.syntax.NormalAnnotation
-normalAnnotationWithTypeName :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.NormalAnnotation
-normalAnnotationWithTypeName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalAnnotation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeName"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "pairs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalAnnotation"),
-              Core.projectionFieldName = (Core.Name "pairs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.NormalClassDeclaration
-normalClassDeclaration :: Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm (Maybe Syntax.ClassType) -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm Syntax.NormalClassDeclaration
-normalClassDeclaration modifiers identifier parameters extends implements permits body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm parameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Typed.unTypedTerm extends)},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Typed.unTypedTerm implements)},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Typed.unTypedTerm permits)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationBody :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.ClassBody
-normalClassDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the extends field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationExtends :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm (Maybe Syntax.ClassType)
-normalClassDeclarationExtends x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "extends")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationIdentifier :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
-normalClassDeclarationIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the implements field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationImplements :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.InterfaceType]
-normalClassDeclarationImplements x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "implements")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationModifiers :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.ClassModifier]
-normalClassDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationNormalClassDeclaration :: Typed.TypedName Syntax.NormalClassDeclaration
-normalClassDeclarationNormalClassDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.NormalClassDeclaration")
-
--- | DSL accessor for the parameters field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationParameters :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
-normalClassDeclarationParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "parameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the permits field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationPermits :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.TypeName]
-normalClassDeclarationPermits x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "permits")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationWithBody :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm Syntax.NormalClassDeclaration
-normalClassDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the extends field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationWithExtends :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm (Maybe Syntax.ClassType) -> Typed.TypedTerm Syntax.NormalClassDeclaration
-normalClassDeclarationWithExtends original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationWithIdentifier :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.NormalClassDeclaration
-normalClassDeclarationWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the implements field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationWithImplements :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.NormalClassDeclaration
-normalClassDeclarationWithImplements original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationWithModifiers :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.NormalClassDeclaration
-normalClassDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the parameters field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationWithParameters :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.NormalClassDeclaration
-normalClassDeclarationWithParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the permits field of hydra.java.syntax.NormalClassDeclaration
-normalClassDeclarationWithPermits :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.NormalClassDeclaration
-normalClassDeclarationWithPermits original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          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.java.syntax.NormalClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclaration :: Typed.TypedTerm [Syntax.InterfaceModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.InterfaceBody -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
-normalInterfaceDeclaration modifiers identifier parameters extends permits body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm parameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Typed.unTypedTerm extends)},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Typed.unTypedTerm permits)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationBody :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceBody
-normalInterfaceDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the extends field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationExtends :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceType]
-normalInterfaceDeclarationExtends x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "extends")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationIdentifier :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
-normalInterfaceDeclarationIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationModifiers :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceModifier]
-normalInterfaceDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationNormalInterfaceDeclaration :: Typed.TypedName Syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationNormalInterfaceDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration")
-
--- | DSL accessor for the parameters field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationParameters :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
-normalInterfaceDeclarationParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "parameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the permits field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationPermits :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeName]
-normalInterfaceDeclarationPermits x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "permits")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithBody :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceBody -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the extends field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithExtends :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithExtends original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithIdentifier :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithModifiers :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceModifier] -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the parameters field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithParameters :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "permits")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the permits field of hydra.java.syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithPermits :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
-normalInterfaceDeclarationWithPermits original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "permits"),
-          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.java.syntax.NormalInterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the array variant of hydra.java.syntax.NumericTypeArray
-numericTypeArrayArray :: Typed.TypedTerm Syntax.NumericTypeArray -> Typed.TypedTerm Syntax.NumericTypeArray
-numericTypeArrayArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.NumericTypeArray"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "array"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.NumericTypeArray
-numericTypeArrayNumericTypeArray :: Typed.TypedName Syntax.NumericTypeArray
-numericTypeArrayNumericTypeArray = Typed.TypedName (Core.Name "hydra.java.syntax.NumericTypeArray")
-
--- | DSL injection for the simple variant of hydra.java.syntax.NumericTypeArray
-numericTypeArraySimple :: Typed.TypedTerm Syntax.NumericType -> Typed.TypedTerm Syntax.NumericTypeArray
-numericTypeArraySimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.NumericTypeArray"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the floatingPoint variant of hydra.java.syntax.NumericType
-numericTypeFloatingPoint :: Typed.TypedTerm Syntax.FloatingPointType -> Typed.TypedTerm Syntax.NumericType
-numericTypeFloatingPoint x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.NumericType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "floatingPoint"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the integral variant of hydra.java.syntax.NumericType
-numericTypeIntegral :: Typed.TypedTerm Syntax.IntegralType -> Typed.TypedTerm Syntax.NumericType
-numericTypeIntegral x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.NumericType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "integral"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.NumericType
-numericTypeNumericType :: Typed.TypedName Syntax.NumericType
-numericTypeNumericType = Typed.TypedName (Core.Name "hydra.java.syntax.NumericType")
-
--- | DSL constructor for hydra.java.syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnit :: Typed.TypedTerm (Maybe Syntax.PackageDeclaration) -> Typed.TypedTerm [Syntax.ImportDeclaration] -> Typed.TypedTerm [Syntax.TopLevelClassOrInterfaceDeclarationWithComments] -> Typed.TypedTerm Syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnit package imports types =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "package"),
-          Core.fieldTerm = (Typed.unTypedTerm package)},
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Typed.unTypedTerm imports)},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Typed.unTypedTerm types)}]}))
-
--- | DSL accessor for the imports field of hydra.java.syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitImports :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm [Syntax.ImportDeclaration]
-ordinaryCompilationUnitImports x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-        Core.projectionFieldName = (Core.Name "imports")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitOrdinaryCompilationUnit :: Typed.TypedName Syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitOrdinaryCompilationUnit = Typed.TypedName (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit")
-
--- | DSL accessor for the package field of hydra.java.syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitPackage :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm (Maybe Syntax.PackageDeclaration)
-ordinaryCompilationUnitPackage x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-        Core.projectionFieldName = (Core.Name "package")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the types field of hydra.java.syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitTypes :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm [Syntax.TopLevelClassOrInterfaceDeclarationWithComments]
-ordinaryCompilationUnitTypes x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-        Core.projectionFieldName = (Core.Name "types")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the imports field of hydra.java.syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitWithImports :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm [Syntax.ImportDeclaration] -> Typed.TypedTerm Syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitWithImports original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "package"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-              Core.projectionFieldName = (Core.Name "package")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-              Core.projectionFieldName = (Core.Name "types")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the package field of hydra.java.syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitWithPackage :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm (Maybe Syntax.PackageDeclaration) -> Typed.TypedTerm Syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitWithPackage original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "package"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-              Core.projectionFieldName = (Core.Name "imports")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-              Core.projectionFieldName = (Core.Name "types")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the types field of hydra.java.syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitWithTypes :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm [Syntax.TopLevelClassOrInterfaceDeclarationWithComments] -> Typed.TypedTerm Syntax.OrdinaryCompilationUnit
-ordinaryCompilationUnitWithTypes original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "package"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-              Core.projectionFieldName = (Core.Name "package")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
-              Core.projectionFieldName = (Core.Name "imports")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.PackageDeclaration
-packageDeclaration :: Typed.TypedTerm [Syntax.PackageModifier] -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.PackageDeclaration
-packageDeclaration modifiers identifiers =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.PackageDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm identifiers)}]}))
-
--- | DSL accessor for the identifiers field of hydra.java.syntax.PackageDeclaration
-packageDeclarationIdentifiers :: Typed.TypedTerm Syntax.PackageDeclaration -> Typed.TypedTerm [Syntax.Identifier]
-packageDeclarationIdentifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.PackageDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.PackageDeclaration
-packageDeclarationModifiers :: Typed.TypedTerm Syntax.PackageDeclaration -> Typed.TypedTerm [Syntax.PackageModifier]
-packageDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.PackageDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PackageDeclaration
-packageDeclarationPackageDeclaration :: Typed.TypedName Syntax.PackageDeclaration
-packageDeclarationPackageDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.PackageDeclaration")
-
--- | DSL updater for the identifiers field of hydra.java.syntax.PackageDeclaration
-packageDeclarationWithIdentifiers :: Typed.TypedTerm Syntax.PackageDeclaration -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.PackageDeclaration
-packageDeclarationWithIdentifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.PackageDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.PackageDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.PackageDeclaration
-packageDeclarationWithModifiers :: Typed.TypedTerm Syntax.PackageDeclaration -> Typed.TypedTerm [Syntax.PackageModifier] -> Typed.TypedTerm Syntax.PackageDeclaration
-packageDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.PackageDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.PackageDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.PackageModifier wrapper
-packageModifier :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.PackageModifier
-packageModifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.PackageModifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PackageModifier
-packageModifierPackageModifier :: Typed.TypedName Syntax.PackageModifier
-packageModifierPackageModifier = Typed.TypedName (Core.Name "hydra.java.syntax.PackageModifier")
-
--- | DSL constructor for the hydra.java.syntax.PackageName wrapper
-packageName :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.PackageName
-packageName x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.PackageName"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PackageName
-packageNamePackageName :: Typed.TypedName Syntax.PackageName
-packageNamePackageName = Typed.TypedName (Core.Name "hydra.java.syntax.PackageName")
-
--- | DSL constructor for the hydra.java.syntax.PackageOrTypeName wrapper
-packageOrTypeName :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.PackageOrTypeName
-packageOrTypeName x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.PackageOrTypeName"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PackageOrTypeName
-packageOrTypeNamePackageOrTypeName :: Typed.TypedName Syntax.PackageOrTypeName
-packageOrTypeNamePackageOrTypeName = Typed.TypedName (Core.Name "hydra.java.syntax.PackageOrTypeName")
-
--- | DSL name token for hydra.java.syntax.Pattern
-patternPattern :: Typed.TypedName Syntax.Pattern
-patternPattern = Typed.TypedName (Core.Name "hydra.java.syntax.Pattern")
-
--- | DSL injection for the record variant of hydra.java.syntax.Pattern
-patternRecord :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.Pattern
-patternRecord x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "record"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the type variant of hydra.java.syntax.Pattern
-patternType :: Typed.TypedTerm Syntax.TypePattern -> Typed.TypedTerm Syntax.Pattern
-patternType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "type"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.PostDecrementExpression wrapper
-postDecrementExpression :: Typed.TypedTerm Syntax.PostfixExpression -> Typed.TypedTerm Syntax.PostDecrementExpression
-postDecrementExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.PostDecrementExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PostDecrementExpression
-postDecrementExpressionPostDecrementExpression :: Typed.TypedName Syntax.PostDecrementExpression
-postDecrementExpressionPostDecrementExpression = Typed.TypedName (Core.Name "hydra.java.syntax.PostDecrementExpression")
-
--- | DSL constructor for the hydra.java.syntax.PostIncrementExpression wrapper
-postIncrementExpression :: Typed.TypedTerm Syntax.PostfixExpression -> Typed.TypedTerm Syntax.PostIncrementExpression
-postIncrementExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.PostIncrementExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PostIncrementExpression
-postIncrementExpressionPostIncrementExpression :: Typed.TypedName Syntax.PostIncrementExpression
-postIncrementExpressionPostIncrementExpression = Typed.TypedName (Core.Name "hydra.java.syntax.PostIncrementExpression")
-
--- | DSL injection for the name variant of hydra.java.syntax.PostfixExpression
-postfixExpressionName :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.PostfixExpression
-postfixExpressionName x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PostfixExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "name"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the postDecrement variant of hydra.java.syntax.PostfixExpression
-postfixExpressionPostDecrement :: Typed.TypedTerm Syntax.PostDecrementExpression -> Typed.TypedTerm Syntax.PostfixExpression
-postfixExpressionPostDecrement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PostfixExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "postDecrement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the postIncrement variant of hydra.java.syntax.PostfixExpression
-postfixExpressionPostIncrement :: Typed.TypedTerm Syntax.PostIncrementExpression -> Typed.TypedTerm Syntax.PostfixExpression
-postfixExpressionPostIncrement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PostfixExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "postIncrement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.PostfixExpression
-postfixExpressionPostfixExpression :: Typed.TypedName Syntax.PostfixExpression
-postfixExpressionPostfixExpression = Typed.TypedName (Core.Name "hydra.java.syntax.PostfixExpression")
-
--- | DSL injection for the primary variant of hydra.java.syntax.PostfixExpression
-postfixExpressionPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.PostfixExpression
-postfixExpressionPrimary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PostfixExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.PreDecrementExpression wrapper
-preDecrementExpression :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.PreDecrementExpression
-preDecrementExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.PreDecrementExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PreDecrementExpression
-preDecrementExpressionPreDecrementExpression :: Typed.TypedName Syntax.PreDecrementExpression
-preDecrementExpressionPreDecrementExpression = Typed.TypedName (Core.Name "hydra.java.syntax.PreDecrementExpression")
-
--- | DSL constructor for the hydra.java.syntax.PreIncrementExpression wrapper
-preIncrementExpression :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.PreIncrementExpression
-preIncrementExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.PreIncrementExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PreIncrementExpression
-preIncrementExpressionPreIncrementExpression :: Typed.TypedName Syntax.PreIncrementExpression
-preIncrementExpressionPreIncrementExpression = Typed.TypedName (Core.Name "hydra.java.syntax.PreIncrementExpression")
-
--- | DSL injection for the arrayCreation variant of hydra.java.syntax.Primary
-primaryArrayCreation :: Typed.TypedTerm Syntax.ArrayCreationExpression -> Typed.TypedTerm Syntax.Primary
-primaryArrayCreation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Primary"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "arrayCreation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the noNewArray variant of hydra.java.syntax.Primary
-primaryNoNewArray :: Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression -> Typed.TypedTerm Syntax.Primary
-primaryNoNewArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Primary"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "noNewArray"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the arrayAccess variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionArrayAccess :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionArrayAccess x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "arrayAccess"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the classInstance variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionClassInstance :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionClassInstance x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classInstance"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the classLiteral variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionClassLiteral :: Typed.TypedTerm Syntax.ClassLiteral -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionClassLiteral x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classLiteral"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the dotThis variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionDotThis :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionDotThis x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "dotThis"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the fieldAccess variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionFieldAccess :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionFieldAccess x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "fieldAccess"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the literal variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionLiteral x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "literal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the methodInvocation variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionMethodInvocation :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionMethodInvocation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "methodInvocation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the methodReference variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionMethodReference :: Typed.TypedTerm Syntax.MethodReference -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionMethodReference x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "methodReference"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the parens variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionParens :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionParens x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "parens"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionPrimaryNoNewArrayExpression :: Typed.TypedName Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionPrimaryNoNewArrayExpression =
-    Typed.TypedName (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression")
-
--- | DSL injection for the this variant of hydra.java.syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionThis :: Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
-primaryNoNewArrayExpressionThis =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "this"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.Primary
-primaryPrimary :: Typed.TypedName Syntax.Primary
-primaryPrimary = Typed.TypedName (Core.Name "hydra.java.syntax.Primary")
-
--- | DSL injection for the boolean variant of hydra.java.syntax.PrimitiveType
-primitiveTypeBoolean :: Typed.TypedTerm Syntax.PrimitiveType
-primitiveTypeBoolean =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimitiveType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "boolean"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the numeric variant of hydra.java.syntax.PrimitiveType
-primitiveTypeNumeric :: Typed.TypedTerm Syntax.NumericType -> Typed.TypedTerm Syntax.PrimitiveType
-primitiveTypeNumeric x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.PrimitiveType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "numeric"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.PrimitiveType
-primitiveTypePrimitiveType :: Typed.TypedName Syntax.PrimitiveType
-primitiveTypePrimitiveType = Typed.TypedName (Core.Name "hydra.java.syntax.PrimitiveType")
-
--- | DSL constructor for hydra.java.syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotations :: Typed.TypedTerm Syntax.PrimitiveType -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotations type_ annotations =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotationsAnnotations :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm [Syntax.Annotation]
-primitiveTypeWithAnnotationsAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotationsPrimitiveTypeWithAnnotations :: Typed.TypedName Syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotationsPrimitiveTypeWithAnnotations =
-    Typed.TypedName (Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations")
-
--- | DSL accessor for the type field of hydra.java.syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotationsType :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.PrimitiveType
-primitiveTypeWithAnnotationsType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the annotations field of hydra.java.syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotationsWithAnnotations :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotationsWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotationsWithType :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.PrimitiveType -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
-primitiveTypeWithAnnotationsWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.ReceiverParameter
-receiverParameter :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ReceiverParameter
-receiverParameter annotations unannType identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "unannType"),
-          Core.fieldTerm = (Typed.unTypedTerm unannType)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.ReceiverParameter
-receiverParameterAnnotations :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm [Syntax.Annotation]
-receiverParameterAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.ReceiverParameter
-receiverParameterIdentifier :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm (Maybe Syntax.Identifier)
-receiverParameterIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ReceiverParameter
-receiverParameterReceiverParameter :: Typed.TypedName Syntax.ReceiverParameter
-receiverParameterReceiverParameter = Typed.TypedName (Core.Name "hydra.java.syntax.ReceiverParameter")
-
--- | DSL accessor for the unannType field of hydra.java.syntax.ReceiverParameter
-receiverParameterUnannType :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm Syntax.UnannType
-receiverParameterUnannType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-        Core.projectionFieldName = (Core.Name "unannType")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the annotations field of hydra.java.syntax.ReceiverParameter
-receiverParameterWithAnnotations :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.ReceiverParameter
-receiverParameterWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "unannType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-              Core.projectionFieldName = (Core.Name "unannType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.ReceiverParameter
-receiverParameterWithIdentifier :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ReceiverParameter
-receiverParameterWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "unannType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-              Core.projectionFieldName = (Core.Name "unannType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the unannType field of hydra.java.syntax.ReceiverParameter
-receiverParameterWithUnannType :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.ReceiverParameter
-receiverParameterWithUnannType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "unannType"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ReceiverParameter"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.RecordBody wrapper
-recordBody :: Typed.TypedTerm [Syntax.RecordBodyDeclaration] -> Typed.TypedTerm Syntax.RecordBody
-recordBody x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.RecordBody"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL injection for the classBody variant of hydra.java.syntax.RecordBodyDeclaration
-recordBodyDeclarationClassBody :: Typed.TypedTerm Syntax.ClassBodyDeclaration -> Typed.TypedTerm Syntax.RecordBodyDeclaration
-recordBodyDeclarationClassBody x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RecordBodyDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classBody"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the compactConstructor variant of hydra.java.syntax.RecordBodyDeclaration
-recordBodyDeclarationCompactConstructor :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.RecordBodyDeclaration
-recordBodyDeclarationCompactConstructor x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RecordBodyDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "compactConstructor"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.RecordBodyDeclaration
-recordBodyDeclarationRecordBodyDeclaration :: Typed.TypedName Syntax.RecordBodyDeclaration
-recordBodyDeclarationRecordBodyDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.RecordBodyDeclaration")
-
--- | DSL name token for hydra.java.syntax.RecordBody
-recordBodyRecordBody :: Typed.TypedName Syntax.RecordBody
-recordBodyRecordBody = Typed.TypedName (Core.Name "hydra.java.syntax.RecordBody")
-
--- | DSL constructor for the hydra.java.syntax.RecordComponentModifier wrapper
-recordComponentModifier :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.RecordComponentModifier
-recordComponentModifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.RecordComponentModifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RecordComponentModifier
-recordComponentModifierRecordComponentModifier :: Typed.TypedName Syntax.RecordComponentModifier
-recordComponentModifierRecordComponentModifier = Typed.TypedName (Core.Name "hydra.java.syntax.RecordComponentModifier")
-
--- | DSL name token for hydra.java.syntax.RecordComponent
-recordComponentRecordComponent :: Typed.TypedName Syntax.RecordComponent
-recordComponentRecordComponent = Typed.TypedName (Core.Name "hydra.java.syntax.RecordComponent")
-
--- | DSL injection for the simple variant of hydra.java.syntax.RecordComponent
-recordComponentSimple :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.RecordComponent
-recordComponentSimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the variableArity variant of hydra.java.syntax.RecordComponent
-recordComponentVariableArity :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.RecordComponent
-recordComponentVariableArity x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variableArity"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.RecordComponent_Simple
-recordComponent_Simple :: Typed.TypedTerm [Syntax.RecordComponentModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.RecordComponent_Simple
-recordComponent_Simple modifiers type_ identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.RecordComponent_Simple
-recordComponent_SimpleIdentifier :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.Identifier
-recordComponent_SimpleIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.RecordComponent_Simple
-recordComponent_SimpleModifiers :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm [Syntax.RecordComponentModifier]
-recordComponent_SimpleModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RecordComponent_Simple
-recordComponent_SimpleRecordComponent_Simple :: Typed.TypedName Syntax.RecordComponent_Simple
-recordComponent_SimpleRecordComponent_Simple = Typed.TypedName (Core.Name "hydra.java.syntax.RecordComponent_Simple")
-
--- | DSL accessor for the type field of hydra.java.syntax.RecordComponent_Simple
-recordComponent_SimpleType :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.UnannType
-recordComponent_SimpleType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.RecordComponent_Simple
-recordComponent_SimpleWithIdentifier :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.RecordComponent_Simple
-recordComponent_SimpleWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.RecordComponent_Simple"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.RecordComponent_Simple
-recordComponent_SimpleWithModifiers :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm [Syntax.RecordComponentModifier] -> Typed.TypedTerm Syntax.RecordComponent_Simple
-recordComponent_SimpleWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.RecordComponent_Simple"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.RecordComponent_Simple
-recordComponent_SimpleWithType :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.RecordComponent_Simple
-recordComponent_SimpleWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordComponent_Simple"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.RecordDeclaration
-recordDeclaration :: Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.RecordHeader -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.RecordBody -> Typed.TypedTerm Syntax.RecordDeclaration
-recordDeclaration modifiers identifier parameters header implements body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm parameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Typed.unTypedTerm header)},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Typed.unTypedTerm implements)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.RecordDeclaration
-recordDeclarationBody :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.RecordBody
-recordDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the header field of hydra.java.syntax.RecordDeclaration
-recordDeclarationHeader :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.RecordHeader
-recordDeclarationHeader x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-        Core.projectionFieldName = (Core.Name "header")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.RecordDeclaration
-recordDeclarationIdentifier :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
-recordDeclarationIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the implements field of hydra.java.syntax.RecordDeclaration
-recordDeclarationImplements :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.InterfaceType]
-recordDeclarationImplements x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-        Core.projectionFieldName = (Core.Name "implements")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.RecordDeclaration
-recordDeclarationModifiers :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.ClassModifier]
-recordDeclarationModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the parameters field of hydra.java.syntax.RecordDeclaration
-recordDeclarationParameters :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
-recordDeclarationParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-        Core.projectionFieldName = (Core.Name "parameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RecordDeclaration
-recordDeclarationRecordDeclaration :: Typed.TypedName Syntax.RecordDeclaration
-recordDeclarationRecordDeclaration = Typed.TypedName (Core.Name "hydra.java.syntax.RecordDeclaration")
-
--- | DSL updater for the body field of hydra.java.syntax.RecordDeclaration
-recordDeclarationWithBody :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.RecordBody -> Typed.TypedTerm Syntax.RecordDeclaration
-recordDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the header field of hydra.java.syntax.RecordDeclaration
-recordDeclarationWithHeader :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.RecordHeader -> Typed.TypedTerm Syntax.RecordDeclaration
-recordDeclarationWithHeader original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.RecordDeclaration
-recordDeclarationWithIdentifier :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.RecordDeclaration
-recordDeclarationWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the implements field of hydra.java.syntax.RecordDeclaration
-recordDeclarationWithImplements :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.RecordDeclaration
-recordDeclarationWithImplements original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.RecordDeclaration
-recordDeclarationWithModifiers :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.RecordDeclaration
-recordDeclarationWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the parameters field of hydra.java.syntax.RecordDeclaration
-recordDeclarationWithParameters :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.RecordDeclaration
-recordDeclarationWithParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "header"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "header")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "implements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "implements")})),
-            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.java.syntax.RecordDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.RecordHeader wrapper
-recordHeader :: Typed.TypedTerm [Syntax.RecordComponent] -> Typed.TypedTerm Syntax.RecordHeader
-recordHeader x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.RecordHeader"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RecordHeader
-recordHeaderRecordHeader :: Typed.TypedName Syntax.RecordHeader
-recordHeaderRecordHeader = Typed.TypedName (Core.Name "hydra.java.syntax.RecordHeader")
-
--- | DSL constructor for hydra.java.syntax.RecordPattern
-recordPattern :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.RecordPattern
-recordPattern type_ patterns =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "patterns"),
-          Core.fieldTerm = (Typed.unTypedTerm patterns)}]}))
-
--- | DSL accessor for the patterns field of hydra.java.syntax.RecordPattern
-recordPatternPatterns :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm [Syntax.Pattern]
-recordPatternPatterns x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordPattern"),
-        Core.projectionFieldName = (Core.Name "patterns")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RecordPattern
-recordPatternRecordPattern :: Typed.TypedName Syntax.RecordPattern
-recordPatternRecordPattern = Typed.TypedName (Core.Name "hydra.java.syntax.RecordPattern")
-
--- | DSL accessor for the type field of hydra.java.syntax.RecordPattern
-recordPatternType :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.ReferenceType
-recordPatternType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordPattern"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the patterns field of hydra.java.syntax.RecordPattern
-recordPatternWithPatterns :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.RecordPattern
-recordPatternWithPatterns original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordPattern"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "patterns"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.RecordPattern
-recordPatternWithType :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.RecordPattern
-recordPatternWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RecordPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "patterns"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RecordPattern"),
-              Core.projectionFieldName = (Core.Name "patterns")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the array variant of hydra.java.syntax.ReferenceType
-referenceTypeArray :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.ReferenceType
-referenceTypeArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ReferenceType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "array"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the classOrInterface variant of hydra.java.syntax.ReferenceType
-referenceTypeClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ReferenceType
-referenceTypeClassOrInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ReferenceType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classOrInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.ReferenceType
-referenceTypeReferenceType :: Typed.TypedName Syntax.ReferenceType
-referenceTypeReferenceType = Typed.TypedName (Core.Name "hydra.java.syntax.ReferenceType")
-
--- | DSL injection for the variable variant of hydra.java.syntax.ReferenceType
-referenceTypeVariable :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.ReferenceType
-referenceTypeVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ReferenceType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the greaterThan variant of hydra.java.syntax.RelationalExpression
-relationalExpressionGreaterThan :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpressionGreaterThan x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "greaterThan"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the greaterThanEqual variant of hydra.java.syntax.RelationalExpression
-relationalExpressionGreaterThanEqual :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpressionGreaterThanEqual x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "greaterThanEqual"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the instanceofExpression variant of hydra.java.syntax.RelationalExpression
-relationalExpressionInstanceofExpression :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpressionInstanceofExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "instanceofExpression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the lessThan variant of hydra.java.syntax.RelationalExpression
-relationalExpressionLessThan :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpressionLessThan x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "lessThan"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the lessThanEqual variant of hydra.java.syntax.RelationalExpression
-relationalExpressionLessThanEqual :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpressionLessThanEqual x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "lessThanEqual"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.RelationalExpression
-relationalExpressionRelationalExpression :: Typed.TypedName Syntax.RelationalExpression
-relationalExpressionRelationalExpression = Typed.TypedName (Core.Name "hydra.java.syntax.RelationalExpression")
-
--- | DSL injection for the simple variant of hydra.java.syntax.RelationalExpression
-relationalExpressionSimple :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpressionSimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThan :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThan lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL constructor for hydra.java.syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqual :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqual lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL accessor for the lhs field of hydra.java.syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqualLhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpression_GreaterThanEqualLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqualRelationalExpression_GreaterThanEqual :: Typed.TypedName Syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqualRelationalExpression_GreaterThanEqual =
-    Typed.TypedName (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual")
-
--- | DSL accessor for the rhs field of hydra.java.syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqualRhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.ShiftExpression
-relationalExpression_GreaterThanEqualRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqualWithLhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqualWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqualWithRhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual
-relationalExpression_GreaterThanEqualWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL accessor for the lhs field of hydra.java.syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThanLhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpression_GreaterThanLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThanRelationalExpression_GreaterThan :: Typed.TypedName Syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThanRelationalExpression_GreaterThan =
-    Typed.TypedName (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan")
-
--- | DSL accessor for the rhs field of hydra.java.syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThanRhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.ShiftExpression
-relationalExpression_GreaterThanRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThanWithLhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThanWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThanWithRhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThan
-relationalExpression_GreaterThanWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.RelationalExpression_LessThan
-relationalExpression_LessThan :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThan
-relationalExpression_LessThan lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThan"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL constructor for hydra.java.syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqual :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqual lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL accessor for the lhs field of hydra.java.syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqualLhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpression_LessThanEqualLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqualRelationalExpression_LessThanEqual :: Typed.TypedName Syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqualRelationalExpression_LessThanEqual =
-    Typed.TypedName (Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual")
-
--- | DSL accessor for the rhs field of hydra.java.syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqualRhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.ShiftExpression
-relationalExpression_LessThanEqualRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqualWithLhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqualWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqualWithRhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual
-relationalExpression_LessThanEqualWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL accessor for the lhs field of hydra.java.syntax.RelationalExpression_LessThan
-relationalExpression_LessThanLhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.RelationalExpression
-relationalExpression_LessThanLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThan"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.RelationalExpression_LessThan
-relationalExpression_LessThanRelationalExpression_LessThan :: Typed.TypedName Syntax.RelationalExpression_LessThan
-relationalExpression_LessThanRelationalExpression_LessThan =
-    Typed.TypedName (Core.Name "hydra.java.syntax.RelationalExpression_LessThan")
-
--- | DSL accessor for the rhs field of hydra.java.syntax.RelationalExpression_LessThan
-relationalExpression_LessThanRhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.ShiftExpression
-relationalExpression_LessThanRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThan"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.java.syntax.RelationalExpression_LessThan
-relationalExpression_LessThanWithLhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThan
-relationalExpression_LessThanWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThan"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThan"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.RelationalExpression_LessThan
-relationalExpression_LessThanWithRhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThan
-relationalExpression_LessThanWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThan"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.RelationalExpression_LessThan"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.RequiresModifier
-requiresModifierRequiresModifier :: Typed.TypedName Syntax.RequiresModifier
-requiresModifierRequiresModifier = Typed.TypedName (Core.Name "hydra.java.syntax.RequiresModifier")
-
--- | DSL injection for the static variant of hydra.java.syntax.RequiresModifier
-requiresModifierStatic :: Typed.TypedTerm Syntax.RequiresModifier
-requiresModifierStatic =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RequiresModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "static"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the transitive variant of hydra.java.syntax.RequiresModifier
-requiresModifierTransitive :: Typed.TypedTerm Syntax.RequiresModifier
-requiresModifierTransitive =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.RequiresModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "transitive"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the local variant of hydra.java.syntax.Resource
-resourceLocal :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Resource
-resourceLocal x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Resource"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "local"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.Resource
-resourceResource :: Typed.TypedName Syntax.Resource
-resourceResource = Typed.TypedName (Core.Name "hydra.java.syntax.Resource")
-
--- | DSL constructor for the hydra.java.syntax.ResourceSpecification wrapper
-resourceSpecification :: Typed.TypedTerm [Syntax.Resource] -> Typed.TypedTerm Syntax.ResourceSpecification
-resourceSpecification x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ResourceSpecification"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ResourceSpecification
-resourceSpecificationResourceSpecification :: Typed.TypedName Syntax.ResourceSpecification
-resourceSpecificationResourceSpecification = Typed.TypedName (Core.Name "hydra.java.syntax.ResourceSpecification")
-
--- | DSL injection for the variable variant of hydra.java.syntax.Resource
-resourceVariable :: Typed.TypedTerm Syntax.VariableAccess -> Typed.TypedTerm Syntax.Resource
-resourceVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Resource"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.Resource_Local
-resource_Local :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LocalVariableType -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Resource_Local
-resource_Local modifiers type_ identifier expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL accessor for the expression field of hydra.java.syntax.Resource_Local
-resource_LocalExpression :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Expression
-resource_LocalExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.Resource_Local
-resource_LocalIdentifier :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Identifier
-resource_LocalIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.Resource_Local
-resource_LocalModifiers :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm [Syntax.VariableModifier]
-resource_LocalModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.Resource_Local
-resource_LocalResource_Local :: Typed.TypedName Syntax.Resource_Local
-resource_LocalResource_Local = Typed.TypedName (Core.Name "hydra.java.syntax.Resource_Local")
-
--- | DSL accessor for the type field of hydra.java.syntax.Resource_Local
-resource_LocalType :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.LocalVariableType
-resource_LocalType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the expression field of hydra.java.syntax.Resource_Local
-resource_LocalWithExpression :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Resource_Local
-resource_LocalWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.Resource_Local
-resource_LocalWithIdentifier :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Resource_Local
-resource_LocalWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.Resource_Local
-resource_LocalWithModifiers :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.Resource_Local
-resource_LocalWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.Resource_Local
-resource_LocalWithType :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.LocalVariableType -> Typed.TypedTerm Syntax.Resource_Local
-resource_LocalWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Resource_Local"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.Result
-resultResult :: Typed.TypedName Syntax.Result
-resultResult = Typed.TypedName (Core.Name "hydra.java.syntax.Result")
-
--- | DSL injection for the type variant of hydra.java.syntax.Result
-resultType :: Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.Result
-resultType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Result"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "type"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the void variant of hydra.java.syntax.Result
-resultVoid :: Typed.TypedTerm Syntax.Result
-resultVoid =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Result"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "void"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for the hydra.java.syntax.ReturnStatement wrapper
-returnStatement :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ReturnStatement
-returnStatement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.ReturnStatement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ReturnStatement
-returnStatementReturnStatement :: Typed.TypedName Syntax.ReturnStatement
-returnStatementReturnStatement = Typed.TypedName (Core.Name "hydra.java.syntax.ReturnStatement")
-
--- | DSL name token for hydra.java.syntax.ShiftExpression
-shiftExpressionShiftExpression :: Typed.TypedName Syntax.ShiftExpression
-shiftExpressionShiftExpression = Typed.TypedName (Core.Name "hydra.java.syntax.ShiftExpression")
-
--- | DSL injection for the shiftLeft variant of hydra.java.syntax.ShiftExpression
-shiftExpressionShiftLeft :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression
-shiftExpressionShiftLeft x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ShiftExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "shiftLeft"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the shiftRight variant of hydra.java.syntax.ShiftExpression
-shiftExpressionShiftRight :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression
-shiftExpressionShiftRight x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ShiftExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "shiftRight"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the shiftRightZeroFill variant of hydra.java.syntax.ShiftExpression
-shiftExpressionShiftRightZeroFill :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression
-shiftExpressionShiftRightZeroFill x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ShiftExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "shiftRightZeroFill"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the unary variant of hydra.java.syntax.ShiftExpression
-shiftExpressionUnary :: Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.ShiftExpression
-shiftExpressionUnary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.ShiftExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.ShiftExpression_Binary
-shiftExpression_Binary :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.ShiftExpression_Binary
-shiftExpression_Binary lhs rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ShiftExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL accessor for the lhs field of hydra.java.syntax.ShiftExpression_Binary
-shiftExpression_BinaryLhs :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression
-shiftExpression_BinaryLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ShiftExpression_Binary"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the rhs field of hydra.java.syntax.ShiftExpression_Binary
-shiftExpression_BinaryRhs :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression
-shiftExpression_BinaryRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.ShiftExpression_Binary"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ShiftExpression_Binary
-shiftExpression_BinaryShiftExpression_Binary :: Typed.TypedName Syntax.ShiftExpression_Binary
-shiftExpression_BinaryShiftExpression_Binary = Typed.TypedName (Core.Name "hydra.java.syntax.ShiftExpression_Binary")
-
--- | DSL updater for the lhs field of hydra.java.syntax.ShiftExpression_Binary
-shiftExpression_BinaryWithLhs :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.ShiftExpression_Binary
-shiftExpression_BinaryWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ShiftExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ShiftExpression_Binary"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.java.syntax.ShiftExpression_Binary
-shiftExpression_BinaryWithRhs :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.ShiftExpression_Binary
-shiftExpression_BinaryWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.ShiftExpression_Binary"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.ShiftExpression_Binary"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for the hydra.java.syntax.SimpleTypeName wrapper
-simpleTypeName :: Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.SimpleTypeName
-simpleTypeName x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.SimpleTypeName"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SimpleTypeName
-simpleTypeNameSimpleTypeName :: Typed.TypedName Syntax.SimpleTypeName
-simpleTypeNameSimpleTypeName = Typed.TypedName (Core.Name "hydra.java.syntax.SimpleTypeName")
-
--- | DSL constructor for hydra.java.syntax.SingleElementAnnotation
-singleElementAnnotation :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm (Maybe Syntax.ElementValue) -> Typed.TypedTerm Syntax.SingleElementAnnotation
-singleElementAnnotation name value =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SingleElementAnnotation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm value)}]}))
-
--- | DSL accessor for the name field of hydra.java.syntax.SingleElementAnnotation
-singleElementAnnotationName :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm Syntax.TypeName
-singleElementAnnotationName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SingleElementAnnotation"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SingleElementAnnotation
-singleElementAnnotationSingleElementAnnotation :: Typed.TypedName Syntax.SingleElementAnnotation
-singleElementAnnotationSingleElementAnnotation = Typed.TypedName (Core.Name "hydra.java.syntax.SingleElementAnnotation")
-
--- | DSL accessor for the value field of hydra.java.syntax.SingleElementAnnotation
-singleElementAnnotationValue :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm (Maybe Syntax.ElementValue)
-singleElementAnnotationValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SingleElementAnnotation"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the name field of hydra.java.syntax.SingleElementAnnotation
-singleElementAnnotationWithName :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.SingleElementAnnotation
-singleElementAnnotationWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SingleElementAnnotation"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          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.java.syntax.SingleElementAnnotation"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the value field of hydra.java.syntax.SingleElementAnnotation
-singleElementAnnotationWithValue :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm (Maybe Syntax.ElementValue) -> Typed.TypedTerm Syntax.SingleElementAnnotation
-singleElementAnnotationWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SingleElementAnnotation"),
-      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.java.syntax.SingleElementAnnotation"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.SingleStaticImportDeclaration
-singleStaticImportDeclaration :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.SingleStaticImportDeclaration
-singleStaticImportDeclaration typeName identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeName"),
-          Core.fieldTerm = (Typed.unTypedTerm typeName)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.SingleStaticImportDeclaration
-singleStaticImportDeclarationIdentifier :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.Identifier
-singleStaticImportDeclarationIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SingleStaticImportDeclaration
-singleStaticImportDeclarationSingleStaticImportDeclaration :: Typed.TypedName Syntax.SingleStaticImportDeclaration
-singleStaticImportDeclarationSingleStaticImportDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.SingleStaticImportDeclaration")
-
--- | DSL accessor for the typeName field of hydra.java.syntax.SingleStaticImportDeclaration
-singleStaticImportDeclarationTypeName :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.TypeName
-singleStaticImportDeclarationTypeName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
-        Core.projectionFieldName = (Core.Name "typeName")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.SingleStaticImportDeclaration
-singleStaticImportDeclarationWithIdentifier :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.SingleStaticImportDeclaration
-singleStaticImportDeclarationWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeName"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
-              Core.projectionFieldName = (Core.Name "typeName")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the typeName field of hydra.java.syntax.SingleStaticImportDeclaration
-singleStaticImportDeclarationWithTypeName :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.SingleStaticImportDeclaration
-singleStaticImportDeclarationWithTypeName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeName"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.SingleTypeImportDeclaration wrapper
-singleTypeImportDeclaration :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.SingleTypeImportDeclaration
-singleTypeImportDeclaration x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.SingleTypeImportDeclaration"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SingleTypeImportDeclaration
-singleTypeImportDeclarationSingleTypeImportDeclaration :: Typed.TypedName Syntax.SingleTypeImportDeclaration
-singleTypeImportDeclarationSingleTypeImportDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.SingleTypeImportDeclaration")
-
--- | DSL injection for the assignment variant of hydra.java.syntax.StatementExpression
-statementExpressionAssignment :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.StatementExpression
-statementExpressionAssignment x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "assignment"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the classInstanceCreation variant of hydra.java.syntax.StatementExpression
-statementExpressionClassInstanceCreation :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm Syntax.StatementExpression
-statementExpressionClassInstanceCreation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classInstanceCreation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the methodInvocation variant of hydra.java.syntax.StatementExpression
-statementExpressionMethodInvocation :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm Syntax.StatementExpression
-statementExpressionMethodInvocation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "methodInvocation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the postDecrement variant of hydra.java.syntax.StatementExpression
-statementExpressionPostDecrement :: Typed.TypedTerm Syntax.PostDecrementExpression -> Typed.TypedTerm Syntax.StatementExpression
-statementExpressionPostDecrement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "postDecrement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the postIncrement variant of hydra.java.syntax.StatementExpression
-statementExpressionPostIncrement :: Typed.TypedTerm Syntax.PostIncrementExpression -> Typed.TypedTerm Syntax.StatementExpression
-statementExpressionPostIncrement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "postIncrement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the preDecrement variant of hydra.java.syntax.StatementExpression
-statementExpressionPreDecrement :: Typed.TypedTerm Syntax.PreDecrementExpression -> Typed.TypedTerm Syntax.StatementExpression
-statementExpressionPreDecrement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "preDecrement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the preIncrement variant of hydra.java.syntax.StatementExpression
-statementExpressionPreIncrement :: Typed.TypedTerm Syntax.PreIncrementExpression -> Typed.TypedTerm Syntax.StatementExpression
-statementExpressionPreIncrement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "preIncrement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.StatementExpression
-statementExpressionStatementExpression :: Typed.TypedName Syntax.StatementExpression
-statementExpressionStatementExpression = Typed.TypedName (Core.Name "hydra.java.syntax.StatementExpression")
-
--- | DSL injection for the for variant of hydra.java.syntax.Statement
-statementFor :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Statement
-statementFor x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "for"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the ifThen variant of hydra.java.syntax.Statement
-statementIfThen :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Statement
-statementIfThen x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "ifThen"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the ifThenElse variant of hydra.java.syntax.Statement
-statementIfThenElse :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.Statement
-statementIfThenElse x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "ifThenElse"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the labeled variant of hydra.java.syntax.Statement
-statementLabeled :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement
-statementLabeled x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "labeled"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the for variant of hydra.java.syntax.StatementNoShortIf
-statementNoShortIfFor :: Typed.TypedTerm Syntax.ForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-statementNoShortIfFor x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementNoShortIf"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "for"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the ifThenElse variant of hydra.java.syntax.StatementNoShortIf
-statementNoShortIfIfThenElse :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-statementNoShortIfIfThenElse x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementNoShortIf"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "ifThenElse"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the labeled variant of hydra.java.syntax.StatementNoShortIf
-statementNoShortIfLabeled :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-statementNoShortIfLabeled x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementNoShortIf"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "labeled"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.StatementNoShortIf
-statementNoShortIfStatementNoShortIf :: Typed.TypedName Syntax.StatementNoShortIf
-statementNoShortIfStatementNoShortIf = Typed.TypedName (Core.Name "hydra.java.syntax.StatementNoShortIf")
-
--- | DSL injection for the while variant of hydra.java.syntax.StatementNoShortIf
-statementNoShortIfWhile :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-statementNoShortIfWhile x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementNoShortIf"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "while"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the withoutTrailing variant of hydra.java.syntax.StatementNoShortIf
-statementNoShortIfWithoutTrailing :: Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement -> Typed.TypedTerm Syntax.StatementNoShortIf
-statementNoShortIfWithoutTrailing x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementNoShortIf"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "withoutTrailing"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.Statement
-statementStatement :: Typed.TypedName Syntax.Statement
-statementStatement = Typed.TypedName (Core.Name "hydra.java.syntax.Statement")
-
--- | DSL injection for the while variant of hydra.java.syntax.Statement
-statementWhile :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Statement
-statementWhile x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "while"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the withoutTrailing variant of hydra.java.syntax.Statement
-statementWithoutTrailing :: Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement -> Typed.TypedTerm Syntax.Statement
-statementWithoutTrailing x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "withoutTrailing"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the assert variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementAssert :: Typed.TypedTerm Syntax.AssertStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementAssert x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "assert"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the block variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementBlock x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "block"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the break variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementBreak :: Typed.TypedTerm Syntax.BreakStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementBreak x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "break"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the continue variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementContinue :: Typed.TypedTerm Syntax.ContinueStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementContinue x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "continue"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the do variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementDo :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementDo x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "do"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the empty variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementEmpty :: Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementEmpty =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "empty"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the expression variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementExpression :: Typed.TypedTerm Syntax.ExpressionStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the return variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementReturn :: Typed.TypedTerm Syntax.ReturnStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementReturn x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "return"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementStatementWithoutTrailingSubstatement :: Typed.TypedName Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementStatementWithoutTrailingSubstatement =
-    Typed.TypedName (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement")
-
--- | DSL injection for the switch variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementSwitch :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementSwitch x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "switch"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the synchronized variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementSynchronized :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementSynchronized x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "synchronized"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the throw variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementThrow :: Typed.TypedTerm Syntax.ThrowStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementThrow x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "throw"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the try variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementTry :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementTry x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "try"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the yield variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementYield :: Typed.TypedTerm Syntax.YieldStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
-statementWithoutTrailingSubstatementYield x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "yield"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.java.syntax.StaticImportOnDemandDeclaration wrapper
-staticImportOnDemandDeclaration :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.StaticImportOnDemandDeclaration
-staticImportOnDemandDeclaration x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.StaticImportOnDemandDeclaration"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.StaticImportOnDemandDeclaration
-staticImportOnDemandDeclarationStaticImportOnDemandDeclaration :: Typed.TypedName Syntax.StaticImportOnDemandDeclaration
-staticImportOnDemandDeclarationStaticImportOnDemandDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.StaticImportOnDemandDeclaration")
-
--- | DSL constructor for the hydra.java.syntax.StaticInitializer wrapper
-staticInitializer :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.StaticInitializer
-staticInitializer x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.StaticInitializer"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.StaticInitializer
-staticInitializerStaticInitializer :: Typed.TypedName Syntax.StaticInitializer
-staticInitializerStaticInitializer = Typed.TypedName (Core.Name "hydra.java.syntax.StaticInitializer")
-
--- | DSL constructor for the hydra.java.syntax.StringLiteral wrapper
-stringLiteral :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.StringLiteral
-stringLiteral x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.StringLiteral"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.StringLiteral
-stringLiteralStringLiteral :: Typed.TypedName Syntax.StringLiteral
-stringLiteralStringLiteral = Typed.TypedName (Core.Name "hydra.java.syntax.StringLiteral")
-
--- | DSL injection for the legacy variant of hydra.java.syntax.SwitchBlock
-switchBlockLegacy :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm Syntax.SwitchBlock
-switchBlockLegacy x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlock"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "legacy"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the rules variant of hydra.java.syntax.SwitchBlock
-switchBlockRules :: Typed.TypedTerm [Syntax.SwitchRule] -> Typed.TypedTerm Syntax.SwitchBlock
-switchBlockRules x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlock"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "rules"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.SwitchBlockStatementGroup
-switchBlockStatementGroup :: Typed.TypedTerm [Syntax.SwitchLabel] -> Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.SwitchBlockStatementGroup
-switchBlockStatementGroup labels statements =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "labels"),
-          Core.fieldTerm = (Typed.unTypedTerm labels)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statements"),
-          Core.fieldTerm = (Typed.unTypedTerm statements)}]}))
-
--- | DSL accessor for the labels field of hydra.java.syntax.SwitchBlockStatementGroup
-switchBlockStatementGroupLabels :: Typed.TypedTerm Syntax.SwitchBlockStatementGroup -> Typed.TypedTerm [Syntax.SwitchLabel]
-switchBlockStatementGroupLabels x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
-        Core.projectionFieldName = (Core.Name "labels")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the statements field of hydra.java.syntax.SwitchBlockStatementGroup
-switchBlockStatementGroupStatements :: Typed.TypedTerm Syntax.SwitchBlockStatementGroup -> Typed.TypedTerm [Syntax.BlockStatement]
-switchBlockStatementGroupStatements x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
-        Core.projectionFieldName = (Core.Name "statements")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SwitchBlockStatementGroup
-switchBlockStatementGroupSwitchBlockStatementGroup :: Typed.TypedName Syntax.SwitchBlockStatementGroup
-switchBlockStatementGroupSwitchBlockStatementGroup =
-    Typed.TypedName (Core.Name "hydra.java.syntax.SwitchBlockStatementGroup")
-
--- | DSL updater for the labels field of hydra.java.syntax.SwitchBlockStatementGroup
-switchBlockStatementGroupWithLabels :: Typed.TypedTerm Syntax.SwitchBlockStatementGroup -> Typed.TypedTerm [Syntax.SwitchLabel] -> Typed.TypedTerm Syntax.SwitchBlockStatementGroup
-switchBlockStatementGroupWithLabels original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "labels"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "statements"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
-              Core.projectionFieldName = (Core.Name "statements")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the statements field of hydra.java.syntax.SwitchBlockStatementGroup
-switchBlockStatementGroupWithStatements :: Typed.TypedTerm Syntax.SwitchBlockStatementGroup -> Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.SwitchBlockStatementGroup
-switchBlockStatementGroupWithStatements original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "labels"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
-              Core.projectionFieldName = (Core.Name "labels")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "statements"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL name token for hydra.java.syntax.SwitchBlock
-switchBlockSwitchBlock :: Typed.TypedName Syntax.SwitchBlock
-switchBlockSwitchBlock = Typed.TypedName (Core.Name "hydra.java.syntax.SwitchBlock")
-
--- | DSL constructor for hydra.java.syntax.SwitchBlock_Legacy
-switchBlock_Legacy :: Typed.TypedTerm [Syntax.SwitchBlockStatementGroup] -> Typed.TypedTerm [Syntax.SwitchLabel] -> Typed.TypedTerm Syntax.SwitchBlock_Legacy
-switchBlock_Legacy groups trailingLabels =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchBlock_Legacy"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "groups"),
-          Core.fieldTerm = (Typed.unTypedTerm groups)},
-        Core.Field {
-          Core.fieldName = (Core.Name "trailingLabels"),
-          Core.fieldTerm = (Typed.unTypedTerm trailingLabels)}]}))
-
--- | DSL accessor for the groups field of hydra.java.syntax.SwitchBlock_Legacy
-switchBlock_LegacyGroups :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm [Syntax.SwitchBlockStatementGroup]
-switchBlock_LegacyGroups x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlock_Legacy"),
-        Core.projectionFieldName = (Core.Name "groups")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SwitchBlock_Legacy
-switchBlock_LegacySwitchBlock_Legacy :: Typed.TypedName Syntax.SwitchBlock_Legacy
-switchBlock_LegacySwitchBlock_Legacy = Typed.TypedName (Core.Name "hydra.java.syntax.SwitchBlock_Legacy")
-
--- | DSL accessor for the trailingLabels field of hydra.java.syntax.SwitchBlock_Legacy
-switchBlock_LegacyTrailingLabels :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm [Syntax.SwitchLabel]
-switchBlock_LegacyTrailingLabels x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlock_Legacy"),
-        Core.projectionFieldName = (Core.Name "trailingLabels")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the groups field of hydra.java.syntax.SwitchBlock_Legacy
-switchBlock_LegacyWithGroups :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm [Syntax.SwitchBlockStatementGroup] -> Typed.TypedTerm Syntax.SwitchBlock_Legacy
-switchBlock_LegacyWithGroups original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchBlock_Legacy"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "groups"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "trailingLabels"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlock_Legacy"),
-              Core.projectionFieldName = (Core.Name "trailingLabels")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the trailingLabels field of hydra.java.syntax.SwitchBlock_Legacy
-switchBlock_LegacyWithTrailingLabels :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm [Syntax.SwitchLabel] -> Typed.TypedTerm Syntax.SwitchBlock_Legacy
-switchBlock_LegacyWithTrailingLabels original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchBlock_Legacy"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "groups"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchBlock_Legacy"),
-              Core.projectionFieldName = (Core.Name "groups")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "trailingLabels"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.SwitchExpression
-switchExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchBlock -> Typed.TypedTerm Syntax.SwitchExpression
-switchExpression cond block =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm block)}]}))
-
--- | DSL accessor for the block field of hydra.java.syntax.SwitchExpression
-switchExpressionBlock :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.SwitchBlock
-switchExpressionBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchExpression"),
-        Core.projectionFieldName = (Core.Name "block")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.SwitchExpression
-switchExpressionCond :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.Expression
-switchExpressionCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchExpression"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SwitchExpression
-switchExpressionSwitchExpression :: Typed.TypedName Syntax.SwitchExpression
-switchExpressionSwitchExpression = Typed.TypedName (Core.Name "hydra.java.syntax.SwitchExpression")
-
--- | DSL updater for the block field of hydra.java.syntax.SwitchExpression
-switchExpressionWithBlock :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.SwitchBlock -> Typed.TypedTerm Syntax.SwitchExpression
-switchExpressionWithBlock original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchExpression"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.SwitchExpression
-switchExpressionWithCond :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchExpression
-switchExpressionWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchExpression"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the case variant of hydra.java.syntax.SwitchLabel
-switchLabelCase :: Typed.TypedTerm [Syntax.CaseConstant] -> Typed.TypedTerm Syntax.SwitchLabel
-switchLabelCase x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchLabel"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "case"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the casePattern variant of hydra.java.syntax.SwitchLabel
-switchLabelCasePattern :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm Syntax.SwitchLabel
-switchLabelCasePattern x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchLabel"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "casePattern"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the default variant of hydra.java.syntax.SwitchLabel
-switchLabelDefault :: Typed.TypedTerm Syntax.SwitchLabel
-switchLabelDefault =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchLabel"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "default"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the null variant of hydra.java.syntax.SwitchLabel
-switchLabelNull :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.SwitchLabel
-switchLabelNull x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchLabel"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "null"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.SwitchLabel
-switchLabelSwitchLabel :: Typed.TypedName Syntax.SwitchLabel
-switchLabelSwitchLabel = Typed.TypedName (Core.Name "hydra.java.syntax.SwitchLabel")
-
--- | DSL constructor for hydra.java.syntax.SwitchRule
-switchRule :: Typed.TypedTerm Syntax.SwitchLabel -> Typed.TypedTerm Syntax.SwitchRule_Body -> Typed.TypedTerm Syntax.SwitchRule
-switchRule label body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchRule"),
-      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.java.syntax.SwitchRule
-switchRuleBody :: Typed.TypedTerm Syntax.SwitchRule -> Typed.TypedTerm Syntax.SwitchRule_Body
-switchRuleBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchRule"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the label field of hydra.java.syntax.SwitchRule
-switchRuleLabel :: Typed.TypedTerm Syntax.SwitchRule -> Typed.TypedTerm Syntax.SwitchLabel
-switchRuleLabel x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchRule"),
-        Core.projectionFieldName = (Core.Name "label")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SwitchRule
-switchRuleSwitchRule :: Typed.TypedName Syntax.SwitchRule
-switchRuleSwitchRule = Typed.TypedName (Core.Name "hydra.java.syntax.SwitchRule")
-
--- | DSL updater for the body field of hydra.java.syntax.SwitchRule
-switchRuleWithBody :: Typed.TypedTerm Syntax.SwitchRule -> Typed.TypedTerm Syntax.SwitchRule_Body -> Typed.TypedTerm Syntax.SwitchRule
-switchRuleWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchRule"),
-      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.java.syntax.SwitchRule"),
-              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.java.syntax.SwitchRule
-switchRuleWithLabel :: Typed.TypedTerm Syntax.SwitchRule -> Typed.TypedTerm Syntax.SwitchLabel -> Typed.TypedTerm Syntax.SwitchRule
-switchRuleWithLabel original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchRule"),
-      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.java.syntax.SwitchRule"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the block variant of hydra.java.syntax.SwitchRule_Body
-switchRule_BodyBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.SwitchRule_Body
-switchRule_BodyBlock x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchRule_Body"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "block"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the expression variant of hydra.java.syntax.SwitchRule_Body
-switchRule_BodyExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchRule_Body
-switchRule_BodyExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchRule_Body"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.SwitchRule_Body
-switchRule_BodySwitchRule_Body :: Typed.TypedName Syntax.SwitchRule_Body
-switchRule_BodySwitchRule_Body = Typed.TypedName (Core.Name "hydra.java.syntax.SwitchRule_Body")
-
--- | DSL injection for the throw variant of hydra.java.syntax.SwitchRule_Body
-switchRule_BodyThrow :: Typed.TypedTerm Syntax.ThrowStatement -> Typed.TypedTerm Syntax.SwitchRule_Body
-switchRule_BodyThrow x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.SwitchRule_Body"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "throw"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.SwitchStatement
-switchStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchBlock -> Typed.TypedTerm Syntax.SwitchStatement
-switchStatement cond block =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm block)}]}))
-
--- | DSL accessor for the block field of hydra.java.syntax.SwitchStatement
-switchStatementBlock :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.SwitchBlock
-switchStatementBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchStatement"),
-        Core.projectionFieldName = (Core.Name "block")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.SwitchStatement
-switchStatementCond :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Expression
-switchStatementCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchStatement"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SwitchStatement
-switchStatementSwitchStatement :: Typed.TypedName Syntax.SwitchStatement
-switchStatementSwitchStatement = Typed.TypedName (Core.Name "hydra.java.syntax.SwitchStatement")
-
--- | DSL updater for the block field of hydra.java.syntax.SwitchStatement
-switchStatementWithBlock :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.SwitchBlock -> Typed.TypedTerm Syntax.SwitchStatement
-switchStatementWithBlock original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchStatement"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.SwitchStatement
-switchStatementWithCond :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchStatement
-switchStatementWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SwitchStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SwitchStatement"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.SynchronizedStatement
-synchronizedStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.SynchronizedStatement
-synchronizedStatement expression block =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SynchronizedStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm block)}]}))
-
--- | DSL accessor for the block field of hydra.java.syntax.SynchronizedStatement
-synchronizedStatementBlock :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.Block
-synchronizedStatementBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SynchronizedStatement"),
-        Core.projectionFieldName = (Core.Name "block")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the expression field of hydra.java.syntax.SynchronizedStatement
-synchronizedStatementExpression :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.Expression
-synchronizedStatementExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.SynchronizedStatement"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.SynchronizedStatement
-synchronizedStatementSynchronizedStatement :: Typed.TypedName Syntax.SynchronizedStatement
-synchronizedStatementSynchronizedStatement = Typed.TypedName (Core.Name "hydra.java.syntax.SynchronizedStatement")
-
--- | DSL updater for the block field of hydra.java.syntax.SynchronizedStatement
-synchronizedStatementWithBlock :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.SynchronizedStatement
-synchronizedStatementWithBlock original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SynchronizedStatement"),
-      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.java.syntax.SynchronizedStatement"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the expression field of hydra.java.syntax.SynchronizedStatement
-synchronizedStatementWithExpression :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SynchronizedStatement
-synchronizedStatementWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.SynchronizedStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.SynchronizedStatement"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.TextBlock wrapper
-textBlock :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.TextBlock
-textBlock x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.TextBlock"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TextBlock
-textBlockTextBlock :: Typed.TypedName Syntax.TextBlock
-textBlockTextBlock = Typed.TypedName (Core.Name "hydra.java.syntax.TextBlock")
-
--- | DSL constructor for the hydra.java.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.java.syntax.ThrowStatement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.ThrowStatement
-throwStatementThrowStatement :: Typed.TypedName Syntax.ThrowStatement
-throwStatementThrowStatement = Typed.TypedName (Core.Name "hydra.java.syntax.ThrowStatement")
-
--- | DSL constructor for the hydra.java.syntax.Throws wrapper
-throws :: Typed.TypedTerm [Syntax.ExceptionType] -> Typed.TypedTerm Syntax.Throws
-throws x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.Throws"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.Throws
-throwsThrows :: Typed.TypedName Syntax.Throws
-throwsThrows = Typed.TypedName (Core.Name "hydra.java.syntax.Throws")
-
--- | DSL injection for the class variant of hydra.java.syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationClass x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "class"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the interface variant of hydra.java.syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "interface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the none variant of hydra.java.syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationNone :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationNone =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "none"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationTopLevelClassOrInterfaceDeclaration :: Typed.TypedName Syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationTopLevelClassOrInterfaceDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration")
-
--- | DSL constructor for hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithComments :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithComments value comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm value)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments -> Typed.TypedTerm (Maybe String)
-topLevelClassOrInterfaceDeclarationWithCommentsComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithCommentsTopLevelClassOrInterfaceDeclarationWithComments :: Typed.TypedName Syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithCommentsTopLevelClassOrInterfaceDeclarationWithComments =
-    Typed.TypedName (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments")
-
--- | DSL accessor for the value field of hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithCommentsValue :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration
-topLevelClassOrInterfaceDeclarationWithCommentsValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the comments field of hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithCommentsWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
-      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.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the value field of hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithCommentsWithValue :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments
-topLevelClassOrInterfaceDeclarationWithCommentsWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          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.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the simple variant of hydra.java.syntax.TryStatement
-tryStatementSimple :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.TryStatement
-tryStatementSimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TryStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.TryStatement
-tryStatementTryStatement :: Typed.TypedName Syntax.TryStatement
-tryStatementTryStatement = Typed.TypedName (Core.Name "hydra.java.syntax.TryStatement")
-
--- | DSL injection for the withFinally variant of hydra.java.syntax.TryStatement
-tryStatementWithFinally :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.TryStatement
-tryStatementWithFinally x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TryStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "withFinally"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the withResources variant of hydra.java.syntax.TryStatement
-tryStatementWithResources :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.TryStatement
-tryStatementWithResources x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TryStatement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "withResources"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.TryStatement_Simple
-tryStatement_Simple :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.Catches -> Typed.TypedTerm Syntax.TryStatement_Simple
-tryStatement_Simple block catches =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryStatement_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm block)},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Typed.unTypedTerm catches)}]}))
-
--- | DSL accessor for the block field of hydra.java.syntax.TryStatement_Simple
-tryStatement_SimpleBlock :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.Block
-tryStatement_SimpleBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_Simple"),
-        Core.projectionFieldName = (Core.Name "block")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the catches field of hydra.java.syntax.TryStatement_Simple
-tryStatement_SimpleCatches :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.Catches
-tryStatement_SimpleCatches x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_Simple"),
-        Core.projectionFieldName = (Core.Name "catches")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TryStatement_Simple
-tryStatement_SimpleTryStatement_Simple :: Typed.TypedName Syntax.TryStatement_Simple
-tryStatement_SimpleTryStatement_Simple = Typed.TypedName (Core.Name "hydra.java.syntax.TryStatement_Simple")
-
--- | DSL updater for the block field of hydra.java.syntax.TryStatement_Simple
-tryStatement_SimpleWithBlock :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryStatement_Simple
-tryStatement_SimpleWithBlock original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryStatement_Simple"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_Simple"),
-              Core.projectionFieldName = (Core.Name "catches")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the catches field of hydra.java.syntax.TryStatement_Simple
-tryStatement_SimpleWithCatches :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.Catches -> Typed.TypedTerm Syntax.TryStatement_Simple
-tryStatement_SimpleWithCatches original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryStatement_Simple"),
-      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.java.syntax.TryStatement_Simple"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.TryStatement_WithFinally
-tryStatement_WithFinally :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm (Maybe Syntax.Catches) -> Typed.TypedTerm Syntax.Finally -> Typed.TypedTerm Syntax.TryStatement_WithFinally
-tryStatement_WithFinally block catches finally =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm block)},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Typed.unTypedTerm catches)},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Typed.unTypedTerm finally)}]}))
-
--- | DSL accessor for the block field of hydra.java.syntax.TryStatement_WithFinally
-tryStatement_WithFinallyBlock :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.Block
-tryStatement_WithFinallyBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-        Core.projectionFieldName = (Core.Name "block")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the catches field of hydra.java.syntax.TryStatement_WithFinally
-tryStatement_WithFinallyCatches :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm (Maybe Syntax.Catches)
-tryStatement_WithFinallyCatches x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-        Core.projectionFieldName = (Core.Name "catches")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the finally field of hydra.java.syntax.TryStatement_WithFinally
-tryStatement_WithFinallyFinally :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.Finally
-tryStatement_WithFinallyFinally x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-        Core.projectionFieldName = (Core.Name "finally")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TryStatement_WithFinally
-tryStatement_WithFinallyTryStatement_WithFinally :: Typed.TypedName Syntax.TryStatement_WithFinally
-tryStatement_WithFinallyTryStatement_WithFinally =
-    Typed.TypedName (Core.Name "hydra.java.syntax.TryStatement_WithFinally")
-
--- | DSL updater for the block field of hydra.java.syntax.TryStatement_WithFinally
-tryStatement_WithFinallyWithBlock :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryStatement_WithFinally
-tryStatement_WithFinallyWithBlock original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-              Core.projectionFieldName = (Core.Name "catches")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-              Core.projectionFieldName = (Core.Name "finally")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the catches field of hydra.java.syntax.TryStatement_WithFinally
-tryStatement_WithFinallyWithCatches :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm (Maybe Syntax.Catches) -> Typed.TypedTerm Syntax.TryStatement_WithFinally
-tryStatement_WithFinallyWithCatches original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-      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.java.syntax.TryStatement_WithFinally"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-              Core.projectionFieldName = (Core.Name "finally")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the finally field of hydra.java.syntax.TryStatement_WithFinally
-tryStatement_WithFinallyWithFinally :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.Finally -> Typed.TypedTerm Syntax.TryStatement_WithFinally
-tryStatement_WithFinallyWithFinally original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-      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.java.syntax.TryStatement_WithFinally"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryStatement_WithFinally"),
-              Core.projectionFieldName = (Core.Name "catches")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatement :: Typed.TypedTerm Syntax.ResourceSpecification -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm (Maybe Syntax.Catches) -> Typed.TypedTerm (Maybe Syntax.Finally) -> Typed.TypedTerm Syntax.TryWithResourcesStatement
-tryWithResourcesStatement resourceSpecification block catches finally =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "resourceSpecification"),
-          Core.fieldTerm = (Typed.unTypedTerm resourceSpecification)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm block)},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Typed.unTypedTerm catches)},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Typed.unTypedTerm finally)}]}))
-
--- | DSL accessor for the block field of hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementBlock :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.Block
-tryWithResourcesStatementBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-        Core.projectionFieldName = (Core.Name "block")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the catches field of hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementCatches :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm (Maybe Syntax.Catches)
-tryWithResourcesStatementCatches x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-        Core.projectionFieldName = (Core.Name "catches")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the finally field of hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementFinally :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm (Maybe Syntax.Finally)
-tryWithResourcesStatementFinally x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-        Core.projectionFieldName = (Core.Name "finally")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the resourceSpecification field of hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementResourceSpecification :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.ResourceSpecification
-tryWithResourcesStatementResourceSpecification x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-        Core.projectionFieldName = (Core.Name "resourceSpecification")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementTryWithResourcesStatement :: Typed.TypedName Syntax.TryWithResourcesStatement
-tryWithResourcesStatementTryWithResourcesStatement =
-    Typed.TypedName (Core.Name "hydra.java.syntax.TryWithResourcesStatement")
-
--- | DSL updater for the block field of hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementWithBlock :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryWithResourcesStatement
-tryWithResourcesStatementWithBlock original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "resourceSpecification"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "resourceSpecification")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "catches")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "finally")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the catches field of hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementWithCatches :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm (Maybe Syntax.Catches) -> Typed.TypedTerm Syntax.TryWithResourcesStatement
-tryWithResourcesStatementWithCatches original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "resourceSpecification"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "resourceSpecification")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "finally")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the finally field of hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementWithFinally :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm (Maybe Syntax.Finally) -> Typed.TypedTerm Syntax.TryWithResourcesStatement
-tryWithResourcesStatementWithFinally original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "resourceSpecification"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "resourceSpecification")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "catches")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the resourceSpecification field of hydra.java.syntax.TryWithResourcesStatement
-tryWithResourcesStatementWithResourceSpecification :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.ResourceSpecification -> Typed.TypedTerm Syntax.TryWithResourcesStatement
-tryWithResourcesStatementWithResourceSpecification original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "resourceSpecification"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "catches"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "catches")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "finally"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TryWithResourcesStatement"),
-              Core.projectionFieldName = (Core.Name "finally")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the reference variant of hydra.java.syntax.TypeArgument
-typeArgumentReference :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.TypeArgument
-typeArgumentReference x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TypeArgument"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "reference"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.TypeArgument
-typeArgumentTypeArgument :: Typed.TypedName Syntax.TypeArgument
-typeArgumentTypeArgument = Typed.TypedName (Core.Name "hydra.java.syntax.TypeArgument")
-
--- | DSL injection for the wildcard variant of hydra.java.syntax.TypeArgument
-typeArgumentWildcard :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm Syntax.TypeArgument
-typeArgumentWildcard x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TypeArgument"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "wildcard"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the arguments variant of hydra.java.syntax.TypeArgumentsOrDiamond
-typeArgumentsOrDiamondArguments :: Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.TypeArgumentsOrDiamond
-typeArgumentsOrDiamondArguments x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TypeArgumentsOrDiamond"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "arguments"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the diamond variant of hydra.java.syntax.TypeArgumentsOrDiamond
-typeArgumentsOrDiamondDiamond :: Typed.TypedTerm Syntax.TypeArgumentsOrDiamond
-typeArgumentsOrDiamondDiamond =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TypeArgumentsOrDiamond"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "diamond"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.TypeArgumentsOrDiamond
-typeArgumentsOrDiamondTypeArgumentsOrDiamond :: Typed.TypedName Syntax.TypeArgumentsOrDiamond
-typeArgumentsOrDiamondTypeArgumentsOrDiamond = Typed.TypedName (Core.Name "hydra.java.syntax.TypeArgumentsOrDiamond")
-
--- | DSL injection for the classOrInterface variant of hydra.java.syntax.TypeBound
-typeBoundClassOrInterface :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm Syntax.TypeBound
-typeBoundClassOrInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TypeBound"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classOrInterface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.TypeBound
-typeBoundTypeBound :: Typed.TypedName Syntax.TypeBound
-typeBoundTypeBound = Typed.TypedName (Core.Name "hydra.java.syntax.TypeBound")
-
--- | DSL injection for the variable variant of hydra.java.syntax.TypeBound
-typeBoundVariable :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.TypeBound
-typeBoundVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TypeBound"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.java.syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm [Syntax.AdditionalBound] -> Typed.TypedTerm Syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterface type_ additional =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "additional"),
-          Core.fieldTerm = (Typed.unTypedTerm additional)}]}))
-
--- | DSL accessor for the additional field of hydra.java.syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterfaceAdditional :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm [Syntax.AdditionalBound]
-typeBound_ClassOrInterfaceAdditional x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
-        Core.projectionFieldName = (Core.Name "additional")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterfaceType :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType
-typeBound_ClassOrInterfaceType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterfaceTypeBound_ClassOrInterface :: Typed.TypedName Syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterfaceTypeBound_ClassOrInterface =
-    Typed.TypedName (Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface")
-
--- | DSL updater for the additional field of hydra.java.syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterfaceWithAdditional :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm [Syntax.AdditionalBound] -> Typed.TypedTerm Syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterfaceWithAdditional original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "additional"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterfaceWithType :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.TypeBound_ClassOrInterface
-typeBound_ClassOrInterfaceWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "additional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
-              Core.projectionFieldName = (Core.Name "additional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.TypeIdentifier wrapper
-typeIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeIdentifier
-typeIdentifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.TypeIdentifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TypeIdentifier
-typeIdentifierTypeIdentifier :: Typed.TypedName Syntax.TypeIdentifier
-typeIdentifierTypeIdentifier = Typed.TypedName (Core.Name "hydra.java.syntax.TypeIdentifier")
-
--- | DSL constructor for the hydra.java.syntax.TypeImportOnDemandDeclaration wrapper
-typeImportOnDemandDeclaration :: Typed.TypedTerm Syntax.PackageOrTypeName -> Typed.TypedTerm Syntax.TypeImportOnDemandDeclaration
-typeImportOnDemandDeclaration x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.TypeImportOnDemandDeclaration"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TypeImportOnDemandDeclaration
-typeImportOnDemandDeclarationTypeImportOnDemandDeclaration :: Typed.TypedName Syntax.TypeImportOnDemandDeclaration
-typeImportOnDemandDeclarationTypeImportOnDemandDeclaration =
-    Typed.TypedName (Core.Name "hydra.java.syntax.TypeImportOnDemandDeclaration")
-
--- | DSL constructor for hydra.java.syntax.TypeName
-typeName :: Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm (Maybe Syntax.PackageOrTypeName) -> Typed.TypedTerm Syntax.TypeName
-typeName identifier qualifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm qualifier)}]}))
-
--- | DSL injection for the array variant of hydra.java.syntax.TypeNameArray
-typeNameArrayArray :: Typed.TypedTerm Syntax.TypeNameArray -> Typed.TypedTerm Syntax.TypeNameArray
-typeNameArrayArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TypeNameArray"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "array"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the simple variant of hydra.java.syntax.TypeNameArray
-typeNameArraySimple :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.TypeNameArray
-typeNameArraySimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.TypeNameArray"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.TypeNameArray
-typeNameArrayTypeNameArray :: Typed.TypedName Syntax.TypeNameArray
-typeNameArrayTypeNameArray = Typed.TypedName (Core.Name "hydra.java.syntax.TypeNameArray")
-
--- | DSL accessor for the identifier field of hydra.java.syntax.TypeName
-typeNameIdentifier :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.TypeIdentifier
-typeNameIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeName"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the qualifier field of hydra.java.syntax.TypeName
-typeNameQualifier :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm (Maybe Syntax.PackageOrTypeName)
-typeNameQualifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeName"),
-        Core.projectionFieldName = (Core.Name "qualifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TypeName
-typeNameTypeName :: Typed.TypedName Syntax.TypeName
-typeNameTypeName = Typed.TypedName (Core.Name "hydra.java.syntax.TypeName")
-
--- | DSL updater for the identifier field of hydra.java.syntax.TypeName
-typeNameWithIdentifier :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.TypeName
-typeNameWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeName"),
-              Core.projectionFieldName = (Core.Name "qualifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the qualifier field of hydra.java.syntax.TypeName
-typeNameWithQualifier :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm (Maybe Syntax.PackageOrTypeName) -> Typed.TypedTerm Syntax.TypeName
-typeNameWithQualifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeName"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.java.syntax.TypeParameter
-typeParameter :: Typed.TypedTerm [Syntax.TypeParameterModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm (Maybe Syntax.TypeBound) -> Typed.TypedTerm Syntax.TypeParameter
-typeParameter modifiers identifier bound =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "bound"),
-          Core.fieldTerm = (Typed.unTypedTerm bound)}]}))
-
--- | DSL accessor for the bound field of hydra.java.syntax.TypeParameter
-typeParameterBound :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeBound)
-typeParameterBound x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-        Core.projectionFieldName = (Core.Name "bound")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.TypeParameter
-typeParameterIdentifier :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm Syntax.TypeIdentifier
-typeParameterIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for the hydra.java.syntax.TypeParameterModifier wrapper
-typeParameterModifier :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.TypeParameterModifier
-typeParameterModifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.TypeParameterModifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TypeParameterModifier
-typeParameterModifierTypeParameterModifier :: Typed.TypedName Syntax.TypeParameterModifier
-typeParameterModifierTypeParameterModifier = Typed.TypedName (Core.Name "hydra.java.syntax.TypeParameterModifier")
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.TypeParameter
-typeParameterModifiers :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm [Syntax.TypeParameterModifier]
-typeParameterModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TypeParameter
-typeParameterTypeParameter :: Typed.TypedName Syntax.TypeParameter
-typeParameterTypeParameter = Typed.TypedName (Core.Name "hydra.java.syntax.TypeParameter")
-
--- | DSL updater for the bound field of hydra.java.syntax.TypeParameter
-typeParameterWithBound :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeBound) -> Typed.TypedTerm Syntax.TypeParameter
-typeParameterWithBound original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "bound"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.TypeParameter
-typeParameterWithIdentifier :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.TypeParameter
-typeParameterWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "bound"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "bound")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.TypeParameter
-typeParameterWithModifiers :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm [Syntax.TypeParameterModifier] -> Typed.TypedTerm Syntax.TypeParameter
-typeParameterWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "bound"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "bound")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.java.syntax.TypePattern wrapper
-typePattern :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.TypePattern
-typePattern x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.TypePattern"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TypePattern
-typePatternTypePattern :: Typed.TypedName Syntax.TypePattern
-typePatternTypePattern = Typed.TypedName (Core.Name "hydra.java.syntax.TypePattern")
-
--- | DSL injection for the primitive variant of hydra.java.syntax.Type
-typePrimitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.Type
-typePrimitive x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "primitive"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the reference variant of hydra.java.syntax.Type
-typeReference :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.Type
-typeReference x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "reference"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.Type
-typeType :: Typed.TypedName Syntax.Type
-typeType = Typed.TypedName (Core.Name "hydra.java.syntax.Type")
-
--- | DSL constructor for hydra.java.syntax.TypeVariable
-typeVariable :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.TypeVariable
-typeVariable annotations identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeVariable"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.TypeVariable
-typeVariableAnnotations :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm [Syntax.Annotation]
-typeVariableAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeVariable"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.TypeVariable
-typeVariableIdentifier :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.TypeIdentifier
-typeVariableIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeVariable"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.TypeVariable
-typeVariableTypeVariable :: Typed.TypedName Syntax.TypeVariable
-typeVariableTypeVariable = Typed.TypedName (Core.Name "hydra.java.syntax.TypeVariable")
-
--- | DSL updater for the annotations field of hydra.java.syntax.TypeVariable
-typeVariableWithAnnotations :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.TypeVariable
-typeVariableWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeVariable"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeVariable"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.TypeVariable
-typeVariableWithIdentifier :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.TypeVariable
-typeVariableWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.TypeVariable"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.TypeVariable"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL accessor for the body of hydra.java.syntax.AdditionalBound
-unAdditionalBound :: Typed.TypedTerm Syntax.AdditionalBound -> Typed.TypedTerm Syntax.InterfaceType
-unAdditionalBound x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.AdditionalBound")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.AmbiguousName
-unAmbiguousName :: Typed.TypedTerm Syntax.AmbiguousName -> Typed.TypedTerm [Syntax.Identifier]
-unAmbiguousName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.AmbiguousName")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.AndExpression
-unAndExpression :: Typed.TypedTerm Syntax.AndExpression -> Typed.TypedTerm [Syntax.EqualityExpression]
-unAndExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.AndExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.AnnotationInterfaceBody
-unAnnotationInterfaceBody :: Typed.TypedTerm Syntax.AnnotationInterfaceBody -> Typed.TypedTerm [Syntax.AnnotationInterfaceMemberDeclaration]
-unAnnotationInterfaceBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.AnnotationInterfaceBody")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ArrayInitializer
-unArrayInitializer :: Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm [[Syntax.VariableInitializer]]
-unArrayInitializer x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ArrayInitializer")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.Block
-unBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm [Syntax.BlockStatement]
-unBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.Block")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.BreakStatement
-unBreakStatement :: Typed.TypedTerm Syntax.BreakStatement -> Typed.TypedTerm (Maybe Syntax.Identifier)
-unBreakStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.BreakStatement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.CaseConstant
-unCaseConstant :: Typed.TypedTerm Syntax.CaseConstant -> Typed.TypedTerm Syntax.ConditionalExpression
-unCaseConstant x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.CaseConstant")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.Catches
-unCatches :: Typed.TypedTerm Syntax.Catches -> Typed.TypedTerm [Syntax.CatchClause]
-unCatches x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.Catches")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ClassBody
-unClassBody :: Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm [Syntax.ClassBodyDeclarationWithComments]
-unClassBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ClassBody")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ConditionalAndExpression
-unConditionalAndExpression :: Typed.TypedTerm Syntax.ConditionalAndExpression -> Typed.TypedTerm [Syntax.InclusiveOrExpression]
-unConditionalAndExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ConditionalAndExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ConditionalOrExpression
-unConditionalOrExpression :: Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm [Syntax.ConditionalAndExpression]
-unConditionalOrExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ConditionalOrExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ConstantExpression
-unConstantExpression :: Typed.TypedTerm Syntax.ConstantExpression -> Typed.TypedTerm Syntax.Expression
-unConstantExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ConstantExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ContinueStatement
-unContinueStatement :: Typed.TypedTerm Syntax.ContinueStatement -> Typed.TypedTerm (Maybe Syntax.Identifier)
-unContinueStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ContinueStatement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.DefaultValue
-unDefaultValue :: Typed.TypedTerm Syntax.DefaultValue -> Typed.TypedTerm Syntax.ElementValue
-unDefaultValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.DefaultValue")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.Dims
-unDims :: Typed.TypedTerm Syntax.Dims -> Typed.TypedTerm [[Syntax.Annotation]]
-unDims x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.Dims")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ElementValueArrayInitializer
-unElementValueArrayInitializer :: Typed.TypedTerm Syntax.ElementValueArrayInitializer -> Typed.TypedTerm [Syntax.ElementValue]
-unElementValueArrayInitializer x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ElementValueArrayInitializer")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.EnumBody
-unEnumBody :: Typed.TypedTerm Syntax.EnumBody -> Typed.TypedTerm [Syntax.EnumBody_Element]
-unEnumBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.EnumBody")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.EnumConstantModifier
-unEnumConstantModifier :: Typed.TypedTerm Syntax.EnumConstantModifier -> Typed.TypedTerm Syntax.Annotation
-unEnumConstantModifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.EnumConstantModifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ExclusiveOrExpression
-unExclusiveOrExpression :: Typed.TypedTerm Syntax.ExclusiveOrExpression -> Typed.TypedTerm [Syntax.AndExpression]
-unExclusiveOrExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ExclusiveOrExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ExpressionStatement
-unExpressionStatement :: Typed.TypedTerm Syntax.ExpressionStatement -> Typed.TypedTerm Syntax.StatementExpression
-unExpressionStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ExpressionStatement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.Finally
-unFinally :: Typed.TypedTerm Syntax.Finally -> Typed.TypedTerm Syntax.Block
-unFinally x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.Finally")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.FloatingPointLiteral
-unFloatingPointLiteral :: Typed.TypedTerm Syntax.FloatingPointLiteral -> Typed.TypedTerm Double
-unFloatingPointLiteral x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.FloatingPointLiteral")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ForUpdate
-unForUpdate :: Typed.TypedTerm Syntax.ForUpdate -> Typed.TypedTerm [Syntax.StatementExpression]
-unForUpdate x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ForUpdate")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.Guard
-unGuard :: Typed.TypedTerm Syntax.Guard -> Typed.TypedTerm Syntax.Expression
-unGuard x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.Guard")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.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.java.syntax.Identifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.InclusiveOrExpression
-unInclusiveOrExpression :: Typed.TypedTerm Syntax.InclusiveOrExpression -> Typed.TypedTerm [Syntax.ExclusiveOrExpression]
-unInclusiveOrExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.InclusiveOrExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.InstanceInitializer
-unInstanceInitializer :: Typed.TypedTerm Syntax.InstanceInitializer -> Typed.TypedTerm Syntax.Block
-unInstanceInitializer x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.InstanceInitializer")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.IntegerLiteral
-unIntegerLiteral :: Typed.TypedTerm Syntax.IntegerLiteral -> Typed.TypedTerm Integer
-unIntegerLiteral x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.IntegerLiteral")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.InterfaceBody
-unInterfaceBody :: Typed.TypedTerm Syntax.InterfaceBody -> Typed.TypedTerm [Syntax.InterfaceMemberDeclarationWithComments]
-unInterfaceBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.InterfaceBody")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.InterfaceType
-unInterfaceType :: Typed.TypedTerm Syntax.InterfaceType -> Typed.TypedTerm Syntax.ClassType
-unInterfaceType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.InterfaceType")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.LocalVariableDeclarationStatement
-unLocalVariableDeclarationStatement :: Typed.TypedTerm Syntax.LocalVariableDeclarationStatement -> Typed.TypedTerm Syntax.LocalVariableDeclaration
-unLocalVariableDeclarationStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.LocalVariableDeclarationStatement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.MarkerAnnotation
-unMarkerAnnotation :: Typed.TypedTerm Syntax.MarkerAnnotation -> Typed.TypedTerm Syntax.TypeName
-unMarkerAnnotation x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.MarkerAnnotation")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.MethodName
-unMethodName :: Typed.TypedTerm Syntax.MethodName -> Typed.TypedTerm Syntax.Identifier
-unMethodName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.MethodName")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.MethodReference_Array
-unMethodReference_Array :: Typed.TypedTerm Syntax.MethodReference_Array -> Typed.TypedTerm Syntax.ArrayType
-unMethodReference_Array x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.MethodReference_Array")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.PackageModifier
-unPackageModifier :: Typed.TypedTerm Syntax.PackageModifier -> Typed.TypedTerm Syntax.Annotation
-unPackageModifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.PackageModifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.PackageName
-unPackageName :: Typed.TypedTerm Syntax.PackageName -> Typed.TypedTerm [Syntax.Identifier]
-unPackageName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.PackageName")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.PackageOrTypeName
-unPackageOrTypeName :: Typed.TypedTerm Syntax.PackageOrTypeName -> Typed.TypedTerm [Syntax.Identifier]
-unPackageOrTypeName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.PackageOrTypeName")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.PostDecrementExpression
-unPostDecrementExpression :: Typed.TypedTerm Syntax.PostDecrementExpression -> Typed.TypedTerm Syntax.PostfixExpression
-unPostDecrementExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.PostDecrementExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.PostIncrementExpression
-unPostIncrementExpression :: Typed.TypedTerm Syntax.PostIncrementExpression -> Typed.TypedTerm Syntax.PostfixExpression
-unPostIncrementExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.PostIncrementExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.PreDecrementExpression
-unPreDecrementExpression :: Typed.TypedTerm Syntax.PreDecrementExpression -> Typed.TypedTerm Syntax.UnaryExpression
-unPreDecrementExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.PreDecrementExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.PreIncrementExpression
-unPreIncrementExpression :: Typed.TypedTerm Syntax.PreIncrementExpression -> Typed.TypedTerm Syntax.UnaryExpression
-unPreIncrementExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.PreIncrementExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.RecordBody
-unRecordBody :: Typed.TypedTerm Syntax.RecordBody -> Typed.TypedTerm [Syntax.RecordBodyDeclaration]
-unRecordBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.RecordBody")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.RecordComponentModifier
-unRecordComponentModifier :: Typed.TypedTerm Syntax.RecordComponentModifier -> Typed.TypedTerm Syntax.Annotation
-unRecordComponentModifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.RecordComponentModifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.RecordHeader
-unRecordHeader :: Typed.TypedTerm Syntax.RecordHeader -> Typed.TypedTerm [Syntax.RecordComponent]
-unRecordHeader x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.RecordHeader")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ResourceSpecification
-unResourceSpecification :: Typed.TypedTerm Syntax.ResourceSpecification -> Typed.TypedTerm [Syntax.Resource]
-unResourceSpecification x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ResourceSpecification")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.ReturnStatement
-unReturnStatement :: Typed.TypedTerm Syntax.ReturnStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
-unReturnStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.ReturnStatement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.SimpleTypeName
-unSimpleTypeName :: Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm Syntax.TypeIdentifier
-unSimpleTypeName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.SimpleTypeName")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.SingleTypeImportDeclaration
-unSingleTypeImportDeclaration :: Typed.TypedTerm Syntax.SingleTypeImportDeclaration -> Typed.TypedTerm Syntax.TypeName
-unSingleTypeImportDeclaration x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.SingleTypeImportDeclaration")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.StaticImportOnDemandDeclaration
-unStaticImportOnDemandDeclaration :: Typed.TypedTerm Syntax.StaticImportOnDemandDeclaration -> Typed.TypedTerm Syntax.TypeName
-unStaticImportOnDemandDeclaration x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.StaticImportOnDemandDeclaration")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.StaticInitializer
-unStaticInitializer :: Typed.TypedTerm Syntax.StaticInitializer -> Typed.TypedTerm Syntax.Block
-unStaticInitializer x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.StaticInitializer")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.StringLiteral
-unStringLiteral :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm String
-unStringLiteral x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.StringLiteral")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.TextBlock
-unTextBlock :: Typed.TypedTerm Syntax.TextBlock -> Typed.TypedTerm String
-unTextBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.TextBlock")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.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.java.syntax.ThrowStatement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.Throws
-unThrows :: Typed.TypedTerm Syntax.Throws -> Typed.TypedTerm [Syntax.ExceptionType]
-unThrows x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.Throws")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.TypeIdentifier
-unTypeIdentifier :: Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.Identifier
-unTypeIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.TypeIdentifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.TypeImportOnDemandDeclaration
-unTypeImportOnDemandDeclaration :: Typed.TypedTerm Syntax.TypeImportOnDemandDeclaration -> Typed.TypedTerm Syntax.PackageOrTypeName
-unTypeImportOnDemandDeclaration x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.TypeImportOnDemandDeclaration")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.TypeParameterModifier
-unTypeParameterModifier :: Typed.TypedTerm Syntax.TypeParameterModifier -> Typed.TypedTerm Syntax.Annotation
-unTypeParameterModifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.TypeParameterModifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.TypePattern
-unTypePattern :: Typed.TypedTerm Syntax.TypePattern -> Typed.TypedTerm Syntax.LocalVariableDeclaration
-unTypePattern x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.TypePattern")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.UnannClassType
-unUnannClassType :: Typed.TypedTerm Syntax.UnannClassType -> Typed.TypedTerm Syntax.ClassType
-unUnannClassType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.UnannClassType")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.UnannType
-unUnannType :: Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.Type
-unUnannType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.UnannType")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.java.syntax.YieldStatement
-unYieldStatement :: Typed.TypedTerm Syntax.YieldStatement -> Typed.TypedTerm Syntax.Expression
-unYieldStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.java.syntax.YieldStatement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for the hydra.java.syntax.UnannClassType wrapper
-unannClassType :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.UnannClassType
-unannClassType x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.UnannClassType"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.UnannClassType
-unannClassTypeUnannClassType :: Typed.TypedName Syntax.UnannClassType
-unannClassTypeUnannClassType = Typed.TypedName (Core.Name "hydra.java.syntax.UnannClassType")
-
--- | DSL constructor for the hydra.java.syntax.UnannType wrapper
-unannType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.UnannType
-unannType x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.UnannType"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.UnannType
-unannTypeUnannType :: Typed.TypedName Syntax.UnannType
-unannTypeUnannType = Typed.TypedName (Core.Name "hydra.java.syntax.UnannType")
-
--- | DSL injection for the minus variant of hydra.java.syntax.UnaryExpression
-unaryExpressionMinus :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpressionMinus x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "minus"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the cast variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusCast :: Typed.TypedTerm Syntax.CastExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusCast x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "cast"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the not variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusNot :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusNot x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "not"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the postfix variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusPostfix :: Typed.TypedTerm Syntax.PostfixExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusPostfix x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "postfix"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the switchExpression variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusSwitchExpression :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusSwitchExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "switchExpression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the tilde variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusTilde :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusTilde x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "tilde"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusUnaryExpressionNotPlusMinus :: Typed.TypedName Syntax.UnaryExpressionNotPlusMinus
-unaryExpressionNotPlusMinusUnaryExpressionNotPlusMinus =
-    Typed.TypedName (Core.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus")
-
--- | DSL injection for the other variant of hydra.java.syntax.UnaryExpression
-unaryExpressionOther :: Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpressionOther x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "other"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the plus variant of hydra.java.syntax.UnaryExpression
-unaryExpressionPlus :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpressionPlus x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "plus"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the preDecrement variant of hydra.java.syntax.UnaryExpression
-unaryExpressionPreDecrement :: Typed.TypedTerm Syntax.PreDecrementExpression -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpressionPreDecrement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "preDecrement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the preIncrement variant of hydra.java.syntax.UnaryExpression
-unaryExpressionPreIncrement :: Typed.TypedTerm Syntax.PreIncrementExpression -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpressionPreIncrement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.UnaryExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "preIncrement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.UnaryExpression
-unaryExpressionUnaryExpression :: Typed.TypedName Syntax.UnaryExpression
-unaryExpressionUnaryExpression = Typed.TypedName (Core.Name "hydra.java.syntax.UnaryExpression")
-
--- | DSL constructor for hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpression :: Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm (Maybe Syntax.ClassBody) -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpression typeArguments classOrInterface arguments body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm typeArguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "classOrInterface"),
-          Core.fieldTerm = (Typed.unTypedTerm classOrInterface)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm arguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the arguments field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionArguments :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm [Syntax.Expression]
-unqualifiedClassInstanceCreationExpressionArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-        Core.projectionFieldName = (Core.Name "arguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionBody :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm (Maybe Syntax.ClassBody)
-unqualifiedClassInstanceCreationExpressionBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the classOrInterface field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionClassOrInterface :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate
-unqualifiedClassInstanceCreationExpressionClassOrInterface x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-        Core.projectionFieldName = (Core.Name "classOrInterface")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeArguments field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionTypeArguments :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm [Syntax.TypeArgument]
-unqualifiedClassInstanceCreationExpressionTypeArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-        Core.projectionFieldName = (Core.Name "typeArguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionUnqualifiedClassInstanceCreationExpression :: Typed.TypedName Syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionUnqualifiedClassInstanceCreationExpression =
-    Typed.TypedName (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression")
-
--- | DSL updater for the arguments field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionWithArguments :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionWithArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "classOrInterface"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "classOrInterface")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the body field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionWithBody :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm (Maybe Syntax.ClassBody) -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "classOrInterface"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "classOrInterface")})),
-            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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the classOrInterface field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionWithClassOrInterface :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionWithClassOrInterface original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "typeArguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "classOrInterface"),
-          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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeArguments field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionWithTypeArguments :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
-unqualifiedClassInstanceCreationExpressionWithTypeArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeArguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "classOrInterface"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "classOrInterface")})),
-            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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the expressionName variant of hydra.java.syntax.VariableAccess
-variableAccessExpressionName :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.VariableAccess
-variableAccessExpressionName x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.VariableAccess"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expressionName"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the fieldAccess variant of hydra.java.syntax.VariableAccess
-variableAccessFieldAccess :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.VariableAccess
-variableAccessFieldAccess x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.VariableAccess"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "fieldAccess"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.VariableAccess
-variableAccessVariableAccess :: Typed.TypedName Syntax.VariableAccess
-variableAccessVariableAccess = Typed.TypedName (Core.Name "hydra.java.syntax.VariableAccess")
-
--- | DSL constructor for hydra.java.syntax.VariableArityParameter
-variableArityParameter :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableArityParameter
-variableArityParameter modifiers type_ annotations identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.VariableArityParameter
-variableArityParameterAnnotations :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm [Syntax.Annotation]
-variableArityParameterAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.VariableArityParameter
-variableArityParameterIdentifier :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.Identifier
-variableArityParameterIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.VariableArityParameter
-variableArityParameterModifiers :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm [Syntax.VariableModifier]
-variableArityParameterModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.VariableArityParameter
-variableArityParameterType :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.UnannType
-variableArityParameterType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.VariableArityParameter
-variableArityParameterVariableArityParameter :: Typed.TypedName Syntax.VariableArityParameter
-variableArityParameterVariableArityParameter = Typed.TypedName (Core.Name "hydra.java.syntax.VariableArityParameter")
-
--- | DSL updater for the annotations field of hydra.java.syntax.VariableArityParameter
-variableArityParameterWithAnnotations :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.VariableArityParameter
-variableArityParameterWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.VariableArityParameter
-variableArityParameterWithIdentifier :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableArityParameter
-variableArityParameterWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.VariableArityParameter
-variableArityParameterWithModifiers :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.VariableArityParameter
-variableArityParameterWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.VariableArityParameter
-variableArityParameterWithType :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.VariableArityParameter
-variableArityParameterWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityParameter"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponent :: Typed.TypedTerm [Syntax.RecordComponentModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableArityRecordComponent
-variableArityRecordComponent modifiers type_ annotations identifier =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm modifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentAnnotations :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm [Syntax.Annotation]
-variableArityRecordComponentAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentIdentifier :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.Identifier
-variableArityRecordComponentIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the modifiers field of hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentModifiers :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm [Syntax.RecordComponentModifier]
-variableArityRecordComponentModifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-        Core.projectionFieldName = (Core.Name "modifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentType :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.UnannType
-variableArityRecordComponentType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentVariableArityRecordComponent :: Typed.TypedName Syntax.VariableArityRecordComponent
-variableArityRecordComponentVariableArityRecordComponent =
-    Typed.TypedName (Core.Name "hydra.java.syntax.VariableArityRecordComponent")
-
--- | DSL updater for the annotations field of hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentWithAnnotations :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.VariableArityRecordComponent
-variableArityRecordComponentWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentWithIdentifier :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableArityRecordComponent
-variableArityRecordComponentWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            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.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the modifiers field of hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentWithModifiers :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm [Syntax.RecordComponentModifier] -> Typed.TypedTerm Syntax.VariableArityRecordComponent
-variableArityRecordComponentWithModifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          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.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.java.syntax.VariableArityRecordComponent
-variableArityRecordComponentWithType :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.VariableArityRecordComponent
-variableArityRecordComponentWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "modifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableArityRecordComponent"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.VariableDeclarator
-variableDeclarator :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm (Maybe Syntax.VariableInitializer) -> Typed.TypedTerm Syntax.VariableDeclarator
-variableDeclarator id initializer =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm id)},
-        Core.Field {
-          Core.fieldName = (Core.Name "initializer"),
-          Core.fieldTerm = (Typed.unTypedTerm initializer)}]}))
-
--- | DSL accessor for the id field of hydra.java.syntax.VariableDeclarator
-variableDeclaratorId :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm Syntax.VariableDeclaratorId
-variableDeclaratorId x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableDeclarator"),
-        Core.projectionFieldName = (Core.Name "id")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for hydra.java.syntax.VariableDeclaratorId
-variableDeclaratorId2 :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.VariableDeclaratorId
-variableDeclaratorId2 identifier dims =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableDeclaratorId"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm identifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm dims)}]}))
-
--- | DSL accessor for the dims field of hydra.java.syntax.VariableDeclaratorId
-variableDeclaratorIdDims :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm (Maybe Syntax.Dims)
-variableDeclaratorIdDims x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableDeclaratorId"),
-        Core.projectionFieldName = (Core.Name "dims")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the identifier field of hydra.java.syntax.VariableDeclaratorId
-variableDeclaratorIdIdentifier :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.Identifier
-variableDeclaratorIdIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableDeclaratorId"),
-        Core.projectionFieldName = (Core.Name "identifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.VariableDeclaratorId
-variableDeclaratorIdVariableDeclaratorId :: Typed.TypedName Syntax.VariableDeclaratorId
-variableDeclaratorIdVariableDeclaratorId = Typed.TypedName (Core.Name "hydra.java.syntax.VariableDeclaratorId")
-
--- | DSL updater for the dims field of hydra.java.syntax.VariableDeclaratorId
-variableDeclaratorIdWithDims :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.VariableDeclaratorId
-variableDeclaratorIdWithDims original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableDeclaratorId"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableDeclaratorId"),
-              Core.projectionFieldName = (Core.Name "identifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the identifier field of hydra.java.syntax.VariableDeclaratorId
-variableDeclaratorIdWithIdentifier :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableDeclaratorId
-variableDeclaratorIdWithIdentifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableDeclaratorId"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "identifier"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "dims"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableDeclaratorId"),
-              Core.projectionFieldName = (Core.Name "dims")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL accessor for the initializer field of hydra.java.syntax.VariableDeclarator
-variableDeclaratorInitializer :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm (Maybe Syntax.VariableInitializer)
-variableDeclaratorInitializer x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableDeclarator"),
-        Core.projectionFieldName = (Core.Name "initializer")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.VariableDeclarator
-variableDeclaratorVariableDeclarator :: Typed.TypedName Syntax.VariableDeclarator
-variableDeclaratorVariableDeclarator = Typed.TypedName (Core.Name "hydra.java.syntax.VariableDeclarator")
-
--- | DSL updater for the id field of hydra.java.syntax.VariableDeclarator
-variableDeclaratorWithId :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.VariableDeclarator
-variableDeclaratorWithId original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.VariableDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "initializer"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.VariableDeclarator"),
-              Core.projectionFieldName = (Core.Name "initializer")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the initializer field of hydra.java.syntax.VariableDeclarator
-variableDeclaratorWithInitializer :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm (Maybe Syntax.VariableInitializer) -> Typed.TypedTerm Syntax.VariableDeclarator
-variableDeclaratorWithInitializer original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.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.java.syntax.VariableDeclarator"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "initializer"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the arrayInitializer variant of hydra.java.syntax.VariableInitializer
-variableInitializerArrayInitializer :: Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.VariableInitializer
-variableInitializerArrayInitializer x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.VariableInitializer"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "arrayInitializer"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the expression variant of hydra.java.syntax.VariableInitializer
-variableInitializerExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.VariableInitializer
-variableInitializerExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.VariableInitializer"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.VariableInitializer
-variableInitializerVariableInitializer :: Typed.TypedName Syntax.VariableInitializer
-variableInitializerVariableInitializer = Typed.TypedName (Core.Name "hydra.java.syntax.VariableInitializer")
-
--- | DSL injection for the annotation variant of hydra.java.syntax.VariableModifier
-variableModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.VariableModifier
-variableModifierAnnotation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.VariableModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "annotation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the final variant of hydra.java.syntax.VariableModifier
-variableModifierFinal :: Typed.TypedTerm Syntax.VariableModifier
-variableModifierFinal =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.VariableModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "final"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.java.syntax.VariableModifier
-variableModifierVariableModifier :: Typed.TypedName Syntax.VariableModifier
-variableModifierVariableModifier = Typed.TypedName (Core.Name "hydra.java.syntax.VariableModifier")
-
--- | DSL constructor for hydra.java.syntax.WhileStatement
-whileStatement :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.WhileStatement
-whileStatement cond body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.WhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.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.java.syntax.WhileStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.WhileStatement
-whileStatementCond :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
-whileStatementCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.WhileStatement"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for hydra.java.syntax.WhileStatementNoShortIf
-whileStatementNoShortIf :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.WhileStatementNoShortIf
-whileStatementNoShortIf cond body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.WhileStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Typed.unTypedTerm cond)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.java.syntax.WhileStatementNoShortIf
-whileStatementNoShortIfBody :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
-whileStatementNoShortIfBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.WhileStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the cond field of hydra.java.syntax.WhileStatementNoShortIf
-whileStatementNoShortIfCond :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm (Maybe Syntax.Expression)
-whileStatementNoShortIfCond x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.WhileStatementNoShortIf"),
-        Core.projectionFieldName = (Core.Name "cond")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.WhileStatementNoShortIf
-whileStatementNoShortIfWhileStatementNoShortIf :: Typed.TypedName Syntax.WhileStatementNoShortIf
-whileStatementNoShortIfWhileStatementNoShortIf = Typed.TypedName (Core.Name "hydra.java.syntax.WhileStatementNoShortIf")
-
--- | DSL updater for the body field of hydra.java.syntax.WhileStatementNoShortIf
-whileStatementNoShortIfWithBody :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.WhileStatementNoShortIf
-whileStatementNoShortIfWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.WhileStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.WhileStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.WhileStatementNoShortIf
-whileStatementNoShortIfWithCond :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.WhileStatementNoShortIf
-whileStatementNoShortIfWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.WhileStatementNoShortIf"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          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.java.syntax.WhileStatementNoShortIf"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL name token for hydra.java.syntax.WhileStatement
-whileStatementWhileStatement :: Typed.TypedName Syntax.WhileStatement
-whileStatementWhileStatement = Typed.TypedName (Core.Name "hydra.java.syntax.WhileStatement")
-
--- | DSL updater for the body field of hydra.java.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.java.syntax.WhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.WhileStatement"),
-              Core.projectionFieldName = (Core.Name "cond")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the cond field of hydra.java.syntax.WhileStatement
-whileStatementWithCond :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.WhileStatement
-whileStatementWithCond original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.WhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "cond"),
-          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.java.syntax.WhileStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.java.syntax.Wildcard
-wildcard :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm (Maybe Syntax.WildcardBounds) -> Typed.TypedTerm Syntax.Wildcard
-wildcard annotations wildcard =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Wildcard"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm annotations)},
-        Core.Field {
-          Core.fieldName = (Core.Name "wildcard"),
-          Core.fieldTerm = (Typed.unTypedTerm wildcard)}]}))
-
--- | DSL accessor for the annotations field of hydra.java.syntax.Wildcard
-wildcardAnnotations :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm [Syntax.Annotation]
-wildcardAnnotations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Wildcard"),
-        Core.projectionFieldName = (Core.Name "annotations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL injection for the extends variant of hydra.java.syntax.WildcardBounds
-wildcardBoundsExtends :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.WildcardBounds
-wildcardBoundsExtends x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.WildcardBounds"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "extends"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the super variant of hydra.java.syntax.WildcardBounds
-wildcardBoundsSuper :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.WildcardBounds
-wildcardBoundsSuper x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.java.syntax.WildcardBounds"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "super"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.java.syntax.WildcardBounds
-wildcardBoundsWildcardBounds :: Typed.TypedName Syntax.WildcardBounds
-wildcardBoundsWildcardBounds = Typed.TypedName (Core.Name "hydra.java.syntax.WildcardBounds")
-
--- | DSL name token for hydra.java.syntax.Wildcard
-wildcardWildcard :: Typed.TypedName Syntax.Wildcard
-wildcardWildcard = Typed.TypedName (Core.Name "hydra.java.syntax.Wildcard")
-
--- | DSL accessor for the wildcard field of hydra.java.syntax.Wildcard
-wildcardWildcard2 :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm (Maybe Syntax.WildcardBounds)
-wildcardWildcard2 x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.java.syntax.Wildcard"),
-        Core.projectionFieldName = (Core.Name "wildcard")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the annotations field of hydra.java.syntax.Wildcard
-wildcardWithAnnotations :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.Wildcard
-wildcardWithAnnotations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Wildcard"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "wildcard"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Wildcard"),
-              Core.projectionFieldName = (Core.Name "wildcard")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the wildcard field of hydra.java.syntax.Wildcard
-wildcardWithWildcard :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm (Maybe Syntax.WildcardBounds) -> Typed.TypedTerm Syntax.Wildcard
-wildcardWithWildcard original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.java.syntax.Wildcard"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "annotations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.java.syntax.Wildcard"),
-              Core.projectionFieldName = (Core.Name "annotations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "wildcard"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for the hydra.java.syntax.YieldStatement wrapper
-yieldStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.YieldStatement
-yieldStatement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.java.syntax.YieldStatement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.java.syntax.YieldStatement
-yieldStatementYieldStatement :: Typed.TypedName Syntax.YieldStatement
-yieldStatementYieldStatement = Typed.TypedName (Core.Name "hydra.java.syntax.YieldStatement")
diff --git a/src/main/haskell/Hydra/Gradle.hs b/src/main/haskell/Hydra/Gradle.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Gradle.hs
+++ /dev/null
@@ -1,54 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | Build configuration for Gradle-built distribution packages.
-
-module Hydra.Gradle where
-
-import qualified Hydra.Core as Core
-import qualified Hydra.File as File
-import qualified Hydra.Packaging as Packaging
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
-import qualified Data.Scientific as Sci
-import Data.Void
-
--- | Configuration for the Gradle antlr plugin's grammar generation (generateGrammarSource).
-data AntlrConfig =
-  AntlrConfig {
-    -- | Arguments passed to the ANTLR tool, e.g. ["-visitor"] or ["-visitor", "-listener"]. Faithful to ANTLR's command-line interface; covers all ANTLR flags without enumerating them.
-    antlrConfigArguments :: [String],
-    -- | Directory into which ANTLR emits generated lexer/parser sources, relative to the package root (e.g. "build/generated-src/antlr/main"). The host also folds this into the main source set.
-    antlrConfigOutputDirectory :: File.FilePath}
-  deriving (Eq, Ord, Read, Show)
-
-_AntlrConfig = Core.Name "hydra.gradle.AntlrConfig"
-
-_AntlrConfig_arguments = Core.Name "arguments"
-
-_AntlrConfig_outputDirectory = Core.Name "outputDirectory"
-
--- | The build configuration for a single Gradle-built distribution package, beyond its generated sources.
-data GradleBuildConfiguration =
-  GradleBuildConfiguration {
-    -- | Third-party (non-project) dependencies required by the package. Inter-package dependencies within the project are derived separately and are not listed here. Each dependency's scope (api/runtime/test/tool) is significant; its name carries the Maven group and artifact separated by a colon.
-    gradleBuildConfigurationDependencies :: [Packaging.PackageDependency],
-    -- | Source paths or patterns to exclude from compilation, relative to the package root.
-    gradleBuildConfigurationExcludes :: [String],
-    -- | Additional source directories to fold into the package's main source set, beyond the generated and overlaid sources (e.g. a directory of build-tool-generated sources).
-    gradleBuildConfigurationExtraSourceDirs :: [File.FilePath],
-    -- | Gradle plugin identifiers to apply to the build, e.g. "antlr". Applied in the given order.
-    gradleBuildConfigurationPlugins :: [String],
-    -- | ANTLR grammar-generation configuration, present when the package uses the antlr plugin. When given, the host emits the generateGrammarSource configuration and the compileJava-depends-on-generateGrammarSource ordering. Modeled as structured vocabulary rather than a raw Groovy fragment.
-    gradleBuildConfigurationAntlr :: (Maybe AntlrConfig)}
-  deriving (Eq, Ord, Read, Show)
-
-_GradleBuildConfiguration = Core.Name "hydra.gradle.GradleBuildConfiguration"
-
-_GradleBuildConfiguration_dependencies = Core.Name "dependencies"
-
-_GradleBuildConfiguration_excludes = Core.Name "excludes"
-
-_GradleBuildConfiguration_extraSourceDirs = Core.Name "extraSourceDirs"
-
-_GradleBuildConfiguration_plugins = Core.Name "plugins"
-
-_GradleBuildConfiguration_antlr = Core.Name "antlr"
diff --git a/src/main/haskell/Hydra/Java/Coder.hs b/src/main/haskell/Hydra/Java/Coder.hs
--- a/src/main/haskell/Hydra/Java/Coder.hs
+++ b/src/main/haskell/Hydra/Java/Coder.hs
@@ -4,3246 +4,3249 @@
 
 module Hydra.Java.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.Checking as Checking
-import qualified Hydra.Classes as Classes
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Constants as Constants
-import qualified Hydra.Core as Core
-import qualified Hydra.Decode.Core as DecodeCore
-import qualified Hydra.Dependencies as Dependencies
-import qualified Hydra.Encode.Core as EncodeCore
-import qualified Hydra.Environment as Environment
-import qualified Hydra.Error.Checking as ErrorChecking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.Packaging as ErrorPackaging
-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.Inference as Inference
-import qualified Hydra.Java.Environment as JavaEnvironment
-import qualified Hydra.Java.Language as Language
-import qualified Hydra.Java.Names as JavaNames
-import qualified Hydra.Java.Serde as Serde
-import qualified Hydra.Java.Syntax as Syntax
-import qualified Hydra.Java.Utils as Utils
-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.Predicates as Predicates
-import qualified Hydra.Print.Core as PrintCore
-import qualified Hydra.Query as Query
-import qualified Hydra.Refs as Refs
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Resolution as Resolution
-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.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-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.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
-
--- | Attach comments derived from a field's annotations to a class body declaration
-addComment :: Syntax.ClassBodyDeclaration -> Core.FieldType -> t0 -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
-addComment decl field cx g =
-    Eithers.map (\c -> Syntax.ClassBodyDeclarationWithComments {
-      Syntax.classBodyDeclarationWithCommentsValue = decl,
-      Syntax.classBodyDeclarationWithCommentsComments = c}) (Annotations.commentsFromFieldType cx g field)
-
-analyzeJavaFunction :: JavaEnvironment.JavaEnvironment -> Core.Term -> Typing.InferenceContext -> t0 -> Either t1 (Typing.FunctionStructure JavaEnvironment.JavaEnvironment)
-analyzeJavaFunction env term cx g = Analysis.analyzeFunctionTerm cx javaEnvGetGraph javaEnvSetGraph env term
-
-annotateBodyWithCod :: Core.Type -> Core.Term -> Core.Term
-annotateBodyWithCod typ term =
-
-      let setAnn = \t -> Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ typ)) t
-      in case (Strip.deannotateTerm term) of
-        Core.TermTypeApplication _ -> setAnn term
-        Core.TermApplication v0 ->
-          let lhs = Core.applicationFunction v0
-              rhs = Core.applicationArgument v0
-              annotatedRhs =
-                      case (Strip.deannotateTerm rhs) of
-                        Core.TermTypeApplication _ -> annotateBodyWithCod (extractArgType lhs typ) rhs
-                        _ -> rhs
-          in (setAnn (Core.TermApplication (Core.Application {
-            Core.applicationFunction = lhs,
-            Core.applicationArgument = annotatedRhs})))
-        _ -> setAnn term
-
-annotateLambdaArgs :: Core.Name -> [Core.Type] -> [Core.Term] -> t0 -> Graph.Graph -> Either t1 [Core.Term]
-annotateLambdaArgs cname tApps argTerms cx g =
-    Logic.ifElse (Lists.isEmpty tApps) (Right argTerms) (Eithers.bind (Eithers.bind (Right (Lexical.lookupBinding g cname)) (\mel -> Optionals.match mel (Right (Optionals.map (\prim -> Scoping.termSignatureToTypeScheme (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition prim))) (Maps.lookup cname (Graph.graphPrimitives g)))) (\el -> Right (Core.bindingTypeScheme el)))) (\mts -> Optionals.match mts (Right argTerms) (\ts ->
-      let schemeType = Core.typeSchemeBody ts
-          schemeTypeVars = collectTypeVars schemeType
-          schemeVars = Lists.filter (\v -> Sets.member v schemeTypeVars) (Core.typeSchemeVariables ts)
-      in (Logic.ifElse (Logic.or (Lists.isEmpty schemeVars) (Logic.not (Equality.equal (Lists.length schemeVars) (Lists.length tApps)))) (Right argTerms) (
-        let subst = Maps.fromList (Lists.zip schemeVars tApps)
-            expectedTypes = peelExpectedTypes subst (Lists.length argTerms) schemeType
-        in (Right (Lists.zipWith (\arg -> \mExpected -> propagateType mExpected arg) argTerms (Lists.concat2 expectedTypes (Lists.replicate (Lists.length argTerms) (Core.TypeVariable (Core.Name "unused")))))))))))
-
-applyCastIfSafe :: JavaEnvironment.Aliases -> Core.Type -> Syntax.Expression -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
-applyCastIfSafe aliases castType expr cx g =
-
-      let trusted = JavaEnvironment.aliasesTrustedTypeVars aliases
-          inScope = JavaEnvironment.aliasesInScopeTypeParams aliases
-          castVars = collectTypeVars castType
-          javaTypeVars =
-                  Sets.fromList (Lists.filter (\v -> Logic.or (Sets.member v inScope) (isLambdaBoundVariable v)) (Sets.toList castVars))
-          isSafe =
-                  Logic.or (Sets.isEmpty trusted) (Logic.or (Sets.isEmpty javaTypeVars) (Sets.isEmpty (Sets.difference javaTypeVars trusted)))
-      in (Logic.ifElse isSafe (Eithers.bind (encodeType aliases Sets.empty castType cx g) (\jtype -> Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt -> Right (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression rt (Utils.javaExpressionToJavaUnaryExpression expr)))))) (Right expr))
-
-applyJavaArg :: Syntax.Expression -> Syntax.Expression -> Syntax.Expression
-applyJavaArg expr jarg =
-    Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Right (Utils.javaExpressionToJavaPrimary expr))) (Syntax.Identifier JavaNames.applyMethodName) [
-      jarg])
-
-applyOvergenSubstToTermAnnotations :: M.Map Core.Name Core.Type -> Core.Term -> t0 -> Graph.Graph -> Either t1 Core.Term
-applyOvergenSubstToTermAnnotations subst term0 cx g = Right (applyOvergenSubstToTermAnnotationsGo subst g term0)
-
-applyOvergenSubstToTermAnnotationsGo :: M.Map Core.Name Core.Type -> Graph.Graph -> Core.Term -> Core.Term
-applyOvergenSubstToTermAnnotationsGo subst cx term =
-    case term of
-      Core.TermAnnotated v0 ->
-        let inner = Core.annotatedTermBody v0
-            ann = Annotations.getAnnotationMap (Core.annotatedTermAnnotation v0)
-            ann_ =
-                    Optionals.match (Maps.lookup Constants.keyType ann) ann (\typeTerm -> Eithers.either (\_ -> ann) (\t ->
-                      let t_ = substituteTypeVarsWithTypes subst t
-                      in (Maps.insert Constants.keyType (EncodeCore.type_ t_) ann)) (DecodeCore.type_ cx typeTerm))
-        in (Core.TermAnnotated (Core.AnnotatedTerm {
-          Core.annotatedTermBody = (applyOvergenSubstToTermAnnotationsGo subst cx inner),
-          Core.annotatedTermAnnotation = (Annotations.wrapAnnotationMap ann_)}))
-      Core.TermApplication v0 -> Core.TermApplication (Core.Application {
-        Core.applicationFunction = (applyOvergenSubstToTermAnnotationsGo subst cx (Core.applicationFunction v0)),
-        Core.applicationArgument = (applyOvergenSubstToTermAnnotationsGo subst cx (Core.applicationArgument v0))})
-      Core.TermLambda v0 -> Core.TermLambda (Core.Lambda {
-        Core.lambdaParameter = (Core.lambdaParameter v0),
-        Core.lambdaDomain = (Optionals.map (\d -> substituteTypeVarsWithTypes subst d) (Core.lambdaDomain v0)),
-        Core.lambdaBody = (applyOvergenSubstToTermAnnotationsGo subst cx (Core.lambdaBody v0))})
-      Core.TermCases v0 -> Core.TermCases (Core.CaseStatement {
-        Core.caseStatementTypeName = (Core.caseStatementTypeName v0),
-        Core.caseStatementDefault = (Optionals.map (\d -> applyOvergenSubstToTermAnnotationsGo subst cx d) (Core.caseStatementDefault v0)),
-        Core.caseStatementCases = (Lists.map (\fld -> Core.CaseAlternative {
-          Core.caseAlternativeName = (Core.caseAlternativeName fld),
-          Core.caseAlternativeHandler = (applyOvergenSubstToTermAnnotationsGo subst cx (Core.caseAlternativeHandler fld))}) (Core.caseStatementCases v0))})
-      Core.TermLet v0 -> Core.TermLet (Core.Let {
-        Core.letBindings = (Lists.map (\b -> Core.Binding {
-          Core.bindingName = (Core.bindingName b),
-          Core.bindingTerm = (applyOvergenSubstToTermAnnotationsGo subst cx (Core.bindingTerm b)),
-          Core.bindingTypeScheme = (Core.bindingTypeScheme b)}) (Core.letBindings v0)),
-        Core.letBody = (applyOvergenSubstToTermAnnotationsGo subst cx (Core.letBody v0))})
-      Core.TermTypeApplication v0 -> Core.TermTypeApplication (Core.TypeApplicationTerm {
-        Core.typeApplicationTermBody = (applyOvergenSubstToTermAnnotationsGo subst cx (Core.typeApplicationTermBody v0)),
-        Core.typeApplicationTermType = (substituteTypeVarsWithTypes subst (Core.typeApplicationTermType v0))})
-      Core.TermTypeLambda v0 -> Core.TermTypeLambda (Core.TypeLambda {
-        Core.typeLambdaParameter = (Core.typeLambdaParameter v0),
-        Core.typeLambdaBody = (applyOvergenSubstToTermAnnotationsGo subst cx (Core.typeLambdaBody v0))})
-      _ -> term
-
-applySubstFull :: M.Map Core.Name Core.Type -> Core.Type -> Core.Type
-applySubstFull s t =
-    case (Strip.deannotateType t) of
-      Core.TypeVariable v0 -> Maps.findWithDefault t v0 s
-      Core.TypeFunction v0 -> Core.TypeFunction (Core.FunctionType {
-        Core.functionTypeDomain = (applySubstFull s (Core.functionTypeDomain v0)),
-        Core.functionTypeCodomain = (applySubstFull s (Core.functionTypeCodomain v0))})
-      Core.TypeApplication v0 -> Core.TypeApplication (Core.ApplicationType {
-        Core.applicationTypeFunction = (applySubstFull s (Core.applicationTypeFunction v0)),
-        Core.applicationTypeArgument = (applySubstFull s (Core.applicationTypeArgument v0))})
-      Core.TypeList v0 -> Core.TypeList (applySubstFull s v0)
-      Core.TypeSet v0 -> Core.TypeSet (applySubstFull s v0)
-      Core.TypeOptional v0 -> Core.TypeOptional (applySubstFull s v0)
-      Core.TypeEffect v0 -> Core.TypeEffect (applySubstFull s v0)
-      Core.TypeMap v0 -> Core.TypeMap (Core.MapType {
-        Core.mapTypeKeys = (applySubstFull s (Core.mapTypeKeys v0)),
-        Core.mapTypeValues = (applySubstFull s (Core.mapTypeValues v0))})
-      Core.TypePair v0 -> Core.TypePair (Core.PairType {
-        Core.pairTypeFirst = (applySubstFull s (Core.pairTypeFirst v0)),
-        Core.pairTypeSecond = (applySubstFull s (Core.pairTypeSecond v0))})
-      Core.TypeEither v0 -> Core.TypeEither (Core.EitherType {
-        Core.eitherTypeLeft = (applySubstFull s (Core.eitherTypeLeft v0)),
-        Core.eitherTypeRight = (applySubstFull s (Core.eitherTypeRight v0))})
-      Core.TypeForall v0 -> Core.TypeForall (Core.ForallType {
-        Core.forallTypeParameter = (Core.forallTypeParameter v0),
-        Core.forallTypeBody = (applySubstFull (Maps.delete (Core.forallTypeParameter v0) s) (Core.forallTypeBody v0))})
-      _ -> t
-
-applySubstSimple :: M.Map Core.Name Core.Type -> Core.Type -> Core.Type
-applySubstSimple subst t =
-    case (Strip.deannotateType t) of
-      Core.TypeVariable v0 -> Maps.findWithDefault t v0 subst
-      _ -> t
-
-arraysCompareExpr :: String -> String -> Syntax.Expression
-arraysCompareExpr otherVar fname =
-
-      let header =
-              Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-                Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "java.util.Arrays"))),
-                Syntax.methodInvocation_ComplexTypeArguments = [],
-                Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier "compare")})
-          arg1 =
-                  Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
-                    Syntax.expressionNameQualifier = Nothing,
-                    Syntax.expressionNameIdentifier = (Syntax.Identifier (Utils.sanitizeJavaName fname))})
-          arg2 =
-                  Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier otherVar) (Utils.javaIdentifier fname))
-      in (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
-        Syntax.methodInvocationHeader = header,
-        Syntax.methodInvocationArguments = [
-          arg1,
-          arg2]}))
-
-arraysEqualsClause :: String -> String -> Syntax.InclusiveOrExpression
-arraysEqualsClause tmpName fname =
-
-      let thisArg =
-              Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Syntax.Identifier "this") (Utils.javaIdentifier fname))
-          otherArg =
-                  Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier tmpName) (Utils.javaIdentifier fname))
-          header =
-                  Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-                    Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "java.util.Arrays"))),
-                    Syntax.methodInvocation_ComplexTypeArguments = [],
-                    Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.equalsMethodName)})
-      in (Utils.javaPostfixExpressionToJavaInclusiveOrExpression (Utils.javaMethodInvocationToJavaPostfixExpression (Syntax.MethodInvocation {
-        Syntax.methodInvocationHeader = header,
-        Syntax.methodInvocationArguments = [
-          thisArg,
-          otherArg]})))
-
-augmentVariantClass :: JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Core.Name -> Syntax.ClassDeclaration -> Syntax.ClassDeclaration
-augmentVariantClass aliases tparams elName cd =
-    case cd of
-      Syntax.ClassDeclarationNormal v0 ->
-        let args = Lists.map (\tp -> Utils.typeParameterToTypeArgument tp) tparams
-            extendsPart = Utils.nameToJavaClassType aliases True args elName Nothing
-            newMods =
-                    [
-                      Syntax.ClassModifierPublic,
-                      Syntax.ClassModifierStatic,
-                      Syntax.ClassModifierFinal]
-            oldBody = Syntax.normalClassDeclarationBody v0
-            oldDecls = Syntax.unClassBody oldBody
-            acceptDecl = withCommentString "Dispatch to {@code visitor}." (Utils.toAcceptMethod False tparams)
-            newBody = Syntax.ClassBody (Lists.concat2 oldDecls [
-                  acceptDecl])
-        in (Syntax.ClassDeclarationNormal (Syntax.NormalClassDeclaration {
-          Syntax.normalClassDeclarationModifiers = newMods,
-          Syntax.normalClassDeclarationIdentifier = (Syntax.normalClassDeclarationIdentifier v0),
-          Syntax.normalClassDeclarationParameters = tparams,
-          Syntax.normalClassDeclarationExtends = (Just extendsPart),
-          Syntax.normalClassDeclarationImplements = (Syntax.normalClassDeclarationImplements v0),
-          Syntax.normalClassDeclarationPermits = (Syntax.normalClassDeclarationPermits v0),
-          Syntax.normalClassDeclarationBody = newBody}))
-      _ -> cd
-
-bindingIsFunctionType :: Core.Binding -> Bool
-bindingIsFunctionType b =
-    Optionals.match (Core.bindingTypeScheme b) (case (Strip.deannotateTerm (Core.bindingTerm b)) of
-      Core.TermLambda _ -> True
-      Core.TermProject _ -> True
-      Core.TermCases _ -> True
-      Core.TermUnwrap _ -> True
-      _ -> False) (\ts -> case (Strip.deannotateType (Core.typeSchemeBody ts)) of
-      Core.TypeFunction _ -> True
-      Core.TypeForall v0 -> case (Strip.deannotateType (Core.forallTypeBody v0)) of
-        Core.TypeFunction _ -> True
-        _ -> False
-      _ -> False)
-
-bindingNameToFilePath :: Core.Name -> String
-bindingNameToFilePath name =
-
-      let qn = Names.qualifyName name
-          ns_ = Util.qualifiedNameModuleName qn
-          local = Util.qualifiedNameLocal qn
-          sanitized = Formatting.sanitizeWithUnderscores Language.reservedWords local
-          unq =
-                  Names.unqualifyName (Util.QualifiedName {
-                    Util.qualifiedNameModuleName = ns_,
-                    Util.qualifiedNameLocal = sanitized})
-      in (Names.nameToFilePath Util.CaseConventionCamel Util.CaseConventionPascal (File.FileExtension "java") unq)
-
-bindingsToStatements :: JavaEnvironment.JavaEnvironment -> [Core.Binding] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error ([Syntax.BlockStatement], JavaEnvironment.JavaEnvironment)
-bindingsToStatements env bindings cx g0 =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-          g = JavaEnvironment.javaEnvironmentGraph env
-          flatBindings = dedupBindings (JavaEnvironment.aliasesInScopeJavaVars aliases) (flattenBindings bindings)
-          gExtended =
-                  Scoping.extendGraphForLet (\g1 -> \b -> Logic.ifElse (Predicates.isComplexBinding g1 b) (Just (Core.TermLiteral (Core.LiteralBoolean True))) Nothing) g (Core.Let {
-                    Core.letBindings = flatBindings,
-                    Core.letBody = (Core.TermVariable (Core.Name "dummy"))})
-          bindingVars = Sets.fromList (Lists.map (\b -> Core.bindingName b) flatBindings)
-          allDeps =
-                  Maps.fromList (Lists.map (\b ->
-                    let key = Core.bindingName b
-                        deps = Sets.intersection bindingVars (Variables.freeVariablesInTerm (Core.bindingTerm b))
-                    in (key, deps)) flatBindings)
-          sorted =
-                  Sorting.topologicalSortComponents (Lists.map (\entry ->
-                    let key = Pairs.first entry
-                        deps = Pairs.second entry
-                    in (key, (Sets.toList deps))) (Maps.toList allDeps))
-          recursiveVars =
-                  Sets.fromList (Lists.concat (Lists.map (\names -> Logic.ifElse (Equality.equal (Lists.length names) 1) (Optionals.match (Lists.head names) [] (\singleName -> Optionals.match (Maps.lookup singleName allDeps) [] (\deps -> Logic.ifElse (Sets.member singleName deps) [
-                    singleName] []))) names) sorted))
-          thunkedVars =
-                  Sets.fromList (Lists.concat (Lists.map (\b ->
-                    let bname = Core.bindingName b
-                    in (Logic.ifElse (Logic.and (Logic.not (Sets.member bname recursiveVars)) (Logic.and (Logic.and (Predicates.isComplexBinding g b) (Logic.not (Predicates.isTrivialTerm (Core.bindingTerm b)))) (Logic.not (bindingIsFunctionType b)))) [
-                      bname] [])) flatBindings))
-          aliasesExtended =
-                  JavaEnvironment.Aliases {
-                    JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases),
-                    JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases),
-                    JavaEnvironment.aliasesBranchVars = (JavaEnvironment.aliasesBranchVars aliases),
-                    JavaEnvironment.aliasesRecursiveVars = (Sets.union (JavaEnvironment.aliasesRecursiveVars aliases) recursiveVars),
-                    JavaEnvironment.aliasesInScopeTypeParams = (JavaEnvironment.aliasesInScopeTypeParams aliases),
-                    JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases),
-                    JavaEnvironment.aliasesInScopeJavaVars = (Sets.union (JavaEnvironment.aliasesInScopeJavaVars aliases) bindingVars),
-                    JavaEnvironment.aliasesVarRenames = (JavaEnvironment.aliasesVarRenames aliases),
-                    JavaEnvironment.aliasesLambdaVars = (JavaEnvironment.aliasesLambdaVars aliases),
-                    JavaEnvironment.aliasesTypeVarSubst = (JavaEnvironment.aliasesTypeVarSubst aliases),
-                    JavaEnvironment.aliasesTrustedTypeVars = (JavaEnvironment.aliasesTrustedTypeVars aliases),
-                    JavaEnvironment.aliasesMethodCodomain = (JavaEnvironment.aliasesMethodCodomain aliases),
-                    JavaEnvironment.aliasesThunkedVars = (Sets.union (JavaEnvironment.aliasesThunkedVars aliases) thunkedVars)}
-          envExtended =
-                  JavaEnvironment.JavaEnvironment {
-                    JavaEnvironment.javaEnvironmentAliases = aliasesExtended,
-                    JavaEnvironment.javaEnvironmentGraph = gExtended}
-      in (Logic.ifElse (Lists.isEmpty bindings) (Right ([], envExtended)) (Eithers.bind (Eithers.mapList (\names -> Eithers.bind (Eithers.mapList (\n -> toDeclInit aliasesExtended gExtended recursiveVars flatBindings n cx g) names) (\inits -> Eithers.bind (Eithers.mapList (\n -> toDeclStatement envExtended aliasesExtended gExtended recursiveVars thunkedVars flatBindings n cx g) names) (\decls -> Right (Lists.concat2 (Optionals.givens inits) decls)))) sorted) (\groups -> Right (Lists.concat groups, envExtended))))
-
-boundTypeVariables :: Core.Type -> [Core.Name]
-boundTypeVariables typ =
-    case typ of
-      Core.TypeAnnotated v0 -> boundTypeVariables (Core.annotatedTypeBody v0)
-      Core.TypeForall v0 -> Lists.cons (Core.forallTypeParameter v0) (boundTypeVariables (Core.forallTypeBody v0))
-      _ -> []
-
-buildArgSubst :: S.Set Core.Name -> [Core.Type] -> [t0] -> M.Map Core.Name t0
-buildArgSubst schemeVarSet schemeDoms argTypes =
-    Maps.fromList (Lists.bind (Lists.zip schemeDoms argTypes) (\p ->
-      let sdom = Pairs.first p
-          argType = Pairs.second p
-      in case (Strip.deannotateType sdom) of
-        Core.TypeVariable v0 -> Logic.ifElse (Sets.member v0 schemeVarSet) [
-          (v0, argType)] []
-        _ -> []))
-
-buildCurriedLambda :: [Core.Name] -> Syntax.Expression -> Syntax.Expression
-buildCurriedLambda params inner = Lists.foldl (\acc -> \p -> Utils.javaLambda p acc) inner (Lists.reverse params)
-
-buildSubstFromAnnotations :: S.Set Core.Name -> Core.Term -> t0 -> Graph.Graph -> Either t1 (M.Map Core.Name Core.Name)
-buildSubstFromAnnotations schemeVarSet term cx g = Right (buildSubstFromAnnotations_go schemeVarSet g term)
-
-buildSubstFromAnnotations_go :: S.Set Core.Name -> Graph.Graph -> Core.Term -> M.Map Core.Name Core.Name
-buildSubstFromAnnotations_go schemeVarSet g term =
-    case term of
-      Core.TermAnnotated v0 ->
-        let body = Core.annotatedTermBody v0
-            anns = Annotations.getAnnotationMap (Core.annotatedTermAnnotation v0)
-            bodySubst = buildSubstFromAnnotations_go schemeVarSet g body
-            annSubst =
-                    Optionals.match (Maps.lookup Constants.keyType anns) Maps.empty (\typeTerm -> Eithers.either (\_ -> Maps.empty) (\annType -> case (Strip.deannotateTerm body) of
-                      Core.TermLambda v1 -> Optionals.match (Core.lambdaDomain v1) Maps.empty (\dom -> case (Strip.deannotateType annType) of
-                        Core.TypeFunction v2 -> buildTypeVarSubst schemeVarSet (Core.functionTypeDomain v2) dom
-                        _ -> Maps.empty)
-                      _ -> Maps.empty) (DecodeCore.type_ g typeTerm))
-        in (Maps.union annSubst bodySubst)
-      Core.TermApplication v0 -> Maps.union (buildSubstFromAnnotations_go schemeVarSet g (Core.applicationFunction v0)) (buildSubstFromAnnotations_go schemeVarSet g (Core.applicationArgument v0))
-      Core.TermLambda v0 -> buildSubstFromAnnotations_go schemeVarSet g (Core.lambdaBody v0)
-      Core.TermCases v0 ->
-        let defSubst = Optionals.match (Core.caseStatementDefault v0) Maps.empty (\d -> buildSubstFromAnnotations_go schemeVarSet g d)
-            caseSubsts =
-                    Lists.foldl (\acc -> \fld -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g (Core.caseAlternativeHandler fld))) Maps.empty (Core.caseStatementCases v0)
-        in (Maps.union defSubst caseSubsts)
-      Core.TermLet v0 ->
-        let bindingSubst =
-                Lists.foldl (\acc -> \b -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g (Core.bindingTerm b))) Maps.empty (Core.letBindings v0)
-        in (Maps.union bindingSubst (buildSubstFromAnnotations_go schemeVarSet g (Core.letBody v0)))
-      Core.TermList v0 -> Lists.foldl (\acc -> \t -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g t)) Maps.empty v0
-      Core.TermOptional v0 -> Optionals.match v0 Maps.empty (\t -> buildSubstFromAnnotations_go schemeVarSet g t)
-      Core.TermPair v0 -> Maps.union (buildSubstFromAnnotations_go schemeVarSet g (Pairs.first v0)) (buildSubstFromAnnotations_go schemeVarSet g (Pairs.second v0))
-      Core.TermRecord v0 -> Lists.foldl (\acc -> \fld -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g (Core.fieldTerm fld))) Maps.empty (Core.recordFields v0)
-      Core.TermSet v0 -> Lists.foldl (\acc -> \t -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g t)) Maps.empty (Sets.toList v0)
-      Core.TermTypeApplication v0 -> buildSubstFromAnnotations_go schemeVarSet g (Core.typeApplicationTermBody v0)
-      Core.TermTypeLambda v0 -> buildSubstFromAnnotations_go schemeVarSet g (Core.typeLambdaBody v0)
-      Core.TermEither v0 -> Eithers.either (\t -> buildSubstFromAnnotations_go schemeVarSet g t) (\t -> buildSubstFromAnnotations_go schemeVarSet g t) v0
-      _ -> Maps.empty
-
-buildTypeSubst :: S.Set Core.Name -> Core.Type -> Core.Type -> M.Map Core.Name Core.Type
-buildTypeSubst schemeVarSet schemeType actualType =
-    buildTypeSubst_go schemeVarSet (Strip.deannotateType schemeType) (Strip.deannotateType actualType)
-
-buildTypeSubst_go :: S.Set Core.Name -> Core.Type -> Core.Type -> M.Map Core.Name Core.Type
-buildTypeSubst_go svs st at =
-
-      let goSub = \a -> \b -> buildTypeSubst_go svs (Strip.deannotateType a) (Strip.deannotateType b)
-      in case st of
-        Core.TypeVariable v0 -> Logic.ifElse (Sets.member v0 svs) (Maps.singleton v0 at) Maps.empty
-        Core.TypeFunction v0 -> case at of
-          Core.TypeFunction v1 -> Maps.union (goSub (Core.functionTypeDomain v0) (Core.functionTypeDomain v1)) (goSub (Core.functionTypeCodomain v0) (Core.functionTypeCodomain v1))
-          _ -> Maps.empty
-        Core.TypeApplication v0 -> case at of
-          Core.TypeApplication v1 -> Maps.union (goSub (Core.applicationTypeFunction v0) (Core.applicationTypeFunction v1)) (goSub (Core.applicationTypeArgument v0) (Core.applicationTypeArgument v1))
-          _ -> Maps.empty
-        Core.TypeList v0 -> case at of
-          Core.TypeList v1 -> goSub v0 v1
-          _ -> Maps.empty
-        Core.TypeSet v0 -> case at of
-          Core.TypeSet v1 -> goSub v0 v1
-          _ -> Maps.empty
-        Core.TypeOptional v0 -> case at of
-          Core.TypeOptional v1 -> goSub v0 v1
-          _ -> Maps.empty
-        Core.TypeMap v0 -> case at of
-          Core.TypeMap v1 -> Maps.union (goSub (Core.mapTypeKeys v0) (Core.mapTypeKeys v1)) (goSub (Core.mapTypeValues v0) (Core.mapTypeValues v1))
-          _ -> Maps.empty
-        Core.TypePair v0 -> case at of
-          Core.TypePair v1 -> Maps.union (goSub (Core.pairTypeFirst v0) (Core.pairTypeFirst v1)) (goSub (Core.pairTypeSecond v0) (Core.pairTypeSecond v1))
-          _ -> Maps.empty
-        Core.TypeEither v0 -> case at of
-          Core.TypeEither v1 -> Maps.union (goSub (Core.eitherTypeLeft v0) (Core.eitherTypeLeft v1)) (goSub (Core.eitherTypeRight v0) (Core.eitherTypeRight v1))
-          _ -> Maps.empty
-        Core.TypeForall v0 -> case at of
-          Core.TypeForall v1 -> goSub (Core.forallTypeBody v0) (Core.forallTypeBody v1)
-          _ -> goSub (Core.forallTypeBody v0) at
-        _ -> Maps.empty
-
-buildTypeVarSubst :: S.Set Core.Name -> Core.Type -> Core.Type -> M.Map Core.Name Core.Name
-buildTypeVarSubst schemeVarSet freshTyp canonTyp =
-    buildTypeVarSubst_go schemeVarSet (Strip.deannotateType freshTyp) (Strip.deannotateType canonTyp)
-
-buildTypeVarSubst_go :: S.Set Core.Name -> Core.Type -> Core.Type -> M.Map Core.Name Core.Name
-buildTypeVarSubst_go svs ft ct =
-
-      let goSub = \a -> \b -> buildTypeVarSubst_go svs (Strip.deannotateType a) (Strip.deannotateType b)
-      in case ft of
-        Core.TypeVariable v0 -> case ct of
-          Core.TypeVariable v1 -> Logic.ifElse (Logic.and (Logic.not (Equality.equal v0 v1)) (Sets.member v1 svs)) (Maps.singleton v0 v1) Maps.empty
-          _ -> Maps.empty
-        Core.TypeFunction v0 -> case ct of
-          Core.TypeFunction v1 -> Maps.union (goSub (Core.functionTypeDomain v0) (Core.functionTypeDomain v1)) (goSub (Core.functionTypeCodomain v0) (Core.functionTypeCodomain v1))
-          _ -> Maps.empty
-        Core.TypeApplication v0 -> case ct of
-          Core.TypeApplication v1 -> Maps.union (goSub (Core.applicationTypeFunction v0) (Core.applicationTypeFunction v1)) (goSub (Core.applicationTypeArgument v0) (Core.applicationTypeArgument v1))
-          _ -> Maps.empty
-        Core.TypeList v0 -> case ct of
-          Core.TypeList v1 -> goSub v0 v1
-          _ -> Maps.empty
-        Core.TypeSet v0 -> case ct of
-          Core.TypeSet v1 -> goSub v0 v1
-          _ -> Maps.empty
-        Core.TypeOptional v0 -> case ct of
-          Core.TypeOptional v1 -> goSub v0 v1
-          _ -> Maps.empty
-        Core.TypeMap v0 -> case ct of
-          Core.TypeMap v1 -> Maps.union (goSub (Core.mapTypeKeys v0) (Core.mapTypeKeys v1)) (goSub (Core.mapTypeValues v0) (Core.mapTypeValues v1))
-          _ -> Maps.empty
-        Core.TypePair v0 -> case ct of
-          Core.TypePair v1 -> Maps.union (goSub (Core.pairTypeFirst v0) (Core.pairTypeFirst v1)) (goSub (Core.pairTypeSecond v0) (Core.pairTypeSecond v1))
-          _ -> Maps.empty
-        Core.TypeEither v0 -> case ct of
-          Core.TypeEither v1 -> Maps.union (goSub (Core.eitherTypeLeft v0) (Core.eitherTypeLeft v1)) (goSub (Core.eitherTypeRight v0) (Core.eitherTypeRight v1))
-          _ -> Maps.empty
-        Core.TypeForall v0 -> case ct of
-          Core.TypeForall v1 -> goSub (Core.forallTypeBody v0) (Core.forallTypeBody v1)
-          _ -> buildTypeVarSubst_go svs (Strip.deannotateType (Core.forallTypeBody v0)) ct
-        _ -> case ct of
-          Core.TypeForall v0 -> buildTypeVarSubst_go svs ft (Strip.deannotateType (Core.forallTypeBody v0))
-          _ -> Maps.empty
-
-builderSetterName :: Core.Name -> String
-builderSetterName fname =
-
-      let base = Utils.sanitizeJavaName (Core.unName fname)
-      in (Logic.ifElse (Logic.or (Equality.equal base "build") (Equality.equal base "builder")) (Strings.concat2 base "_") base)
-
-classModsPublic :: [Syntax.ClassModifier]
-classModsPublic = [
-  Syntax.ClassModifierPublic]
-
-classifyDataReference :: Core.Name -> t0 -> Graph.Graph -> Either Errors.Error JavaEnvironment.JavaSymbolClass
-classifyDataReference name cx g =
-    Eithers.bind (Right (Lexical.lookupBinding g name)) (\mel -> Optionals.match mel (Right JavaEnvironment.JavaSymbolClassLocalVariable) (\el -> Optionals.match (Core.bindingTypeScheme el) (Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "no type scheme for element " (Core.unName (Core.bindingName el)))))) (\ts -> Right (classifyDataTerm ts (Core.bindingTerm el)))))
-
-classifyDataTerm :: Core.TypeScheme -> Core.Term -> JavaEnvironment.JavaSymbolClass
-classifyDataTerm ts term =
-    Logic.ifElse (Dependencies.isLambda term) (
-      let n = classifyDataTerm_countLambdaParams term
-      in (Logic.ifElse (Ordering.gt n 1) (JavaEnvironment.JavaSymbolClassHoistedLambda n) JavaEnvironment.JavaSymbolClassUnaryFunction)) (
-      let hasTypeParams = Logic.not (Lists.isEmpty (Core.typeSchemeVariables ts))
-      in (Logic.ifElse hasTypeParams (
-        let n2 = classifyDataTerm_countLambdaParams (classifyDataTerm_stripTypeLambdas term)
-        in (Logic.ifElse (Ordering.gt n2 0) (JavaEnvironment.JavaSymbolClassHoistedLambda n2) JavaEnvironment.JavaSymbolClassNullaryFunction)) JavaEnvironment.JavaSymbolClassNullaryFunction))
-
-classifyDataTerm_countLambdaParams :: Core.Term -> Int
-classifyDataTerm_countLambdaParams t =
-    case (Strip.deannotateTerm t) of
-      Core.TermLambda v0 -> Math.add 1 (classifyDataTerm_countLambdaParams (Core.lambdaBody v0))
-      Core.TermLet v0 -> classifyDataTerm_countLambdaParams (Core.letBody v0)
-      _ -> 0
-
-classifyDataTerm_stripTypeLambdas :: Core.Term -> Core.Term
-classifyDataTerm_stripTypeLambdas t =
-    case (Strip.deannotateTerm t) of
-      Core.TermTypeLambda v0 -> classifyDataTerm_stripTypeLambdas (Core.typeLambdaBody v0)
-      _ -> t
-
-cmpDeclStatement :: t0 -> Syntax.BlockStatement
-cmpDeclStatement aliases =
-    Utils.variableDeclarationStatement aliases Utils.javaIntType (Utils.javaIdentifier "cmp") (Utils.javaIntExpression 0)
-
-cmpNotZeroExpr :: Syntax.Expression
-cmpNotZeroExpr =
-    Utils.javaEqualityExpressionToJavaExpression (Syntax.EqualityExpressionNotEqual (Syntax.EqualityExpression_Binary {
-      Syntax.equalityExpression_BinaryLhs = lhs,
-      Syntax.equalityExpression_BinaryRhs = rhs}))
-  where
-    lhs =
-        Utils.javaRelationalExpressionToJavaEqualityExpression (Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionName (Syntax.ExpressionName {
-          Syntax.expressionNameQualifier = Nothing,
-          Syntax.expressionNameIdentifier = (Utils.javaIdentifier "cmp")})))
-    rhs =
-        Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionPrimary (Utils.javaLiteralToJavaPrimary (Utils.javaInt 0)))
-
-collectForallParams :: Core.Type -> [Core.Name]
-collectForallParams t =
-    case (Strip.deannotateType t) of
-      Core.TypeForall v0 -> Lists.cons (Core.forallTypeParameter v0) (collectForallParams (Core.forallTypeBody v0))
-      _ -> []
-
-collectLambdaDomains :: Core.Term -> ([Core.Type], Core.Term)
-collectLambdaDomains t =
-    case (Strip.deannotateTerm t) of
-      Core.TermLambda v0 -> Optionals.match (Core.lambdaDomain v0) ([], t) (\dom ->
-        let rest = collectLambdaDomains (Core.lambdaBody v0)
-        in (Lists.cons dom (Pairs.first rest), (Pairs.second rest)))
-      _ -> ([], t)
-
-collectTypeApps :: Core.Term -> [Core.Type] -> (Core.Term, [Core.Type])
-collectTypeApps t acc =
-    case (Strip.deannotateTerm t) of
-      Core.TermTypeApplication v0 -> collectTypeApps (Core.typeApplicationTermBody v0) (Lists.cons (Core.typeApplicationTermType v0) acc)
-      _ -> (Strip.deannotateTerm t, acc)
-
-collectTypeApps0 :: Core.Term -> [Core.Type] -> (Core.Term, [Core.Type])
-collectTypeApps0 t acc =
-    case (Strip.deannotateTerm t) of
-      Core.TermTypeApplication v0 -> collectTypeApps0 (Core.typeApplicationTermBody v0) (Lists.cons (Core.typeApplicationTermType v0) acc)
-      _ -> (t, acc)
-
-collectTypeVars :: Core.Type -> S.Set Core.Name
-collectTypeVars typ = collectTypeVars_go (Strip.deannotateType typ)
-
-collectTypeVars_go :: Core.Type -> S.Set Core.Name
-collectTypeVars_go t =
-    case t of
-      Core.TypeVariable v0 -> Sets.singleton v0
-      Core.TypeFunction v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Core.functionTypeDomain v0))) (collectTypeVars_go (Strip.deannotateType (Core.functionTypeCodomain v0)))
-      Core.TypeApplication v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Core.applicationTypeFunction v0))) (collectTypeVars_go (Strip.deannotateType (Core.applicationTypeArgument v0)))
-      Core.TypeList v0 -> collectTypeVars_go (Strip.deannotateType v0)
-      Core.TypeSet v0 -> collectTypeVars_go (Strip.deannotateType v0)
-      Core.TypeOptional v0 -> collectTypeVars_go (Strip.deannotateType v0)
-      Core.TypeEffect v0 -> collectTypeVars_go (Strip.deannotateType v0)
-      Core.TypeMap v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Core.mapTypeKeys v0))) (collectTypeVars_go (Strip.deannotateType (Core.mapTypeValues v0)))
-      Core.TypePair v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Core.pairTypeFirst v0))) (collectTypeVars_go (Strip.deannotateType (Core.pairTypeSecond v0)))
-      Core.TypeEither v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Core.eitherTypeLeft v0))) (collectTypeVars_go (Strip.deannotateType (Core.eitherTypeRight v0)))
-      Core.TypeForall v0 -> collectTypeVars_go (Strip.deannotateType (Core.forallTypeBody v0))
-      _ -> Sets.empty
-
-collectionTypeArgs :: String -> Int -> JavaEnvironment.Aliases -> [M.Map Core.Name Core.Term] -> [Syntax.Type] -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.TypeArgument]
-collectionTypeArgs label n aliases anns tyapps cx g =
-    Logic.ifElse (Logic.not (Lists.isEmpty tyapps)) (takeTypeArgs label n tyapps cx g) (
-      let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-      in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mtyp -> Eithers.bind (Optionals.match mtyp (Right []) (\typ -> case (Strip.deannotateType typ) of
-        Core.TypeList v0 -> Right [
-          v0]
-        Core.TypeSet v0 -> Right [
-          v0]
-        Core.TypeOptional v0 -> Right [
-          v0]
-        Core.TypeMap v0 -> Right [
-          Core.mapTypeKeys v0,
-          (Core.mapTypeValues v0)]
-        _ -> Right [])) (\compTypes -> Eithers.mapList (\ct -> Eithers.bind (encodeType aliases Sets.empty ct cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) compTypes))))
-
-comparableCompareExpr :: String -> String -> Syntax.Expression
-comparableCompareExpr otherVar fname =
-
-      let thisField = Utils.javaIdentifierToJavaExpression (Syntax.Identifier (Utils.sanitizeJavaName fname))
-          otherField =
-                  Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier otherVar) (Utils.javaIdentifier fname))
-      in (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.overlay.java.util.Comparing") (Syntax.Identifier "compare") [
-        thisField,
-        otherField]))
-
-compareAndReturnStmts :: String -> Core.FieldType -> [Syntax.BlockStatement]
-compareAndReturnStmts otherVar f =
-    [
-      Syntax.BlockStatementStatement (Utils.javaAssignmentStatement (Syntax.LeftHandSideExpressionName (Syntax.ExpressionName {
-        Syntax.expressionNameQualifier = Nothing,
-        Syntax.expressionNameIdentifier = (Utils.javaIdentifier "cmp")})) (compareFieldExpr otherVar f)),
-      (Syntax.BlockStatementStatement (Syntax.StatementIfThen (Syntax.IfThenStatement {
-        Syntax.ifThenStatementExpression = cmpNotZeroExpr,
-        Syntax.ifThenStatementStatement = (Utils.javaReturnStatement (Just (Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
-          Syntax.expressionNameQualifier = Nothing,
-          Syntax.expressionNameIdentifier = (Utils.javaIdentifier "cmp")}))))})))]
-
-compareFieldExpr :: String -> Core.FieldType -> Syntax.Expression
-compareFieldExpr otherVar ft =
-
-      let fname = Core.unName (Core.fieldTypeName ft)
-          ftype = Core.fieldTypeType ft
-      in (Logic.ifElse (isBinaryType ftype) (arraysCompareExpr otherVar fname) (Logic.ifElse (isNonComparableType ftype) (hashCodeCompareExpr otherVar fname) (comparableCompareExpr otherVar fname)))
-
-compareToBody :: t0 -> String -> [Core.FieldType] -> [Syntax.BlockStatement]
-compareToBody aliases otherVar fields =
-
-      let zeroStmts = [
-            Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaIntExpression 0)))]
-      in (Optionals.withDefault zeroStmts (Optionals.map (\p ->
-        let firstField = Pairs.first p
-            restFields = Pairs.second p
-        in (Logic.ifElse (Lists.isEmpty restFields) [
-          Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (compareFieldExpr otherVar firstField)))] (Lists.concat2 [
-          cmpDeclStatement aliases] (Lists.concat2 (Lists.concat (Lists.map (\f -> compareAndReturnStmts otherVar f) (Lists.cons firstField (Optionals.withDefault [] (Lists.init restFields))))) [
-          Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (compareFieldExpr otherVar (Optionals.withDefault firstField (Lists.last restFields)))))])))) (Lists.uncons fields)))
-
-compareToZeroClause :: String -> String -> Syntax.InclusiveOrExpression
-compareToZeroClause tmpName fname =
-
-      let compareToArg =
-              Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier tmpName) (Utils.javaIdentifier fname))
-          compareToVar =
-                  Syntax.MethodInvocation_VariantExpression (Utils.fieldExpression (Syntax.Identifier "this") (Utils.javaIdentifier fname))
-          compareToHeader =
-                  Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-                    Syntax.methodInvocation_ComplexVariant = compareToVar,
-                    Syntax.methodInvocation_ComplexTypeArguments = [],
-                    Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.compareToMethodName)})
-          lhs =
-                  Utils.javaRelationalExpressionToJavaEqualityExpression (Utils.javaPostfixExpressionToJavaRelationalExpression (Utils.javaMethodInvocationToJavaPostfixExpression (Syntax.MethodInvocation {
-                    Syntax.methodInvocationHeader = compareToHeader,
-                    Syntax.methodInvocationArguments = [
-                      compareToArg]})))
-          rhs =
-                  Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionPrimary (Utils.javaLiteralToJavaPrimary (Utils.javaInt 0)))
-      in (Utils.javaEqualityExpressionToJavaInclusiveOrExpression (Syntax.EqualityExpressionEqual (Syntax.EqualityExpression_Binary {
-        Syntax.equalityExpression_BinaryLhs = lhs,
-        Syntax.equalityExpression_BinaryRhs = rhs})))
-
-constantDecl :: String -> String -> JavaEnvironment.Aliases -> Core.Name -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
-constantDecl comment javaName aliases name cx g =
-
-      let mods =
-              [
-                Syntax.FieldModifierPublic,
-                Syntax.FieldModifierStatic,
-                Syntax.FieldModifierFinal]
-          nameName = Utils.nameToJavaName aliases (Core.Name "hydra.core.Name")
-          env =
-                  JavaEnvironment.JavaEnvironment {
-                    JavaEnvironment.javaEnvironmentAliases = aliases,
-                    JavaEnvironment.javaEnvironmentGraph = g}
-      in (Eithers.bind (encodeType aliases Sets.empty (Core.TypeVariable (Core.Name "hydra.core.Name")) cx g) (\jt -> Eithers.bind (encodeTerm env (Core.TermLiteral (Core.LiteralString (Core.unName name))) cx g) (\arg ->
-        let init =
-                Syntax.VariableInitializerExpression (Utils.javaConstructorCall (Utils.javaConstructorName nameName Nothing) [
-                  arg] Nothing)
-            var = Utils.javaVariableDeclarator (Syntax.Identifier javaName) (Just init)
-        in (Right (withCommentString comment (Utils.javaMemberField mods jt var))))))
-
-constantDeclForFieldType :: Core.Name -> JavaEnvironment.Aliases -> Core.FieldType -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
-constantDeclForFieldType parentName aliases ftyp cx g =
-
-      let name = Core.fieldTypeName ftyp
-          javaName =
-                  Formatting.nonAlnumToUnderscores (Formatting.convertCase Util.CaseConventionCamel Util.CaseConventionUpperSnake (Core.unName name))
-          comment =
-                  Strings.concat [
-                    "Name of the {@code ",
-                    (Core.unName parentName),
-                    ".",
-                    (Core.unName name),
-                    "} field."]
-      in (constantDecl comment javaName aliases name cx g)
-
-constantDeclForTypeName :: JavaEnvironment.Aliases -> Core.Name -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
-constantDeclForTypeName aliases name cx g =
-
-      let comment =
-              Strings.concat [
-                "Name of the {@code ",
-                (Core.unName name),
-                "} type."]
-      in (constantDecl comment "TYPE_" aliases name cx g)
-
-constructElementsInterface :: Packaging.Module -> [Syntax.InterfaceMemberDeclarationWithComments] -> (Core.Name, Syntax.CompilationUnit)
-constructElementsInterface mod members =
-
-      let ns = Packaging.moduleName mod
-          parentNs = namespaceParent ns
-          pkg = Optionals.match parentNs (Utils.javaPackageDeclaration ns) (\pns -> Utils.javaPackageDeclaration pns)
-          mods = [
-                Syntax.InterfaceModifierPublic]
-          className = elementsClassName ns
-          elName = elementsQualifiedName ns
-          body = Syntax.InterfaceBody members
-          itf =
-                  Syntax.TopLevelClassOrInterfaceDeclarationInterface (Syntax.InterfaceDeclarationNormalInterface (Syntax.NormalInterfaceDeclaration {
-                    Syntax.normalInterfaceDeclarationModifiers = mods,
-                    Syntax.normalInterfaceDeclarationIdentifier = (Utils.javaTypeIdentifier className),
-                    Syntax.normalInterfaceDeclarationParameters = [],
-                    Syntax.normalInterfaceDeclarationExtends = [],
-                    Syntax.normalInterfaceDeclarationPermits = [],
-                    Syntax.normalInterfaceDeclarationBody = body}))
-          decl =
-                  Syntax.TopLevelClassOrInterfaceDeclarationWithComments {
-                    Syntax.topLevelClassOrInterfaceDeclarationWithCommentsValue = itf,
-                    Syntax.topLevelClassOrInterfaceDeclarationWithCommentsComments = (Optionals.bind (Packaging.moduleMetadata mod) (\em -> Packaging.entityMetadataDescription em))}
-      in (
-        elName,
-        (Syntax.CompilationUnitOrdinary (Syntax.OrdinaryCompilationUnit {
-          Syntax.ordinaryCompilationUnitPackage = (Just pkg),
-          Syntax.ordinaryCompilationUnitImports = [],
-          Syntax.ordinaryCompilationUnitTypes = [
-            decl]})))
-
-correctCastType :: Core.Term -> [Core.Type] -> Core.Type -> t0 -> t1 -> Either t2 Core.Type
-correctCastType innerBody typeArgs fallback cx g =
-    case (Strip.deannotateTerm innerBody) of
-      Core.TermPair _ -> Logic.ifElse (Equality.equal (Lists.length typeArgs) 2) (Right (Core.TypePair (Core.PairType {
-        Core.pairTypeFirst = (Optionals.withDefault fallback (Lists.at 0 typeArgs)),
-        Core.pairTypeSecond = (Optionals.withDefault fallback (Lists.at 1 typeArgs))}))) (Right fallback)
-      _ -> Right fallback
-
-correctTypeApps :: t0 -> Core.Name -> [Core.Term] -> [Core.Type] -> t1 -> Graph.Graph -> Either Errors.Error [Core.Type]
-correctTypeApps gr name args fallbackTypeApps cx g =
-    Eithers.bind (Right (Lexical.lookupBinding g name)) (\mel -> Optionals.match mel (Right fallbackTypeApps) (\el -> Optionals.match (Core.bindingTypeScheme el) (Right fallbackTypeApps) (\ts ->
-      let schemeType = Core.typeSchemeBody ts
-          allSchemeVars = Lists.filter (\v -> isSimpleName v) (Core.typeSchemeVariables ts)
-          schemeTypeVars = collectTypeVars schemeType
-          usedFlags = Lists.map (\v -> Sets.member v schemeTypeVars) allSchemeVars
-          usedSchemeVars = filterByFlags allSchemeVars usedFlags
-          nParams = countFunctionParams schemeType
-          peeled = peelDomainTypes nParams schemeType
-          calleeDoms = Pairs.first peeled
-          calleeCod = Pairs.second peeled
-          overgenSubst = detectAccumulatorUnification calleeDoms calleeCod usedSchemeVars
-          keepFlags =
-                  Lists.map (\v -> Logic.and (Sets.member v schemeTypeVars) (Logic.not (Maps.member v overgenSubst))) allSchemeVars
-          schemeVars = filterByFlags allSchemeVars keepFlags
-          filteredFallback0 =
-                  Logic.ifElse (Equality.equal (Lists.length allSchemeVars) (Lists.length fallbackTypeApps)) (filterByFlags fallbackTypeApps keepFlags) fallbackTypeApps
-          filteredFallback =
-                  Logic.ifElse (Maps.isEmpty overgenSubst) filteredFallback0 (Lists.map (\t -> substituteTypeVarsWithTypes overgenSubst t) filteredFallback0)
-      in (Logic.ifElse (Logic.or (Lists.isEmpty schemeVars) (Logic.not (Equality.equal (Lists.length schemeVars) (Lists.length filteredFallback)))) (Right filteredFallback) (correctTypeAppsWithArgs schemeVars filteredFallback schemeType args cx g)))))
-
-correctTypeAppsWithArgs :: [Core.Name] -> [Core.Type] -> Core.Type -> [Core.Term] -> t0 -> Graph.Graph -> Either Errors.Error [Core.Type]
-correctTypeAppsWithArgs schemeVars fallbackTypeApps schemeType args cx g =
-
-      let schemeVarSet = Sets.fromList schemeVars
-          irSubst = Maps.fromList (Lists.zip schemeVars fallbackTypeApps)
-          peeled = peelDomainTypes (Lists.length args) schemeType
-          schemeDoms = Pairs.first peeled
-      in (Eithers.bind (Eithers.mapList (\arg -> Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g (Annotations.termAnnotationInternal arg))) args) (\mArgTypes -> Logic.ifElse (Logic.not (Lists.isEmpty (Lists.filter (\m -> Optionals.isNone m) mArgTypes))) (Right fallbackTypeApps) (
-        let argTypes = Lists.bind mArgTypes (\m -> Optionals.match m [] (\x -> Lists.singleton x))
-            irDoms = Lists.map (\d -> applySubstSimple irSubst d) schemeDoms
-            domsMatch =
-                    Lists.isEmpty (Lists.filter (\p -> Logic.not (typesMatch (Strip.deannotateType (Pairs.first p)) (Strip.deannotateType (Pairs.second p)))) (Lists.zip irDoms argTypes))
-        in (Logic.ifElse domsMatch (Right fallbackTypeApps) (Right (resolveTypeApps schemeVars fallbackTypeApps (buildArgSubst schemeVarSet schemeDoms argTypes)))))))
-
-countFunctionParams :: Core.Type -> Int
-countFunctionParams t =
-    case (Strip.deannotateType t) of
-      Core.TypeFunction v0 -> Math.add 1 (countFunctionParams (Core.functionTypeCodomain v0))
-      _ -> 0
-
-declarationForRecordType :: Bool -> Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Core.Name -> [Core.FieldType] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassDeclaration
-declarationForRecordType isInner isSer aliases tparams elName fields cx g =
-    declarationForRecordType_ isInner isSer aliases tparams elName Nothing Nothing fields cx g
-
-declarationForRecordType_ :: Bool -> Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Core.Name -> Maybe Core.Name -> Maybe Int -> [Core.FieldType] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassDeclaration
-declarationForRecordType_ isInner isSer aliases tparams elName parentName ordinal fields cx g =
-    Eithers.bind (Eithers.mapList (\f -> recordMemberVar aliases f cx g) fields) (\memberVars -> Eithers.bind (Eithers.mapList (\p -> addComment (Pairs.first p) (Pairs.second p) cx g) (Lists.zip memberVars fields)) (\memberVars_ ->
-      let elNameStr = Syntax.unIdentifier (Utils.nameToJavaName aliases elName)
-          linkTargetStr =
-                  Optionals.match parentName elNameStr (\pn -> Strings.concat2 (Strings.concat2 (Syntax.unIdentifier (Utils.nameToJavaName aliases pn)) ".") (Utils.sanitizeJavaName (Util.qualifiedNameLocal (Names.qualifyName elName))))
-      in (Eithers.bind (Logic.ifElse (Ordering.gt (Lists.length fields) 1) (Eithers.mapList (\f -> Eithers.bind (recordWithMethod aliases elName fields f cx g) (\decl ->
-        let fname = Core.unName (Core.fieldTypeName f)
-            comment =
-                    Strings.concat [
-                      "Returns a copy of this {@link ",
-                      linkTargetStr,
-                      "} with {@code ",
-                      fname,
-                      "} replaced."]
-        in (Right (withCommentString comment decl)))) fields) (Right [])) (\withMethods -> Eithers.bind (recordConstructor aliases elName fields cx g) (\cons -> Eithers.bind (Eithers.mapList (\f ->
-        let fname = Utils.sanitizeJavaName (Core.unName (Core.fieldTypeName f))
-        in (Eithers.bind (Annotations.commentsFromFieldType cx g f) (\mDoc -> Right (Optionals.match mDoc "" (\d -> Strings.concat [
-          "@param ",
-          fname,
-          " ",
-          d]))))) fields) (\paramLines ->
-        let nonEmptyParamLines = Lists.filter (\l -> Logic.not (Equality.equal l "")) paramLines
-            consBaseComment =
-                    Strings.concat [
-                      "Constructs an immutable {@link ",
-                      linkTargetStr,
-                      "}."]
-            consComment =
-                    Logic.ifElse (Lists.isEmpty nonEmptyParamLines) consBaseComment (Strings.concat [
-                      consBaseComment,
-                      "\n\n",
-                      (Strings.join "\n" nonEmptyParamLines)])
-            consWithComment = withCommentString consComment cons
-        in (Eithers.bind (Logic.ifElse isInner (Right []) (Eithers.bind (constantDeclForTypeName aliases elName cx g) (\d -> Eithers.bind (Eithers.mapList (\f -> constantDeclForFieldType elName aliases f cx g) fields) (\dfields -> Right (Lists.cons d dfields))))) (\tn -> Eithers.bind (Logic.ifElse isInner (Right []) (recordBuilderClass aliases tparams elName fields cx g)) (\builderDecls ->
-          let comparableMethods =
-                  Optionals.match parentName (Logic.ifElse (Logic.and (Logic.not isInner) isSer) [
-                    recordCompareToMethod aliases tparams elName fields] []) (\pn -> Logic.ifElse isSer (variantCompareToMethod aliases tparams pn elName (Optionals.withDefault 0 ordinal) fields) [])
-              noCommentMethods =
-                      Lists.map (\x -> noComment x) (Lists.concat2 [
-                        recordEqualsMethod aliases elName fields,
-                        (recordHashCodeMethod fields),
-                        (recordToStringMethod elName fields)] comparableMethods)
-              bodyDecls =
-                      Lists.concat [
-                        tn,
-                        memberVars_,
-                        [
-                          consWithComment],
-                        noCommentMethods,
-                        withMethods,
-                        builderDecls]
-              ifaces = Logic.ifElse isInner (serializableTypes isSer) (interfaceTypes isSer aliases tparams elName)
-          in (Right (Utils.javaClassDeclaration aliases tparams elName classModsPublic Nothing ifaces bodyDecls)))))))))))
-
-declarationForUnionType :: Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Core.Name -> [Core.FieldType] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassDeclaration
-declarationForUnionType isSer aliases tparams elName fields cx g =
-    Eithers.bind (Eithers.mapList (\ftord ->
-      let ft = Pairs.first ftord
-          ordinal = Pairs.second ftord
-          fname = Core.fieldTypeName ft
-          ftype = Core.fieldTypeType ft
-          rfields =
-                  Logic.ifElse (Predicates.isUnitType (Strip.deannotateType ftype)) [] [
-                    Core.FieldType {
-                      Core.fieldTypeName = (Core.Name "value"),
-                      Core.fieldTypeType = (Strip.deannotateType ftype)}]
-          varName = Utils.variantClassName False elName fname
-      in (Eithers.bind (declarationForRecordType_ True isSer aliases [] varName (Logic.ifElse isSer (Just elName) Nothing) (Logic.ifElse isSer (Just ordinal) Nothing) rfields cx g) (\innerDecl -> Right (augmentVariantClass aliases tparams elName innerDecl)))) (Lists.zip fields (Math.range 0 (Lists.length fields)))) (\variantClasses ->
-      let variantDecls =
-              Lists.map (\vc -> Syntax.ClassBodyDeclarationClassMember (Syntax.ClassMemberDeclarationClass vc)) variantClasses
-      in (Eithers.bind (Eithers.mapList (\pair -> addComment (Pairs.first pair) (Pairs.second pair) cx g) (Lists.zip variantDecls fields)) (\variantDecls_ ->
-        let privateConst = Utils.makeConstructor aliases elName True [] []
-            acceptDecl = Utils.toAcceptMethod True tparams
-            vtparams = Lists.concat2 tparams [
-                  Utils.javaTypeParameter JavaNames.visitorReturnParameter]
-            elNameStr = Syntax.unIdentifier (Utils.nameToJavaName aliases elName)
-            visitorMethods =
-                    Lists.map (\ft ->
-                      let fname = Core.fieldTypeName ft
-                          fnameStr = Core.unName fname
-                          typeArgs = Lists.map (\tp -> Utils.typeParameterToTypeArgument tp) tparams
-                          varName = Utils.variantClassName False elName fname
-                          varNameStr = Syntax.unIdentifier (Utils.nameToJavaName aliases varName)
-                          varLocalStr = Utils.sanitizeJavaName (Util.qualifiedNameLocal (Names.qualifyName varName))
-                          linkVarNameStr = Strings.concat2 (Strings.concat2 elNameStr ".") varLocalStr
-                          varRef = Utils.javaClassTypeToJavaType (Utils.nameToJavaClassType aliases False typeArgs varName Nothing)
-                          param = Utils.javaTypeToJavaFormalParameter varRef (Core.Name "instance")
-                          resultR = Utils.javaTypeToJavaResult (Syntax.TypeReference Utils.visitorTypeVariable)
-                          comment =
-                                  Strings.concat [
-                                    "Visit the {@link ",
-                                    linkVarNameStr,
-                                    "} case."]
-                      in (comment, (Utils.interfaceMethodDeclaration [] [] JavaNames.visitMethodName [
-                        param] resultR Nothing))) fields
-            visitorBody =
-                    Syntax.InterfaceBody (Lists.map (\p -> withInterfaceCommentString (Pairs.first p) (Pairs.second p)) visitorMethods)
-            visitor =
-                    Utils.javaInterfaceDeclarationToJavaClassBodyDeclaration (Syntax.NormalInterfaceDeclaration {
-                      Syntax.normalInterfaceDeclarationModifiers = [
-                        Syntax.InterfaceModifierPublic],
-                      Syntax.normalInterfaceDeclarationIdentifier = (Syntax.TypeIdentifier (Syntax.Identifier JavaNames.visitorName)),
-                      Syntax.normalInterfaceDeclarationParameters = vtparams,
-                      Syntax.normalInterfaceDeclarationExtends = [],
-                      Syntax.normalInterfaceDeclarationPermits = [],
-                      Syntax.normalInterfaceDeclarationBody = visitorBody})
-            typeArgs = Lists.map (\tp -> Utils.typeParameterToTypeArgument tp) tparams
-            visitorClassType =
-                    Utils.javaClassType (Lists.concat2 (Lists.map (\tp -> Utils.typeParameterToReferenceType tp) tparams) [
-                      Utils.visitorTypeVariable]) Nothing JavaNames.visitorName
-            mainInstanceParam =
-                    Utils.javaTypeToJavaFormalParameter (Utils.javaClassTypeToJavaType (Utils.nameToJavaClassType aliases False typeArgs elName Nothing)) (Core.Name "instance")
-            resultR = Utils.javaTypeToJavaResult (Syntax.TypeReference Utils.visitorTypeVariable)
-            throwStmt =
-                    Syntax.BlockStatementStatement (Utils.javaThrowIllegalStateException [
-                      Utils.javaAdditiveExpressionToJavaExpression (Utils.addExpressions [
-                        Utils.javaStringMultiplicativeExpression "Non-exhaustive patterns when matching: ",
-                        (Syntax.MultiplicativeExpressionUnary (Utils.javaIdentifierToJavaUnaryExpression (Syntax.Identifier "instance")))])])
-            defaultMod = [
-                  Syntax.InterfaceMethodModifierDefault]
-            otherwiseDecl =
-                    Utils.interfaceMethodDeclaration defaultMod [] JavaNames.otherwiseMethodName [
-                      mainInstanceParam] resultR (Just [
-                      throwStmt])
-            otherwiseComment = "Default branch for unhandled cases."
-            pvVisitMethods =
-                    Lists.map (\ft ->
-                      let fname = Core.fieldTypeName ft
-                          varName = Utils.variantClassName False elName fname
-                          varNameStr = Syntax.unIdentifier (Utils.nameToJavaName aliases varName)
-                          varLocalStr = Utils.sanitizeJavaName (Util.qualifiedNameLocal (Names.qualifyName varName))
-                          linkVarNameStr = Strings.concat2 (Strings.concat2 elNameStr ".") varLocalStr
-                          varRef = Utils.javaClassTypeToJavaType (Utils.nameToJavaClassType aliases False typeArgs varName Nothing)
-                          param = Utils.javaTypeToJavaFormalParameter varRef (Core.Name "instance")
-                          mi =
-                                  Utils.methodInvocation Nothing (Syntax.Identifier JavaNames.otherwiseMethodName) [
-                                    Utils.javaIdentifierToJavaExpression (Syntax.Identifier "instance")]
-                          returnOtherwise =
-                                  Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaPrimaryToJavaExpression (Utils.javaMethodInvocationToJavaPrimary mi))))
-                          comment =
-                                  Strings.concat [
-                                    "Visit the {@link ",
-                                    linkVarNameStr,
-                                    "} case."]
-                      in (
-                        comment,
-                        (Utils.interfaceMethodDeclaration defaultMod [] JavaNames.visitMethodName [
-                          param] resultR (Just [
-                          returnOtherwise])))) fields
-            pvBody =
-                    Syntax.InterfaceBody (Lists.cons (withInterfaceCommentString otherwiseComment otherwiseDecl) (Lists.map (\p -> withInterfaceCommentString (Pairs.first p) (Pairs.second p)) pvVisitMethods))
-            partialVisitor =
-                    Utils.javaInterfaceDeclarationToJavaClassBodyDeclaration (Syntax.NormalInterfaceDeclaration {
-                      Syntax.normalInterfaceDeclarationModifiers = [
-                        Syntax.InterfaceModifierPublic],
-                      Syntax.normalInterfaceDeclarationIdentifier = (Syntax.TypeIdentifier (Syntax.Identifier JavaNames.partialVisitorName)),
-                      Syntax.normalInterfaceDeclarationParameters = vtparams,
-                      Syntax.normalInterfaceDeclarationExtends = [
-                        Syntax.InterfaceType visitorClassType],
-                      Syntax.normalInterfaceDeclarationPermits = [],
-                      Syntax.normalInterfaceDeclarationBody = pvBody})
-        in (Eithers.bind (constantDeclForTypeName aliases elName cx g) (\tn0 -> Eithers.bind (Eithers.mapList (\ft -> constantDeclForFieldType elName aliases ft cx g) fields) (\tn1 ->
-          let tn = Lists.concat2 [
-                tn0] tn1
-              privateConstComment =
-                      Strings.concat [
-                        "Constructs an immutable {@link ",
-                        elNameStr,
-                        "}."]
-              acceptComment = "Dispatch to {@code visitor}."
-              visitorIfaceComment =
-                      Strings.concat [
-                        "Visitor over {@link ",
-                        elNameStr,
-                        "}."]
-              partialVisitorIfaceComment =
-                      Strings.concat [
-                        "Partial visitor over {@link ",
-                        elNameStr,
-                        "} with a default {@link #otherwise} branch."]
-              hydraOrdinalAbstractDecls = Logic.ifElse isSer [
-                    noComment (hydraOrdinalMethod Nothing)] []
-              otherDecls =
-                      Lists.concat2 [
-                        withCommentString privateConstComment privateConst,
-                        (withCommentString acceptComment acceptDecl),
-                        (withCommentString visitorIfaceComment visitor),
-                        (withCommentString partialVisitorIfaceComment partialVisitor)] hydraOrdinalAbstractDecls
-              bodyDecls =
-                      Lists.concat [
-                        tn,
-                        otherDecls,
-                        variantDecls_]
-              mods = Lists.concat2 classModsPublic [
-                    Syntax.ClassModifierAbstract]
-          in (Right (Utils.javaClassDeclaration aliases tparams elName mods Nothing (interfaceTypes isSer aliases tparams elName) bodyDecls))))))))
-
-decodeTypeFromTerm :: Core.Term -> Maybe Core.Type
-decodeTypeFromTerm term =
-    case (Strip.deannotateTerm term) of
-      Core.TermInject v0 -> Logic.ifElse (Equality.equal (Core.injectionTypeName v0) (Core.Name "hydra.core.Type")) (
-        let fname = Core.unName (Core.fieldName (Core.injectionField v0))
-            fterm = Core.fieldTerm (Core.injectionField v0)
-        in (Logic.ifElse (Equality.equal fname "variable") (case fterm of
-          Core.TermWrap v1 -> case (Core.wrappedTermBody v1) of
-            Core.TermLiteral v2 -> case v2 of
-              Core.LiteralString v3 -> Just (Core.TypeVariable (Core.Name v3))
-              _ -> Nothing
-            _ -> Nothing
-          _ -> Nothing) (Logic.ifElse (Equality.equal fname "annotated") (case fterm of
-          Core.TermRecord v1 -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Core.fieldName f) (Core.Name "body")) (Core.recordFields v1))) (\bodyField -> decodeTypeFromTerm (Core.fieldTerm bodyField))
-          _ -> Nothing) (Logic.ifElse (Equality.equal fname "application") (case fterm of
-          Core.TermRecord v1 -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Core.fieldName f) (Core.Name "function")) (Core.recordFields v1))) (\funcField -> Optionals.bind (decodeTypeFromTerm (Core.fieldTerm funcField)) (\func -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Core.fieldName f) (Core.Name "argument")) (Core.recordFields v1))) (\argField -> Optionals.map (\arg -> Core.TypeApplication (Core.ApplicationType {
-            Core.applicationTypeFunction = func,
-            Core.applicationTypeArgument = arg})) (decodeTypeFromTerm (Core.fieldTerm argField)))))
-          _ -> Nothing) (Logic.ifElse (Equality.equal fname "function") (case fterm of
-          Core.TermRecord v1 -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Core.fieldName f) (Core.Name "domain")) (Core.recordFields v1))) (\domField -> Optionals.bind (decodeTypeFromTerm (Core.fieldTerm domField)) (\dom -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Core.fieldName f) (Core.Name "codomain")) (Core.recordFields v1))) (\codField -> Optionals.map (\cod -> Core.TypeFunction (Core.FunctionType {
-            Core.functionTypeDomain = dom,
-            Core.functionTypeCodomain = cod})) (decodeTypeFromTerm (Core.fieldTerm codField)))))
-          _ -> Nothing) (Logic.ifElse (Equality.equal fname "literal") (case fterm of
-          Core.TermInject v1 -> Logic.ifElse (Equality.equal (Core.unName (Core.fieldName (Core.injectionField v1))) "string") (Just (Core.TypeLiteral Core.LiteralTypeString)) Nothing
-          _ -> Nothing) Nothing)))))) Nothing
-      _ -> Nothing
-
-dedupBindings :: S.Set Core.Name -> [Core.Binding] -> [Core.Binding]
-dedupBindings inScope bs =
-    Optionals.withDefault [] (Optionals.map (\p ->
-      let b = Pairs.first p
-          rest = Pairs.second p
-          name = Core.bindingName b
-      in (Logic.ifElse (Sets.member name inScope) (
-        let newName = freshJavaName name inScope
-            subst = Maps.singleton name newName
-            rest2 =
-                    Lists.map (\b2 -> Core.Binding {
-                      Core.bindingName = (Core.bindingName b2),
-                      Core.bindingTerm = (Variables.substituteVariables subst (Core.bindingTerm b2)),
-                      Core.bindingTypeScheme = (Core.bindingTypeScheme b2)}) rest
-        in (Lists.cons (Core.Binding {
-          Core.bindingName = newName,
-          Core.bindingTerm = (Core.bindingTerm b),
-          Core.bindingTypeScheme = (Core.bindingTypeScheme b)}) (dedupBindings (Sets.insert newName inScope) rest2))) (Lists.cons b (dedupBindings (Sets.insert name inScope) rest)))) (Lists.uncons bs))
-
-detectAccumulatorUnification :: [Core.Type] -> Core.Type -> [Core.Name] -> M.Map Core.Name Core.Type
-detectAccumulatorUnification doms cod tparams =
-
-      let tparamSet = Sets.fromList tparams
-          allPairs = Lists.bind doms (\d -> extractInOutPair d)
-          groupedByInput = groupPairsByFirst allPairs
-          selfRefSubst = selfRefSubstitution groupedByInput
-          directPairs = Lists.bind doms (\d -> extractDirectReturn tparamSet d)
-          groupedDirect = groupPairsByFirst directPairs
-          directInputVars = Sets.fromList (Lists.map (\p -> Pairs.first p) directPairs)
-          codVar =
-                  case (Strip.deannotateType cod) of
-                    Core.TypeVariable v0 -> Just v0
-                    _ -> Nothing
-          directRefSubst = directRefSubstitution directInputVars codVar groupedDirect
-          codSubst =
-                  Optionals.match (findPairFirst cod) Maps.empty (\cv -> Logic.ifElse (Maps.member cv selfRefSubst) Maps.empty (Optionals.match (findSelfRefVar groupedByInput) Maps.empty (\refVar -> Logic.ifElse (Equality.equal cv refVar) Maps.empty (Maps.singleton cv refVar))))
-          domVars = Sets.fromList (Lists.bind doms (\d -> Sets.toList (collectTypeVars d)))
-          danglingSubst =
-                  Optionals.match (findPairFirst cod) Maps.empty (\cv -> Logic.ifElse (Sets.member cv domVars) Maps.empty (Optionals.match (findSelfRefVar groupedByInput) Maps.empty (\refVar -> Maps.singleton cv (Core.TypeVariable refVar))))
-      in (Maps.union (Maps.union (Maps.union (nameMapToTypeMap selfRefSubst) (nameMapToTypeMap codSubst)) danglingSubst) (nameMapToTypeMap directRefSubst))
-
-directRefSubstitution :: (Eq t0, Ord t0) => (S.Set t0 -> Maybe t0 -> M.Map t0 [t0] -> M.Map t0 t0)
-directRefSubstitution directInputVars codVar grouped =
-    Lists.foldl (\subst -> \entry -> directRefSubstitution_processGroup directInputVars codVar subst (Pairs.first entry) (Pairs.second entry)) Maps.empty (Maps.toList grouped)
-
-directRefSubstitution_processGroup :: (Eq t0, Ord t0) => (S.Set t0 -> Maybe t0 -> M.Map t0 t0 -> t0 -> [t0] -> M.Map t0 t0)
-directRefSubstitution_processGroup directInputVars codVar subst inVar outVars =
-
-      let selfRefCount = Lists.length (Lists.filter (\v -> Equality.equal v inVar) outVars)
-          nonSelfVars = Lists.filter (\v -> Logic.not (Equality.equal v inVar)) outVars
-          safeNonSelfVars =
-                  Lists.filter (\v -> Logic.and (Logic.not (Sets.member v directInputVars)) (Logic.not (Equality.equal (Just v) codVar))) nonSelfVars
-      in (Logic.ifElse (Logic.and (Ordering.gte selfRefCount 2) (Logic.not (Lists.isEmpty safeNonSelfVars))) (Lists.foldl (\s -> \v -> Maps.insert v inVar s) subst safeNonSelfVars) subst)
-
-domTypeArgs :: JavaEnvironment.Aliases -> Core.Type -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.TypeArgument]
-domTypeArgs aliases d cx g =
-
-      let args = extractTypeApplicationArgs (Strip.deannotateType d)
-      in (Logic.ifElse (Logic.not (Lists.isEmpty args)) (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) args) (Right (javaTypeArgumentsForType d)))
-
-elementJavaIdentifier :: Bool -> Bool -> JavaEnvironment.Aliases -> Core.Name -> Syntax.Identifier
-elementJavaIdentifier isPrim isMethod aliases name =
-
-      let qn = Names.qualifyName name
-          ns_ = Util.qualifiedNameModuleName qn
-          local = Util.qualifiedNameLocal qn
-          sep = Logic.ifElse isMethod "::" "."
-      in (Logic.ifElse isPrim (Syntax.Identifier (Strings.concat2 (Strings.concat2 (elementJavaIdentifier_qualify aliases ns_ (Formatting.capitalize local)) ".") JavaNames.applyMethodName)) (Optionals.match ns_ (Syntax.Identifier (Utils.sanitizeJavaName local)) (\n -> Syntax.Identifier (Strings.concat2 (Strings.concat2 (elementJavaIdentifier_qualify aliases (namespaceParent n) (elementsClassName n)) sep) (Utils.sanitizeJavaName local)))))
-
-elementJavaIdentifier_qualify :: JavaEnvironment.Aliases -> Maybe Packaging.ModuleName -> String -> String
-elementJavaIdentifier_qualify aliases mns s =
-    Syntax.unIdentifier (Utils.nameToJavaName aliases (Names.unqualifyName (Util.QualifiedName {
-      Util.qualifiedNameModuleName = mns,
-      Util.qualifiedNameLocal = s})))
-
-elementsClassName :: Packaging.ModuleName -> String
-elementsClassName ns =
-
-      let nsStr = Packaging.unModuleName ns
-          parts = Strings.splitOn "." nsStr
-      in (Formatting.sanitizeWithUnderscores Language.reservedWords (Formatting.capitalize (Optionals.withDefault nsStr (Lists.last parts))))
-
-elementsQualifiedName :: Packaging.ModuleName -> Core.Name
-elementsQualifiedName ns =
-    Names.unqualifyName (Util.QualifiedName {
-      Util.qualifiedNameModuleName = (namespaceParent ns),
-      Util.qualifiedNameLocal = (elementsClassName ns)})
-
-encodeApplication :: JavaEnvironment.JavaEnvironment -> Core.Application -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeApplication env app cx g0 =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-          g = JavaEnvironment.javaEnvironmentGraph env
-          gathered = Analysis.gatherArgsWithTypeApps (Core.TermApplication app) [] []
-          fun = Pairs.first gathered
-          args = Pairs.first (Pairs.second gathered)
-          typeApps = Pairs.second (Pairs.second gathered)
-      in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g (Annotations.termAnnotationInternal fun))) (\mfunTyp -> Eithers.bind (Optionals.match mfunTyp (Checking.typeOfTerm cx g fun) (\t -> Right t)) (\funTyp ->
-        let arity = Arity.typeArity funTyp
-            deannotatedFun = Strip.deannotateTerm fun
-            calleeName =
-                    case deannotatedFun of
-                      Core.TermVariable v0 -> Just v0
-                      _ -> Nothing
-        in (Eithers.bind (Optionals.match calleeName (Right args) (\cname -> annotateLambdaArgs cname typeApps args cx g)) (\annotatedArgs -> case deannotatedFun of
-          Core.TermVariable v0 -> Logic.ifElse (Optionals.isGiven (Maps.lookup v0 (Graph.graphPrimitives g))) (
-            let hargs = Lists.take arity annotatedArgs
-                rargs = Lists.drop arity annotatedArgs
-            in (Eithers.bind (functionCall env True v0 hargs [] cx g) (\initialCall -> Eithers.foldList (\acc -> \h -> Eithers.bind (encodeTerm env h cx g) (\jarg -> Right (applyJavaArg acc jarg))) initialCall rargs))) (Logic.ifElse (Logic.and (isRecursiveVariable aliases v0) (Logic.not (isLambdaBoundIn v0 (JavaEnvironment.aliasesLambdaVars aliases)))) (encodeApplication_fallback env aliases g typeApps (Core.applicationFunction app) (Core.applicationArgument app) cx g) (Eithers.bind (classifyDataReference v0 cx g) (\symClass ->
-            let methodArity =
-                    case symClass of
-                      JavaEnvironment.JavaSymbolClassHoistedLambda v1 -> v1
-                      _ -> arity
-                hargs = Lists.take methodArity annotatedArgs
-                rargs = Lists.drop methodArity annotatedArgs
-                trusted = JavaEnvironment.aliasesTrustedTypeVars aliases
-                inScope = JavaEnvironment.aliasesInScopeTypeParams aliases
-                filteredTypeApps =
-                        Logic.ifElse (Logic.or (Sets.isEmpty trusted) (Sets.isEmpty inScope)) [] (
-                          let allVars = Sets.unions (Lists.map (\t -> collectTypeVars t) typeApps)
-                          in (Logic.ifElse (Logic.not (Sets.isEmpty (Sets.difference allVars inScope))) [] (Logic.ifElse (Sets.isEmpty (Sets.difference allVars trusted)) typeApps [])))
-            in (Eithers.bind (Logic.ifElse (Lists.isEmpty filteredTypeApps) (Right []) (correctTypeApps g v0 hargs filteredTypeApps cx g)) (\safeTypeApps -> Eithers.bind (filterPhantomTypeArgs v0 safeTypeApps cx g) (\finalTypeApps -> Eithers.bind (functionCall env False v0 hargs finalTypeApps cx g) (\initialCall -> Eithers.foldList (\acc -> \h -> Eithers.bind (encodeTerm env h cx g) (\jarg -> Right (applyJavaArg acc jarg))) initialCall rargs)))))))
-          _ -> encodeApplication_fallback env aliases g typeApps (Core.applicationFunction app) (Core.applicationArgument app) cx g)))))
-
-encodeApplication_fallback :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> Graph.Graph -> [Core.Type] -> Core.Term -> Core.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeApplication_fallback env aliases gr typeApps lhs rhs cx g =
-    Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g (Annotations.termAnnotationInternal lhs))) (\mt -> Eithers.bind (Optionals.match mt (Checking.typeOfTerm cx g lhs) (\typ -> Right typ)) (\t -> case (Strip.deannotateTypeParameters (Strip.deannotateType t)) of
-      Core.TypeFunction v0 ->
-        let dom = Core.functionTypeDomain v0
-            cod = Core.functionTypeCodomain v0
-            defaultExpr =
-                    \_bug438_dflt -> Eithers.bind (encodeTerm env lhs cx g) (\jfun -> Eithers.bind (encodeTerm env rhs cx g) (\jarg -> Right (applyJavaArg jfun jarg)))
-            elimBranch =
-                    \_bug438_elim -> Eithers.bind (encodeTerm env rhs cx g) (\jarg -> Eithers.bind (Logic.ifElse (Logic.not (Lists.isEmpty (javaTypeArgumentsForType dom))) (Right dom) (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g (Annotations.termAnnotationInternal rhs))) (\mrt -> Optionals.match mrt (Eithers.bind (Checking.typeOfTerm cx g rhs) (\rt -> Right (Logic.ifElse (Logic.not (Lists.isEmpty (javaTypeArgumentsForType rt))) rt dom))) (\rt -> Right (Logic.ifElse (Logic.not (Lists.isEmpty (javaTypeArgumentsForType rt))) rt dom))))) (\enrichedDom -> encodeElimination env (Just jarg) enrichedDom cod (Strip.deannotateTerm lhs) cx g))
-        in case (Strip.deannotateAndDetypeTerm lhs) of
-          Core.TermProject _ -> elimBranch ()
-          Core.TermCases _ -> elimBranch ()
-          Core.TermUnwrap _ -> elimBranch ()
-          _ -> defaultExpr ()
-      _ -> Eithers.bind (encodeTerm env lhs cx g) (\jfun -> Eithers.bind (encodeTerm env rhs cx g) (\jarg -> Right (applyJavaArg jfun jarg)))))
-
-encodeDefinitions :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map Core.Name Syntax.CompilationUnit)
-encodeDefinitions overlaySubs mod defs cx g =
-
-      let aliases = Utils.importAliasesForModule overlaySubs mod
-          env =
-                  JavaEnvironment.JavaEnvironment {
-                    JavaEnvironment.javaEnvironmentAliases = aliases,
-                    JavaEnvironment.javaEnvironmentGraph = g}
-          pkg = Utils.javaPackageDeclaration (Packaging.moduleName mod)
-          partitioned = Environment.partitionDefinitions defs
-          typeDefs = Pairs.first partitioned
-          termDefs = Pairs.second partitioned
-          nonTypedefDefs =
-                  Lists.filter (\td ->
-                    let typ = Core.typeSchemeBody (Packaging.typeDefinitionBody td)
-                    in (isSerializableJavaType typ)) typeDefs
-      in (Eithers.bind (Eithers.mapList (\td -> encodeTypeDefinition pkg aliases td cx g) nonTypedefDefs) (\typeUnits -> Eithers.bind (Logic.ifElse (Lists.isEmpty termDefs) (Right []) (Eithers.bind (Eithers.mapList (\td -> encodeTermDefinition env td cx g) termDefs) (\dataMembers -> Right [
-        constructElementsInterface mod dataMembers]))) (\termUnits -> Right (Maps.fromList (Lists.concat2 typeUnits termUnits)))))
-
-encodeElimination :: JavaEnvironment.JavaEnvironment -> Maybe Syntax.Expression -> Core.Type -> Core.Type -> Core.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeElimination env marg dom cod elimTerm cx g =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-      in case (Strip.deannotateAndDetypeTerm elimTerm) of
-        Core.TermProject v0 ->
-          let fname = Core.projectionFieldName v0
-          in (Eithers.bind (encodeType aliases Sets.empty dom cx g) (\jdom0 -> Eithers.bind (Utils.javaTypeToJavaReferenceType jdom0 cx) (\_ -> Optionals.match marg (
-            let projVar = Core.Name "projected"
-                jbody =
-                        Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.variableToJavaIdentifier projVar) (Utils.javaIdentifier (Core.unName fname)))
-            in (Right (Utils.javaLambda projVar jbody))) (\jarg ->
-            let qual = Syntax.FieldAccess_QualifierPrimary (Utils.javaExpressionToJavaPrimary jarg)
-            in (Right (Utils.javaFieldAccessToJavaExpression (Syntax.FieldAccess {
-              Syntax.fieldAccessQualifier = qual,
-              Syntax.fieldAccessIdentifier = (Utils.javaIdentifier (Core.unName fname))})))))))
-        Core.TermCases v0 ->
-          let tname = Core.caseStatementTypeName v0
-              def_ = Core.caseStatementDefault v0
-              fields = Core.caseStatementCases v0
-          in (Optionals.match marg (
-            let uVar = Core.Name "u"
-                domTypeArgs0 =
-                        \ty -> \acc -> case (Strip.deannotateType ty) of
-                          Core.TypeApplication v1 -> domTypeArgs0 (Core.applicationTypeFunction v1) (Lists.cons (Core.applicationTypeArgument v1) acc)
-                          _ -> acc
-                domTypeArgs = domTypeArgs0 dom []
-                bareElim = Strip.deannotateAndDetypeTerm elimTerm
-                wrappedElimTerm =
-                        Lists.foldl (\trm -> \t -> Core.TermTypeApplication (Core.TypeApplicationTerm {
-                          Core.typeApplicationTermBody = trm,
-                          Core.typeApplicationTermType = t})) bareElim domTypeArgs
-                typedLambda =
-                        Core.TermLambda (Core.Lambda {
-                          Core.lambdaParameter = uVar,
-                          Core.lambdaDomain = (Just dom),
-                          Core.lambdaBody = (Core.TermApplication (Core.Application {
-                            Core.applicationFunction = wrappedElimTerm,
-                            Core.applicationArgument = (Core.TermVariable uVar)}))})
-            in (encodeTerm env typedLambda cx g)) (\jarg ->
-            let prim = Utils.javaExpressionToJavaPrimary jarg
-                consId = innerClassRef aliases tname JavaNames.partialVisitorName
-                effectiveCod = cod
-            in (Eithers.bind (encodeType aliases Sets.empty effectiveCod cx g) (\jcod -> Eithers.bind (Utils.javaTypeToJavaReferenceType jcod cx) (\rt -> Eithers.bind (domTypeArgs aliases dom cx g) (\domArgs ->
-              let targs = typeArgsOrDiamond (Lists.concat2 domArgs [
-                    Syntax.TypeArgumentReference rt])
-              in (Eithers.bind (Optionals.match def_ (Right []) (\d -> Eithers.bind (otherwiseBranch env aliases dom cod tname jcod domArgs d cx g) (\b -> Right [
-                b]))) (\otherwiseBranches -> Eithers.bind (Eithers.mapList (\f -> visitBranch env aliases dom tname jcod domArgs f cx g) fields) (\visitBranches ->
-                let body = Syntax.ClassBody (Lists.concat2 otherwiseBranches visitBranches)
-                    visitor = Utils.javaConstructorCall (Utils.javaConstructorName consId (Just targs)) [] (Just body)
-                in (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Right prim)) (Syntax.Identifier JavaNames.acceptMethodName) [
-                  visitor]))))))))))))
-        Core.TermUnwrap _ ->
-          let withArg =
-                  \ja -> Utils.javaFieldAccessToJavaExpression (Syntax.FieldAccess {
-                    Syntax.fieldAccessQualifier = (Syntax.FieldAccess_QualifierPrimary (Utils.javaExpressionToJavaPrimary ja)),
-                    Syntax.fieldAccessIdentifier = (Utils.javaIdentifier JavaNames.valueFieldName)})
-          in (Right (Optionals.match marg (
-            let wVar = Core.Name "wrapped"
-                wArg = Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier wVar)
-            in (Utils.javaLambda wVar (withArg wArg))) (\jarg -> withArg jarg)))
-        _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "unexpected " (Strings.concat2 "elimination case" (Strings.concat2 " in " "encodeElimination")))))
-
-encodeFunction :: JavaEnvironment.JavaEnvironment -> Core.Type -> Core.Type -> Core.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeFunction env dom cod funTerm cx g =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-          encodeLambdaFallback =
-                  \env2 -> \lam ->
-                    let lambdaVar = Core.lambdaParameter lam
-                        body = Core.lambdaBody lam
-                    in (Eithers.bind (analyzeJavaFunction env2 body cx g) (\fs ->
-                      let bindings = Typing.functionStructureBindings fs
-                          innerBody = Typing.functionStructureBody fs
-                          env3 = Typing.functionStructureEnvironment fs
-                      in (Eithers.bind (bindingsToStatements env3 bindings cx g) (\bindResult ->
-                        let bindingStmts = Pairs.first bindResult
-                            env4 = Pairs.second bindResult
-                        in (Eithers.bind (encodeTerm env4 innerBody cx g) (\jbody ->
-                          let lam1 =
-                                  Logic.ifElse (Lists.isEmpty bindings) (Utils.javaLambda lambdaVar jbody) (
-                                    let returnSt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jbody))
-                                    in (Utils.javaLambdaFromBlock lambdaVar (Syntax.Block (Lists.concat2 bindingStmts [
-                                      returnSt]))))
-                          in (applyCastIfSafe aliases (Core.TypeFunction (Core.FunctionType {
-                            Core.functionTypeDomain = dom,
-                            Core.functionTypeCodomain = cod})) lam1 cx g)))))))
-      in case (Strip.deannotateTerm funTerm) of
-        Core.TermProject _ -> encodeElimination env Nothing dom cod (Strip.deannotateTerm funTerm) cx g
-        Core.TermCases _ -> encodeElimination env Nothing dom cod (Strip.deannotateTerm funTerm) cx g
-        Core.TermUnwrap _ -> encodeElimination env Nothing dom cod (Strip.deannotateTerm funTerm) cx g
-        Core.TermLambda v0 -> withLambda env v0 (\env2 ->
-          let lambdaVar = Core.lambdaParameter v0
-              body = Core.lambdaBody v0
-          in case (Strip.deannotateTerm body) of
-            Core.TermLambda v1 -> case (Strip.deannotateType cod) of
-              Core.TypeFunction v2 ->
-                let dom2 = Core.functionTypeDomain v2
-                    cod2 = Core.functionTypeCodomain v2
-                in (Eithers.bind (encodeFunction env2 dom2 cod2 (Core.TermLambda v1) cx g) (\innerJavaLambda ->
-                  let lam1 = Utils.javaLambda lambdaVar innerJavaLambda
-                  in (applyCastIfSafe aliases (Core.TypeFunction (Core.FunctionType {
-                    Core.functionTypeDomain = dom,
-                    Core.functionTypeCodomain = cod})) lam1 cx g)))
-              _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "expected function type for lambda body, but got: " (PrintCore.type_ cod))))
-            _ -> encodeLambdaFallback env2 v0)
-        _ -> Right (encodeLiteral (Core.LiteralString (Strings.concat2 "Unimplemented function variant: " (PrintCore.term funTerm))))
-
-encodeFunctionFormTerm :: JavaEnvironment.JavaEnvironment -> [M.Map Core.Name Core.Term] -> Core.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeFunctionFormTerm env anns term cx g =
-
-      let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-      in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mt -> Eithers.bind (Optionals.match mt (Optionals.match (tryInferFunctionType term) (Checking.typeOfTerm cx g term) (\inferredType -> Right inferredType)) (\t -> Right t)) (\typ -> case (Strip.deannotateType typ) of
-        Core.TypeFunction v0 -> encodeFunction env (Core.functionTypeDomain v0) (Core.functionTypeCodomain v0) term cx g
-        _ -> encodeNullaryConstant env typ term cx g)))
-
-encodeFunctionPrimitiveByName :: JavaEnvironment.JavaEnvironment -> Core.Type -> Core.Type -> Core.Name -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeFunctionPrimitiveByName env dom cod name cx g =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-          classWithApply = Syntax.unIdentifier (elementJavaIdentifier True False aliases name)
-          suffix = Strings.concat2 "." JavaNames.applyMethodName
-          className =
-                  Strings.fromList (Lists.take (Math.sub (Strings.length classWithApply) (Strings.length suffix)) (Strings.toList classWithApply))
-          arity =
-                  Arity.typeArity (Core.TypeFunction (Core.FunctionType {
-                    Core.functionTypeDomain = dom,
-                    Core.functionTypeCodomain = cod}))
-      in (Logic.ifElse (Ordering.lte arity 1) (Right (Utils.javaIdentifierToJavaExpression (Syntax.Identifier (Strings.concat [
-        className,
-        "::",
-        JavaNames.applyMethodName])))) (
-        let paramNames = Lists.map (\i -> Core.Name (Strings.concat2 "p" (Literals.printInt32 i))) (Math.range 0 arity)
-            paramExprs = Lists.map (\p -> Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier p)) paramNames
-            classId = Syntax.Identifier className
-            call =
-                    Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic classId (Syntax.Identifier JavaNames.applyMethodName) paramExprs)
-            curried = buildCurriedLambda paramNames call
-        in (Eithers.bind (encodeType aliases Sets.empty (Core.TypeFunction (Core.FunctionType {
-          Core.functionTypeDomain = dom,
-          Core.functionTypeCodomain = cod})) cx g) (\jtype -> Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt -> Right (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression rt (Utils.javaExpressionToJavaUnaryExpression curried))))))))
-
-encodeLiteral :: Core.Literal -> Syntax.Expression
-encodeLiteral lit =
-    case lit of
-      Core.LiteralBinary v0 ->
-        let byteValues = Literals.binaryToBytes v0
-        in (Utils.javaArrayCreation Utils.javaBytePrimitiveType (Just (Utils.javaArrayInitializer (Lists.map (\w -> Utils.javaLiteralToJavaExpression (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int32ToBigint (Logic.ifElse (Ordering.gt w 127) (Math.sub w 256) w))))) byteValues))))
-      Core.LiteralBoolean v0 -> encodeLiteral_litExp (Utils.javaBoolean v0)
-      Core.LiteralDecimal v0 -> Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "java.math.BigDecimal") Nothing) [
-        encodeLiteral (Core.LiteralString (Literals.printDecimal v0))] Nothing
-      Core.LiteralFloat v0 -> encodeLiteral_encodeFloat v0
-      Core.LiteralInteger v0 -> encodeLiteral_encodeInteger v0
-      Core.LiteralString v0 -> encodeLiteral_litExp (Utils.javaString v0)
-
-encodeLiteralType :: Core.LiteralType -> t0 -> t1 -> Either t2 Syntax.Type
-encodeLiteralType lt cx g =
-    case lt of
-      Core.LiteralTypeBinary -> Right (Syntax.TypeReference (Syntax.ReferenceTypeArray (Syntax.ArrayType {
-        Syntax.arrayTypeDims = (Syntax.Dims [
-          []]),
-        Syntax.arrayTypeVariant = (Syntax.ArrayType_VariantPrimitive (Syntax.PrimitiveTypeWithAnnotations {
-          Syntax.primitiveTypeWithAnnotationsType = (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeByte)),
-          Syntax.primitiveTypeWithAnnotationsAnnotations = []}))})))
-      Core.LiteralTypeBoolean -> encodeLiteralType_simple "Boolean" cx g
-      Core.LiteralTypeDecimal -> Right (Utils.javaRefType [] (Just (JavaNames.javaPackageName [
-        "java",
-        "math"])) "BigDecimal")
-      Core.LiteralTypeFloat v0 -> case v0 of
-        Core.FloatTypeFloat32 -> encodeLiteralType_simple "Float" cx g
-        Core.FloatTypeFloat64 -> encodeLiteralType_simple "Double" cx g
-      Core.LiteralTypeInteger v0 -> case v0 of
-        Core.IntegerTypeBigint -> Right (Utils.javaRefType [] (Just (JavaNames.javaPackageName [
-          "java",
-          "math"])) "BigInteger")
-        Core.IntegerTypeInt8 -> encodeLiteralType_simple "Byte" cx g
-        Core.IntegerTypeInt16 -> encodeLiteralType_simple "Short" cx g
-        Core.IntegerTypeInt32 -> encodeLiteralType_simple "Integer" cx g
-        Core.IntegerTypeInt64 -> encodeLiteralType_simple "Long" cx g
-        Core.IntegerTypeUint8 -> encodeLiteralType_simple "Short" cx g
-        Core.IntegerTypeUint16 -> encodeLiteralType_simple "Character" cx g
-        Core.IntegerTypeUint32 -> encodeLiteralType_simple "Long" cx g
-        Core.IntegerTypeUint64 -> Right (Utils.javaRefType [] (Just (JavaNames.javaPackageName [
-          "java",
-          "math"])) "BigInteger")
-      Core.LiteralTypeString -> encodeLiteralType_simple "String" cx g
-
-encodeLiteralType_simple :: String -> t0 -> t1 -> Either t2 Syntax.Type
-encodeLiteralType_simple n cx g = Right (Utils.javaRefType [] Nothing n)
-
-encodeLiteral_encodeFloat :: Core.FloatValue -> Syntax.Expression
-encodeLiteral_encodeFloat f =
-    case f of
-      Core.FloatValueFloat32 v0 -> encodeLiteral_encodeFloat32 v0
-      Core.FloatValueFloat64 v0 -> encodeLiteral_encodeFloat64 v0
-
-encodeLiteral_encodeFloat32 :: Float -> Syntax.Expression
-encodeLiteral_encodeFloat32 v =
-
-      let s = Literals.printFloat32 v
-      in (Logic.ifElse (Equality.equal s "NaN") (encodeLiteral_javaSpecialFloatExpr "Float" "NaN") (Logic.ifElse (Equality.equal s "Infinity") (encodeLiteral_javaSpecialFloatExpr "Float" "POSITIVE_INFINITY") (Logic.ifElse (Equality.equal s "-Infinity") (encodeLiteral_javaSpecialFloatExpr "Float" "NEGATIVE_INFINITY") (encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeFloatingPoint Syntax.FloatingPointTypeFloat)) (encodeLiteral_litExp (Syntax.LiteralFloatingPoint (Syntax.FloatingPointLiteral (Literals.float32ToFloat64 v))))))))
-
-encodeLiteral_encodeFloat64 :: Double -> Syntax.Expression
-encodeLiteral_encodeFloat64 v =
-
-      let s = Literals.printFloat64 v
-      in (Logic.ifElse (Equality.equal s "NaN") (encodeLiteral_javaSpecialFloatExpr "Double" "NaN") (Logic.ifElse (Equality.equal s "Infinity") (encodeLiteral_javaSpecialFloatExpr "Double" "POSITIVE_INFINITY") (Logic.ifElse (Equality.equal s "-Infinity") (encodeLiteral_javaSpecialFloatExpr "Double" "NEGATIVE_INFINITY") (Logic.ifElse (Equality.equal s "-0.0") (encodeLiteral_javaParseDouble "-0.0") (encodeLiteral_litExp (Syntax.LiteralFloatingPoint (Syntax.FloatingPointLiteral v)))))))
-
-encodeLiteral_encodeInteger :: Core.IntegerValue -> Syntax.Expression
-encodeLiteral_encodeInteger i =
-    case i of
-      Core.IntegerValueBigint v0 -> Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "java.math.BigInteger") Nothing) [
-        encodeLiteral (Core.LiteralString (Literals.printBigint v0))] Nothing
-      Core.IntegerValueInt8 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeByte)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int8ToBigint v0))))
-      Core.IntegerValueInt16 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeShort)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int16ToBigint v0))))
-      Core.IntegerValueInt32 v0 -> encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int32ToBigint v0)))
-      Core.IntegerValueInt64 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeLong)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int64ToBigint v0))))
-      Core.IntegerValueUint8 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeShort)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.uint8ToBigint v0))))
-      Core.IntegerValueUint16 v0 -> encodeLiteral_litExp (Syntax.LiteralCharacter v0)
-      Core.IntegerValueUint32 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeLong)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.uint32ToBigint v0))))
-      Core.IntegerValueUint64 v0 -> Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "java.math.BigInteger") Nothing) [
-        encodeLiteral (Core.LiteralString (Literals.printBigint (Literals.uint64ToBigint v0)))] Nothing
-
-encodeLiteral_javaParseDouble :: String -> Syntax.Expression
-encodeLiteral_javaParseDouble value =
-    Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "Double") (Syntax.Identifier "parseDouble") [
-      encodeLiteral (Core.LiteralString value)])
-
-encodeLiteral_javaSpecialFloatExpr :: String -> String -> Syntax.Expression
-encodeLiteral_javaSpecialFloatExpr className fieldName =
-    Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
-      Syntax.expressionNameQualifier = (Just (Syntax.AmbiguousName [
-        Syntax.Identifier className])),
-      Syntax.expressionNameIdentifier = (Syntax.Identifier fieldName)})
-
-encodeLiteral_litExp :: Syntax.Literal -> Syntax.Expression
-encodeLiteral_litExp l = Utils.javaLiteralToJavaExpression l
-
-encodeLiteral_primCast :: Syntax.PrimitiveType -> Syntax.Expression -> Syntax.Expression
-encodeLiteral_primCast pt expr =
-    Utils.javaCastExpressionToJavaExpression (Utils.javaCastPrimitive pt (Utils.javaExpressionToJavaUnaryExpression expr))
-
-encodeNullaryConstant :: t0 -> t1 -> Core.Term -> t2 -> t3 -> Either Errors.Error t4
-encodeNullaryConstant env typ funTerm cx g =
-    Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "unexpected " (Strings.concat2 "nullary function" (Strings.concat2 " in " (PrintCore.term funTerm))))))
-
-encodeNullaryConstant_typeArgsFromReturnType :: JavaEnvironment.Aliases -> Core.Type -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.TypeArgument]
-encodeNullaryConstant_typeArgsFromReturnType aliases t cx g =
-    case (Strip.deannotateType t) of
-      Core.TypeSet v0 -> Eithers.bind (encodeType aliases Sets.empty v0 cx g) (\jst -> Eithers.bind (Utils.javaTypeToJavaReferenceType jst cx) (\rt -> Right [
-        Syntax.TypeArgumentReference rt]))
-      Core.TypeList v0 -> Eithers.bind (encodeType aliases Sets.empty v0 cx g) (\jlt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jlt cx) (\rt -> Right [
-        Syntax.TypeArgumentReference rt]))
-      Core.TypeOptional v0 -> Eithers.bind (encodeType aliases Sets.empty v0 cx g) (\jmt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jmt cx) (\rt -> Right [
-        Syntax.TypeArgumentReference rt]))
-      Core.TypeMap v0 -> Eithers.bind (encodeType aliases Sets.empty (Core.mapTypeKeys v0) cx g) (\jkt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jkt cx) (\rk -> Eithers.bind (encodeType aliases Sets.empty (Core.mapTypeValues v0) cx g) (\jvt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jvt cx) (\rv -> Right [
-        Syntax.TypeArgumentReference rk,
-        (Syntax.TypeArgumentReference rv)]))))
-      _ -> Right []
-
-encodeNullaryPrimitiveByName :: JavaEnvironment.JavaEnvironment -> Core.Type -> Core.Name -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeNullaryPrimitiveByName env typ name cx g =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-      in (Eithers.bind (encodeNullaryConstant_typeArgsFromReturnType aliases typ cx g) (\targs -> Logic.ifElse (Lists.isEmpty targs) (
-        let header = Syntax.MethodInvocation_HeaderSimple (Syntax.MethodName (elementJavaIdentifier True False aliases name))
-        in (Right (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
-          Syntax.methodInvocationHeader = header,
-          Syntax.methodInvocationArguments = []})))) (
-        let fullName = Syntax.unIdentifier (elementJavaIdentifier True False aliases name)
-            parts = Strings.splitOn "." fullName
-            className = Syntax.Identifier (Strings.join "." (Optionals.withDefault [] (Lists.init parts)))
-            methodName = Syntax.Identifier (Optionals.withDefault fullName (Lists.last parts))
-        in (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs className methodName targs []))))))
-
-encodeTerm :: JavaEnvironment.JavaEnvironment -> Core.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeTerm env term cx g = encodeTermInternal env [] [] term cx g
-
-encodeTermDefinition :: JavaEnvironment.JavaEnvironment -> Packaging.TermDefinition -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.InterfaceMemberDeclarationWithComments
-encodeTermDefinition env tdef cx g =
-
-      let name = Packaging.termDefinitionName tdef
-          term0 = Packaging.termDefinitionBody tdef
-      in (Eithers.bind (Annotations.getTermDescription cx g term0) (\mDoc ->
-        let ts =
-                Optionals.match (Packaging.termDefinitionSignature tdef) (Core.TypeScheme {
-                  Core.typeSchemeVariables = [],
-                  Core.typeSchemeBody = (Core.TypeVariable (Core.Name "hydra.core.Unit")),
-                  Core.typeSchemeConstraints = Maps.empty}) (\sig -> Scoping.termSignatureToTypeScheme sig)
-            term = Variables.unshadowVariables term0
-        in (Eithers.bind (analyzeJavaFunction env term cx g) (\fs ->
-          let schemeVars = Lists.filter (\v -> isSimpleName v) (Core.typeSchemeVariables ts)
-              termVars = Typing.functionStructureTypeParams fs
-              schemeTypeVars = collectTypeVars (Core.typeSchemeBody ts)
-              usedSchemeVars = Lists.filter (\v -> Sets.member v schemeTypeVars) schemeVars
-              tparams = Logic.ifElse (Lists.isEmpty usedSchemeVars) termVars usedSchemeVars
-              params = Typing.functionStructureParams fs
-              bindings = Typing.functionStructureBindings fs
-              body = Typing.functionStructureBody fs
-              doms = Typing.functionStructureDomains fs
-              env2 = Typing.functionStructureEnvironment fs
-              schemeType = Core.typeSchemeBody ts
-              numParams = Lists.length params
-              peelResult = peelDomainsAndCod numParams schemeType
-              schemeDoms = Pairs.first peelResult
-              cod = Pairs.second peelResult
-              schemeVarSet = Sets.fromList tparams
-          in (Eithers.bind (Logic.ifElse (Lists.isEmpty tparams) (Right Maps.empty) (buildSubstFromAnnotations schemeVarSet term cx g)) (\typeVarSubst ->
-            let overgenSubst = detectAccumulatorUnification schemeDoms cod tparams
-                overgenVarSubst =
-                        Maps.fromList (Optionals.givens (Lists.map (\entry ->
-                          let k = Pairs.first entry
-                              v = Pairs.second entry
-                          in case v of
-                            Core.TypeVariable v0 -> Just (k, v0)
-                            _ -> Nothing) (Maps.toList overgenSubst)))
-                fixedCod = Logic.ifElse (Maps.isEmpty overgenSubst) cod (substituteTypeVarsWithTypes overgenSubst cod)
-                fixedDoms =
-                        Logic.ifElse (Maps.isEmpty overgenSubst) schemeDoms (Lists.map (\d -> substituteTypeVarsWithTypes overgenSubst d) schemeDoms)
-                fixedTparams =
-                        Logic.ifElse (Maps.isEmpty overgenSubst) tparams (Lists.filter (\v -> Logic.not (Maps.member v overgenSubst)) tparams)
-                constraints = Core.typeSchemeConstraints ts
-                jparams = Lists.map (\v -> Utils.javaTypeParameter (Formatting.capitalize (Core.unName v))) fixedTparams
-                aliases2base = JavaEnvironment.javaEnvironmentAliases env2
-                trustedVars = Sets.unions (Lists.map (\d -> collectTypeVars d) (Lists.concat2 fixedDoms [
-                      fixedCod]))
-                fixedSchemeVarSet = Sets.fromList fixedTparams
-                aliases2 =
-                        JavaEnvironment.Aliases {
-                          JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases2base),
-                          JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases2base),
-                          JavaEnvironment.aliasesBranchVars = (JavaEnvironment.aliasesBranchVars aliases2base),
-                          JavaEnvironment.aliasesRecursiveVars = (JavaEnvironment.aliasesRecursiveVars aliases2base),
-                          JavaEnvironment.aliasesInScopeTypeParams = fixedSchemeVarSet,
-                          JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases2base),
-                          JavaEnvironment.aliasesInScopeJavaVars = (JavaEnvironment.aliasesInScopeJavaVars aliases2base),
-                          JavaEnvironment.aliasesVarRenames = (JavaEnvironment.aliasesVarRenames aliases2base),
-                          JavaEnvironment.aliasesLambdaVars = (Sets.union (JavaEnvironment.aliasesLambdaVars aliases2base) (Sets.fromList params)),
-                          JavaEnvironment.aliasesTypeVarSubst = (Maps.union overgenVarSubst typeVarSubst),
-                          JavaEnvironment.aliasesTrustedTypeVars = (Sets.intersection trustedVars fixedSchemeVarSet),
-                          JavaEnvironment.aliasesMethodCodomain = (Just fixedCod),
-                          JavaEnvironment.aliasesThunkedVars = (JavaEnvironment.aliasesThunkedVars aliases2base)}
-                env2WithTypeParams =
-                        JavaEnvironment.JavaEnvironment {
-                          JavaEnvironment.javaEnvironmentAliases = aliases2,
-                          JavaEnvironment.javaEnvironmentGraph = (JavaEnvironment.javaEnvironmentGraph env2)}
-            in (Eithers.bind (bindingsToStatements env2WithTypeParams bindings cx g) (\bindResult ->
-              let bindingStmts = Pairs.first bindResult
-                  env3 = Pairs.second bindResult
-              in (Eithers.bind (Logic.ifElse (Maps.isEmpty overgenSubst) (Right body) (applyOvergenSubstToTermAnnotations overgenSubst body cx g)) (\body_ ->
-                let annotatedBody = propagateTypesInAppChain fixedCod fixedCod body_
-                in (Eithers.bind (Eithers.mapList (\pair -> Eithers.bind (encodeType aliases2 Sets.empty (Pairs.first pair) cx g) (\jdom -> Right (Utils.javaTypeToJavaFormalParameter jdom (Pairs.second pair)))) (Lists.zip fixedDoms params)) (\jformalParams -> Eithers.bind (encodeType aliases2 Sets.empty fixedCod cx g) (\jcod ->
-                  let result = Utils.javaTypeToJavaResult jcod
-                      mods = [
-                            Syntax.InterfaceMethodModifierStatic]
-                      jname = Utils.sanitizeJavaName (Formatting.decapitalize (Names.localNameOf name))
-                      isTCO = Logic.and (Logic.not (Lists.isEmpty params)) (Analysis.isSelfTailRecursive name body)
-                  in (Eithers.bind (Logic.ifElse isTCO (
-                    let tcoSuffix = "_tco"
-                        snapshotNames = Lists.map (\p -> Core.Name (Strings.concat2 (Core.unName p) tcoSuffix)) params
-                        tcoVarRenames = Maps.fromList (Lists.zip params snapshotNames)
-                        snapshotDecls =
-                                Lists.map (\pair -> Utils.finalVarDeclarationStatement (Utils.variableToJavaIdentifier (Pairs.second pair)) (Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier (Pairs.first pair)))) (Lists.zip params snapshotNames)
-                        tcoBody =
-                                Logic.ifElse (Lists.isEmpty bindings) annotatedBody (Core.TermLet (Core.Let {
-                                  Core.letBindings = bindings,
-                                  Core.letBody = annotatedBody}))
-                    in (Eithers.bind (encodeTermTCO env2WithTypeParams name params tparams tcoVarRenames 0 tcoBody cx g) (\tcoStmts ->
-                      let whileBodyStmts = Lists.concat2 snapshotDecls tcoStmts
-                          whileBodyBlock =
-                                  Syntax.StatementWithoutTrailing (Syntax.StatementWithoutTrailingSubstatementBlock (Syntax.Block whileBodyStmts))
-                          noCond = Nothing
-                          whileStmt =
-                                  Syntax.BlockStatementStatement (Syntax.StatementWhile (Syntax.WhileStatement {
-                                    Syntax.whileStatementCond = noCond,
-                                    Syntax.whileStatementBody = whileBodyBlock}))
-                      in (Right [
-                        whileStmt])))) (Eithers.bind (encodeTerm env3 annotatedBody cx g) (\jbody ->
-                    let returnSt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jbody))
-                    in (Right (Lists.concat2 bindingStmts [
-                      returnSt]))))) (\methodBody ->
-                    let imdMember = Utils.interfaceMethodDeclaration mods jparams jname jformalParams result (Just methodBody)
-                    in (Right (Optionals.match mDoc (noInterfaceComment imdMember) (\doc -> withInterfaceCommentString doc imdMember))))))))))))))))))
-
-encodeTermInternal :: JavaEnvironment.JavaEnvironment -> [M.Map Core.Name Core.Term] -> [Syntax.Type] -> Core.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeTermInternal env anns tyapps term cx g0 =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-          g = JavaEnvironment.javaEnvironmentGraph env
-          encode = \t -> encodeTerm env t cx g
-      in case term of
-        Core.TermAnnotated v0 -> encodeTermInternal env (Lists.cons (Annotations.getAnnotationMap (Core.annotatedTermAnnotation v0)) anns) tyapps (Core.annotatedTermBody v0) cx g
-        Core.TermApplication v0 -> encodeApplication env v0 cx g
-        Core.TermEither v0 -> Eithers.bind (Logic.ifElse (Lists.isEmpty tyapps) (Right Nothing) (Eithers.bind (takeTypeArgs "either" 2 tyapps cx g) (\ta -> Right (Just ta)))) (\mtargs ->
-          let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-          in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mEitherType ->
-            let branchTypes =
-                    Optionals.bind mEitherType (\etyp -> case (Strip.deannotateType etyp) of
-                      Core.TypeEither v1 -> Just (Core.eitherTypeLeft v1, (Core.eitherTypeRight v1))
-                      _ -> Nothing)
-                encodeWithType =
-                        \branchType -> \t1 ->
-                          let annotated = Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ branchType)) t1
-                          in (encodeTermInternal env anns [] annotated cx g)
-                eitherCall =
-                        \methodName -> \expr -> Optionals.match mtargs (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.overlay.java.util.Either") (Syntax.Identifier methodName) [
-                          expr])) (\targs -> Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.Either") (Syntax.Identifier methodName) targs [
-                          expr]))
-            in (Eithers.either (\term1 -> Eithers.bind (Optionals.match branchTypes (encode term1) (\bt -> encodeWithType (Pairs.first bt) term1)) (\expr -> Right (eitherCall "left" expr))) (\term1 -> Eithers.bind (Optionals.match branchTypes (encode term1) (\bt -> encodeWithType (Pairs.second bt) term1)) (\expr -> Right (eitherCall "right" expr))) v0))))
-        Core.TermLambda _ -> encodeFunctionFormTerm env anns term cx g
-        Core.TermProject _ -> encodeFunctionFormTerm env anns term cx g
-        Core.TermCases _ -> encodeFunctionFormTerm env anns term cx g
-        Core.TermUnwrap _ -> encodeFunctionFormTerm env anns term cx g
-        Core.TermLet v0 ->
-          let bindings = Core.letBindings v0
-              body = Core.letBody v0
-          in (Logic.ifElse (Lists.isEmpty bindings) (encodeTermInternal env anns [] body cx g) (Eithers.bind (bindingsToStatements env bindings cx g) (\bindResult ->
-            let bindingStmts = Pairs.first bindResult
-                env2 = Pairs.second bindResult
-            in (Eithers.bind (encodeTermInternal env2 anns [] body cx g) (\jbody ->
-              let returnSt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jbody))
-                  block = Syntax.Block (Lists.concat2 bindingStmts [
-                        returnSt])
-                  nullaryLambda =
-                          Syntax.ExpressionLambda (Syntax.LambdaExpression {
-                            Syntax.lambdaExpressionParameters = (Syntax.LambdaParametersTuple []),
-                            Syntax.lambdaExpressionBody = (Syntax.LambdaBodyBlock block)})
-                  combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-                  g2 = JavaEnvironment.javaEnvironmentGraph env2
-                  aliases2 = JavaEnvironment.javaEnvironmentAliases env2
-              in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mt -> Eithers.bind (Optionals.match mt (Checking.typeOfTerm cx g2 body) (\t -> Right t)) (\letType -> Eithers.bind (encodeType aliases2 Sets.empty letType cx g) (\jLetType -> Eithers.bind (Utils.javaTypeToJavaReferenceType jLetType cx) (\rt ->
-                let supplierRt =
-                        Syntax.ReferenceTypeClassOrInterface (Syntax.ClassOrInterfaceTypeClass (Utils.javaClassType [
-                          rt] JavaNames.javaUtilFunctionPackageName "Supplier"))
-                    castExpr =
-                            Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression supplierRt (Utils.javaExpressionToJavaUnaryExpression nullaryLambda))
-                in (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Right (Utils.javaExpressionToJavaPrimary castExpr))) (Syntax.Identifier "get") [])))))))))))))
-        Core.TermList v0 -> Logic.ifElse (Lists.isEmpty v0) (Logic.ifElse (Lists.isEmpty tyapps) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.overlay.java.util.ConsList") (Syntax.Identifier "empty") []))) (Eithers.bind (takeTypeArgs "list" 1 tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.ConsList") (Syntax.Identifier "empty") targs []))))) (Eithers.bind (Eithers.mapList encode v0) (\jels -> Eithers.bind (collectionTypeArgs "list" 1 aliases anns tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.ConsList") (Syntax.Identifier "of") targs jels)))))
-        Core.TermLiteral v0 -> Right (encodeLiteral v0)
-        Core.TermMap v0 -> Logic.ifElse (Maps.isEmpty v0) (Logic.ifElse (Lists.isEmpty tyapps) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.overlay.java.util.PersistentMap") (Syntax.Identifier "empty") []))) (Eithers.bind (takeTypeArgs "map" 2 tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.PersistentMap") (Syntax.Identifier "empty") targs []))))) (Eithers.bind (Eithers.mapList encode (Maps.keys v0)) (\jkeys -> Eithers.bind (Eithers.mapList encode (Maps.elems v0)) (\jvals ->
-          let pairExprs =
-                  Lists.map (\kv -> Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "java.util.Map") (Syntax.Identifier "entry") [
-                    Pairs.first kv,
-                    (Pairs.second kv)])) (Lists.zip jkeys jvals)
-          in (Eithers.bind (collectionTypeArgs "map" 2 aliases anns tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.PersistentMap") (Syntax.Identifier "ofEntries") targs pairExprs)))))))
-        Core.TermOptional v0 -> Optionals.match v0 (Logic.ifElse (Lists.isEmpty tyapps) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.overlay.java.util.Optional") (Syntax.Identifier "none") []))) (Eithers.bind (takeTypeArgs "optional" 1 tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.Optional") (Syntax.Identifier "none") targs []))))) (\term1 -> Eithers.bind (encode term1) (\expr -> Eithers.bind (collectionTypeArgs "optional" 1 aliases anns tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.Optional") (Syntax.Identifier "given") targs [
-          expr])))))
-        Core.TermPair v0 -> Eithers.bind (encode (Pairs.first v0)) (\jterm1 -> Eithers.bind (encode (Pairs.second v0)) (\jterm2 -> Eithers.bind (Logic.ifElse (Lists.isEmpty tyapps) (Right Nothing) (Eithers.bind (Eithers.mapList (\jt -> Utils.javaTypeToJavaReferenceType jt cx) tyapps) (\rts -> Right (Just (Syntax.TypeArgumentsOrDiamondArguments (Lists.map (\rt -> Syntax.TypeArgumentReference rt) rts)))))) (\mtargs -> Right (Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "hydra.overlay.java.util.Pair") mtargs) [
-          jterm1,
-          jterm2] Nothing))))
-        Core.TermRecord v0 ->
-          let recName = Core.recordTypeName v0
-              mRecordType = Eithers.either (\_ -> Nothing) (\t -> Just t) (Resolution.requireType cx g recName)
-              strippedRecTyp = Optionals.map (\recTyp -> stripForalls (Strip.deannotateType recTyp)) mRecordType
-              mFieldTypeMap =
-                      Optionals.bind strippedRecTyp (\bodyTyp -> case bodyTyp of
-                        Core.TypeRecord v1 -> Just (Maps.fromList (Lists.map (\ft -> (Core.fieldTypeName ft, (Core.fieldTypeType ft))) v1))
-                        _ -> Nothing)
-              combinedAnnsRec = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-          in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnnsRec)) (\mAnnotType ->
-            let mTypeSubst =
-                    Optionals.bind mAnnotType (\annTyp -> Optionals.bind mRecordType (\recTyp ->
-                      let args = extractTypeApplicationArgs (Strip.deannotateType annTyp)
-                          params = collectForallParams (Strip.deannotateType recTyp)
-                      in (Logic.ifElse (Logic.or (Lists.isEmpty args) (Logic.not (Equality.equal (Lists.length args) (Lists.length params)))) Nothing (Just (Maps.fromList (Lists.zip params args))))))
-                encodeField =
-                        \fld -> Optionals.match mFieldTypeMap (encode (Core.fieldTerm fld)) (\ftmap ->
-                          let mftyp = Maps.lookup (Core.fieldName fld) ftmap
-                          in (Optionals.match mftyp (encode (Core.fieldTerm fld)) (\ftyp ->
-                            let resolvedType = Optionals.match mTypeSubst ftyp (\subst -> applySubstFull subst ftyp)
-                                annotatedFieldTerm =
-                                        Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ resolvedType)) (Core.fieldTerm fld)
-                            in (encodeTermInternal env anns [] annotatedFieldTerm cx g))))
-            in (Eithers.bind (Eithers.mapList encodeField (Core.recordFields v0)) (\fieldExprs ->
-              let consId = Utils.nameToJavaName aliases recName
-              in (Eithers.bind (Logic.ifElse (Logic.not (Lists.isEmpty tyapps)) (Eithers.bind (Eithers.mapList (\jt -> Utils.javaTypeToJavaReferenceType jt cx) tyapps) (\rts -> Right (Just (Syntax.TypeArgumentsOrDiamondArguments (Lists.map (\rt -> Syntax.TypeArgumentReference rt) rts))))) (
-                let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-                in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mtyp -> Optionals.match mtyp (Right Nothing) (\annTyp ->
-                  let typeArgs = extractTypeApplicationArgs (Strip.deannotateType annTyp)
-                  in (Logic.ifElse (Lists.isEmpty typeArgs) (Right Nothing) (Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Utils.javaTypeToJavaReferenceType jt cx)) typeArgs) (\jTypeArgs -> Right (Just (Syntax.TypeArgumentsOrDiamondArguments (Lists.map (\rt -> Syntax.TypeArgumentReference rt) jTypeArgs))))))))))) (\mtargs -> Right (Utils.javaConstructorCall (Utils.javaConstructorName consId mtargs) fieldExprs Nothing)))))))
-        Core.TermSet v0 -> Logic.ifElse (Sets.isEmpty v0) (Logic.ifElse (Lists.isEmpty tyapps) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.overlay.java.util.PersistentSet") (Syntax.Identifier "empty") []))) (Eithers.bind (takeTypeArgs "set" 1 tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.PersistentSet") (Syntax.Identifier "empty") targs []))))) (
-          let slist = Sets.toList v0
-          in (Eithers.bind (Eithers.mapList encode slist) (\jels -> Eithers.bind (collectionTypeArgs "set" 1 aliases anns tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.PersistentSet") (Syntax.Identifier "of") targs jels))))))
-        Core.TermTypeLambda v0 -> withTypeLambda env v0 (\env2 ->
-          let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-          in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mtyp ->
-            let annotatedBody =
-                    Optionals.match mtyp (Core.typeLambdaBody v0) (\t -> case t of
-                      Core.TypeForall v1 -> Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ (Core.forallTypeBody v1))) (Core.typeLambdaBody v0)
-                      _ -> Core.typeLambdaBody v0)
-            in (encodeTerm env2 annotatedBody cx g))))
-        Core.TermInject v0 ->
-          let injTypeName = Core.injectionTypeName v0
-              injField = Core.injectionField v0
-              injFieldName = Core.fieldName injField
-              injFieldTerm = Core.fieldTerm injField
-              typeId = Syntax.unIdentifier (Utils.nameToJavaName aliases injTypeName)
-              consId =
-                      Syntax.Identifier (Strings.concat [
-                        typeId,
-                        ".",
-                        (Utils.sanitizeJavaName (Formatting.capitalize (Core.unName injFieldName)))])
-          in (Eithers.bind (isFieldUnitType injTypeName injFieldName cx g) (\fieldIsUnit -> Eithers.bind (Logic.ifElse (Logic.or (Predicates.isUnitTerm (Strip.deannotateTerm injFieldTerm)) fieldIsUnit) (Right []) (Eithers.bind (encode injFieldTerm) (\ex -> Right [
-            ex]))) (\args -> Right (Utils.javaConstructorCall (Utils.javaConstructorName consId Nothing) args Nothing))))
-        Core.TermVariable v0 -> Optionals.match (Maps.lookup v0 (Graph.graphPrimitives g)) (encodeVariable env v0 cx g) (\_ ->
-          let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-          in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mt -> Eithers.bind (Optionals.match mt (Checking.typeOfTerm cx g term) (\t -> Right t)) (\typ -> case (Strip.deannotateType typ) of
-            Core.TypeFunction v1 -> encodeFunctionPrimitiveByName env (Core.functionTypeDomain v1) (Core.functionTypeCodomain v1) v0 cx g
-            _ -> encodeNullaryPrimitiveByName env typ v0 cx g))))
-        Core.TermUnit -> Right (Utils.javaLiteralToJavaExpression Syntax.LiteralNull)
-        Core.TermWrap v0 -> Eithers.bind (encode (Core.wrappedTermBody v0)) (\jarg -> Right (Utils.javaConstructorCall (Utils.javaConstructorName (Utils.nameToJavaName aliases (Core.wrappedTermTypeName v0)) Nothing) [
-          jarg] Nothing))
-        Core.TermTypeApplication v0 ->
-          let atyp = Core.typeApplicationTermType v0
-              body = Core.typeApplicationTermBody v0
-          in (Eithers.bind (encodeType aliases Sets.empty atyp cx g) (\jatyp ->
-            let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
-            in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mtyp -> Eithers.bind (Optionals.match mtyp (Checking.typeOfTerm cx g term) (\t -> Right t)) (\typ ->
-              let collected0 = collectTypeApps0 body [
-                    atyp]
-                  innermostBody0 = Pairs.first collected0
-                  allTypeArgs0 = Pairs.second collected0
-              in (Eithers.bind (correctCastType innermostBody0 allTypeArgs0 typ cx g) (\correctedTyp ->
-                let collected = collectTypeApps body [
-                      atyp]
-                    innermostBody = Pairs.first collected
-                    allTypeArgs = Pairs.second collected
-                in case innermostBody of
-                  Core.TermVariable v1 -> Eithers.bind (classifyDataReference v1 cx g) (\cls -> typeAppNullaryOrHoisted env aliases anns tyapps jatyp body correctedTyp v1 cls allTypeArgs cx g)
-                  Core.TermEither v1 -> Logic.ifElse (Equality.equal (Lists.length allTypeArgs) 2) (
-                    let eitherBranchTypes =
-                            (Optionals.withDefault correctedTyp (Lists.at 0 allTypeArgs), (Optionals.withDefault correctedTyp (Lists.at 1 allTypeArgs)))
-                    in (Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Utils.javaTypeToJavaReferenceType jt cx)) allTypeArgs) (\jTypeArgs ->
-                      let eitherTargs = Lists.map (\rt -> Syntax.TypeArgumentReference rt) jTypeArgs
-                          encodeEitherBranch =
-                                  \branchType -> \t1 ->
-                                    let annotated = Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ branchType)) t1
-                                    in (encodeTermInternal env anns [] annotated cx g)
-                      in (Eithers.either (\term1 -> Eithers.bind (encodeEitherBranch (Pairs.first eitherBranchTypes) term1) (\expr -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.Either") (Syntax.Identifier "left") eitherTargs [
-                        expr])))) (\term1 -> Eithers.bind (encodeEitherBranch (Pairs.second eitherBranchTypes) term1) (\expr -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.overlay.java.util.Either") (Syntax.Identifier "right") eitherTargs [
-                        expr])))) v1)))) (typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g)
-                  _ -> typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g)))))))
-        _ -> Right (encodeLiteral (Core.LiteralString "Unimplemented term variant"))
-
-encodeTermTCO :: JavaEnvironment.JavaEnvironment -> Core.Name -> [Core.Name] -> [Core.Name] -> M.Map Core.Name Core.Name -> Int -> Core.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error [Syntax.BlockStatement]
-encodeTermTCO env0 funcName paramNames tparams tcoVarRenames tcoDepth term cx g =
-
-      let aliases0 = JavaEnvironment.javaEnvironmentAliases env0
-          env =
-                  JavaEnvironment.JavaEnvironment {
-                    JavaEnvironment.javaEnvironmentAliases = JavaEnvironment.Aliases {
-                      JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases0),
-                      JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases0),
-                      JavaEnvironment.aliasesBranchVars = (JavaEnvironment.aliasesBranchVars aliases0),
-                      JavaEnvironment.aliasesRecursiveVars = (JavaEnvironment.aliasesRecursiveVars aliases0),
-                      JavaEnvironment.aliasesInScopeTypeParams = (JavaEnvironment.aliasesInScopeTypeParams aliases0),
-                      JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases0),
-                      JavaEnvironment.aliasesInScopeJavaVars = (JavaEnvironment.aliasesInScopeJavaVars aliases0),
-                      JavaEnvironment.aliasesVarRenames = (Maps.union tcoVarRenames (JavaEnvironment.aliasesVarRenames aliases0)),
-                      JavaEnvironment.aliasesLambdaVars = (JavaEnvironment.aliasesLambdaVars aliases0),
-                      JavaEnvironment.aliasesTypeVarSubst = (JavaEnvironment.aliasesTypeVarSubst aliases0),
-                      JavaEnvironment.aliasesTrustedTypeVars = (JavaEnvironment.aliasesTrustedTypeVars aliases0),
-                      JavaEnvironment.aliasesMethodCodomain = (JavaEnvironment.aliasesMethodCodomain aliases0),
-                      JavaEnvironment.aliasesThunkedVars = (JavaEnvironment.aliasesThunkedVars aliases0)},
-                    JavaEnvironment.javaEnvironmentGraph = (JavaEnvironment.javaEnvironmentGraph env0)}
-          stripped = Strip.deannotateAndDetypeTerm term
-          gathered = Analysis.gatherApplications stripped
-          gatherArgs = Pairs.first gathered
-          gatherFun = Pairs.second gathered
-          strippedFun = Strip.deannotateAndDetypeTerm gatherFun
-          isSelfCall =
-                  case strippedFun of
-                    Core.TermVariable v0 -> Equality.equal v0 funcName
-                    _ -> False
-      in (Logic.ifElse (Logic.and isSelfCall (Equality.equal (Lists.length gatherArgs) (Lists.length paramNames))) (
-        let changePairs =
-                Lists.filter (\pair -> Logic.not (case (Strip.deannotateAndDetypeTerm (Pairs.second pair)) of
-                  Core.TermVariable v0 -> Equality.equal v0 (Pairs.first pair)
-                  _ -> False)) (Lists.zip paramNames gatherArgs)
-            changedParams = Lists.map Pairs.first changePairs
-        in (Eithers.bind (Eithers.mapList (\pair -> encodeTerm env (Pairs.second pair) cx g) changePairs) (\jChangedArgs ->
-          let assignments =
-                  Lists.map (\pair ->
-                    let paramName = Pairs.first pair
-                        jArg = Pairs.second pair
-                    in (Syntax.BlockStatementStatement (Utils.javaAssignmentStatement (Syntax.LeftHandSideExpressionName (Utils.javaIdentifierToJavaExpressionName (Utils.variableToJavaIdentifier paramName))) jArg))) (Lists.zip changedParams jChangedArgs)
-              continueStmt =
-                      Syntax.BlockStatementStatement (Syntax.StatementWithoutTrailing (Syntax.StatementWithoutTrailingSubstatementContinue (Syntax.ContinueStatement Nothing)))
-          in (Right (Lists.concat2 assignments [
-            continueStmt]))))) (case stripped of
-        Core.TermLet v0 ->
-          let letBindings = Core.letBindings v0
-              letBody = Core.letBody v0
-          in (Eithers.bind (bindingsToStatements env letBindings cx g) (\bindResult ->
-            let letStmts = Pairs.first bindResult
-                envAfterLet = Pairs.second bindResult
-            in (Eithers.bind (encodeTermTCO envAfterLet funcName paramNames tparams tcoVarRenames tcoDepth letBody cx g) (\tcoBodyStmts -> Right (Lists.concat2 letStmts tcoBodyStmts)))))
-        _ ->
-          let gathered2 = Analysis.gatherApplications term
-              args2 = Pairs.first gathered2
-              body2 = Pairs.second gathered2
-          in (Logic.ifElse (Equality.equal (Lists.length args2) 1) (
-            let arg = Optionals.withDefault Core.TermUnit (Lists.head args2)
-            in case (Strip.deannotateAndDetypeTerm body2) of
-              Core.TermCases v0 ->
-                let aliases = JavaEnvironment.javaEnvironmentAliases env
-                    tname = Core.caseStatementTypeName v0
-                    dflt = Core.caseStatementDefault v0
-                    cases_ = Core.caseStatementCases v0
-                    tnameIsGeneric =
-                            Optionals.match (Maps.lookup tname (Graph.graphSchemaTypes g)) False (\ts -> Logic.not (Lists.isEmpty (Core.typeSchemeVariables ts)))
-                    domArgs =
-                            Logic.ifElse tnameIsGeneric (Lists.map (\tp -> Utils.typeParameterToTypeArgument (Utils.javaTypeParameter (Formatting.capitalize (Core.unName tp)))) tparams) []
-                in (Eithers.bind (encodeTerm env arg cx g) (\jArgRaw ->
-                  let depthSuffix = Logic.ifElse (Equality.equal tcoDepth 0) "" (Literals.printInt32 tcoDepth)
-                      matchVarId =
-                              Utils.javaIdentifier (Strings.concat [
-                                "_tco_match_",
-                                (Formatting.decapitalize (Names.localNameOf tname)),
-                                depthSuffix])
-                      matchDecl = Utils.varDeclarationStatement matchVarId jArgRaw
-                      jArg = Utils.javaIdentifierToJavaExpression matchVarId
-                  in (Eithers.bind (Eithers.mapList (\field ->
-                    let fieldName = Core.caseAlternativeName field
-                        variantRefType =
-                                Utils.nameToJavaReferenceType aliases True domArgs tname (Just (Formatting.capitalize (Core.unName fieldName)))
-                        variantRawType = Utils.nameToJavaReferenceType aliases True [] tname (Just (Formatting.capitalize (Core.unName fieldName)))
-                    in case (Strip.deannotateTerm (Core.caseAlternativeHandler field)) of
-                      Core.TermLambda v1 -> withLambda env v1 (\env2 ->
-                        let lambdaParam = Core.lambdaParameter v1
-                            branchBody = Core.lambdaBody v1
-                            env3 = insertBranchVar lambdaParam env2
-                            varId = Utils.variableToJavaIdentifier lambdaParam
-                            castExpr =
-                                    Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression variantRefType (Utils.javaExpressionToJavaUnaryExpression jArg))
-                            localDecl = Utils.varDeclarationStatement varId castExpr
-                            isBranchTailCall = Analysis.isTailRecursiveInTailPosition funcName branchBody
-                        in (Eithers.bind (Logic.ifElse isBranchTailCall (encodeTermTCO env3 funcName paramNames tparams tcoVarRenames (Math.add tcoDepth 1) branchBody cx g) (Eithers.bind (analyzeJavaFunction env3 branchBody cx g) (\fs ->
-                          let bindings = Typing.functionStructureBindings fs
-                              innerBody = Typing.functionStructureBody fs
-                              env4 = Typing.functionStructureEnvironment fs
-                          in (Eithers.bind (bindingsToStatements env4 bindings cx g) (\bindResult ->
-                            let bindingStmts = Pairs.first bindResult
-                                env5 = Pairs.second bindResult
-                            in (Eithers.bind (encodeTerm env5 innerBody cx g) (\jret ->
-                              let returnStmt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jret))
-                              in (Right (Lists.concat2 bindingStmts [
-                                returnStmt]))))))))) (\bodyStmts ->
-                          let relExpr =
-                                  Utils.javaInstanceOf (Utils.javaUnaryExpressionToJavaRelationalExpression (Utils.javaExpressionToJavaUnaryExpression jArg)) variantRawType
-                              condExpr = Utils.javaRelationalExpressionToJavaExpression relExpr
-                              blockStmts = Lists.cons localDecl bodyStmts
-                              ifBody = Syntax.StatementWithoutTrailing (Syntax.StatementWithoutTrailingSubstatementBlock (Syntax.Block blockStmts))
-                          in (Right (Syntax.BlockStatementStatement (Syntax.StatementIfThen (Syntax.IfThenStatement {
-                            Syntax.ifThenStatementExpression = condExpr,
-                            Syntax.ifThenStatementStatement = ifBody})))))))
-                      _ -> Left (Errors.ErrorOther (Errors.OtherError "TCO: case branch is not a lambda"))) cases_) (\ifBlocks -> Eithers.bind (Optionals.match dflt (Right [
-                    Syntax.BlockStatementStatement (Utils.javaThrowIllegalStateException [
-                      Utils.javaAdditiveExpressionToJavaExpression (Utils.addExpressions [
-                        Utils.javaStringMultiplicativeExpression "Non-exhaustive patterns when matching"])])]) (\d -> Eithers.bind (encodeTerm env d cx g) (\dExpr -> Right [
-                    Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just dExpr))]))) (\defaultStmt -> Right (Lists.concat [
-                    [
-                      matchDecl],
-                    ifBlocks,
-                    defaultStmt]))))))
-              _ -> Eithers.bind (encodeTerm env term cx g) (\expr -> Right [
-                Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just expr))])) (Eithers.bind (encodeTerm env term cx g) (\expr -> Right [
-            Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just expr))])))))
-
-encodeType :: JavaEnvironment.Aliases -> S.Set Core.Name -> Core.Type -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Type
-encodeType aliases boundVars t cx g =
-
-      let inScopeTypeParams = JavaEnvironment.aliasesInScopeTypeParams aliases
-          typeVarSubst = JavaEnvironment.aliasesTypeVarSubst aliases
-      in case (Strip.deannotateType t) of
-        Core.TypeApplication v0 -> Eithers.bind (encodeType aliases boundVars (Core.applicationTypeFunction v0) cx g) (\jlhs -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.applicationTypeArgument v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jrhs -> Utils.addJavaTypeParameter jrhs jlhs cx))
-        Core.TypeFunction v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.functionTypeDomain v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jdom -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.functionTypeCodomain v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jcod -> Right (Utils.javaRefType [
-          jdom,
-          jcod] JavaNames.javaUtilFunctionPackageName "Function")))
-        Core.TypeForall v0 -> Eithers.bind (encodeType aliases (Sets.insert (Core.forallTypeParameter v0) boundVars) (Core.forallTypeBody v0) cx g) (\jbody -> Utils.addJavaTypeParameter (Utils.javaTypeVariable (Core.unName (Core.forallTypeParameter v0))) jbody cx)
-        Core.TypeList v0 -> Eithers.bind (encodeType aliases boundVars v0 cx g) (\jet -> Eithers.bind (Eithers.bind (Right jet) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\rt -> Right (Utils.javaRefType [
-          rt] JavaNames.javaUtilPackageName "List")))
-        Core.TypeEffect v0 -> encodeType aliases boundVars v0 cx g
-        Core.TypeLiteral v0 -> encodeLiteralType v0 cx g
-        Core.TypeEither v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.eitherTypeLeft v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jlt -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.eitherTypeRight v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jrt -> Right (Utils.javaRefType [
-          jlt,
-          jrt] JavaNames.hydraUtilPackageName "Either")))
-        Core.TypeMap v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.mapTypeKeys v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jkt -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.mapTypeValues v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jvt -> Right (Utils.javaRefType [
-          jkt,
-          jvt] JavaNames.javaUtilPackageName "Map")))
-        Core.TypePair v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.pairTypeFirst v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jfirst -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Core.pairTypeSecond v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jsecond -> Right (Utils.javaRefType [
-          jfirst,
-          jsecond] JavaNames.hydraUtilPackageName "Pair")))
-        Core.TypeUnit -> Right (Utils.javaRefType [] JavaNames.javaLangPackageName "Void")
-        Core.TypeRecord v0 -> Logic.ifElse (Lists.isEmpty v0) (Right (Utils.javaRefType [] JavaNames.javaLangPackageName "Void")) (Left (Errors.ErrorOther (Errors.OtherError "unexpected anonymous record type")))
-        Core.TypeOptional v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars v0 cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jot -> Right (Utils.javaRefType [
-          jot] JavaNames.hydraUtilPackageName "Optional"))
-        Core.TypeSet v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars v0 cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jst -> Right (Utils.javaRefType [
-          jst] JavaNames.javaUtilPackageName "Set"))
-        Core.TypeUnion _ -> Left (Errors.ErrorOther (Errors.OtherError "unexpected anonymous union type"))
-        Core.TypeVariable v0 ->
-          let name = Optionals.withDefault v0 (Maps.lookup v0 typeVarSubst)
-          in (Eithers.bind (encodeType_resolveIfTypedef aliases boundVars inScopeTypeParams name cx g) (\resolved -> Optionals.match resolved (Right (Logic.ifElse (Logic.or (Sets.member name boundVars) (Sets.member name inScopeTypeParams)) (Syntax.TypeReference (Utils.javaTypeVariable (Core.unName name))) (Logic.ifElse (isLambdaBoundVariable name) (Syntax.TypeReference (Utils.javaTypeVariable (Core.unName name))) (Logic.ifElse (isUnresolvedInferenceVar name) (Syntax.TypeReference (Syntax.ReferenceTypeClassOrInterface (Syntax.ClassOrInterfaceTypeClass (Utils.javaClassType [] JavaNames.javaLangPackageName "Object")))) (Syntax.TypeReference (Utils.nameToJavaReferenceType aliases True [] name Nothing)))))) (\resolvedType -> encodeType aliases boundVars resolvedType cx g)))
-        Core.TypeWrap _ -> Left (Errors.ErrorOther (Errors.OtherError "unexpected anonymous wrap type"))
-        _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "can't encode unsupported type in Java: " (PrintCore.type_ t))))
-
-encodeTypeDefinition :: Syntax.PackageDeclaration -> JavaEnvironment.Aliases -> Packaging.TypeDefinition -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (Core.Name, Syntax.CompilationUnit)
-encodeTypeDefinition pkg aliases tdef cx g =
-
-      let name = Packaging.typeDefinitionName tdef
-          typ = Core.typeSchemeBody (Packaging.typeDefinitionBody tdef)
-          serializable = isSerializableJavaType typ
-          imports =
-                  Logic.ifElse serializable [
-                    Syntax.ImportDeclarationSingleType (Syntax.SingleTypeImportDeclaration (Utils.javaTypeName (Syntax.Identifier "java.io.Serializable")))] []
-      in (Eithers.bind (toClassDecl False serializable aliases [] name typ cx g) (\decl -> Eithers.bind (Annotations.getTypeDescription cx g typ) (\comment ->
-        let tdecl =
-                Syntax.TopLevelClassOrInterfaceDeclarationWithComments {
-                  Syntax.topLevelClassOrInterfaceDeclarationWithCommentsValue = (Syntax.TopLevelClassOrInterfaceDeclarationClass decl),
-                  Syntax.topLevelClassOrInterfaceDeclarationWithCommentsComments = comment}
-        in (Right (
-          name,
-          (Syntax.CompilationUnitOrdinary (Syntax.OrdinaryCompilationUnit {
-            Syntax.ordinaryCompilationUnitPackage = (Just pkg),
-            Syntax.ordinaryCompilationUnitImports = imports,
-            Syntax.ordinaryCompilationUnitTypes = [
-              tdecl]})))))))
-
-encodeType_resolveIfTypedef :: t0 -> S.Set Core.Name -> S.Set Core.Name -> Core.Name -> t1 -> Graph.Graph -> Either t2 (Maybe Core.Type)
-encodeType_resolveIfTypedef aliases boundVars inScopeTypeParams name cx g =
-    Logic.ifElse (Logic.or (Sets.member name boundVars) (Sets.member name inScopeTypeParams)) (Right Nothing) (Logic.ifElse (isLambdaBoundVariable name) (Right Nothing) (
-      let schemaTypes = Graph.graphSchemaTypes g
-      in (Optionals.match (Maps.lookup name schemaTypes) (Right Nothing) (\ts -> Logic.ifElse (Logic.not (Lists.isEmpty (Core.typeSchemeVariables ts))) (Right Nothing) (case (Strip.deannotateType (Core.typeSchemeBody ts)) of
-        Core.TypeRecord _ -> Right Nothing
-        Core.TypeUnion _ -> Right Nothing
-        Core.TypeWrap _ -> Right Nothing
-        _ -> Right (Just (Core.typeSchemeBody ts)))))))
-
-encodeVariable :: JavaEnvironment.JavaEnvironment -> Core.Name -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeVariable env name cx g =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-          resolvedName = Utils.lookupJavaVarName aliases name
-          jid = Utils.javaIdentifier (Core.unName resolvedName)
-      in (Logic.ifElse (Sets.member name (JavaEnvironment.aliasesBranchVars aliases)) (Right (Utils.javaFieldAccessToJavaExpression (Syntax.FieldAccess {
-        Syntax.fieldAccessQualifier = (Syntax.FieldAccess_QualifierPrimary (Utils.javaExpressionToJavaPrimary (Utils.javaIdentifierToJavaExpression jid))),
-        Syntax.fieldAccessIdentifier = (Utils.javaIdentifier JavaNames.valueFieldName)}))) (Logic.ifElse (Logic.and (Equality.equal name (Core.Name (Strings.concat [
-        JavaNames.instanceName,
-        "_",
-        JavaNames.valueFieldName]))) (isRecursiveVariable aliases name)) (
-        let instanceExpr = Utils.javaIdentifierToJavaExpression (Utils.javaIdentifier JavaNames.instanceName)
-        in (Right (Utils.javaFieldAccessToJavaExpression (Syntax.FieldAccess {
-          Syntax.fieldAccessQualifier = (Syntax.FieldAccess_QualifierPrimary (Utils.javaExpressionToJavaPrimary instanceExpr)),
-          Syntax.fieldAccessIdentifier = (Utils.javaIdentifier JavaNames.valueFieldName)})))) (Logic.ifElse (Logic.and (isRecursiveVariable aliases name) (Logic.not (isLambdaBoundIn name (JavaEnvironment.aliasesLambdaVars aliases)))) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Left (Syntax.ExpressionName {
-        Syntax.expressionNameQualifier = Nothing,
-        Syntax.expressionNameIdentifier = jid}))) (Syntax.Identifier JavaNames.getMethodName) []))) (Logic.ifElse (Logic.and (Sets.member name (JavaEnvironment.aliasesThunkedVars aliases)) (Logic.not (isLambdaBoundIn name (JavaEnvironment.aliasesLambdaVars aliases)))) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Left (Syntax.ExpressionName {
-        Syntax.expressionNameQualifier = Nothing,
-        Syntax.expressionNameIdentifier = jid}))) (Syntax.Identifier JavaNames.getMethodName) []))) (Logic.ifElse (isLambdaBoundIn name (JavaEnvironment.aliasesLambdaVars aliases)) (
-        let actualName = findMatchingLambdaVar name (JavaEnvironment.aliasesLambdaVars aliases)
-            resolvedActual = Utils.lookupJavaVarName aliases actualName
-        in (Right (Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier resolvedActual)))) (Logic.ifElse (Sets.member name (JavaEnvironment.aliasesInScopeJavaVars aliases)) (Right (Utils.javaIdentifierToJavaExpression (elementJavaIdentifier False False aliases resolvedName))) (Eithers.bind (classifyDataReference name cx g) (\cls -> case cls of
-        JavaEnvironment.JavaSymbolClassHoistedLambda v0 -> encodeVariable_hoistedLambdaCase aliases name v0 cx g
-        JavaEnvironment.JavaSymbolClassLocalVariable -> Right (Utils.javaIdentifierToJavaExpression (elementJavaIdentifier False False aliases resolvedName))
-        JavaEnvironment.JavaSymbolClassConstant -> Right (Utils.javaIdentifierToJavaExpression (elementJavaIdentifier False False aliases name))
-        JavaEnvironment.JavaSymbolClassNullaryFunction -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation Nothing (elementJavaIdentifier False False aliases name) []))
-        JavaEnvironment.JavaSymbolClassUnaryFunction -> Right (Utils.javaIdentifierToJavaExpression (elementJavaIdentifier False True aliases name))))))))))
-
-encodeVariable_buildCurried :: [Core.Name] -> Syntax.Expression -> Syntax.Expression
-encodeVariable_buildCurried params inner =
-    Optionals.withDefault inner (Optionals.map (\p -> Utils.javaLambda (Pairs.first p) (encodeVariable_buildCurried (Pairs.second p) inner)) (Lists.uncons params))
-
-encodeVariable_hoistedLambdaCase :: JavaEnvironment.Aliases -> Core.Name -> Int -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
-encodeVariable_hoistedLambdaCase aliases name arity cx g =
-
-      let paramNames = Lists.map (\i -> Core.Name (Strings.concat2 "p" (Literals.printInt32 i))) (Math.range 0 arity)
-          paramExprs = Lists.map (\pn -> Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier pn)) paramNames
-          call =
-                  Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation Nothing (elementJavaIdentifier False False aliases name) paramExprs)
-          lam = encodeVariable_buildCurried paramNames call
-      in (Eithers.bind (Right (Lexical.lookupBinding g name)) (\mel -> Optionals.match mel (Right lam) (\el -> Optionals.match (Core.bindingTypeScheme el) (Right lam) (\ts ->
-        let typ = Core.typeSchemeBody ts
-        in (Eithers.bind (encodeType aliases Sets.empty typ cx g) (\jtype -> Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt -> Right (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression rt (Utils.javaExpressionToJavaUnaryExpression lam))))))))))
-
-eqClause :: String -> Core.FieldType -> Syntax.InclusiveOrExpression
-eqClause tmpName ft =
-
-      let fname = Core.unName (Core.fieldTypeName ft)
-          ftype = Core.fieldTypeType ft
-      in (Logic.ifElse (isBinaryType ftype) (arraysEqualsClause tmpName fname) (Logic.ifElse (isBigIntegerType ftype) (compareToZeroClause tmpName fname) (equalsClause tmpName fname)))
-
-equalsClause :: String -> String -> Syntax.InclusiveOrExpression
-equalsClause tmpName fname =
-
-      let thisArg =
-              Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Syntax.Identifier "this") (Utils.javaIdentifier fname))
-          otherArg =
-                  Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier tmpName) (Utils.javaIdentifier fname))
-          header =
-                  Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-                    Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "java.util.Objects"))),
-                    Syntax.methodInvocation_ComplexTypeArguments = [],
-                    Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.equalsMethodName)})
-      in (Utils.javaPostfixExpressionToJavaInclusiveOrExpression (Utils.javaMethodInvocationToJavaPostfixExpression (Syntax.MethodInvocation {
-        Syntax.methodInvocationHeader = header,
-        Syntax.methodInvocationArguments = [
-          thisArg,
-          otherArg]})))
-
-extractArgType :: t0 -> Core.Type -> Core.Type
-extractArgType _lhs typ =
-    case typ of
-      Core.TypeApplication v0 -> case (Core.applicationTypeFunction v0) of
-        Core.TypeApplication _ -> Core.applicationTypeArgument v0
-        _ -> typ
-      _ -> typ
-
-extractDirectReturn :: S.Set Core.Name -> Core.Type -> [(Core.Name, Core.Name)]
-extractDirectReturn tparamSet t = extractDirectReturn_go tparamSet t
-
-extractDirectReturn_go :: S.Set Core.Name -> Core.Type -> [(Core.Name, Core.Name)]
-extractDirectReturn_go tparamSet t =
-    case (Strip.deannotateType t) of
-      Core.TypeFunction v0 ->
-        let dom = Strip.deannotateType (Core.functionTypeDomain v0)
-            cod = Core.functionTypeCodomain v0
-        in case dom of
-          Core.TypeVariable v1 -> Logic.ifElse (Sets.member v1 tparamSet) (case (Strip.deannotateType cod) of
-            Core.TypeFunction v2 ->
-              let midArg = Strip.deannotateType (Core.functionTypeDomain v2)
-                  retPart = Strip.deannotateType (Core.functionTypeCodomain v2)
-              in case midArg of
-                Core.TypeVariable v3 -> Logic.ifElse (Sets.member v3 tparamSet) [] (case retPart of
-                  Core.TypeVariable v4 -> Logic.ifElse (Sets.member v4 tparamSet) [
-                    (v1, v4)] []
-                  _ -> [])
-                _ -> case retPart of
-                  Core.TypeVariable v3 -> Logic.ifElse (Sets.member v3 tparamSet) [
-                    (v1, v3)] []
-                  _ -> []
-            _ -> []) (extractDirectReturn_go tparamSet cod)
-          _ -> extractDirectReturn_go tparamSet cod
-      _ -> []
-
-extractInOutPair :: Core.Type -> [(Core.Name, Core.Name)]
-extractInOutPair t =
-    case (Strip.deannotateType t) of
-      Core.TypeFunction v0 -> case (Strip.deannotateType (Core.functionTypeDomain v0)) of
-        Core.TypeVariable v1 ->
-          let retType = unwrapReturnType (Core.functionTypeCodomain v0)
-          in case (Strip.deannotateType retType) of
-            Core.TypePair v2 -> case (Strip.deannotateType (Core.pairTypeFirst v2)) of
-              Core.TypeVariable v3 -> [
-                (v1, v3)]
-              _ -> []
-            _ -> []
-        _ -> []
-      _ -> []
-
-extractTypeApplicationArgs :: Core.Type -> [Core.Type]
-extractTypeApplicationArgs typ = Lists.reverse (extractTypeApplicationArgs_go typ)
-
-extractTypeApplicationArgs_go :: Core.Type -> [Core.Type]
-extractTypeApplicationArgs_go t =
-    case t of
-      Core.TypeApplication v0 -> Lists.cons (Core.applicationTypeArgument v0) (extractTypeApplicationArgs_go (Core.applicationTypeFunction v0))
-      _ -> []
-
-fieldToStringPart :: Core.FieldType -> [Syntax.MultiplicativeExpression]
-fieldToStringPart f =
-
-      let fname = Core.unName (Core.fieldTypeName f)
-          nameLiteral = Utils.javaStringMultiplicativeExpression (Strings.concat2 fname "=")
-          valueExpr =
-                  Syntax.MultiplicativeExpressionUnary (Utils.javaExpressionToJavaUnaryExpression (Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Syntax.Identifier "this") (Utils.javaIdentifier fname))))
-      in [
-        Utils.javaStringMultiplicativeExpression ", ",
-        nameLiteral,
-        valueExpr]
-
-fieldTypeToFormalParam :: JavaEnvironment.Aliases -> Core.FieldType -> t0 -> Graph.Graph -> Either Errors.Error Syntax.FormalParameter
-fieldTypeToFormalParam aliases ft cx g =
-    Eithers.bind (encodeType aliases Sets.empty (Core.fieldTypeType ft) cx g) (\jt -> Right (Utils.javaTypeToJavaFormalParameter jt (Core.fieldTypeName ft)))
-
-filterByFlags :: [t0] -> [Bool] -> [t0]
-filterByFlags xs flags = Lists.map (\p -> Pairs.first p) (Lists.filter (\p -> Pairs.second p) (Lists.zip xs flags))
-
-filterPhantomTypeArgs :: Core.Name -> [Core.Type] -> t0 -> Graph.Graph -> Either t1 [Core.Type]
-filterPhantomTypeArgs calleeName allTypeArgs cx g =
-    Eithers.bind (Right (Lexical.lookupBinding g calleeName)) (\mel -> Optionals.match mel (Right allTypeArgs) (\el -> Optionals.match (Core.bindingTypeScheme el) (Right allTypeArgs) (\ts ->
-      let schemeVars = Lists.filter (\v -> isSimpleName v) (Core.typeSchemeVariables ts)
-          schemeTypeVars = collectTypeVars (Core.typeSchemeBody ts)
-          schemeType = Core.typeSchemeBody ts
-          nParams = countFunctionParams schemeType
-          peeled = peelDomainTypes nParams schemeType
-          calleeDoms = Pairs.first peeled
-          calleeCod = Pairs.second peeled
-          overgenSubst = detectAccumulatorUnification calleeDoms calleeCod schemeVars
-          keepFlags = Lists.map (\v -> Logic.and (Sets.member v schemeTypeVars) (Logic.not (Maps.member v overgenSubst))) schemeVars
-      in (Logic.ifElse (Logic.not (Equality.equal (Lists.length schemeVars) (Lists.length allTypeArgs))) (Right allTypeArgs) (Right (filterPhantomTypeArgs_filterAndApply allTypeArgs keepFlags overgenSubst))))))
-
-filterPhantomTypeArgs_filterAndApply :: [Core.Type] -> [Bool] -> M.Map Core.Name Core.Type -> [Core.Type]
-filterPhantomTypeArgs_filterAndApply allTypeArgs keepFlags overgenSubst =
-
-      let filtered = Lists.map (\p -> Pairs.first p) (Lists.filter (\p -> Pairs.second p) (Lists.zip allTypeArgs keepFlags))
-      in (Logic.ifElse (Logic.not (Maps.isEmpty overgenSubst)) (Lists.map (\t -> substituteTypeVarsWithTypes overgenSubst t) filtered) filtered)
-
-findMatchingLambdaVar :: Core.Name -> S.Set Core.Name -> Core.Name
-findMatchingLambdaVar name lambdaVars =
-    Logic.ifElse (Sets.member name lambdaVars) name (Logic.ifElse (isLambdaBoundIn_isQualified name) (Optionals.withDefault name (Lists.find (\lv -> Logic.and (isLambdaBoundIn_isQualified lv) (Equality.equal (Names.localNameOf lv) (Names.localNameOf name))) (Sets.toList lambdaVars))) (Logic.ifElse (Sets.member (Core.Name (Names.localNameOf name)) lambdaVars) (Core.Name (Names.localNameOf name)) name))
-
-findPairFirst :: Core.Type -> Maybe Core.Name
-findPairFirst t =
-    case (Strip.deannotateType t) of
-      Core.TypePair v0 -> case (Strip.deannotateType (Core.pairTypeFirst v0)) of
-        Core.TypeVariable v1 -> Just v1
-        _ -> Nothing
-      _ -> Nothing
-
-findSelfRefVar :: (Eq t0, Ord t0) => (M.Map t0 [t0] -> Maybe t0)
-findSelfRefVar grouped =
-
-      let selfRefs = Lists.filter (\entry -> Lists.member (Pairs.first entry) (Pairs.second entry)) (Maps.toList grouped)
-      in (Optionals.map (\entry -> Pairs.first entry) (Lists.head selfRefs))
-
-first20Primes :: [Integer]
-first20Primes =
-    [
-      2,
-      3,
-      5,
-      7,
-      11,
-      13,
-      17,
-      19,
-      23,
-      29,
-      31,
-      37,
-      41,
-      43,
-      47,
-      53,
-      59,
-      61,
-      67,
-      71]
-
-flattenApps :: Core.Term -> [Core.Term] -> ([Core.Term], Core.Term)
-flattenApps t acc =
-    case (Strip.deannotateTerm t) of
-      Core.TermApplication v0 -> flattenApps (Core.applicationFunction v0) (Lists.cons (Core.applicationArgument v0) acc)
-      _ -> (acc, t)
-
-flattenBindings :: [Core.Binding] -> [Core.Binding]
-flattenBindings bindings =
-    Lists.bind bindings (\b -> case (Strip.deannotateTerm (Core.bindingTerm b)) of
-      Core.TermLet v0 -> Lists.concat2 (flattenBindings (Core.letBindings v0)) [
-        Core.Binding {
-          Core.bindingName = (Core.bindingName b),
-          Core.bindingTerm = (Core.letBody v0),
-          Core.bindingTypeScheme = (Core.bindingTypeScheme b)}]
-      _ -> [
-        b])
-
-freshJavaName :: Core.Name -> S.Set Core.Name -> Core.Name
-freshJavaName base avoid = freshJavaName_go base avoid 2
-
-freshJavaName_go :: Core.Name -> S.Set Core.Name -> Int -> Core.Name
-freshJavaName_go base avoid i =
-
-      let candidate = Core.Name (Strings.concat2 (Core.unName base) (Literals.printInt32 i))
-      in (Logic.ifElse (Sets.member candidate avoid) (freshJavaName_go base avoid (Math.add i 1)) candidate)
-
-functionCall :: JavaEnvironment.JavaEnvironment -> Bool -> Core.Name -> [Core.Term] -> [Core.Type] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-functionCall env isPrim name args typeApps cx g =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-          isLambdaBound = isLambdaBoundIn name (JavaEnvironment.aliasesLambdaVars aliases)
-      in (Eithers.bind (Eithers.mapList (\arg -> encodeTerm env arg cx g) args) (\jargs0 ->
-        let wrapResult = wrapLazyArguments g name jargs0
-            jargs = Pairs.first wrapResult
-            mMethodOverride = Pairs.second wrapResult
-        in (Logic.ifElse (Logic.or (isLocalVariable name) isLambdaBound) (Eithers.bind (encodeVariable env name cx g) (\baseExpr -> Right (Lists.foldl (\acc -> \jarg -> applyJavaArg acc jarg) baseExpr jargs))) (
-          let overrideMethodName =
-                  \jid -> Optionals.match mMethodOverride jid (\m ->
-                    let s = Syntax.unIdentifier jid
-                    in (Syntax.Identifier (Strings.concat2 (Strings.fromList (Lists.take (Math.sub (Strings.length s) (Strings.length JavaNames.applyMethodName)) (Strings.toList s))) m)))
-          in (Logic.ifElse (Lists.isEmpty typeApps) (
-            let header =
-                    Syntax.MethodInvocation_HeaderSimple (Syntax.MethodName (overrideMethodName (elementJavaIdentifier isPrim False aliases name)))
-            in (Right (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
-              Syntax.methodInvocationHeader = header,
-              Syntax.methodInvocationArguments = jargs})))) (
-            let qn = Names.qualifyName name
-                mns = Util.qualifiedNameModuleName qn
-                localName = Util.qualifiedNameLocal qn
-            in (Optionals.match mns (
-              let header =
-                      Syntax.MethodInvocation_HeaderSimple (Syntax.MethodName (overrideMethodName (elementJavaIdentifier isPrim False aliases name)))
-              in (Right (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
-                Syntax.methodInvocationHeader = header,
-                Syntax.methodInvocationArguments = jargs})))) (\ns_ ->
-              let classId = Utils.nameToJavaName aliases (elementsQualifiedName ns_)
-                  methodId =
-                          Logic.ifElse isPrim (overrideMethodName (Syntax.Identifier (Strings.concat2 (Syntax.unIdentifier (Utils.nameToJavaName aliases (Names.unqualifyName (Util.QualifiedName {
-                            Util.qualifiedNameModuleName = (Just ns_),
-                            Util.qualifiedNameLocal = (Formatting.capitalize localName)})))) (Strings.concat2 "." JavaNames.applyMethodName)))) (Syntax.Identifier (Utils.sanitizeJavaName localName))
-              in (Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) typeApps) (\jTypeArgs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs classId methodId jTypeArgs jargs))))))))))))
-
-getCodomain :: M.Map Core.Name Core.Term -> t0 -> Graph.Graph -> Either Errors.Error Core.Type
-getCodomain ann cx g = Eithers.map (\ft -> Core.functionTypeCodomain ft) (getFunctionType ann cx g)
-
-getFunctionType :: M.Map Core.Name Core.Term -> t0 -> Graph.Graph -> Either Errors.Error Core.FunctionType
-getFunctionType ann cx g =
-    Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g ann)) (\mt -> Optionals.match mt (Left (Errors.ErrorOther (Errors.OtherError "type annotation is required for function and elimination terms in Java"))) (\t -> case t of
-      Core.TypeFunction v0 -> Right v0
-      _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "expected function type, got: " (PrintCore.type_ t))))))
-
-groupPairsByFirst :: Ord t0 => ([(t0, t1)] -> M.Map t0 [t1])
-groupPairsByFirst pairs =
-    Lists.foldl (\m -> \p ->
-      let k = Pairs.first p
-          v = Pairs.second p
-      in (Maps.alter (\mv -> Optionals.match mv (Just [
-        v]) (\vs -> Just (Lists.concat2 vs [
-        v]))) k m)) Maps.empty pairs
-
-hashCodeCompareExpr :: String -> String -> Syntax.Expression
-hashCodeCompareExpr otherVar fname =
-
-      let header =
-              Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-                Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "Integer"))),
-                Syntax.methodInvocation_ComplexTypeArguments = [],
-                Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier "compare")})
-          thisHashCode =
-                  Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
-                    Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-                      Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantExpression (Syntax.ExpressionName {
-                        Syntax.expressionNameQualifier = Nothing,
-                        Syntax.expressionNameIdentifier = (Syntax.Identifier (Utils.sanitizeJavaName fname))})),
-                      Syntax.methodInvocation_ComplexTypeArguments = [],
-                      Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hashCodeMethodName)})),
-                    Syntax.methodInvocationArguments = []})
-          otherHashCode =
-                  Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
-                    Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-                      Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantExpression (Utils.fieldExpression (Utils.javaIdentifier otherVar) (Utils.javaIdentifier fname))),
-                      Syntax.methodInvocation_ComplexTypeArguments = [],
-                      Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hashCodeMethodName)})),
-                    Syntax.methodInvocationArguments = []})
-      in (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
-        Syntax.methodInvocationHeader = header,
-        Syntax.methodInvocationArguments = [
-          thisHashCode,
-          otherHashCode]}))
-
-hashCodeMultPair :: Integer -> Core.Name -> Syntax.MultiplicativeExpression
-hashCodeMultPair i fname =
-
-      let fnameStr = Core.unName fname
-          lhs =
-                  Syntax.MultiplicativeExpressionUnary (Utils.javaPrimaryToJavaUnaryExpression (Utils.javaLiteralToJavaPrimary (Utils.javaInt i)))
-          rhs =
-                  Utils.javaPostfixExpressionToJavaUnaryExpression (Utils.javaMethodInvocationToJavaPostfixExpression (Syntax.MethodInvocation {
-                    Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-                      Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "java.util.Objects"))),
-                      Syntax.methodInvocation_ComplexTypeArguments = [],
-                      Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hashCodeMethodName)})),
-                    Syntax.methodInvocationArguments = [
-                      Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
-                        Syntax.expressionNameQualifier = Nothing,
-                        Syntax.expressionNameIdentifier = (Syntax.Identifier (Utils.sanitizeJavaName fnameStr))})]}))
-      in (Syntax.MultiplicativeExpressionTimes (Syntax.MultiplicativeExpression_Binary {
-        Syntax.multiplicativeExpression_BinaryLhs = lhs,
-        Syntax.multiplicativeExpression_BinaryRhs = rhs}))
-
-hydraOrdinalMethod :: Maybe Int -> Syntax.ClassBodyDeclaration
-hydraOrdinalMethod ordinal =
-
-      let mods =
-              Logic.ifElse (Optionals.isNone ordinal) [
-                Syntax.MethodModifierPublic,
-                Syntax.MethodModifierAbstract] [
-                Syntax.MethodModifierPublic]
-          anns = Logic.ifElse (Optionals.isNone ordinal) [] [
-                Utils.overrideAnnotation]
-          result = Utils.javaTypeToJavaResult Utils.javaIntType
-          body =
-                  Optionals.map (\n -> [
-                    Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaIntExpression (Literals.int32ToBigint n))))]) ordinal
-      in (Utils.methodDeclaration mods [] anns JavaNames.hydraOrdinalMethodName [] result body)
-
-innerClassRef :: JavaEnvironment.Aliases -> Core.Name -> String -> Syntax.Identifier
-innerClassRef aliases name local =
-
-      let id = Syntax.unIdentifier (Utils.nameToJavaName aliases name)
-      in (Syntax.Identifier (Strings.concat2 (Strings.concat2 id ".") local))
-
-insertBranchVar :: Core.Name -> JavaEnvironment.JavaEnvironment -> JavaEnvironment.JavaEnvironment
-insertBranchVar name env =
-
-      let aliases = JavaEnvironment.javaEnvironmentAliases env
-      in JavaEnvironment.JavaEnvironment {
-        JavaEnvironment.javaEnvironmentAliases = JavaEnvironment.Aliases {
-          JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases),
-          JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases),
-          JavaEnvironment.aliasesBranchVars = (Sets.insert name (JavaEnvironment.aliasesBranchVars aliases)),
-          JavaEnvironment.aliasesRecursiveVars = (JavaEnvironment.aliasesRecursiveVars aliases),
-          JavaEnvironment.aliasesInScopeTypeParams = (JavaEnvironment.aliasesInScopeTypeParams aliases),
-          JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases),
-          JavaEnvironment.aliasesInScopeJavaVars = (JavaEnvironment.aliasesInScopeJavaVars aliases),
-          JavaEnvironment.aliasesVarRenames = (JavaEnvironment.aliasesVarRenames aliases),
-          JavaEnvironment.aliasesLambdaVars = (JavaEnvironment.aliasesLambdaVars aliases),
-          JavaEnvironment.aliasesTypeVarSubst = (JavaEnvironment.aliasesTypeVarSubst aliases),
-          JavaEnvironment.aliasesTrustedTypeVars = (JavaEnvironment.aliasesTrustedTypeVars aliases),
-          JavaEnvironment.aliasesMethodCodomain = Nothing,
-          JavaEnvironment.aliasesThunkedVars = (JavaEnvironment.aliasesThunkedVars aliases)},
-        JavaEnvironment.javaEnvironmentGraph = (JavaEnvironment.javaEnvironmentGraph env)}
-
-interfaceTypes :: Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Core.Name -> [Syntax.InterfaceType]
-interfaceTypes isSer aliases tparams elName =
-
-      let javaSerializableType =
-              Syntax.InterfaceType (Syntax.ClassType {
-                Syntax.classTypeAnnotations = [],
-                Syntax.classTypeQualifier = Syntax.ClassTypeQualifierNone,
-                Syntax.classTypeIdentifier = (Utils.javaTypeIdentifier "Serializable"),
-                Syntax.classTypeArguments = []})
-          selfTypeArg =
-                  Syntax.TypeArgumentReference (Utils.nameToJavaReferenceType aliases False (Lists.map (\tp_ -> Utils.typeParameterToTypeArgument tp_) tparams) elName Nothing)
-          javaComparableType =
-                  Syntax.InterfaceType (Syntax.ClassType {
-                    Syntax.classTypeAnnotations = [],
-                    Syntax.classTypeQualifier = Syntax.ClassTypeQualifierNone,
-                    Syntax.classTypeIdentifier = (Utils.javaTypeIdentifier "Comparable"),
-                    Syntax.classTypeArguments = [
-                      selfTypeArg]})
-      in (Logic.ifElse isSer [
-        javaSerializableType,
-        javaComparableType] [])
-
-isBigIntegerType :: Core.Type -> Bool
-isBigIntegerType typ =
-    case (Strip.deannotateType typ) of
-      Core.TypeLiteral v0 -> case v0 of
-        Core.LiteralTypeInteger v1 -> case v1 of
-          Core.IntegerTypeBigint -> True
-          _ -> False
-        _ -> False
-      _ -> False
-
-isBinaryType :: Core.Type -> Bool
-isBinaryType typ =
-    case (Strip.deannotateType typ) of
-      Core.TypeLiteral v0 -> case v0 of
-        Core.LiteralTypeBinary -> True
-        _ -> False
-      _ -> False
-
-isFieldUnitType :: Core.Name -> Core.Name -> t0 -> Graph.Graph -> Either t1 Bool
-isFieldUnitType typeName fieldName cx g =
-
-      let schemaTypes = Graph.graphSchemaTypes g
-      in (Optionals.match (Maps.lookup typeName schemaTypes) (Right False) (\ts -> case (Strip.deannotateType (Core.typeSchemeBody ts)) of
-        Core.TypeUnion v0 -> Right (Optionals.match (Lists.find (\ft -> Equality.equal (Core.fieldTypeName ft) fieldName) v0) False (\ft -> Predicates.isUnitType (Strip.deannotateType (Core.fieldTypeType ft))))
-        _ -> Right False))
-
-isLambdaBoundIn :: Core.Name -> S.Set Core.Name -> Bool
-isLambdaBoundIn name lambdaVars =
-    Logic.or (Sets.member name lambdaVars) (Logic.or (Logic.and (isLambdaBoundIn_isQualified name) (Optionals.isGiven (Lists.find (\lv -> Logic.and (isLambdaBoundIn_isQualified lv) (Equality.equal (Names.localNameOf lv) (Names.localNameOf name))) (Sets.toList lambdaVars)))) (Logic.and (Logic.not (isLambdaBoundIn_isQualified name)) (Sets.member (Core.Name (Names.localNameOf name)) lambdaVars)))
-
-isLambdaBoundIn_isQualified :: Core.Name -> Bool
-isLambdaBoundIn_isQualified n = Optionals.isGiven (Util.qualifiedNameModuleName (Names.qualifyName n))
-
-isLambdaBoundVariable :: Core.Name -> Bool
-isLambdaBoundVariable name =
-
-      let v = Core.unName name
-      in (Ordering.lte (Strings.length v) 4)
-
-isLocalVariable :: Core.Name -> Bool
-isLocalVariable name = Optionals.isNone (Util.qualifiedNameModuleName (Names.qualifyName name))
-
-isNonComparableType :: Core.Type -> Bool
-isNonComparableType typ =
-    case (Strip.deannotateType typ) of
-      Core.TypeEither _ -> True
-      Core.TypeFunction _ -> True
-      Core.TypeUnit -> True
-      Core.TypeLiteral v0 -> case v0 of
-        Core.LiteralTypeBinary -> True
-        _ -> False
-      Core.TypeForall v0 -> isNonComparableType (Core.forallTypeBody v0)
-      _ -> False
-
-isRecursiveVariable :: JavaEnvironment.Aliases -> Core.Name -> Bool
-isRecursiveVariable aliases name = Sets.member name (JavaEnvironment.aliasesRecursiveVars aliases)
-
-isSerializableJavaType :: Core.Type -> Bool
-isSerializableJavaType typ = Predicates.isNominalType typ
-
-isSimpleName :: Core.Name -> Bool
-isSimpleName name = Equality.equal (Lists.length (Strings.splitOn "." (Core.unName name))) 1
-
-isUnresolvedInferenceVar :: Core.Name -> Bool
-isUnresolvedInferenceVar name =
-
-      let chars = Strings.toList (Core.unName name)
-      in (Optionals.withDefault False (Optionals.map (\p ->
-        let firstCh = Pairs.first p
-            rest = Pairs.second p
-        in (Logic.ifElse (Logic.not (Equality.equal firstCh 116)) False (Logic.and (Logic.not (Lists.isEmpty rest)) (Lists.isEmpty (Lists.filter (\c -> Logic.not (isUnresolvedInferenceVar_isDigit c)) rest))))) (Lists.uncons chars)))
-
-isUnresolvedInferenceVar_isDigit :: Int -> Bool
-isUnresolvedInferenceVar_isDigit c = Logic.and (Ordering.gte c 48) (Ordering.lte c 57)
-
-java11Features :: JavaEnvironment.JavaFeatures
-java11Features = JavaEnvironment.JavaFeatures {
-  JavaEnvironment.javaFeaturesSupportsDiamondOperator = True}
-
-java8Features :: JavaEnvironment.JavaFeatures
-java8Features = JavaEnvironment.JavaFeatures {
-  JavaEnvironment.javaFeaturesSupportsDiamondOperator = False}
-
-javaComparableRefType :: Syntax.ReferenceType
-javaComparableRefType =
-    Syntax.ReferenceTypeClassOrInterface (Syntax.ClassOrInterfaceTypeClass (Syntax.ClassType {
-      Syntax.classTypeAnnotations = [],
-      Syntax.classTypeQualifier = Syntax.ClassTypeQualifierNone,
-      Syntax.classTypeIdentifier = (Utils.javaTypeIdentifier "Comparable"),
-      Syntax.classTypeArguments = []}))
-
-javaEnvGetGraph :: JavaEnvironment.JavaEnvironment -> Graph.Graph
-javaEnvGetGraph env = JavaEnvironment.javaEnvironmentGraph env
-
-javaEnvSetGraph :: Graph.Graph -> JavaEnvironment.JavaEnvironment -> JavaEnvironment.JavaEnvironment
-javaEnvSetGraph g env =
-    JavaEnvironment.JavaEnvironment {
-      JavaEnvironment.javaEnvironmentAliases = (JavaEnvironment.javaEnvironmentAliases env),
-      JavaEnvironment.javaEnvironmentGraph = g}
-
-javaFeatures :: JavaEnvironment.JavaFeatures
-javaFeatures = java11Features
-
-javaIdentifierToString :: Syntax.Identifier -> String
-javaIdentifierToString id = Syntax.unIdentifier id
-
-javaTypeArgumentsForNamedType :: Core.Name -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.TypeArgument]
-javaTypeArgumentsForNamedType tname cx g =
-    Eithers.bind (Resolution.requireType cx g tname) (\typ -> Right (Lists.map (\tp_ -> Utils.typeParameterToTypeArgument tp_) (javaTypeParametersForType typ)))
-
-javaTypeArgumentsForType :: Core.Type -> [Syntax.TypeArgument]
-javaTypeArgumentsForType typ = Lists.reverse (Lists.map Utils.typeParameterToTypeArgument (javaTypeParametersForType typ))
-
-javaTypeParametersForType :: Core.Type -> [Syntax.TypeParameter]
-javaTypeParametersForType typ =
-
-      let toParam = \name -> Utils.javaTypeParameter (Formatting.capitalize (Core.unName name))
-          boundVars = javaTypeParametersForType_bvars typ
-          freeVars = Lists.filter (\v -> isLambdaBoundVariable v) (Sets.toList (Variables.freeVariablesInType typ))
-          vars = Lists.distinct (Lists.concat2 boundVars freeVars)
-      in (Lists.map toParam vars)
-
-javaTypeParametersForType_bvars :: Core.Type -> [Core.Name]
-javaTypeParametersForType_bvars t =
-    case t of
-      Core.TypeForall v0 -> Lists.cons (Core.forallTypeParameter v0) (javaTypeParametersForType_bvars (Core.forallTypeBody v0))
-      _ -> []
-
-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))))
-
-moduleToJava :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map String String)
-moduleToJava overlaySubs mod defs cx g =
-    Eithers.bind (encodeDefinitions overlaySubs mod defs cx g) (\units -> Right (Maps.fromList (Lists.map (\entry ->
-      let name = Pairs.first entry
-          unit = Pairs.second entry
-      in (bindingNameToFilePath name, (Serialization.printExpr (Serialization.parenthesize (Serde.compilationUnitToExpr unit))))) (Maps.toList units))))
-
-nameMapToTypeMap :: Ord t0 => (M.Map t0 Core.Name -> M.Map t0 Core.Type)
-nameMapToTypeMap m = Maps.map (\v -> Core.TypeVariable v) m
-
-namespaceParent :: Packaging.ModuleName -> Maybe Packaging.ModuleName
-namespaceParent ns =
-
-      let parts = Strings.splitOn "." (Packaging.unModuleName ns)
-          initParts = Optionals.withDefault [] (Lists.init parts)
-      in (Logic.ifElse (Lists.isEmpty initParts) Nothing (Just (Packaging.ModuleName (Strings.join "." initParts))))
-
-noComment :: Syntax.ClassBodyDeclaration -> Syntax.ClassBodyDeclarationWithComments
-noComment decl =
-    Syntax.ClassBodyDeclarationWithComments {
-      Syntax.classBodyDeclarationWithCommentsValue = decl,
-      Syntax.classBodyDeclarationWithCommentsComments = Nothing}
-
-noInterfaceComment :: Syntax.InterfaceMemberDeclaration -> Syntax.InterfaceMemberDeclarationWithComments
-noInterfaceComment decl =
-    Syntax.InterfaceMemberDeclarationWithComments {
-      Syntax.interfaceMemberDeclarationWithCommentsValue = decl,
-      Syntax.interfaceMemberDeclarationWithCommentsComments = Nothing}
-
-otherwiseBranch :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> Core.Type -> Core.Type -> Core.Name -> Syntax.Type -> [Syntax.TypeArgument] -> Core.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
-otherwiseBranch env aliases dom cod tname jcod targs d cx g =
-
-      let jdom = Syntax.TypeReference (Utils.nameToJavaReferenceType aliases True targs tname Nothing)
-          mods = [
-                Syntax.MethodModifierPublic]
-          anns = [
-                Utils.overrideAnnotation]
-          param = Utils.javaTypeToJavaFormalParameter jdom (Core.Name "instance")
-          result = Syntax.ResultType (Syntax.UnannType jcod)
-      in (Eithers.bind (analyzeJavaFunction env d cx g) (\fs ->
-        let bindings = Typing.functionStructureBindings fs
-            rawBody = Typing.functionStructureBody fs
-            innerBody = annotateBodyWithCod cod rawBody
-            env2 = Typing.functionStructureEnvironment fs
-        in (Eithers.bind (bindingsToStatements env2 bindings cx g) (\bindResult ->
-          let bindingStmts = Pairs.first bindResult
-              env3 = Pairs.second bindResult
-          in (Eithers.bind (encodeTerm env3 innerBody cx g) (\jret ->
-            let returnStmt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jret))
-                allStmts = Lists.concat2 bindingStmts [
-                      returnStmt]
-            in (Right (noComment (Utils.methodDeclaration mods [] anns JavaNames.otherwiseMethodName [
-              param] result (Just allStmts))))))))))
-
-peelDomainTypes :: Int -> Core.Type -> ([Core.Type], Core.Type)
-peelDomainTypes n t =
-    Logic.ifElse (Ordering.lte n 0) ([], t) (case (Strip.deannotateType t) of
-      Core.TypeFunction v0 ->
-        let rest = peelDomainTypes (Math.sub n 1) (Core.functionTypeCodomain v0)
-        in (Lists.cons (Core.functionTypeDomain v0) (Pairs.first rest), (Pairs.second rest))
-      _ -> ([], t))
-
-peelDomainsAndCod :: Int -> Core.Type -> ([Core.Type], Core.Type)
-peelDomainsAndCod n t =
-    Logic.ifElse (Ordering.lte n 0) ([], t) (case (Strip.deannotateType t) of
-      Core.TypeFunction v0 ->
-        let rest = peelDomainsAndCod (Math.sub n 1) (Core.functionTypeCodomain v0)
-        in (Lists.cons (Core.functionTypeDomain v0) (Pairs.first rest), (Pairs.second rest))
-      _ -> ([], t))
-
-peelExpectedTypes :: M.Map Core.Name Core.Type -> Int -> Core.Type -> [Core.Type]
-peelExpectedTypes subst n t =
-    Logic.ifElse (Equality.equal n 0) [] (case (Strip.deannotateType t) of
-      Core.TypeFunction v0 -> Lists.cons (applySubstFull subst (Core.functionTypeDomain v0)) (peelExpectedTypes subst (Math.sub n 1) (Core.functionTypeCodomain v0))
-      _ -> [])
-
-propagateType :: Core.Type -> Core.Term -> Core.Term
-propagateType typ term =
-
-      let setTypeAnn = \t -> Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ typ)) t
-      in case (Strip.deannotateTerm term) of
-        Core.TermLambda _ ->
-          let annotated = setTypeAnn term
-          in case (Strip.deannotateType typ) of
-            Core.TypeFunction v1 -> propagateType_propagateIntoLambda (Core.functionTypeCodomain v1) annotated
-            _ -> annotated
-        Core.TermLet v0 ->
-          let propagatedBindings =
-                  Lists.map (\b -> Optionals.match (Core.bindingTypeScheme b) b (\ts -> Core.Binding {
-                    Core.bindingName = (Core.bindingName b),
-                    Core.bindingTerm = (propagateType (Core.typeSchemeBody ts) (Core.bindingTerm b)),
-                    Core.bindingTypeScheme = (Core.bindingTypeScheme b)})) (Core.letBindings v0)
-          in (setTypeAnn (propagateType_rebuildLet term propagatedBindings (propagateType typ (Core.letBody v0))))
-        Core.TermApplication v0 ->
-          let fun = Core.applicationFunction v0
-              arg = Core.applicationArgument v0
-              annotatedFun =
-                      case (Strip.deannotateTerm fun) of
-                        Core.TermCases v1 ->
-                          let dom = Resolution.nominalApplication (Core.caseStatementTypeName v1) []
-                              ft =
-                                      Core.TypeFunction (Core.FunctionType {
-                                        Core.functionTypeDomain = dom,
-                                        Core.functionTypeCodomain = typ})
-                          in (Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ ft)) fun)
-                        _ -> fun
-          in (setTypeAnn (Core.TermApplication (Core.Application {
-            Core.applicationFunction = annotatedFun,
-            Core.applicationArgument = arg})))
-        _ -> setTypeAnn term
-
-propagateType_propagateIntoLambda :: Core.Type -> Core.Term -> Core.Term
-propagateType_propagateIntoLambda cod t =
-    case t of
-      Core.TermAnnotated v0 -> Core.TermAnnotated (Core.AnnotatedTerm {
-        Core.annotatedTermBody = (propagateType_propagateIntoLambda cod (Core.annotatedTermBody v0)),
-        Core.annotatedTermAnnotation = (Core.annotatedTermAnnotation v0)})
-      Core.TermLambda v0 -> Core.TermLambda (Core.Lambda {
-        Core.lambdaParameter = (Core.lambdaParameter v0),
-        Core.lambdaDomain = (Core.lambdaDomain v0),
-        Core.lambdaBody = (propagateType cod (Core.lambdaBody v0))})
-      _ -> t
-
-propagateType_rebuildLet :: Core.Term -> [Core.Binding] -> Core.Term -> Core.Term
-propagateType_rebuildLet t bindings newBody =
-    case t of
-      Core.TermAnnotated v0 -> Core.TermAnnotated (Core.AnnotatedTerm {
-        Core.annotatedTermBody = (propagateType_rebuildLet (Core.annotatedTermBody v0) bindings newBody),
-        Core.annotatedTermAnnotation = (Core.annotatedTermAnnotation v0)})
-      Core.TermLet _ -> Core.TermLet (Core.Let {
-        Core.letBindings = bindings,
-        Core.letBody = newBody})
-      _ -> t
-
-propagateTypesInAppChain :: Core.Type -> Core.Type -> Core.Term -> Core.Term
-propagateTypesInAppChain fixedCod resultType t =
-
-      let flattened = flattenApps t []
-          args = Pairs.first flattened
-          fun = Pairs.second flattened
-          lambdaDomsResult = collectLambdaDomains fun
-          lambdaDoms = Pairs.first lambdaDomsResult
-          nArgs = Lists.length args
-          nLambdaDoms = Lists.length lambdaDoms
-      in (Logic.ifElse (Logic.and (Ordering.gt nLambdaDoms 0) (Ordering.gt nArgs 0)) (
-        let bodyRetType = Pairs.second (peelDomainsAndCod (Math.sub nLambdaDoms nArgs) resultType)
-            funType =
-                    Lists.foldl (\c -> \d -> Core.TypeFunction (Core.FunctionType {
-                      Core.functionTypeDomain = d,
-                      Core.functionTypeCodomain = c})) bodyRetType (Lists.reverse lambdaDoms)
-            annotatedFun = Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ funType)) fun
-        in (rebuildApps annotatedFun args funType)) (case (Strip.deannotateTerm t) of
-        Core.TermApplication v0 ->
-          let lhs = Core.applicationFunction v0
-              rhs = Core.applicationArgument v0
-              annotatedLhs =
-                      case (Strip.deannotateTerm lhs) of
-                        Core.TermCases v1 ->
-                          let dom = Resolution.nominalApplication (Core.caseStatementTypeName v1) []
-                              ft =
-                                      Core.TypeFunction (Core.FunctionType {
-                                        Core.functionTypeDomain = dom,
-                                        Core.functionTypeCodomain = fixedCod})
-                          in (Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ ft)) lhs)
-                        _ -> lhs
-          in (Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ resultType)) (Core.TermApplication (Core.Application {
-            Core.applicationFunction = annotatedLhs,
-            Core.applicationArgument = rhs})))
-        _ -> Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ resultType)) t))
-
-rebuildApps :: Core.Term -> [Core.Term] -> Core.Type -> Core.Term
-rebuildApps f args fType =
-    Logic.ifElse (Lists.isEmpty args) f (case (Strip.deannotateType fType) of
-      Core.TypeFunction v0 -> Optionals.withDefault f (Optionals.map (\p ->
-        let arg = Pairs.first p
-            rest = Pairs.second p
-            remainingType = Core.functionTypeCodomain v0
-            app =
-                    Core.TermApplication (Core.Application {
-                      Core.applicationFunction = f,
-                      Core.applicationArgument = arg})
-            annotatedApp = Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ remainingType)) app
-        in (rebuildApps annotatedApp rest remainingType)) (Lists.uncons args))
-      _ -> Lists.foldl (\acc -> \a -> Core.TermApplication (Core.Application {
-        Core.applicationFunction = acc,
-        Core.applicationArgument = a})) f args)
-
-recordBuilderClass :: JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Core.Name -> [Core.FieldType] -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.ClassBodyDeclarationWithComments]
-recordBuilderClass aliases tparams elName fields cx g =
-
-      let typeArgRefs = Lists.map Utils.typeParameterToReferenceType tparams
-          typeArgs = Lists.map (\rt -> Syntax.TypeArgumentReference rt) typeArgRefs
-          mTypeArgs = Logic.ifElse (Lists.isEmpty tparams) Nothing (Just (Syntax.TypeArgumentsOrDiamondArguments typeArgs))
-          recordLocalName = Utils.sanitizeJavaName (Names.localNameOf elName)
-          builderType = Utils.javaRefType typeArgRefs Nothing "Builder"
-          builderResult = Utils.javaTypeToJavaResult builderType
-          recordType = Utils.javaRefType typeArgRefs Nothing recordLocalName
-          recordResult = Utils.javaTypeToJavaResult recordType
-          returnThisStmt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just Utils.javaThis))
-      in (Eithers.bind (Eithers.mapList (\f ->
-        let mods = [
-              Syntax.FieldModifierPrivate]
-            ftype = Core.fieldTypeType f
-            fname = Core.fieldTypeName f
-        in (Eithers.bind (encodeType aliases Sets.empty ftype cx g) (\jt -> Right (noComment (Utils.javaMemberField mods jt (Utils.fieldNameToJavaVariableDeclarator fname)))))) fields) (\builderFields -> Eithers.bind (Eithers.mapList (\f ->
-        let mods = [
-              Syntax.MethodModifierPublic]
-            fname = Core.fieldTypeName f
-            assignStmt = Syntax.BlockStatementStatement (Utils.toAssignStmt fname)
-        in (Eithers.bind (fieldTypeToFormalParam aliases f cx g) (\param -> Right (noComment (Utils.methodDeclaration mods [] [] (builderSetterName fname) [
-          param] builderResult (Just [
-          assignStmt,
-          returnThisStmt])))))) fields) (\setterMethods ->
-        let buildMods = [
-              Syntax.MethodModifierPublic]
-            buildArgs = Lists.map (\f -> Utils.fieldNameToJavaExpression (Core.fieldTypeName f)) fields
-            buildReturnStmt =
-                    Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier recordLocalName) mTypeArgs) buildArgs Nothing)))
-            buildMethod =
-                    withCommentString (Strings.concat2 "Builds an immutable {@link " (Strings.concat2 recordLocalName "}.")) (Utils.methodDeclaration buildMods [] [] "build" [] recordResult (Just [
-                      buildReturnStmt]))
-            builderClassDecl =
-                    Utils.javaClassDeclaration aliases tparams (Core.Name "Builder") [
-                      Syntax.ClassModifierPublic,
-                      Syntax.ClassModifierStatic,
-                      Syntax.ClassModifierFinal] Nothing [] (Lists.concat [
-                      builderFields,
-                      setterMethods,
-                      [
-                        buildMethod]])
-            builderClassMember =
-                    withCommentString (Strings.concat2 "A fluent builder for {@link " (Strings.concat2 recordLocalName "}.")) (Syntax.ClassBodyDeclarationClassMember (Syntax.ClassMemberDeclarationClass builderClassDecl))
-            factoryMods =
-                    [
-                      Syntax.MethodModifierPublic,
-                      Syntax.MethodModifierStatic]
-            factoryReturnStmt =
-                    Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "Builder") mTypeArgs) [] Nothing)))
-            factoryMethod =
-                    withCommentString (Strings.concat2 "Creates a new fluent builder for {@link " (Strings.concat2 recordLocalName "}.")) (Utils.methodDeclaration factoryMods tparams [] "builder" [] builderResult (Just [
-                      factoryReturnStmt]))
-        in (Right [
-          factoryMethod,
-          builderClassMember]))))
-
-recordCompareToMethod :: JavaEnvironment.Aliases -> t0 -> Core.Name -> [Core.FieldType] -> Syntax.ClassBodyDeclaration
-recordCompareToMethod aliases tparams elName fields =
-
-      let anns =
-              [
-                Utils.overrideAnnotation,
-                Utils.suppressWarningsUncheckedAnnotation]
-          mods = [
-                Syntax.MethodModifierPublic]
-          param =
-                  Utils.javaTypeToJavaFormalParameter (Utils.javaTypeFromTypeName aliases elName) (Core.Name JavaNames.otherInstanceName)
-          result = Utils.javaTypeToJavaResult Utils.javaIntType
-      in (Utils.methodDeclaration mods [] anns JavaNames.compareToMethodName [
-        param] result (Just (compareToBody aliases JavaNames.otherInstanceName fields)))
-
-recordConstructor :: JavaEnvironment.Aliases -> Core.Name -> [Core.FieldType] -> t0 -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclaration
-recordConstructor aliases elName fields cx g =
-
-      let assignStmts = Lists.map (\f -> Syntax.BlockStatementStatement (Utils.toAssignStmt (Core.fieldTypeName f))) fields
-      in (Eithers.bind (Eithers.mapList (\f -> fieldTypeToFormalParam aliases f cx g) fields) (\params -> Right (Utils.makeConstructor aliases elName False params assignStmts)))
-
-recordEqualsMethod :: JavaEnvironment.Aliases -> Core.Name -> [Core.FieldType] -> Syntax.ClassBodyDeclaration
-recordEqualsMethod aliases elName fields =
-
-      let anns = [
-            Utils.overrideAnnotation]
-          mods = [
-                Syntax.MethodModifierPublic]
-          param = Utils.javaTypeToJavaFormalParameter (Utils.javaRefType [] Nothing "Object") (Core.Name JavaNames.otherInstanceName)
-          result = Utils.javaTypeToJavaResult Utils.javaBooleanType
-          tmpName = "o"
-          instanceOfStmt =
-                  Syntax.BlockStatementStatement (Syntax.StatementIfThen (Syntax.IfThenStatement {
-                    Syntax.ifThenStatementExpression = (Utils.javaUnaryExpressionToJavaExpression (Syntax.UnaryExpressionOther (Syntax.UnaryExpressionNotPlusMinusNot (Utils.javaRelationalExpressionToJavaUnaryExpression (Utils.javaInstanceOf (Utils.javaIdentifierToJavaRelationalExpression (Utils.javaIdentifier JavaNames.otherInstanceName)) (Utils.nameToJavaReferenceType aliases False [] elName Nothing)))))),
-                    Syntax.ifThenStatementStatement = (Utils.javaReturnStatement (Just (Utils.javaBooleanExpression False)))}))
-          castStmt =
-                  Utils.variableDeclarationStatement aliases (Utils.javaTypeFromTypeName aliases elName) (Utils.javaIdentifier tmpName) (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression (Utils.nameToJavaReferenceType aliases False [] elName Nothing) (Utils.javaIdentifierToJavaUnaryExpression (Syntax.Identifier (Utils.sanitizeJavaName JavaNames.otherInstanceName)))))
-          returnAllFieldsEqual =
-                  Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Logic.ifElse (Lists.isEmpty fields) (Utils.javaBooleanExpression True) (Utils.javaConditionalAndExpressionToJavaExpression (Syntax.ConditionalAndExpression (Lists.map (\f -> eqClause tmpName f) fields))))))
-      in (Utils.methodDeclaration mods [] anns JavaNames.equalsMethodName [
-        param] result (Just [
-        instanceOfStmt,
-        castStmt,
-        returnAllFieldsEqual]))
-
-recordHashCodeMethod :: [Core.FieldType] -> Syntax.ClassBodyDeclaration
-recordHashCodeMethod fields =
-
-      let anns = [
-            Utils.overrideAnnotation]
-          mods = [
-                Syntax.MethodModifierPublic]
-          result = Utils.javaTypeToJavaResult Utils.javaIntType
-          returnSum =
-                  Syntax.BlockStatementStatement (Logic.ifElse (Lists.isEmpty fields) (Utils.javaReturnStatement (Just (Utils.javaIntExpression 0))) (Utils.javaReturnStatement (Just (Utils.javaAdditiveExpressionToJavaExpression (Utils.addExpressions (Lists.zipWith hashCodeMultPair first20Primes (Lists.map (\f -> Core.fieldTypeName f) fields)))))))
-      in (Utils.methodDeclaration mods [] anns JavaNames.hashCodeMethodName [] result (Just [
-        returnSum]))
-
-recordMemberVar :: JavaEnvironment.Aliases -> Core.FieldType -> t0 -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclaration
-recordMemberVar aliases ft cx g =
-
-      let mods =
-              [
-                Syntax.FieldModifierPublic,
-                Syntax.FieldModifierFinal]
-          fname = Core.fieldTypeName ft
-          ftype = Core.fieldTypeType ft
-      in (Eithers.bind (encodeType aliases Sets.empty ftype cx g) (\jt -> Right (Utils.javaMemberField mods jt (Utils.fieldNameToJavaVariableDeclarator fname))))
-
-recordToStringMethod :: Core.Name -> [Core.FieldType] -> Syntax.ClassBodyDeclaration
-recordToStringMethod elName fields =
-
-      let anns = [
-            Utils.overrideAnnotation]
-          mods = [
-                Syntax.MethodModifierPublic]
-          result = Utils.javaTypeToJavaResult (Utils.javaRefType [] Nothing "String")
-          className = Core.unName elName
-          fieldParts = Lists.drop 1 (Lists.concat (Lists.map fieldToStringPart fields))
-          allParts =
-                  Lists.concat2 [
-                    Utils.javaStringMultiplicativeExpression (Strings.concat2 className "{")] (Lists.concat2 fieldParts [
-                    Utils.javaStringMultiplicativeExpression "}"])
-          returnStr =
-                  Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaAdditiveExpressionToJavaExpression (Utils.addExpressions allParts))))
-      in (Utils.methodDeclaration mods [] anns JavaNames.toStringMethodName [] result (Just [
-        returnStr]))
-
-recordWithMethod :: JavaEnvironment.Aliases -> Core.Name -> [Core.FieldType] -> Core.FieldType -> t0 -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclaration
-recordWithMethod aliases elName fields field cx g =
-
-      let mods = [
-            Syntax.MethodModifierPublic]
-          anns = []
-          methodName =
-                  Strings.concat2 "with" (Formatting.nonAlnumToUnderscores (Formatting.capitalize (Core.unName (Core.fieldTypeName field))))
-          result = Utils.referenceTypeToResult (Utils.nameToJavaReferenceType aliases False [] elName Nothing)
-          consId = Syntax.Identifier (Utils.sanitizeJavaName (Names.localNameOf elName))
-          fieldArgs = Lists.map (\f -> Utils.fieldNameToJavaExpression (Core.fieldTypeName f)) fields
-          returnStmt =
-                  Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaConstructorCall (Utils.javaConstructorName consId Nothing) fieldArgs Nothing)))
-      in (Eithers.bind (fieldTypeToFormalParam aliases field cx g) (\param -> Right (Utils.methodDeclaration mods [] anns methodName [
-        param] result (Just [
-        returnStmt]))))
-
-resolveTypeApps :: [Core.Name] -> [Core.Type] -> M.Map Core.Name Core.Type -> [Core.Type]
-resolveTypeApps schemeVars fallbackTypeApps argSubst =
-
-      let resolvedVars = Sets.fromList (Maps.keys argSubst)
-          unresolvedVars = Lists.filter (\v -> Logic.not (Sets.member v resolvedVars)) schemeVars
-          usedTypes = Sets.fromList (Maps.elems argSubst)
-          unusedIrTypes = Lists.filter (\t -> Logic.not (Sets.member t usedTypes)) fallbackTypeApps
-          remainingSubst = Maps.fromList (Lists.zip unresolvedVars unusedIrTypes)
-          fullSubst = Maps.union argSubst remainingSubst
-      in (Lists.map (\v -> Maps.findWithDefault (Core.TypeVariable v) v fullSubst) schemeVars)
-
-selfRefSubstitution :: (Eq t0, Ord t0) => (M.Map t0 [t0] -> M.Map t0 t0)
-selfRefSubstitution grouped =
-    Lists.foldl (\subst -> \entry -> selfRefSubstitution_processGroup subst (Pairs.first entry) (Pairs.second entry)) Maps.empty (Maps.toList grouped)
-
-selfRefSubstitution_processGroup :: (Eq t0, Ord t0) => (M.Map t0 t0 -> t0 -> [t0] -> M.Map t0 t0)
-selfRefSubstitution_processGroup subst inVar outVars =
-    Logic.ifElse (Lists.member inVar outVars) (Lists.foldl (\s -> \v -> Logic.ifElse (Equality.equal v inVar) s (Maps.insert v inVar s)) subst outVars) subst
-
-serializableTypes :: Bool -> [Syntax.InterfaceType]
-serializableTypes isSer =
-
-      let javaSerializableType =
-              Syntax.InterfaceType (Syntax.ClassType {
-                Syntax.classTypeAnnotations = [],
-                Syntax.classTypeQualifier = Syntax.ClassTypeQualifierNone,
-                Syntax.classTypeIdentifier = (Utils.javaTypeIdentifier "Serializable"),
-                Syntax.classTypeArguments = []})
-      in (Logic.ifElse isSer [
-        javaSerializableType] [])
-
-splitConstantInitializer :: Syntax.InterfaceMemberDeclaration -> [Syntax.InterfaceMemberDeclaration]
-splitConstantInitializer member =
-    case member of
-      Syntax.InterfaceMemberDeclarationConstant v0 -> Lists.bind (Syntax.constantDeclarationVariables v0) (splitConstantInitializer_splitVar (Syntax.constantDeclarationModifiers v0) (Syntax.constantDeclarationType v0))
-      _ -> [
-        member]
-
-splitConstantInitializer_splitVar :: [Syntax.ConstantModifier] -> Syntax.UnannType -> Syntax.VariableDeclarator -> [Syntax.InterfaceMemberDeclaration]
-splitConstantInitializer_splitVar mods utype vd =
-
-      let vid = Syntax.variableDeclaratorId vd
-          mInit = Syntax.variableDeclaratorInitializer vd
-      in (Optionals.match mInit [
-        Syntax.InterfaceMemberDeclarationConstant (Syntax.ConstantDeclaration {
-          Syntax.constantDeclarationModifiers = mods,
-          Syntax.constantDeclarationType = utype,
-          Syntax.constantDeclarationVariables = [
-            vd]})] (\init_ -> case init_ of
-        Syntax.VariableInitializerExpression v0 ->
-          let varName = javaIdentifierToString (Syntax.variableDeclaratorIdIdentifier vid)
-              helperName = Strings.concat2 "_init_" varName
-              callExpr = Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation Nothing (Syntax.Identifier helperName) [])
-              field =
-                      Syntax.InterfaceMemberDeclarationConstant (Syntax.ConstantDeclaration {
-                        Syntax.constantDeclarationModifiers = mods,
-                        Syntax.constantDeclarationType = utype,
-                        Syntax.constantDeclarationVariables = [
-                          Syntax.VariableDeclarator {
-                            Syntax.variableDeclaratorId = vid,
-                            Syntax.variableDeclaratorInitializer = (Just (Syntax.VariableInitializerExpression callExpr))}]})
-              returnSt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just v0))
-              resultType = Syntax.ResultType utype
-              helper =
-                      Utils.interfaceMethodDeclaration [
-                        Syntax.InterfaceMethodModifierStatic,
-                        Syntax.InterfaceMethodModifierPrivate] [] helperName [] resultType (Just [
-                        returnSt])
-          in [
-            field,
-            helper]
-        _ -> [
-          Syntax.InterfaceMemberDeclarationConstant (Syntax.ConstantDeclaration {
-            Syntax.constantDeclarationModifiers = mods,
-            Syntax.constantDeclarationType = utype,
-            Syntax.constantDeclarationVariables = [
-              vd]})]))
-
-stripForalls :: Core.Type -> Core.Type
-stripForalls t =
-    case (Strip.deannotateType t) of
-      Core.TypeForall v0 -> stripForalls (Core.forallTypeBody v0)
-      _ -> t
-
-substituteTypeVarsWithTypes :: M.Map Core.Name Core.Type -> Core.Type -> Core.Type
-substituteTypeVarsWithTypes subst t = substituteTypeVarsWithTypes_go subst (Strip.deannotateType t)
-
-substituteTypeVarsWithTypes_go :: M.Map Core.Name Core.Type -> Core.Type -> Core.Type
-substituteTypeVarsWithTypes_go subst t =
-    case (Strip.deannotateType t) of
-      Core.TypeVariable v0 -> Optionals.match (Maps.lookup v0 subst) t (\rep -> rep)
-      Core.TypeFunction v0 -> Core.TypeFunction (Core.FunctionType {
-        Core.functionTypeDomain = (substituteTypeVarsWithTypes_go subst (Core.functionTypeDomain v0)),
-        Core.functionTypeCodomain = (substituteTypeVarsWithTypes_go subst (Core.functionTypeCodomain v0))})
-      Core.TypeApplication v0 -> Core.TypeApplication (Core.ApplicationType {
-        Core.applicationTypeFunction = (substituteTypeVarsWithTypes_go subst (Core.applicationTypeFunction v0)),
-        Core.applicationTypeArgument = (substituteTypeVarsWithTypes_go subst (Core.applicationTypeArgument v0))})
-      Core.TypeList v0 -> Core.TypeList (substituteTypeVarsWithTypes_go subst v0)
-      Core.TypeSet v0 -> Core.TypeSet (substituteTypeVarsWithTypes_go subst v0)
-      Core.TypeOptional v0 -> Core.TypeOptional (substituteTypeVarsWithTypes_go subst v0)
-      Core.TypeEffect v0 -> Core.TypeEffect (substituteTypeVarsWithTypes_go subst v0)
-      Core.TypeMap v0 -> Core.TypeMap (Core.MapType {
-        Core.mapTypeKeys = (substituteTypeVarsWithTypes_go subst (Core.mapTypeKeys v0)),
-        Core.mapTypeValues = (substituteTypeVarsWithTypes_go subst (Core.mapTypeValues v0))})
-      Core.TypePair v0 -> Core.TypePair (Core.PairType {
-        Core.pairTypeFirst = (substituteTypeVarsWithTypes_go subst (Core.pairTypeFirst v0)),
-        Core.pairTypeSecond = (substituteTypeVarsWithTypes_go subst (Core.pairTypeSecond v0))})
-      Core.TypeEither v0 -> Core.TypeEither (Core.EitherType {
-        Core.eitherTypeLeft = (substituteTypeVarsWithTypes_go subst (Core.eitherTypeLeft v0)),
-        Core.eitherTypeRight = (substituteTypeVarsWithTypes_go subst (Core.eitherTypeRight v0))})
-      Core.TypeForall v0 -> Core.TypeForall (Core.ForallType {
-        Core.forallTypeParameter = (Core.forallTypeParameter v0),
-        Core.forallTypeBody = (substituteTypeVarsWithTypes_go subst (Core.forallTypeBody v0))})
-      _ -> t
-
-tagCmpNotZeroExpr :: Syntax.Expression
-tagCmpNotZeroExpr =
-    Utils.javaEqualityExpressionToJavaExpression (Syntax.EqualityExpressionNotEqual (Syntax.EqualityExpression_Binary {
-      Syntax.equalityExpression_BinaryLhs = lhs,
-      Syntax.equalityExpression_BinaryRhs = rhs}))
-  where
-    lhs =
-        Utils.javaRelationalExpressionToJavaEqualityExpression (Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionName (Syntax.ExpressionName {
-          Syntax.expressionNameQualifier = Nothing,
-          Syntax.expressionNameIdentifier = (Utils.javaIdentifier "tagCmp")})))
-    rhs =
-        Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionPrimary (Utils.javaLiteralToJavaPrimary (Utils.javaInt 0)))
-
-tagCompareExpr :: Syntax.Expression
-tagCompareExpr =
-    Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
-      Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-        Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "Integer"))),
-        Syntax.methodInvocation_ComplexTypeArguments = [],
-        Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier "compare")})),
-      Syntax.methodInvocationArguments = [
-        Utils.javaMethodInvocationToJavaExpression thisOrdinal,
-        (Utils.javaMethodInvocationToJavaExpression otherOrdinal)]})
-  where
-    thisOrdinal =
-        Syntax.MethodInvocation {
-          Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-            Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantPrimary (Utils.javaExpressionToJavaPrimary Utils.javaThis)),
-            Syntax.methodInvocation_ComplexTypeArguments = [],
-            Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hydraOrdinalMethodName)})),
-          Syntax.methodInvocationArguments = []}
-    otherOrdinal =
-        Syntax.MethodInvocation {
-          Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
-            Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantExpression (Syntax.ExpressionName {
-              Syntax.expressionNameQualifier = Nothing,
-              Syntax.expressionNameIdentifier = (Syntax.Identifier JavaNames.otherInstanceName)})),
-            Syntax.methodInvocation_ComplexTypeArguments = [],
-            Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hydraOrdinalMethodName)})),
-          Syntax.methodInvocationArguments = []}
-
-takeTypeArgs :: String -> Int -> [Syntax.Type] -> t0 -> t1 -> Either Errors.Error [Syntax.TypeArgument]
-takeTypeArgs label n tyapps cx g =
-    Logic.ifElse (Ordering.lt (Lists.length tyapps) n) (Left (Errors.ErrorOther (Errors.OtherError (Strings.concat [
-      "needed type arguments for ",
-      label,
-      ", found too few"])))) (Eithers.mapList (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt))) (Lists.take n tyapps))
-
-toClassDecl :: Bool -> Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Core.Name -> Core.Type -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassDeclaration
-toClassDecl isInner isSer aliases tparams elName t cx g =
-
-      let wrap =
-              \t_ -> declarationForRecordType isInner isSer aliases tparams elName [
-                Core.FieldType {
-                  Core.fieldTypeName = (Core.Name "value"),
-                  Core.fieldTypeType = (Strip.deannotateType t_)}] cx g
-      in case (Strip.deannotateType t) of
-        Core.TypeRecord v0 -> declarationForRecordType isInner isSer aliases tparams elName v0 cx g
-        Core.TypeUnion v0 -> declarationForUnionType isSer aliases tparams elName v0 cx g
-        Core.TypeForall v0 ->
-          let v = Core.forallTypeParameter v0
-              body = Core.forallTypeBody v0
-              param = Utils.javaTypeParameter (Formatting.capitalize (Core.unName v))
-          in (toClassDecl False isSer aliases (Lists.concat2 tparams [
-            param]) elName body cx g)
-        Core.TypeWrap v0 -> declarationForRecordType isInner isSer aliases tparams elName [
-          Core.FieldType {
-            Core.fieldTypeName = (Core.Name "value"),
-            Core.fieldTypeType = v0}] cx g
-        _ -> wrap t
-
-toDeclInit :: JavaEnvironment.Aliases -> Graph.Graph -> S.Set Core.Name -> [Core.Binding] -> Core.Name -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (Maybe Syntax.BlockStatement)
-toDeclInit aliasesExt gExt recursiveVars flatBindings name cx g =
-    Logic.ifElse (Sets.member name recursiveVars) (
-      let binding =
-              Optionals.withDefault (Core.Binding {
-                Core.bindingName = name,
-                Core.bindingTerm = Core.TermUnit,
-                Core.bindingTypeScheme = Nothing}) (Lists.head (Lists.filter (\b -> Equality.equal (Core.bindingName b) name) flatBindings))
-          value = Core.bindingTerm binding
-      in (Eithers.bind (Optionals.match (Core.bindingTypeScheme binding) (Checking.typeOfTerm cx gExt value) (\ts -> Right (Core.typeSchemeBody ts))) (\typ -> Eithers.bind (encodeType aliasesExt Sets.empty typ cx g) (\jtype ->
-        let id = Utils.variableToJavaIdentifier name
-            arid = Syntax.Identifier "java.util.concurrent.atomic.AtomicReference"
-            aid =
-                    Syntax.AnnotatedIdentifier {
-                      Syntax.annotatedIdentifierAnnotations = [],
-                      Syntax.annotatedIdentifierIdentifier = arid}
-        in (Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt ->
-          let targs = typeArgsOrDiamond [
-                Syntax.TypeArgumentReference rt]
-              ci =
-                      Syntax.ClassOrInterfaceTypeToInstantiate {
-                        Syntax.classOrInterfaceTypeToInstantiateIdentifiers = [
-                          aid],
-                        Syntax.classOrInterfaceTypeToInstantiateTypeArguments = (Just targs)}
-              body = Utils.javaConstructorCall ci [] Nothing
-              pkg =
-                      JavaNames.javaPackageName [
-                        "java",
-                        "util",
-                        "concurrent",
-                        "atomic"]
-              artype = Utils.javaRefType [
-                    rt] (Just pkg) "AtomicReference"
-          in (Right (Just (Utils.variableDeclarationStatement aliasesExt artype id body))))))))) (Right Nothing)
-
-toDeclStatement :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> Graph.Graph -> S.Set Core.Name -> S.Set Core.Name -> [Core.Binding] -> Core.Name -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.BlockStatement
-toDeclStatement envExt aliasesExt gExt recursiveVars thunkedVars flatBindings name cx g =
-
-      let binding =
-              Optionals.withDefault (Core.Binding {
-                Core.bindingName = name,
-                Core.bindingTerm = Core.TermUnit,
-                Core.bindingTypeScheme = Nothing}) (Lists.head (Lists.filter (\b -> Equality.equal (Core.bindingName b) name) flatBindings))
-          value = Core.bindingTerm binding
-      in (Eithers.bind (Optionals.match (Core.bindingTypeScheme binding) (Checking.typeOfTerm cx gExt value) (\ts -> Right (Core.typeSchemeBody ts))) (\typ -> Eithers.bind (encodeType aliasesExt Sets.empty typ cx g) (\jtype ->
-        let id = Utils.variableToJavaIdentifier name
-            annotatedValue = Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ typ)) value
-        in (Eithers.bind (encodeTerm envExt annotatedValue cx g) (\rhs -> Logic.ifElse (Sets.member name recursiveVars) (Right (Syntax.BlockStatementStatement (Utils.javaMethodInvocationToJavaStatement (Utils.methodInvocation (Just (Left (Syntax.ExpressionName {
-          Syntax.expressionNameQualifier = Nothing,
-          Syntax.expressionNameIdentifier = id}))) (Syntax.Identifier JavaNames.setMethodName) [
-          rhs])))) (Logic.ifElse (Sets.member name thunkedVars) (Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt ->
-          let lazyType = Utils.javaRefType [
-                rt] JavaNames.hydraUtilPackageName "Lazy"
-              lambdaBody = Syntax.LambdaBodyExpression rhs
-              supplierLambda =
-                      Syntax.ExpressionLambda (Syntax.LambdaExpression {
-                        Syntax.lambdaExpressionParameters = (Syntax.LambdaParametersTuple []),
-                        Syntax.lambdaExpressionBody = lambdaBody})
-              targs = typeArgsOrDiamond [
-                    Syntax.TypeArgumentReference rt]
-              lazyExpr =
-                      Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "hydra.overlay.java.util.Lazy") (Just targs)) [
-                        supplierLambda] Nothing
-          in (Right (Utils.variableDeclarationStatement aliasesExt lazyType id lazyExpr)))) (Right (Utils.variableDeclarationStatement aliasesExt jtype id rhs))))))))
-
-tryInferFunctionType :: Core.Term -> Maybe Core.Type
-tryInferFunctionType funTerm =
-    case (Strip.deannotateTerm funTerm) of
-      Core.TermLambda v0 -> Optionals.bind (Core.lambdaDomain v0) (\dom ->
-        let mCod =
-                case (Core.lambdaBody v0) of
-                  Core.TermAnnotated v1 -> Optionals.bind (Maps.lookup Constants.keyType (Annotations.getAnnotationMap (Core.annotatedTermAnnotation v1))) (\typeTerm -> decodeTypeFromTerm typeTerm)
-                  Core.TermLambda _ -> tryInferFunctionType (Core.lambdaBody v0)
-                  _ -> Nothing
-        in (Optionals.map (\cod -> Core.TypeFunction (Core.FunctionType {
-          Core.functionTypeDomain = dom,
-          Core.functionTypeCodomain = cod})) mCod))
-      _ -> Nothing
-
-typeAppFallbackCast :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> [M.Map Core.Name Core.Term] -> [Syntax.Type] -> Syntax.Type -> Core.Term -> Core.Type -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-typeAppFallbackCast env aliases anns tyapps jatyp body typ cx g =
-
-      let annotatedBody = Annotations.setTermAnnotation Constants.keyType (Just (EncodeCore.type_ typ)) body
-      in (Eithers.bind (encodeTermInternal env anns (Lists.cons jatyp tyapps) annotatedBody cx g) (\jbody -> Eithers.bind (encodeType aliases Sets.empty typ cx g) (\jtype -> Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt -> Right (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression rt (Utils.javaExpressionToJavaUnaryExpression jbody)))))))
-
-typeAppNullaryOrHoisted :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> [M.Map Core.Name Core.Term] -> [Syntax.Type] -> Syntax.Type -> Core.Term -> Core.Type -> Core.Name -> JavaEnvironment.JavaSymbolClass -> [Core.Type] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
-typeAppNullaryOrHoisted env aliases anns tyapps jatyp body correctedTyp varName cls allTypeArgs cx g =
-
-      let qn = Names.qualifyName varName
-          mns = Util.qualifiedNameModuleName qn
-          localName = Util.qualifiedNameLocal qn
-      in case cls of
-        JavaEnvironment.JavaSymbolClassNullaryFunction -> Optionals.match mns (typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g) (\ns_ ->
-          let classId = Utils.nameToJavaName aliases (elementsQualifiedName ns_)
-              methodId = Syntax.Identifier (Utils.sanitizeJavaName localName)
-          in (Eithers.bind (filterPhantomTypeArgs varName allTypeArgs cx g) (\filteredTypeArgs -> Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) filteredTypeArgs) (\jTypeArgs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs classId methodId jTypeArgs []))))))
-        JavaEnvironment.JavaSymbolClassHoistedLambda v0 -> Optionals.match mns (typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g) (\ns_ ->
-          let classId = Utils.nameToJavaName aliases (elementsQualifiedName ns_)
-              methodId = Syntax.Identifier (Utils.sanitizeJavaName localName)
-          in (Eithers.bind (filterPhantomTypeArgs varName allTypeArgs cx g) (\filteredTypeArgs -> Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) filteredTypeArgs) (\jTypeArgs ->
-            let paramNames = Lists.map (\i -> Core.Name (Strings.concat2 "p" (Literals.printInt32 i))) (Math.range 0 v0)
-                paramExprs = Lists.map (\p -> Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier p)) paramNames
-                call =
-                        Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs classId methodId jTypeArgs paramExprs)
-            in (Right (buildCurriedLambda paramNames call))))))
-        _ -> typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g
-
-typeArgsOrDiamond :: [Syntax.TypeArgument] -> Syntax.TypeArgumentsOrDiamond
-typeArgsOrDiamond args =
-    Logic.ifElse (JavaEnvironment.javaFeaturesSupportsDiamondOperator javaFeatures) Syntax.TypeArgumentsOrDiamondDiamond (Syntax.TypeArgumentsOrDiamondArguments args)
-
-typesMatch :: Core.Type -> Core.Type -> Bool
-typesMatch a b =
-    case a of
-      Core.TypeVariable v0 -> case b of
-        Core.TypeVariable v1 -> Equality.equal v0 v1
-        _ -> True
-      Core.TypeWrap v0 -> case b of
-        Core.TypeWrap v1 -> Equality.equal v0 v1
-        _ -> True
-      _ -> True
-
-unwrapReturnType :: Core.Type -> Core.Type
-unwrapReturnType t =
-    case (Strip.deannotateType t) of
-      Core.TypeFunction v0 -> unwrapReturnType (Core.functionTypeCodomain v0)
-      Core.TypeApplication v0 -> unwrapReturnType (Core.applicationTypeArgument v0)
-      _ -> t
-
-variantCompareToMethod :: JavaEnvironment.Aliases -> t0 -> Core.Name -> Core.Name -> Int -> [Core.FieldType] -> [Syntax.ClassBodyDeclaration]
-variantCompareToMethod aliases tparams parentName variantName ordinal fields =
-
-      let anns =
-              [
-                Utils.overrideAnnotation,
-                Utils.suppressWarningsUncheckedAnnotation]
-          mods = [
-                Syntax.MethodModifierPublic]
-          param =
-                  Utils.javaTypeToJavaFormalParameter (Utils.javaTypeFromTypeName aliases parentName) (Core.Name JavaNames.otherInstanceName)
-          result = Utils.javaTypeToJavaResult Utils.javaIntType
-          varTmpName = "o"
-          tagDeclStmt = Utils.variableDeclarationStatement aliases Utils.javaIntType (Utils.javaIdentifier "tagCmp") tagCompareExpr
-          tagReturnStmt =
-                  Syntax.BlockStatementStatement (Syntax.StatementIfThen (Syntax.IfThenStatement {
-                    Syntax.ifThenStatementExpression = tagCmpNotZeroExpr,
-                    Syntax.ifThenStatementStatement = (Utils.javaReturnStatement (Just (Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
-                      Syntax.expressionNameQualifier = Nothing,
-                      Syntax.expressionNameIdentifier = (Utils.javaIdentifier "tagCmp")}))))}))
-          variantJavaType = Utils.javaTypeFromTypeName aliases variantName
-          castOtherExpr =
-                  Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression (Utils.nameToJavaReferenceType aliases False [] variantName Nothing) (Utils.javaIdentifierToJavaUnaryExpression (Syntax.Identifier JavaNames.otherInstanceName)))
-          castDeclStmt = Utils.variableDeclarationStatement aliases variantJavaType (Utils.javaIdentifier varTmpName) castOtherExpr
-          emptyReturn = [
-                Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaIntExpression 0)))]
-          valueCompareStmt =
-                  Logic.ifElse (Lists.isEmpty fields) emptyReturn (Lists.concat2 [
-                    castDeclStmt] (compareToBody aliases varTmpName fields))
-          body =
-                  Lists.concat2 [
-                    tagDeclStmt,
-                    tagReturnStmt] valueCompareStmt
-      in [
-        Utils.methodDeclaration mods [] anns JavaNames.compareToMethodName [
-          param] result (Just body),
-        (hydraOrdinalMethod (Just ordinal))]
-
-visitBranch :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> Core.Type -> Core.Name -> Syntax.Type -> [Syntax.TypeArgument] -> Core.CaseAlternative -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
-visitBranch env aliases dom tname jcod targs field cx g =
-
-      let jdom =
-              Syntax.TypeReference (Utils.nameToJavaReferenceType aliases True targs tname (Just (Formatting.capitalize (Core.unName (Core.caseAlternativeName field)))))
-          mods = [
-                Syntax.MethodModifierPublic]
-          anns = [
-                Utils.overrideAnnotation]
-          result = Syntax.ResultType (Syntax.UnannType jcod)
-      in case (Strip.deannotateTerm (Core.caseAlternativeHandler field)) of
-        Core.TermLambda v0 -> withLambda env v0 (\env2 ->
-          let lambdaParam = Core.lambdaParameter v0
-              body = Core.lambdaBody v0
-              env3 = insertBranchVar lambdaParam env2
-          in (Eithers.bind (analyzeJavaFunction env3 body cx g) (\fs ->
-            let bindings = Typing.functionStructureBindings fs
-                innerBody = Typing.functionStructureBody fs
-                env4 = Typing.functionStructureEnvironment fs
-            in (Eithers.bind (bindingsToStatements env4 bindings cx g) (\bindResult ->
-              let bindingStmts = Pairs.first bindResult
-                  env5 = Pairs.second bindResult
-              in (Eithers.bind (encodeTerm env5 innerBody cx g) (\jret ->
-                let param = Utils.javaTypeToJavaFormalParameter jdom lambdaParam
-                    returnStmt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jret))
-                    allStmts = Lists.concat2 bindingStmts [
-                          returnStmt]
-                in (Right (noComment (Utils.methodDeclaration mods [] anns JavaNames.visitMethodName [
-                  param] result (Just allStmts)))))))))))
-        _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "visitBranch: field term is not a lambda: " (PrintCore.term (Core.caseAlternativeHandler field)))))
-
-withCommentString :: String -> Syntax.ClassBodyDeclaration -> Syntax.ClassBodyDeclarationWithComments
-withCommentString comment decl =
-    Syntax.ClassBodyDeclarationWithComments {
-      Syntax.classBodyDeclarationWithCommentsValue = decl,
-      Syntax.classBodyDeclarationWithCommentsComments = (Just comment)}
-
-withInterfaceCommentString :: String -> Syntax.InterfaceMemberDeclaration -> Syntax.InterfaceMemberDeclarationWithComments
-withInterfaceCommentString comment decl =
-    Syntax.InterfaceMemberDeclarationWithComments {
-      Syntax.interfaceMemberDeclarationWithCommentsValue = decl,
-      Syntax.interfaceMemberDeclarationWithCommentsComments = (Just comment)}
-
-withLambda :: JavaEnvironment.JavaEnvironment -> Core.Lambda -> (JavaEnvironment.JavaEnvironment -> t0) -> t0
-withLambda env lam k =
-    Environment.withLambdaContext javaEnvGetGraph javaEnvSetGraph env lam (\env1 ->
-      let aliases = JavaEnvironment.javaEnvironmentAliases env1
-          aliases2 =
-                  JavaEnvironment.Aliases {
-                    JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases),
-                    JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases),
-                    JavaEnvironment.aliasesBranchVars = (JavaEnvironment.aliasesBranchVars aliases),
-                    JavaEnvironment.aliasesRecursiveVars = (JavaEnvironment.aliasesRecursiveVars aliases),
-                    JavaEnvironment.aliasesInScopeTypeParams = (JavaEnvironment.aliasesInScopeTypeParams aliases),
-                    JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases),
-                    JavaEnvironment.aliasesInScopeJavaVars = (JavaEnvironment.aliasesInScopeJavaVars aliases),
-                    JavaEnvironment.aliasesVarRenames = (JavaEnvironment.aliasesVarRenames aliases),
-                    JavaEnvironment.aliasesLambdaVars = (Sets.insert (Core.lambdaParameter lam) (JavaEnvironment.aliasesLambdaVars aliases)),
-                    JavaEnvironment.aliasesTypeVarSubst = (JavaEnvironment.aliasesTypeVarSubst aliases),
-                    JavaEnvironment.aliasesTrustedTypeVars = (JavaEnvironment.aliasesTrustedTypeVars aliases),
-                    JavaEnvironment.aliasesMethodCodomain = (JavaEnvironment.aliasesMethodCodomain aliases),
-                    JavaEnvironment.aliasesThunkedVars = (JavaEnvironment.aliasesThunkedVars aliases)}
-          env2 =
-                  JavaEnvironment.JavaEnvironment {
-                    JavaEnvironment.javaEnvironmentAliases = aliases2,
-                    JavaEnvironment.javaEnvironmentGraph = (JavaEnvironment.javaEnvironmentGraph env1)}
-      in (k env2))
-
-withTypeLambda :: JavaEnvironment.JavaEnvironment -> Core.TypeLambda -> (JavaEnvironment.JavaEnvironment -> t0) -> t0
-withTypeLambda = Environment.withTypeLambdaContext javaEnvGetGraph javaEnvSetGraph
-
-wrapInSupplierLambda :: Syntax.Expression -> Syntax.Expression
-wrapInSupplierLambda expr =
-    Syntax.ExpressionLambda (Syntax.LambdaExpression {
-      Syntax.lambdaExpressionParameters = (Syntax.LambdaParametersTuple []),
-      Syntax.lambdaExpressionBody = (Syntax.LambdaBodyExpression expr)})
-
-wrapLazyArguments :: Graph.Graph -> Core.Name -> [Syntax.Expression] -> ([Syntax.Expression], (Maybe String))
-wrapLazyArguments g name args =
-
-      let lazyFlags = lazyFlagsForPrimitive g name
-          anyLazy = Lists.foldl (\b -> \f -> Logic.or b f) False lazyFlags
-      in (Logic.ifElse (Logic.and anyLazy (Equality.equal (Lists.length args) (Lists.length lazyFlags))) (
-        Lists.map (\pair -> Logic.ifElse (Pairs.second pair) (wrapInSupplierLambda (Pairs.first pair)) (Pairs.first pair)) (Lists.zip args lazyFlags),
-        (Just (Logic.ifElse (Equality.equal name (Core.Name "hydra.lib.logic.ifElse")) "lazy" "applyLazy"))) (args, Nothing))
+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.Checking as Checking
+import qualified Hydra.Core.Classes as Classes
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Constants as Constants
+import qualified Hydra.Core.Decode.Model as DecodeModel
+import qualified Hydra.Core.Dependencies as Dependencies
+import qualified Hydra.Core.Encode.Model as EncodeModel
+import qualified Hydra.Core.Environment as CoreEnvironment
+import qualified Hydra.Core.Error.Checking as ErrorChecking
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+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.Inference as Inference
+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.Model as Model
+import qualified Hydra.Core.Names as CoreNames
+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.Predicates as Predicates
+import qualified Hydra.Core.Print.Model as PrintModel
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Refs as Refs
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Resolution as Resolution
+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.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+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.Java.Environment as JavaEnvironment
+import qualified Hydra.Java.Language as Language
+import qualified Hydra.Java.Names as JavaNames
+import qualified Hydra.Java.Serde as Serde
+import qualified Hydra.Java.Syntax as Syntax
+import qualified Hydra.Java.Utils as Utils
+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
+
+-- | Attach comments derived from a field's annotations to a class body declaration
+addComment :: Syntax.ClassBodyDeclaration -> Model.FieldType -> t0 -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
+addComment decl field cx g =
+    Eithers.map (\c -> Syntax.ClassBodyDeclarationWithComments {
+      Syntax.classBodyDeclarationWithCommentsValue = decl,
+      Syntax.classBodyDeclarationWithCommentsComments = c}) (Annotations.commentsFromFieldType cx g field)
+
+analyzeJavaFunction :: JavaEnvironment.JavaEnvironment -> Model.Term -> Typing.InferenceContext -> t0 -> Either t1 (Typing.FunctionStructure JavaEnvironment.JavaEnvironment)
+analyzeJavaFunction env term cx g = Analysis.analyzeFunctionTerm cx javaEnvGetGraph javaEnvSetGraph env term
+
+annotateBodyWithCod :: Model.Type -> Model.Term -> Model.Term
+annotateBodyWithCod typ term =
+
+      let setAnn = \t -> Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ typ)) t
+      in case (Strip.deannotateTerm term) of
+        Model.TermTypeApplication _ -> setAnn term
+        Model.TermApplication v0 ->
+          let lhs = Model.applicationFunction v0
+              rhs = Model.applicationArgument v0
+              annotatedRhs =
+                      case (Strip.deannotateTerm rhs) of
+                        Model.TermTypeApplication _ -> annotateBodyWithCod (extractArgType lhs typ) rhs
+                        _ -> rhs
+          in (setAnn (Model.TermApplication (Model.Application {
+            Model.applicationFunction = lhs,
+            Model.applicationArgument = annotatedRhs})))
+        _ -> setAnn term
+
+annotateLambdaArgs :: Model.Name -> [Model.Type] -> [Model.Term] -> t0 -> Graph.Graph -> Either t1 [Model.Term]
+annotateLambdaArgs cname tApps argTerms cx g =
+    Logic.ifElse (Lists.isEmpty tApps) (Right argTerms) (Eithers.bind (Eithers.bind (Right (Lexical.lookupBinding g cname)) (\mel -> Optionals.match mel (Right (Optionals.map (\prim -> Scoping.termSignatureToTypeScheme (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition prim))) (Maps.lookup cname (Graph.graphPrimitives g)))) (\el -> Right (Model.bindingTypeScheme el)))) (\mts -> Optionals.match mts (Right argTerms) (\ts ->
+      let schemeType = Model.typeSchemeBody ts
+          schemeTypeVars = collectTypeVars schemeType
+          schemeVars = Lists.filter (\v -> Sets.member v schemeTypeVars) (Model.typeSchemeVariables ts)
+      in (Logic.ifElse (Logic.or (Lists.isEmpty schemeVars) (Logic.not (Equality.equal (Lists.length schemeVars) (Lists.length tApps)))) (Right argTerms) (
+        let subst = Maps.fromList (Lists.zip schemeVars tApps)
+            expectedTypes = peelExpectedTypes subst (Lists.length argTerms) schemeType
+        in (Right (Lists.zipWith (\arg -> \mExpected -> propagateType mExpected arg) argTerms (Lists.concat2 expectedTypes (Lists.replicate (Lists.length argTerms) (Model.TypeVariable (Model.Name "unused")))))))))))
+
+applyCastIfSafe :: JavaEnvironment.Aliases -> Model.Type -> Syntax.Expression -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+applyCastIfSafe aliases castType expr cx g =
+
+      let trusted = JavaEnvironment.aliasesTrustedTypeVars aliases
+          inScope = JavaEnvironment.aliasesInScopeTypeParams aliases
+          castVars = collectTypeVars castType
+          javaTypeVars =
+                  Sets.fromList (Lists.filter (\v -> Logic.or (Sets.member v inScope) (isLambdaBoundVariable v)) (Sets.toList castVars))
+          isSafe =
+                  Logic.or (Sets.isEmpty trusted) (Logic.or (Sets.isEmpty javaTypeVars) (Sets.isEmpty (Sets.difference javaTypeVars trusted)))
+      in (Logic.ifElse isSafe (Eithers.bind (encodeType aliases Sets.empty castType cx g) (\jtype -> Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt -> Right (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression rt (Utils.javaExpressionToJavaUnaryExpression expr)))))) (Right expr))
+
+applyJavaArg :: Syntax.Expression -> Syntax.Expression -> Syntax.Expression
+applyJavaArg expr jarg =
+    Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Right (Utils.javaExpressionToJavaPrimary expr))) (Syntax.Identifier JavaNames.applyMethodName) [
+      jarg])
+
+applyOvergenSubstToTermAnnotations :: M.Map Model.Name Model.Type -> Model.Term -> t0 -> Graph.Graph -> Either t1 Model.Term
+applyOvergenSubstToTermAnnotations subst term0 cx g = Right (applyOvergenSubstToTermAnnotationsGo subst g term0)
+
+applyOvergenSubstToTermAnnotationsGo :: M.Map Model.Name Model.Type -> Graph.Graph -> Model.Term -> Model.Term
+applyOvergenSubstToTermAnnotationsGo subst cx term =
+    case term of
+      Model.TermAnnotated v0 ->
+        let inner = Model.annotatedTermBody v0
+            ann = Annotations.getAnnotationMap (Model.annotatedTermAnnotation v0)
+            ann_ =
+                    Optionals.match (Maps.lookup Constants.keyType ann) ann (\typeTerm -> Eithers.either (\_ -> ann) (\t ->
+                      let t_ = substituteTypeVarsWithTypes subst t
+                      in (Maps.insert Constants.keyType (EncodeModel.type_ t_) ann)) (DecodeModel.type_ cx typeTerm))
+        in (Model.TermAnnotated (Model.AnnotatedTerm {
+          Model.annotatedTermBody = (applyOvergenSubstToTermAnnotationsGo subst cx inner),
+          Model.annotatedTermAnnotation = (Annotations.wrapAnnotationMap ann_)}))
+      Model.TermApplication v0 -> Model.TermApplication (Model.Application {
+        Model.applicationFunction = (applyOvergenSubstToTermAnnotationsGo subst cx (Model.applicationFunction v0)),
+        Model.applicationArgument = (applyOvergenSubstToTermAnnotationsGo subst cx (Model.applicationArgument v0))})
+      Model.TermLambda v0 -> Model.TermLambda (Model.Lambda {
+        Model.lambdaParameter = (Model.lambdaParameter v0),
+        Model.lambdaDomain = (Optionals.map (\d -> substituteTypeVarsWithTypes subst d) (Model.lambdaDomain v0)),
+        Model.lambdaBody = (applyOvergenSubstToTermAnnotationsGo subst cx (Model.lambdaBody v0))})
+      Model.TermCases v0 -> Model.TermCases (Model.CaseStatement {
+        Model.caseStatementTypeName = (Model.caseStatementTypeName v0),
+        Model.caseStatementDefault = (Optionals.map (\d -> applyOvergenSubstToTermAnnotationsGo subst cx d) (Model.caseStatementDefault v0)),
+        Model.caseStatementCases = (Lists.map (\fld -> Model.CaseAlternative {
+          Model.caseAlternativeName = (Model.caseAlternativeName fld),
+          Model.caseAlternativeHandler = (applyOvergenSubstToTermAnnotationsGo subst cx (Model.caseAlternativeHandler fld))}) (Model.caseStatementCases v0))})
+      Model.TermLet v0 -> Model.TermLet (Model.Let {
+        Model.letBindings = (Lists.map (\b -> Model.Binding {
+          Model.bindingName = (Model.bindingName b),
+          Model.bindingTerm = (applyOvergenSubstToTermAnnotationsGo subst cx (Model.bindingTerm b)),
+          Model.bindingTypeScheme = (Model.bindingTypeScheme b)}) (Model.letBindings v0)),
+        Model.letBody = (applyOvergenSubstToTermAnnotationsGo subst cx (Model.letBody v0))})
+      Model.TermTypeApplication v0 -> Model.TermTypeApplication (Model.TypeApplicationTerm {
+        Model.typeApplicationTermBody = (applyOvergenSubstToTermAnnotationsGo subst cx (Model.typeApplicationTermBody v0)),
+        Model.typeApplicationTermType = (substituteTypeVarsWithTypes subst (Model.typeApplicationTermType v0))})
+      Model.TermTypeLambda v0 -> Model.TermTypeLambda (Model.TypeLambda {
+        Model.typeLambdaParameter = (Model.typeLambdaParameter v0),
+        Model.typeLambdaBody = (applyOvergenSubstToTermAnnotationsGo subst cx (Model.typeLambdaBody v0))})
+      _ -> term
+
+applySubstFull :: M.Map Model.Name Model.Type -> Model.Type -> Model.Type
+applySubstFull s t =
+    case (Strip.deannotateType t) of
+      Model.TypeVariable v0 -> Maps.findWithDefault t v0 s
+      Model.TypeFunction v0 -> Model.TypeFunction (Model.FunctionType {
+        Model.functionTypeDomain = (applySubstFull s (Model.functionTypeDomain v0)),
+        Model.functionTypeCodomain = (applySubstFull s (Model.functionTypeCodomain v0))})
+      Model.TypeApplication v0 -> Model.TypeApplication (Model.ApplicationType {
+        Model.applicationTypeFunction = (applySubstFull s (Model.applicationTypeFunction v0)),
+        Model.applicationTypeArgument = (applySubstFull s (Model.applicationTypeArgument v0))})
+      Model.TypeList v0 -> Model.TypeList (applySubstFull s v0)
+      Model.TypeSet v0 -> Model.TypeSet (applySubstFull s v0)
+      Model.TypeOptional v0 -> Model.TypeOptional (applySubstFull s v0)
+      Model.TypeEffect v0 -> Model.TypeEffect (applySubstFull s v0)
+      Model.TypeMap v0 -> Model.TypeMap (Model.MapType {
+        Model.mapTypeKeys = (applySubstFull s (Model.mapTypeKeys v0)),
+        Model.mapTypeValues = (applySubstFull s (Model.mapTypeValues v0))})
+      Model.TypePair v0 -> Model.TypePair (Model.PairType {
+        Model.pairTypeFirst = (applySubstFull s (Model.pairTypeFirst v0)),
+        Model.pairTypeSecond = (applySubstFull s (Model.pairTypeSecond v0))})
+      Model.TypeEither v0 -> Model.TypeEither (Model.EitherType {
+        Model.eitherTypeLeft = (applySubstFull s (Model.eitherTypeLeft v0)),
+        Model.eitherTypeRight = (applySubstFull s (Model.eitherTypeRight v0))})
+      Model.TypeForall v0 -> Model.TypeForall (Model.ForallType {
+        Model.forallTypeParameter = (Model.forallTypeParameter v0),
+        Model.forallTypeBody = (applySubstFull (Maps.delete (Model.forallTypeParameter v0) s) (Model.forallTypeBody v0))})
+      _ -> t
+
+applySubstSimple :: M.Map Model.Name Model.Type -> Model.Type -> Model.Type
+applySubstSimple subst t =
+    case (Strip.deannotateType t) of
+      Model.TypeVariable v0 -> Maps.findWithDefault t v0 subst
+      _ -> t
+
+arraysCompareExpr :: String -> String -> Syntax.Expression
+arraysCompareExpr otherVar fname =
+
+      let header =
+              Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+                Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "java.util.Arrays"))),
+                Syntax.methodInvocation_ComplexTypeArguments = [],
+                Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier "compare")})
+          arg1 =
+                  Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
+                    Syntax.expressionNameQualifier = Nothing,
+                    Syntax.expressionNameIdentifier = (Syntax.Identifier (Utils.sanitizeJavaName fname))})
+          arg2 =
+                  Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier otherVar) (Utils.javaIdentifier fname))
+      in (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
+        Syntax.methodInvocationHeader = header,
+        Syntax.methodInvocationArguments = [
+          arg1,
+          arg2]}))
+
+arraysEqualsClause :: String -> String -> Syntax.InclusiveOrExpression
+arraysEqualsClause tmpName fname =
+
+      let thisArg =
+              Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Syntax.Identifier "this") (Utils.javaIdentifier fname))
+          otherArg =
+                  Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier tmpName) (Utils.javaIdentifier fname))
+          header =
+                  Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+                    Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "java.util.Arrays"))),
+                    Syntax.methodInvocation_ComplexTypeArguments = [],
+                    Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.equalsMethodName)})
+      in (Utils.javaPostfixExpressionToJavaInclusiveOrExpression (Utils.javaMethodInvocationToJavaPostfixExpression (Syntax.MethodInvocation {
+        Syntax.methodInvocationHeader = header,
+        Syntax.methodInvocationArguments = [
+          thisArg,
+          otherArg]})))
+
+augmentVariantClass :: JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Model.Name -> Syntax.ClassDeclaration -> Syntax.ClassDeclaration
+augmentVariantClass aliases tparams elName cd =
+    case cd of
+      Syntax.ClassDeclarationNormal v0 ->
+        let args = Lists.map (\tp -> Utils.typeParameterToTypeArgument tp) tparams
+            extendsPart = Utils.nameToJavaClassType aliases True args elName Nothing
+            newMods =
+                    [
+                      Syntax.ClassModifierPublic,
+                      Syntax.ClassModifierStatic,
+                      Syntax.ClassModifierFinal]
+            oldBody = Syntax.normalClassDeclarationBody v0
+            oldDecls = Syntax.unClassBody oldBody
+            acceptDecl = withCommentString "Dispatch to {@code visitor}." (Utils.toAcceptMethod False tparams)
+            newBody = Syntax.ClassBody (Lists.concat2 oldDecls [
+                  acceptDecl])
+        in (Syntax.ClassDeclarationNormal (Syntax.NormalClassDeclaration {
+          Syntax.normalClassDeclarationModifiers = newMods,
+          Syntax.normalClassDeclarationIdentifier = (Syntax.normalClassDeclarationIdentifier v0),
+          Syntax.normalClassDeclarationParameters = tparams,
+          Syntax.normalClassDeclarationExtends = (Just extendsPart),
+          Syntax.normalClassDeclarationImplements = (Syntax.normalClassDeclarationImplements v0),
+          Syntax.normalClassDeclarationPermits = (Syntax.normalClassDeclarationPermits v0),
+          Syntax.normalClassDeclarationBody = newBody}))
+      _ -> cd
+
+bindingIsFunctionType :: Model.Binding -> Bool
+bindingIsFunctionType b =
+    Optionals.match (Model.bindingTypeScheme b) (case (Strip.deannotateTerm (Model.bindingTerm b)) of
+      Model.TermLambda _ -> True
+      Model.TermProject _ -> True
+      Model.TermCases _ -> True
+      Model.TermUnwrap _ -> True
+      _ -> False) (\ts -> case (Strip.deannotateType (Model.typeSchemeBody ts)) of
+      Model.TypeFunction _ -> True
+      Model.TypeForall v0 -> case (Strip.deannotateType (Model.forallTypeBody v0)) of
+        Model.TypeFunction _ -> True
+        _ -> False
+      _ -> False)
+
+bindingNameToFilePath :: Model.Name -> String
+bindingNameToFilePath name =
+
+      let qn = CoreNames.qualifyName name
+          ns_ = Util.qualifiedNameModuleName qn
+          local = Util.qualifiedNameLocal qn
+          sanitized = Formatting.sanitizeWithUnderscores Language.reservedWords local
+          unq =
+                  CoreNames.unqualifyName (Util.QualifiedName {
+                    Util.qualifiedNameModuleName = ns_,
+                    Util.qualifiedNameLocal = sanitized})
+      in (CoreNames.nameToFilePath Util.CaseConventionCamel Util.CaseConventionPascal (File.FileExtension "java") unq)
+
+bindingsToStatements :: JavaEnvironment.JavaEnvironment -> [Model.Binding] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error ([Syntax.BlockStatement], JavaEnvironment.JavaEnvironment)
+bindingsToStatements env bindings cx g0 =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+          g = JavaEnvironment.javaEnvironmentGraph env
+          flatBindings = dedupBindings (JavaEnvironment.aliasesInScopeJavaVars aliases) (flattenBindings bindings)
+          gExtended =
+                  Scoping.extendGraphForLet (\g1 -> \b -> Logic.ifElse (Predicates.isComplexBinding g1 b) (Just (Model.TermLiteral (Model.LiteralBoolean True))) Nothing) g (Model.Let {
+                    Model.letBindings = flatBindings,
+                    Model.letBody = (Model.TermVariable (Model.Name "dummy"))})
+          bindingVars = Sets.fromList (Lists.map (\b -> Model.bindingName b) flatBindings)
+          allDeps =
+                  Maps.fromList (Lists.map (\b ->
+                    let key = Model.bindingName b
+                        deps = Sets.intersection bindingVars (Variables.freeVariablesInTerm (Model.bindingTerm b))
+                    in (key, deps)) flatBindings)
+          sorted =
+                  Sorting.topologicalSortComponents (Lists.map (\entry ->
+                    let key = Pairs.first entry
+                        deps = Pairs.second entry
+                    in (key, (Sets.toList deps))) (Maps.toList allDeps))
+          recursiveVars =
+                  Sets.fromList (Lists.concat (Lists.map (\names -> Logic.ifElse (Equality.equal (Lists.length names) 1) (Optionals.match (Lists.head names) [] (\singleName -> Optionals.match (Maps.lookup singleName allDeps) [] (\deps -> Logic.ifElse (Sets.member singleName deps) [
+                    singleName] []))) names) sorted))
+          thunkedVars =
+                  Sets.fromList (Lists.concat (Lists.map (\b ->
+                    let bname = Model.bindingName b
+                    in (Logic.ifElse (Logic.and (Logic.not (Sets.member bname recursiveVars)) (Logic.and (Logic.and (Predicates.isComplexBinding g b) (Logic.not (Predicates.isTrivialTerm (Model.bindingTerm b)))) (Logic.not (bindingIsFunctionType b)))) [
+                      bname] [])) flatBindings))
+          aliasesExtended =
+                  JavaEnvironment.Aliases {
+                    JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases),
+                    JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases),
+                    JavaEnvironment.aliasesBranchVars = (JavaEnvironment.aliasesBranchVars aliases),
+                    JavaEnvironment.aliasesRecursiveVars = (Sets.union (JavaEnvironment.aliasesRecursiveVars aliases) recursiveVars),
+                    JavaEnvironment.aliasesInScopeTypeParams = (JavaEnvironment.aliasesInScopeTypeParams aliases),
+                    JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases),
+                    JavaEnvironment.aliasesInScopeJavaVars = (Sets.union (JavaEnvironment.aliasesInScopeJavaVars aliases) bindingVars),
+                    JavaEnvironment.aliasesVarRenames = (JavaEnvironment.aliasesVarRenames aliases),
+                    JavaEnvironment.aliasesLambdaVars = (JavaEnvironment.aliasesLambdaVars aliases),
+                    JavaEnvironment.aliasesTypeVarSubst = (JavaEnvironment.aliasesTypeVarSubst aliases),
+                    JavaEnvironment.aliasesTrustedTypeVars = (JavaEnvironment.aliasesTrustedTypeVars aliases),
+                    JavaEnvironment.aliasesMethodCodomain = (JavaEnvironment.aliasesMethodCodomain aliases),
+                    JavaEnvironment.aliasesThunkedVars = (Sets.union (JavaEnvironment.aliasesThunkedVars aliases) thunkedVars)}
+          envExtended =
+                  JavaEnvironment.JavaEnvironment {
+                    JavaEnvironment.javaEnvironmentAliases = aliasesExtended,
+                    JavaEnvironment.javaEnvironmentGraph = gExtended}
+      in (Logic.ifElse (Lists.isEmpty bindings) (Right ([], envExtended)) (Eithers.bind (Eithers.mapList (\names -> Eithers.bind (Eithers.mapList (\n -> toDeclInit aliasesExtended gExtended recursiveVars flatBindings n cx g) names) (\inits -> Eithers.bind (Eithers.mapList (\n -> toDeclStatement envExtended aliasesExtended gExtended recursiveVars thunkedVars flatBindings n cx g) names) (\decls -> Right (Lists.concat2 (Optionals.givens inits) decls)))) sorted) (\groups -> Right (Lists.concat groups, envExtended))))
+
+boundTypeVariables :: Model.Type -> [Model.Name]
+boundTypeVariables typ =
+    case typ of
+      Model.TypeAnnotated v0 -> boundTypeVariables (Model.annotatedTypeBody v0)
+      Model.TypeForall v0 -> Lists.cons (Model.forallTypeParameter v0) (boundTypeVariables (Model.forallTypeBody v0))
+      _ -> []
+
+buildArgSubst :: S.Set Model.Name -> [Model.Type] -> [t0] -> M.Map Model.Name t0
+buildArgSubst schemeVarSet schemeDoms argTypes =
+    Maps.fromList (Lists.bind (Lists.zip schemeDoms argTypes) (\p ->
+      let sdom = Pairs.first p
+          argType = Pairs.second p
+      in case (Strip.deannotateType sdom) of
+        Model.TypeVariable v0 -> Logic.ifElse (Sets.member v0 schemeVarSet) [
+          (v0, argType)] []
+        _ -> []))
+
+buildCurriedLambda :: [Model.Name] -> Syntax.Expression -> Syntax.Expression
+buildCurriedLambda params inner = Lists.foldl (\acc -> \p -> Utils.javaLambda p acc) inner (Lists.reverse params)
+
+buildSubstFromAnnotations :: S.Set Model.Name -> Model.Term -> t0 -> Graph.Graph -> Either t1 (M.Map Model.Name Model.Name)
+buildSubstFromAnnotations schemeVarSet term cx g = Right (buildSubstFromAnnotations_go schemeVarSet g term)
+
+buildSubstFromAnnotations_go :: S.Set Model.Name -> Graph.Graph -> Model.Term -> M.Map Model.Name Model.Name
+buildSubstFromAnnotations_go schemeVarSet g term =
+    case term of
+      Model.TermAnnotated v0 ->
+        let body = Model.annotatedTermBody v0
+            anns = Annotations.getAnnotationMap (Model.annotatedTermAnnotation v0)
+            bodySubst = buildSubstFromAnnotations_go schemeVarSet g body
+            annSubst =
+                    Optionals.match (Maps.lookup Constants.keyType anns) Maps.empty (\typeTerm -> Eithers.either (\_ -> Maps.empty) (\annType -> case (Strip.deannotateTerm body) of
+                      Model.TermLambda v1 -> Optionals.match (Model.lambdaDomain v1) Maps.empty (\dom -> case (Strip.deannotateType annType) of
+                        Model.TypeFunction v2 -> buildTypeVarSubst schemeVarSet (Model.functionTypeDomain v2) dom
+                        _ -> Maps.empty)
+                      _ -> Maps.empty) (DecodeModel.type_ g typeTerm))
+        in (Maps.union annSubst bodySubst)
+      Model.TermApplication v0 -> Maps.union (buildSubstFromAnnotations_go schemeVarSet g (Model.applicationFunction v0)) (buildSubstFromAnnotations_go schemeVarSet g (Model.applicationArgument v0))
+      Model.TermLambda v0 -> buildSubstFromAnnotations_go schemeVarSet g (Model.lambdaBody v0)
+      Model.TermCases v0 ->
+        let defSubst = Optionals.match (Model.caseStatementDefault v0) Maps.empty (\d -> buildSubstFromAnnotations_go schemeVarSet g d)
+            caseSubsts =
+                    Lists.foldl (\acc -> \fld -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g (Model.caseAlternativeHandler fld))) Maps.empty (Model.caseStatementCases v0)
+        in (Maps.union defSubst caseSubsts)
+      Model.TermLet v0 ->
+        let bindingSubst =
+                Lists.foldl (\acc -> \b -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g (Model.bindingTerm b))) Maps.empty (Model.letBindings v0)
+        in (Maps.union bindingSubst (buildSubstFromAnnotations_go schemeVarSet g (Model.letBody v0)))
+      Model.TermList v0 -> Lists.foldl (\acc -> \t -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g t)) Maps.empty v0
+      Model.TermOptional v0 -> Optionals.match v0 Maps.empty (\t -> buildSubstFromAnnotations_go schemeVarSet g t)
+      Model.TermPair v0 -> Maps.union (buildSubstFromAnnotations_go schemeVarSet g (Pairs.first v0)) (buildSubstFromAnnotations_go schemeVarSet g (Pairs.second v0))
+      Model.TermRecord v0 -> Lists.foldl (\acc -> \fld -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g (Model.fieldTerm fld))) Maps.empty (Model.recordFields v0)
+      Model.TermSet v0 -> Lists.foldl (\acc -> \t -> Maps.union acc (buildSubstFromAnnotations_go schemeVarSet g t)) Maps.empty (Sets.toList v0)
+      Model.TermTypeApplication v0 -> buildSubstFromAnnotations_go schemeVarSet g (Model.typeApplicationTermBody v0)
+      Model.TermTypeLambda v0 -> buildSubstFromAnnotations_go schemeVarSet g (Model.typeLambdaBody v0)
+      Model.TermEither v0 -> Eithers.either (\t -> buildSubstFromAnnotations_go schemeVarSet g t) (\t -> buildSubstFromAnnotations_go schemeVarSet g t) v0
+      _ -> Maps.empty
+
+buildTypeSubst :: S.Set Model.Name -> Model.Type -> Model.Type -> M.Map Model.Name Model.Type
+buildTypeSubst schemeVarSet schemeType actualType =
+    buildTypeSubst_go schemeVarSet (Strip.deannotateType schemeType) (Strip.deannotateType actualType)
+
+buildTypeSubst_go :: S.Set Model.Name -> Model.Type -> Model.Type -> M.Map Model.Name Model.Type
+buildTypeSubst_go svs st at =
+
+      let goSub = \a -> \b -> buildTypeSubst_go svs (Strip.deannotateType a) (Strip.deannotateType b)
+      in case st of
+        Model.TypeVariable v0 -> Logic.ifElse (Sets.member v0 svs) (Maps.singleton v0 at) Maps.empty
+        Model.TypeFunction v0 -> case at of
+          Model.TypeFunction v1 -> Maps.union (goSub (Model.functionTypeDomain v0) (Model.functionTypeDomain v1)) (goSub (Model.functionTypeCodomain v0) (Model.functionTypeCodomain v1))
+          _ -> Maps.empty
+        Model.TypeApplication v0 -> case at of
+          Model.TypeApplication v1 -> Maps.union (goSub (Model.applicationTypeFunction v0) (Model.applicationTypeFunction v1)) (goSub (Model.applicationTypeArgument v0) (Model.applicationTypeArgument v1))
+          _ -> Maps.empty
+        Model.TypeList v0 -> case at of
+          Model.TypeList v1 -> goSub v0 v1
+          _ -> Maps.empty
+        Model.TypeSet v0 -> case at of
+          Model.TypeSet v1 -> goSub v0 v1
+          _ -> Maps.empty
+        Model.TypeOptional v0 -> case at of
+          Model.TypeOptional v1 -> goSub v0 v1
+          _ -> Maps.empty
+        Model.TypeMap v0 -> case at of
+          Model.TypeMap v1 -> Maps.union (goSub (Model.mapTypeKeys v0) (Model.mapTypeKeys v1)) (goSub (Model.mapTypeValues v0) (Model.mapTypeValues v1))
+          _ -> Maps.empty
+        Model.TypePair v0 -> case at of
+          Model.TypePair v1 -> Maps.union (goSub (Model.pairTypeFirst v0) (Model.pairTypeFirst v1)) (goSub (Model.pairTypeSecond v0) (Model.pairTypeSecond v1))
+          _ -> Maps.empty
+        Model.TypeEither v0 -> case at of
+          Model.TypeEither v1 -> Maps.union (goSub (Model.eitherTypeLeft v0) (Model.eitherTypeLeft v1)) (goSub (Model.eitherTypeRight v0) (Model.eitherTypeRight v1))
+          _ -> Maps.empty
+        Model.TypeForall v0 -> case at of
+          Model.TypeForall v1 -> goSub (Model.forallTypeBody v0) (Model.forallTypeBody v1)
+          _ -> goSub (Model.forallTypeBody v0) at
+        _ -> Maps.empty
+
+buildTypeVarSubst :: S.Set Model.Name -> Model.Type -> Model.Type -> M.Map Model.Name Model.Name
+buildTypeVarSubst schemeVarSet freshTyp canonTyp =
+    buildTypeVarSubst_go schemeVarSet (Strip.deannotateType freshTyp) (Strip.deannotateType canonTyp)
+
+buildTypeVarSubst_go :: S.Set Model.Name -> Model.Type -> Model.Type -> M.Map Model.Name Model.Name
+buildTypeVarSubst_go svs ft ct =
+
+      let goSub = \a -> \b -> buildTypeVarSubst_go svs (Strip.deannotateType a) (Strip.deannotateType b)
+      in case ft of
+        Model.TypeVariable v0 -> case ct of
+          Model.TypeVariable v1 -> Logic.ifElse (Logic.and (Logic.not (Equality.equal v0 v1)) (Sets.member v1 svs)) (Maps.singleton v0 v1) Maps.empty
+          _ -> Maps.empty
+        Model.TypeFunction v0 -> case ct of
+          Model.TypeFunction v1 -> Maps.union (goSub (Model.functionTypeDomain v0) (Model.functionTypeDomain v1)) (goSub (Model.functionTypeCodomain v0) (Model.functionTypeCodomain v1))
+          _ -> Maps.empty
+        Model.TypeApplication v0 -> case ct of
+          Model.TypeApplication v1 -> Maps.union (goSub (Model.applicationTypeFunction v0) (Model.applicationTypeFunction v1)) (goSub (Model.applicationTypeArgument v0) (Model.applicationTypeArgument v1))
+          _ -> Maps.empty
+        Model.TypeList v0 -> case ct of
+          Model.TypeList v1 -> goSub v0 v1
+          _ -> Maps.empty
+        Model.TypeSet v0 -> case ct of
+          Model.TypeSet v1 -> goSub v0 v1
+          _ -> Maps.empty
+        Model.TypeOptional v0 -> case ct of
+          Model.TypeOptional v1 -> goSub v0 v1
+          _ -> Maps.empty
+        Model.TypeMap v0 -> case ct of
+          Model.TypeMap v1 -> Maps.union (goSub (Model.mapTypeKeys v0) (Model.mapTypeKeys v1)) (goSub (Model.mapTypeValues v0) (Model.mapTypeValues v1))
+          _ -> Maps.empty
+        Model.TypePair v0 -> case ct of
+          Model.TypePair v1 -> Maps.union (goSub (Model.pairTypeFirst v0) (Model.pairTypeFirst v1)) (goSub (Model.pairTypeSecond v0) (Model.pairTypeSecond v1))
+          _ -> Maps.empty
+        Model.TypeEither v0 -> case ct of
+          Model.TypeEither v1 -> Maps.union (goSub (Model.eitherTypeLeft v0) (Model.eitherTypeLeft v1)) (goSub (Model.eitherTypeRight v0) (Model.eitherTypeRight v1))
+          _ -> Maps.empty
+        Model.TypeForall v0 -> case ct of
+          Model.TypeForall v1 -> goSub (Model.forallTypeBody v0) (Model.forallTypeBody v1)
+          _ -> buildTypeVarSubst_go svs (Strip.deannotateType (Model.forallTypeBody v0)) ct
+        _ -> case ct of
+          Model.TypeForall v0 -> buildTypeVarSubst_go svs ft (Strip.deannotateType (Model.forallTypeBody v0))
+          _ -> Maps.empty
+
+builderSetterName :: Model.Name -> String
+builderSetterName fname =
+
+      let base = Utils.sanitizeJavaName (Model.unName fname)
+      in (Logic.ifElse (Logic.or (Equality.equal base "build") (Equality.equal base "builder")) (Strings.concat2 base "_") base)
+
+classModsPublic :: [Syntax.ClassModifier]
+classModsPublic = [
+  Syntax.ClassModifierPublic]
+
+classifyDataReference :: Model.Name -> t0 -> Graph.Graph -> Either Errors.Error JavaEnvironment.JavaSymbolClass
+classifyDataReference name cx g =
+    Eithers.bind (Right (Lexical.lookupBinding g name)) (\mel -> Optionals.match mel (Right JavaEnvironment.JavaSymbolClassLocalVariable) (\el -> Optionals.match (Model.bindingTypeScheme el) (Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "no type scheme for element " (Model.unName (Model.bindingName el)))))) (\ts -> Right (classifyDataTerm ts (Model.bindingTerm el)))))
+
+classifyDataTerm :: Model.TypeScheme -> Model.Term -> JavaEnvironment.JavaSymbolClass
+classifyDataTerm ts term =
+    Logic.ifElse (Dependencies.isLambda term) (
+      let n = classifyDataTerm_countLambdaParams term
+      in (Logic.ifElse (Ordering.gt n 1) (JavaEnvironment.JavaSymbolClassHoistedLambda n) JavaEnvironment.JavaSymbolClassUnaryFunction)) (
+      let hasTypeParams = Logic.not (Lists.isEmpty (Model.typeSchemeVariables ts))
+      in (Logic.ifElse hasTypeParams (
+        let n2 = classifyDataTerm_countLambdaParams (classifyDataTerm_stripTypeLambdas term)
+        in (Logic.ifElse (Ordering.gt n2 0) (JavaEnvironment.JavaSymbolClassHoistedLambda n2) JavaEnvironment.JavaSymbolClassNullaryFunction)) JavaEnvironment.JavaSymbolClassNullaryFunction))
+
+classifyDataTerm_countLambdaParams :: Model.Term -> Int
+classifyDataTerm_countLambdaParams t =
+    case (Strip.deannotateTerm t) of
+      Model.TermLambda v0 -> Math.add 1 (classifyDataTerm_countLambdaParams (Model.lambdaBody v0))
+      Model.TermLet v0 -> classifyDataTerm_countLambdaParams (Model.letBody v0)
+      _ -> 0
+
+classifyDataTerm_stripTypeLambdas :: Model.Term -> Model.Term
+classifyDataTerm_stripTypeLambdas t =
+    case (Strip.deannotateTerm t) of
+      Model.TermTypeLambda v0 -> classifyDataTerm_stripTypeLambdas (Model.typeLambdaBody v0)
+      _ -> t
+
+cmpDeclStatement :: t0 -> Syntax.BlockStatement
+cmpDeclStatement aliases =
+    Utils.variableDeclarationStatement aliases Utils.javaIntType (Utils.javaIdentifier "cmp") (Utils.javaIntExpression 0)
+
+cmpNotZeroExpr :: Syntax.Expression
+cmpNotZeroExpr =
+    Utils.javaEqualityExpressionToJavaExpression (Syntax.EqualityExpressionNotEqual (Syntax.EqualityExpression_Binary {
+      Syntax.equalityExpression_BinaryLhs = lhs,
+      Syntax.equalityExpression_BinaryRhs = rhs}))
+  where
+    lhs =
+        Utils.javaRelationalExpressionToJavaEqualityExpression (Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionName (Syntax.ExpressionName {
+          Syntax.expressionNameQualifier = Nothing,
+          Syntax.expressionNameIdentifier = (Utils.javaIdentifier "cmp")})))
+    rhs =
+        Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionPrimary (Utils.javaLiteralToJavaPrimary (Utils.javaInt 0)))
+
+collectForallParams :: Model.Type -> [Model.Name]
+collectForallParams t =
+    case (Strip.deannotateType t) of
+      Model.TypeForall v0 -> Lists.cons (Model.forallTypeParameter v0) (collectForallParams (Model.forallTypeBody v0))
+      _ -> []
+
+collectLambdaDomains :: Model.Term -> ([Model.Type], Model.Term)
+collectLambdaDomains t =
+    case (Strip.deannotateTerm t) of
+      Model.TermLambda v0 -> Optionals.match (Model.lambdaDomain v0) ([], t) (\dom ->
+        let rest = collectLambdaDomains (Model.lambdaBody v0)
+        in (Lists.cons dom (Pairs.first rest), (Pairs.second rest)))
+      _ -> ([], t)
+
+collectTypeApps :: Model.Term -> [Model.Type] -> (Model.Term, [Model.Type])
+collectTypeApps t acc =
+    case (Strip.deannotateTerm t) of
+      Model.TermTypeApplication v0 -> collectTypeApps (Model.typeApplicationTermBody v0) (Lists.cons (Model.typeApplicationTermType v0) acc)
+      _ -> (Strip.deannotateTerm t, acc)
+
+collectTypeApps0 :: Model.Term -> [Model.Type] -> (Model.Term, [Model.Type])
+collectTypeApps0 t acc =
+    case (Strip.deannotateTerm t) of
+      Model.TermTypeApplication v0 -> collectTypeApps0 (Model.typeApplicationTermBody v0) (Lists.cons (Model.typeApplicationTermType v0) acc)
+      _ -> (t, acc)
+
+collectTypeVars :: Model.Type -> S.Set Model.Name
+collectTypeVars typ = collectTypeVars_go (Strip.deannotateType typ)
+
+collectTypeVars_go :: Model.Type -> S.Set Model.Name
+collectTypeVars_go t =
+    case t of
+      Model.TypeVariable v0 -> Sets.singleton v0
+      Model.TypeFunction v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Model.functionTypeDomain v0))) (collectTypeVars_go (Strip.deannotateType (Model.functionTypeCodomain v0)))
+      Model.TypeApplication v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Model.applicationTypeFunction v0))) (collectTypeVars_go (Strip.deannotateType (Model.applicationTypeArgument v0)))
+      Model.TypeList v0 -> collectTypeVars_go (Strip.deannotateType v0)
+      Model.TypeSet v0 -> collectTypeVars_go (Strip.deannotateType v0)
+      Model.TypeOptional v0 -> collectTypeVars_go (Strip.deannotateType v0)
+      Model.TypeEffect v0 -> collectTypeVars_go (Strip.deannotateType v0)
+      Model.TypeMap v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Model.mapTypeKeys v0))) (collectTypeVars_go (Strip.deannotateType (Model.mapTypeValues v0)))
+      Model.TypePair v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Model.pairTypeFirst v0))) (collectTypeVars_go (Strip.deannotateType (Model.pairTypeSecond v0)))
+      Model.TypeEither v0 -> Sets.union (collectTypeVars_go (Strip.deannotateType (Model.eitherTypeLeft v0))) (collectTypeVars_go (Strip.deannotateType (Model.eitherTypeRight v0)))
+      Model.TypeForall v0 -> collectTypeVars_go (Strip.deannotateType (Model.forallTypeBody v0))
+      _ -> Sets.empty
+
+collectionTypeArgs :: String -> Int -> JavaEnvironment.Aliases -> [M.Map Model.Name Model.Term] -> [Syntax.Type] -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.TypeArgument]
+collectionTypeArgs label n aliases anns tyapps cx g =
+    Logic.ifElse (Logic.not (Lists.isEmpty tyapps)) (takeTypeArgs label n tyapps cx g) (
+      let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+      in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mtyp -> Eithers.bind (Optionals.match mtyp (Right []) (\typ -> case (Strip.deannotateType typ) of
+        Model.TypeList v0 -> Right [
+          v0]
+        Model.TypeSet v0 -> Right [
+          v0]
+        Model.TypeOptional v0 -> Right [
+          v0]
+        Model.TypeMap v0 -> Right [
+          Model.mapTypeKeys v0,
+          (Model.mapTypeValues v0)]
+        _ -> Right [])) (\compTypes -> Eithers.mapList (\ct -> Eithers.bind (encodeType aliases Sets.empty ct cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) compTypes))))
+
+comparableCompareExpr :: String -> String -> Syntax.Expression
+comparableCompareExpr otherVar fname =
+
+      let thisField = Utils.javaIdentifierToJavaExpression (Syntax.Identifier (Utils.sanitizeJavaName fname))
+          otherField =
+                  Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier otherVar) (Utils.javaIdentifier fname))
+      in (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.core.overlay.java.util.Comparing") (Syntax.Identifier "compare") [
+        thisField,
+        otherField]))
+
+compareAndReturnStmts :: String -> Model.FieldType -> [Syntax.BlockStatement]
+compareAndReturnStmts otherVar f =
+    [
+      Syntax.BlockStatementStatement (Utils.javaAssignmentStatement (Syntax.LeftHandSideExpressionName (Syntax.ExpressionName {
+        Syntax.expressionNameQualifier = Nothing,
+        Syntax.expressionNameIdentifier = (Utils.javaIdentifier "cmp")})) (compareFieldExpr otherVar f)),
+      (Syntax.BlockStatementStatement (Syntax.StatementIfThen (Syntax.IfThenStatement {
+        Syntax.ifThenStatementExpression = cmpNotZeroExpr,
+        Syntax.ifThenStatementStatement = (Utils.javaReturnStatement (Just (Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
+          Syntax.expressionNameQualifier = Nothing,
+          Syntax.expressionNameIdentifier = (Utils.javaIdentifier "cmp")}))))})))]
+
+compareFieldExpr :: String -> Model.FieldType -> Syntax.Expression
+compareFieldExpr otherVar ft =
+
+      let fname = Model.unName (Model.fieldTypeName ft)
+          ftype = Model.fieldTypeType ft
+      in (Logic.ifElse (isBinaryType ftype) (arraysCompareExpr otherVar fname) (Logic.ifElse (isNonComparableType ftype) (hashCodeCompareExpr otherVar fname) (comparableCompareExpr otherVar fname)))
+
+compareToBody :: t0 -> String -> [Model.FieldType] -> [Syntax.BlockStatement]
+compareToBody aliases otherVar fields =
+
+      let zeroStmts = [
+            Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaIntExpression 0)))]
+      in (Optionals.withDefault zeroStmts (Optionals.map (\p ->
+        let firstField = Pairs.first p
+            restFields = Pairs.second p
+        in (Logic.ifElse (Lists.isEmpty restFields) [
+          Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (compareFieldExpr otherVar firstField)))] (Lists.concat2 [
+          cmpDeclStatement aliases] (Lists.concat2 (Lists.concat (Lists.map (\f -> compareAndReturnStmts otherVar f) (Lists.cons firstField (Optionals.withDefault [] (Lists.init restFields))))) [
+          Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (compareFieldExpr otherVar (Optionals.withDefault firstField (Lists.last restFields)))))])))) (Lists.uncons fields)))
+
+compareToZeroClause :: String -> String -> Syntax.InclusiveOrExpression
+compareToZeroClause tmpName fname =
+
+      let compareToArg =
+              Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier tmpName) (Utils.javaIdentifier fname))
+          compareToVar =
+                  Syntax.MethodInvocation_VariantExpression (Utils.fieldExpression (Syntax.Identifier "this") (Utils.javaIdentifier fname))
+          compareToHeader =
+                  Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+                    Syntax.methodInvocation_ComplexVariant = compareToVar,
+                    Syntax.methodInvocation_ComplexTypeArguments = [],
+                    Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.compareToMethodName)})
+          lhs =
+                  Utils.javaRelationalExpressionToJavaEqualityExpression (Utils.javaPostfixExpressionToJavaRelationalExpression (Utils.javaMethodInvocationToJavaPostfixExpression (Syntax.MethodInvocation {
+                    Syntax.methodInvocationHeader = compareToHeader,
+                    Syntax.methodInvocationArguments = [
+                      compareToArg]})))
+          rhs =
+                  Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionPrimary (Utils.javaLiteralToJavaPrimary (Utils.javaInt 0)))
+      in (Utils.javaEqualityExpressionToJavaInclusiveOrExpression (Syntax.EqualityExpressionEqual (Syntax.EqualityExpression_Binary {
+        Syntax.equalityExpression_BinaryLhs = lhs,
+        Syntax.equalityExpression_BinaryRhs = rhs})))
+
+constantDecl :: String -> String -> JavaEnvironment.Aliases -> Model.Name -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
+constantDecl comment javaName aliases name cx g =
+
+      let mods =
+              [
+                Syntax.FieldModifierPublic,
+                Syntax.FieldModifierStatic,
+                Syntax.FieldModifierFinal]
+          nameName = Utils.nameToJavaName aliases (Model.Name "hydra.core.model.Name")
+          env =
+                  JavaEnvironment.JavaEnvironment {
+                    JavaEnvironment.javaEnvironmentAliases = aliases,
+                    JavaEnvironment.javaEnvironmentGraph = g}
+      in (Eithers.bind (encodeType aliases Sets.empty (Model.TypeVariable (Model.Name "hydra.core.model.Name")) cx g) (\jt -> Eithers.bind (encodeTerm env (Model.TermLiteral (Model.LiteralString (Model.unName name))) cx g) (\arg ->
+        let init =
+                Syntax.VariableInitializerExpression (Utils.javaConstructorCall (Utils.javaConstructorName nameName Nothing) [
+                  arg] Nothing)
+            var = Utils.javaVariableDeclarator (Syntax.Identifier javaName) (Just init)
+        in (Right (withCommentString comment (Utils.javaMemberField mods jt var))))))
+
+constantDeclForFieldType :: Model.Name -> JavaEnvironment.Aliases -> Model.FieldType -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
+constantDeclForFieldType parentName aliases ftyp cx g =
+
+      let name = Model.fieldTypeName ftyp
+          javaName =
+                  Formatting.nonAlnumToUnderscores (Formatting.convertCase Util.CaseConventionCamel Util.CaseConventionUpperSnake (Model.unName name))
+          comment =
+                  Strings.concat [
+                    "Name of the {@code ",
+                    (Model.unName parentName),
+                    ".",
+                    (Model.unName name),
+                    "} field."]
+      in (constantDecl comment javaName aliases name cx g)
+
+constantDeclForTypeName :: JavaEnvironment.Aliases -> Model.Name -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
+constantDeclForTypeName aliases name cx g =
+
+      let comment =
+              Strings.concat [
+                "Name of the {@code ",
+                (Model.unName name),
+                "} type."]
+      in (constantDecl comment "TYPE_" aliases name cx g)
+
+constructElementsInterface :: Packaging.Module -> [Syntax.InterfaceMemberDeclarationWithComments] -> (Model.Name, Syntax.CompilationUnit)
+constructElementsInterface mod members =
+
+      let ns = Packaging.moduleName mod
+          parentNs = namespaceParent ns
+          pkg = Optionals.match parentNs (Utils.javaPackageDeclaration ns) (\pns -> Utils.javaPackageDeclaration pns)
+          mods = [
+                Syntax.InterfaceModifierPublic]
+          className = elementsClassName ns
+          elName = elementsQualifiedName ns
+          body = Syntax.InterfaceBody members
+          itf =
+                  Syntax.TopLevelClassOrInterfaceDeclarationInterface (Syntax.InterfaceDeclarationNormalInterface (Syntax.NormalInterfaceDeclaration {
+                    Syntax.normalInterfaceDeclarationModifiers = mods,
+                    Syntax.normalInterfaceDeclarationIdentifier = (Utils.javaTypeIdentifier className),
+                    Syntax.normalInterfaceDeclarationParameters = [],
+                    Syntax.normalInterfaceDeclarationExtends = [],
+                    Syntax.normalInterfaceDeclarationPermits = [],
+                    Syntax.normalInterfaceDeclarationBody = body}))
+          decl =
+                  Syntax.TopLevelClassOrInterfaceDeclarationWithComments {
+                    Syntax.topLevelClassOrInterfaceDeclarationWithCommentsValue = itf,
+                    Syntax.topLevelClassOrInterfaceDeclarationWithCommentsComments = (Optionals.bind (Packaging.moduleMetadata mod) (\em -> Packaging.entityMetadataDescription em))}
+      in (
+        elName,
+        (Syntax.CompilationUnitOrdinary (Syntax.OrdinaryCompilationUnit {
+          Syntax.ordinaryCompilationUnitPackage = (Just pkg),
+          Syntax.ordinaryCompilationUnitImports = [],
+          Syntax.ordinaryCompilationUnitTypes = [
+            decl]})))
+
+correctCastType :: Model.Term -> [Model.Type] -> Model.Type -> t0 -> t1 -> Either t2 Model.Type
+correctCastType innerBody typeArgs fallback cx g =
+    case (Strip.deannotateTerm innerBody) of
+      Model.TermPair _ -> Logic.ifElse (Equality.equal (Lists.length typeArgs) 2) (Right (Model.TypePair (Model.PairType {
+        Model.pairTypeFirst = (Optionals.withDefault fallback (Lists.at 0 typeArgs)),
+        Model.pairTypeSecond = (Optionals.withDefault fallback (Lists.at 1 typeArgs))}))) (Right fallback)
+      _ -> Right fallback
+
+correctTypeApps :: t0 -> Model.Name -> [Model.Term] -> [Model.Type] -> t1 -> Graph.Graph -> Either Errors.Error [Model.Type]
+correctTypeApps gr name args fallbackTypeApps cx g =
+    Eithers.bind (Right (Lexical.lookupBinding g name)) (\mel -> Optionals.match mel (Right fallbackTypeApps) (\el -> Optionals.match (Model.bindingTypeScheme el) (Right fallbackTypeApps) (\ts ->
+      let schemeType = Model.typeSchemeBody ts
+          allSchemeVars = Lists.filter (\v -> isSimpleName v) (Model.typeSchemeVariables ts)
+          schemeTypeVars = collectTypeVars schemeType
+          usedFlags = Lists.map (\v -> Sets.member v schemeTypeVars) allSchemeVars
+          usedSchemeVars = filterByFlags allSchemeVars usedFlags
+          nParams = countFunctionParams schemeType
+          peeled = peelDomainTypes nParams schemeType
+          calleeDoms = Pairs.first peeled
+          calleeCod = Pairs.second peeled
+          overgenSubst = detectAccumulatorUnification calleeDoms calleeCod usedSchemeVars
+          keepFlags =
+                  Lists.map (\v -> Logic.and (Sets.member v schemeTypeVars) (Logic.not (Maps.member v overgenSubst))) allSchemeVars
+          schemeVars = filterByFlags allSchemeVars keepFlags
+          filteredFallback0 =
+                  Logic.ifElse (Equality.equal (Lists.length allSchemeVars) (Lists.length fallbackTypeApps)) (filterByFlags fallbackTypeApps keepFlags) fallbackTypeApps
+          filteredFallback =
+                  Logic.ifElse (Maps.isEmpty overgenSubst) filteredFallback0 (Lists.map (\t -> substituteTypeVarsWithTypes overgenSubst t) filteredFallback0)
+      in (Logic.ifElse (Logic.or (Lists.isEmpty schemeVars) (Logic.not (Equality.equal (Lists.length schemeVars) (Lists.length filteredFallback)))) (Right filteredFallback) (correctTypeAppsWithArgs schemeVars filteredFallback schemeType args cx g)))))
+
+correctTypeAppsWithArgs :: [Model.Name] -> [Model.Type] -> Model.Type -> [Model.Term] -> t0 -> Graph.Graph -> Either Errors.Error [Model.Type]
+correctTypeAppsWithArgs schemeVars fallbackTypeApps schemeType args cx g =
+
+      let schemeVarSet = Sets.fromList schemeVars
+          irSubst = Maps.fromList (Lists.zip schemeVars fallbackTypeApps)
+          peeled = peelDomainTypes (Lists.length args) schemeType
+          schemeDoms = Pairs.first peeled
+      in (Eithers.bind (Eithers.mapList (\arg -> Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g (Annotations.termAnnotationInternal arg))) args) (\mArgTypes -> Logic.ifElse (Logic.not (Lists.isEmpty (Lists.filter (\m -> Optionals.isNone m) mArgTypes))) (Right fallbackTypeApps) (
+        let argTypes = Lists.bind mArgTypes (\m -> Optionals.match m [] (\x -> Lists.singleton x))
+            irDoms = Lists.map (\d -> applySubstSimple irSubst d) schemeDoms
+            domsMatch =
+                    Lists.isEmpty (Lists.filter (\p -> Logic.not (typesMatch (Strip.deannotateType (Pairs.first p)) (Strip.deannotateType (Pairs.second p)))) (Lists.zip irDoms argTypes))
+        in (Logic.ifElse domsMatch (Right fallbackTypeApps) (Right (resolveTypeApps schemeVars fallbackTypeApps (buildArgSubst schemeVarSet schemeDoms argTypes)))))))
+
+countFunctionParams :: Model.Type -> Int
+countFunctionParams t =
+    case (Strip.deannotateType t) of
+      Model.TypeFunction v0 -> Math.add 1 (countFunctionParams (Model.functionTypeCodomain v0))
+      _ -> 0
+
+declarationForRecordType :: Bool -> Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Model.Name -> [Model.FieldType] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassDeclaration
+declarationForRecordType isInner isSer aliases tparams elName fields cx g =
+    declarationForRecordType_ isInner isSer aliases tparams elName Nothing Nothing fields cx g
+
+declarationForRecordType_ :: Bool -> Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Model.Name -> Maybe Model.Name -> Maybe Int -> [Model.FieldType] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassDeclaration
+declarationForRecordType_ isInner isSer aliases tparams elName parentName ordinal fields cx g =
+    Eithers.bind (Eithers.mapList (\f -> recordMemberVar aliases f cx g) fields) (\memberVars -> Eithers.bind (Eithers.mapList (\p -> addComment (Pairs.first p) (Pairs.second p) cx g) (Lists.zip memberVars fields)) (\memberVars_ ->
+      let elNameStr = Syntax.unIdentifier (Utils.nameToJavaName aliases elName)
+          linkTargetStr =
+                  Optionals.match parentName elNameStr (\pn -> Strings.concat2 (Strings.concat2 (Syntax.unIdentifier (Utils.nameToJavaName aliases pn)) ".") (Utils.sanitizeJavaName (Util.qualifiedNameLocal (CoreNames.qualifyName elName))))
+      in (Eithers.bind (Logic.ifElse (Ordering.gt (Lists.length fields) 1) (Eithers.mapList (\f -> Eithers.bind (recordWithMethod aliases elName fields f cx g) (\decl ->
+        let fname = Model.unName (Model.fieldTypeName f)
+            comment =
+                    Strings.concat [
+                      "Returns a copy of this {@link ",
+                      linkTargetStr,
+                      "} with {@code ",
+                      fname,
+                      "} replaced."]
+        in (Right (withCommentString comment decl)))) fields) (Right [])) (\withMethods -> Eithers.bind (recordConstructor aliases elName fields cx g) (\cons -> Eithers.bind (Eithers.mapList (\f ->
+        let fname = Utils.sanitizeJavaName (Model.unName (Model.fieldTypeName f))
+        in (Eithers.bind (Annotations.commentsFromFieldType cx g f) (\mDoc -> Right (Optionals.match mDoc "" (\d -> Strings.concat [
+          "@param ",
+          fname,
+          " ",
+          d]))))) fields) (\paramLines ->
+        let nonEmptyParamLines = Lists.filter (\l -> Logic.not (Equality.equal l "")) paramLines
+            consBaseComment =
+                    Strings.concat [
+                      "Constructs an immutable {@link ",
+                      linkTargetStr,
+                      "}."]
+            consComment =
+                    Logic.ifElse (Lists.isEmpty nonEmptyParamLines) consBaseComment (Strings.concat [
+                      consBaseComment,
+                      "\n\n",
+                      (Strings.join "\n" nonEmptyParamLines)])
+            consWithComment = withCommentString consComment cons
+        in (Eithers.bind (Logic.ifElse isInner (Right []) (Eithers.bind (constantDeclForTypeName aliases elName cx g) (\d -> Eithers.bind (Eithers.mapList (\f -> constantDeclForFieldType elName aliases f cx g) fields) (\dfields -> Right (Lists.cons d dfields))))) (\tn -> Eithers.bind (Logic.ifElse isInner (Right []) (recordBuilderClass aliases tparams elName fields cx g)) (\builderDecls ->
+          let comparableMethods =
+                  Optionals.match parentName (Logic.ifElse (Logic.and (Logic.not isInner) isSer) [
+                    recordCompareToMethod aliases tparams elName fields] []) (\pn -> Logic.ifElse isSer (variantCompareToMethod aliases tparams pn elName (Optionals.withDefault 0 ordinal) fields) [])
+              noCommentMethods =
+                      Lists.map (\x -> noComment x) (Lists.concat2 [
+                        recordEqualsMethod aliases elName fields,
+                        (recordHashCodeMethod fields),
+                        (recordToStringMethod elName fields)] comparableMethods)
+              bodyDecls =
+                      Lists.concat [
+                        tn,
+                        memberVars_,
+                        [
+                          consWithComment],
+                        noCommentMethods,
+                        withMethods,
+                        builderDecls]
+              ifaces = Logic.ifElse isInner (serializableTypes isSer) (interfaceTypes isSer aliases tparams elName)
+          in (Right (Utils.javaClassDeclaration aliases tparams elName classModsPublic Nothing ifaces bodyDecls)))))))))))
+
+declarationForUnionType :: Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Model.Name -> [Model.FieldType] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassDeclaration
+declarationForUnionType isSer aliases tparams elName fields cx g =
+    Eithers.bind (Eithers.mapList (\ftord ->
+      let ft = Pairs.first ftord
+          ordinal = Pairs.second ftord
+          fname = Model.fieldTypeName ft
+          ftype = Model.fieldTypeType ft
+          rfields =
+                  Logic.ifElse (Predicates.isUnitType (Strip.deannotateType ftype)) [] [
+                    Model.FieldType {
+                      Model.fieldTypeName = (Model.Name "value"),
+                      Model.fieldTypeType = (Strip.deannotateType ftype)}]
+          varName = Utils.variantClassName False elName fname
+      in (Eithers.bind (declarationForRecordType_ True isSer aliases [] varName (Logic.ifElse isSer (Just elName) Nothing) (Logic.ifElse isSer (Just ordinal) Nothing) rfields cx g) (\innerDecl -> Right (augmentVariantClass aliases tparams elName innerDecl)))) (Lists.zip fields (Math.range 0 (Lists.length fields)))) (\variantClasses ->
+      let variantDecls =
+              Lists.map (\vc -> Syntax.ClassBodyDeclarationClassMember (Syntax.ClassMemberDeclarationClass vc)) variantClasses
+      in (Eithers.bind (Eithers.mapList (\pair -> addComment (Pairs.first pair) (Pairs.second pair) cx g) (Lists.zip variantDecls fields)) (\variantDecls_ ->
+        let privateConst = Utils.makeConstructor aliases elName True [] []
+            acceptDecl = Utils.toAcceptMethod True tparams
+            vtparams = Lists.concat2 tparams [
+                  Utils.javaTypeParameter JavaNames.visitorReturnParameter]
+            elNameStr = Syntax.unIdentifier (Utils.nameToJavaName aliases elName)
+            visitorMethods =
+                    Lists.map (\ft ->
+                      let fname = Model.fieldTypeName ft
+                          fnameStr = Model.unName fname
+                          typeArgs = Lists.map (\tp -> Utils.typeParameterToTypeArgument tp) tparams
+                          varName = Utils.variantClassName False elName fname
+                          varNameStr = Syntax.unIdentifier (Utils.nameToJavaName aliases varName)
+                          varLocalStr = Utils.sanitizeJavaName (Util.qualifiedNameLocal (CoreNames.qualifyName varName))
+                          linkVarNameStr = Strings.concat2 (Strings.concat2 elNameStr ".") varLocalStr
+                          varRef = Utils.javaClassTypeToJavaType (Utils.nameToJavaClassType aliases False typeArgs varName Nothing)
+                          param = Utils.javaTypeToJavaFormalParameter varRef (Model.Name "instance")
+                          resultR = Utils.javaTypeToJavaResult (Syntax.TypeReference Utils.visitorTypeVariable)
+                          comment =
+                                  Strings.concat [
+                                    "Visit the {@link ",
+                                    linkVarNameStr,
+                                    "} case."]
+                      in (comment, (Utils.interfaceMethodDeclaration [] [] JavaNames.visitMethodName [
+                        param] resultR Nothing))) fields
+            visitorBody =
+                    Syntax.InterfaceBody (Lists.map (\p -> withInterfaceCommentString (Pairs.first p) (Pairs.second p)) visitorMethods)
+            visitor =
+                    Utils.javaInterfaceDeclarationToJavaClassBodyDeclaration (Syntax.NormalInterfaceDeclaration {
+                      Syntax.normalInterfaceDeclarationModifiers = [
+                        Syntax.InterfaceModifierPublic],
+                      Syntax.normalInterfaceDeclarationIdentifier = (Syntax.TypeIdentifier (Syntax.Identifier JavaNames.visitorName)),
+                      Syntax.normalInterfaceDeclarationParameters = vtparams,
+                      Syntax.normalInterfaceDeclarationExtends = [],
+                      Syntax.normalInterfaceDeclarationPermits = [],
+                      Syntax.normalInterfaceDeclarationBody = visitorBody})
+            typeArgs = Lists.map (\tp -> Utils.typeParameterToTypeArgument tp) tparams
+            visitorClassType =
+                    Utils.javaClassType (Lists.concat2 (Lists.map (\tp -> Utils.typeParameterToReferenceType tp) tparams) [
+                      Utils.visitorTypeVariable]) Nothing JavaNames.visitorName
+            mainInstanceParam =
+                    Utils.javaTypeToJavaFormalParameter (Utils.javaClassTypeToJavaType (Utils.nameToJavaClassType aliases False typeArgs elName Nothing)) (Model.Name "instance")
+            resultR = Utils.javaTypeToJavaResult (Syntax.TypeReference Utils.visitorTypeVariable)
+            throwStmt =
+                    Syntax.BlockStatementStatement (Utils.javaThrowIllegalStateException [
+                      Utils.javaAdditiveExpressionToJavaExpression (Utils.addExpressions [
+                        Utils.javaStringMultiplicativeExpression "Non-exhaustive patterns when matching: ",
+                        (Syntax.MultiplicativeExpressionUnary (Utils.javaIdentifierToJavaUnaryExpression (Syntax.Identifier "instance")))])])
+            defaultMod = [
+                  Syntax.InterfaceMethodModifierDefault]
+            otherwiseDecl =
+                    Utils.interfaceMethodDeclaration defaultMod [] JavaNames.otherwiseMethodName [
+                      mainInstanceParam] resultR (Just [
+                      throwStmt])
+            otherwiseComment = "Default branch for unhandled cases."
+            pvVisitMethods =
+                    Lists.map (\ft ->
+                      let fname = Model.fieldTypeName ft
+                          varName = Utils.variantClassName False elName fname
+                          varNameStr = Syntax.unIdentifier (Utils.nameToJavaName aliases varName)
+                          varLocalStr = Utils.sanitizeJavaName (Util.qualifiedNameLocal (CoreNames.qualifyName varName))
+                          linkVarNameStr = Strings.concat2 (Strings.concat2 elNameStr ".") varLocalStr
+                          varRef = Utils.javaClassTypeToJavaType (Utils.nameToJavaClassType aliases False typeArgs varName Nothing)
+                          param = Utils.javaTypeToJavaFormalParameter varRef (Model.Name "instance")
+                          mi =
+                                  Utils.methodInvocation Nothing (Syntax.Identifier JavaNames.otherwiseMethodName) [
+                                    Utils.javaIdentifierToJavaExpression (Syntax.Identifier "instance")]
+                          returnOtherwise =
+                                  Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaPrimaryToJavaExpression (Utils.javaMethodInvocationToJavaPrimary mi))))
+                          comment =
+                                  Strings.concat [
+                                    "Visit the {@link ",
+                                    linkVarNameStr,
+                                    "} case."]
+                      in (
+                        comment,
+                        (Utils.interfaceMethodDeclaration defaultMod [] JavaNames.visitMethodName [
+                          param] resultR (Just [
+                          returnOtherwise])))) fields
+            pvBody =
+                    Syntax.InterfaceBody (Lists.cons (withInterfaceCommentString otherwiseComment otherwiseDecl) (Lists.map (\p -> withInterfaceCommentString (Pairs.first p) (Pairs.second p)) pvVisitMethods))
+            partialVisitor =
+                    Utils.javaInterfaceDeclarationToJavaClassBodyDeclaration (Syntax.NormalInterfaceDeclaration {
+                      Syntax.normalInterfaceDeclarationModifiers = [
+                        Syntax.InterfaceModifierPublic],
+                      Syntax.normalInterfaceDeclarationIdentifier = (Syntax.TypeIdentifier (Syntax.Identifier JavaNames.partialVisitorName)),
+                      Syntax.normalInterfaceDeclarationParameters = vtparams,
+                      Syntax.normalInterfaceDeclarationExtends = [
+                        Syntax.InterfaceType visitorClassType],
+                      Syntax.normalInterfaceDeclarationPermits = [],
+                      Syntax.normalInterfaceDeclarationBody = pvBody})
+        in (Eithers.bind (constantDeclForTypeName aliases elName cx g) (\tn0 -> Eithers.bind (Eithers.mapList (\ft -> constantDeclForFieldType elName aliases ft cx g) fields) (\tn1 ->
+          let tn = Lists.concat2 [
+                tn0] tn1
+              privateConstComment =
+                      Strings.concat [
+                        "Constructs an immutable {@link ",
+                        elNameStr,
+                        "}."]
+              acceptComment = "Dispatch to {@code visitor}."
+              visitorIfaceComment =
+                      Strings.concat [
+                        "Visitor over {@link ",
+                        elNameStr,
+                        "}."]
+              partialVisitorIfaceComment =
+                      Strings.concat [
+                        "Partial visitor over {@link ",
+                        elNameStr,
+                        "} with a default {@link #otherwise} branch."]
+              hydraOrdinalAbstractDecls = Logic.ifElse isSer [
+                    noComment (hydraOrdinalMethod Nothing)] []
+              otherDecls =
+                      Lists.concat2 [
+                        withCommentString privateConstComment privateConst,
+                        (withCommentString acceptComment acceptDecl),
+                        (withCommentString visitorIfaceComment visitor),
+                        (withCommentString partialVisitorIfaceComment partialVisitor)] hydraOrdinalAbstractDecls
+              bodyDecls =
+                      Lists.concat [
+                        tn,
+                        otherDecls,
+                        variantDecls_]
+              mods = Lists.concat2 classModsPublic [
+                    Syntax.ClassModifierAbstract]
+          in (Right (Utils.javaClassDeclaration aliases tparams elName mods Nothing (interfaceTypes isSer aliases tparams elName) bodyDecls))))))))
+
+decodeTypeFromTerm :: Model.Term -> Maybe Model.Type
+decodeTypeFromTerm term =
+    case (Strip.deannotateTerm term) of
+      Model.TermInject v0 -> Logic.ifElse (Equality.equal (Model.injectionTypeName v0) (Model.Name "hydra.core.model.Type")) (
+        let fname = Model.unName (Model.fieldName (Model.injectionField v0))
+            fterm = Model.fieldTerm (Model.injectionField v0)
+        in (Logic.ifElse (Equality.equal fname "variable") (case fterm of
+          Model.TermWrap v1 -> case (Model.wrappedTermBody v1) of
+            Model.TermLiteral v2 -> case v2 of
+              Model.LiteralString v3 -> Just (Model.TypeVariable (Model.Name v3))
+              _ -> Nothing
+            _ -> Nothing
+          _ -> Nothing) (Logic.ifElse (Equality.equal fname "annotated") (case fterm of
+          Model.TermRecord v1 -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Model.fieldName f) (Model.Name "body")) (Model.recordFields v1))) (\bodyField -> decodeTypeFromTerm (Model.fieldTerm bodyField))
+          _ -> Nothing) (Logic.ifElse (Equality.equal fname "application") (case fterm of
+          Model.TermRecord v1 -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Model.fieldName f) (Model.Name "function")) (Model.recordFields v1))) (\funcField -> Optionals.bind (decodeTypeFromTerm (Model.fieldTerm funcField)) (\func -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Model.fieldName f) (Model.Name "argument")) (Model.recordFields v1))) (\argField -> Optionals.map (\arg -> Model.TypeApplication (Model.ApplicationType {
+            Model.applicationTypeFunction = func,
+            Model.applicationTypeArgument = arg})) (decodeTypeFromTerm (Model.fieldTerm argField)))))
+          _ -> Nothing) (Logic.ifElse (Equality.equal fname "function") (case fterm of
+          Model.TermRecord v1 -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Model.fieldName f) (Model.Name "domain")) (Model.recordFields v1))) (\domField -> Optionals.bind (decodeTypeFromTerm (Model.fieldTerm domField)) (\dom -> Optionals.bind (Lists.head (Lists.filter (\f -> Equality.equal (Model.fieldName f) (Model.Name "codomain")) (Model.recordFields v1))) (\codField -> Optionals.map (\cod -> Model.TypeFunction (Model.FunctionType {
+            Model.functionTypeDomain = dom,
+            Model.functionTypeCodomain = cod})) (decodeTypeFromTerm (Model.fieldTerm codField)))))
+          _ -> Nothing) (Logic.ifElse (Equality.equal fname "literal") (case fterm of
+          Model.TermInject v1 -> Logic.ifElse (Equality.equal (Model.unName (Model.fieldName (Model.injectionField v1))) "string") (Just (Model.TypeLiteral Model.LiteralTypeString)) Nothing
+          _ -> Nothing) Nothing)))))) Nothing
+      _ -> Nothing
+
+dedupBindings :: S.Set Model.Name -> [Model.Binding] -> [Model.Binding]
+dedupBindings inScope bs =
+    Optionals.withDefault [] (Optionals.map (\p ->
+      let b = Pairs.first p
+          rest = Pairs.second p
+          name = Model.bindingName b
+      in (Logic.ifElse (Sets.member name inScope) (
+        let newName = freshJavaName name inScope
+            subst = Maps.singleton name newName
+            rest2 =
+                    Lists.map (\b2 -> Model.Binding {
+                      Model.bindingName = (Model.bindingName b2),
+                      Model.bindingTerm = (Variables.substituteVariables subst (Model.bindingTerm b2)),
+                      Model.bindingTypeScheme = (Model.bindingTypeScheme b2)}) rest
+        in (Lists.cons (Model.Binding {
+          Model.bindingName = newName,
+          Model.bindingTerm = (Model.bindingTerm b),
+          Model.bindingTypeScheme = (Model.bindingTypeScheme b)}) (dedupBindings (Sets.insert newName inScope) rest2))) (Lists.cons b (dedupBindings (Sets.insert name inScope) rest)))) (Lists.uncons bs))
+
+detectAccumulatorUnification :: [Model.Type] -> Model.Type -> [Model.Name] -> M.Map Model.Name Model.Type
+detectAccumulatorUnification doms cod tparams =
+
+      let tparamSet = Sets.fromList tparams
+          allPairs = Lists.bind doms (\d -> extractInOutPair d)
+          groupedByInput = groupPairsByFirst allPairs
+          selfRefSubst = selfRefSubstitution groupedByInput
+          directPairs = Lists.bind doms (\d -> extractDirectReturn tparamSet d)
+          groupedDirect = groupPairsByFirst directPairs
+          directInputVars = Sets.fromList (Lists.map (\p -> Pairs.first p) directPairs)
+          codVar =
+                  case (Strip.deannotateType cod) of
+                    Model.TypeVariable v0 -> Just v0
+                    _ -> Nothing
+          directRefSubst = directRefSubstitution directInputVars codVar groupedDirect
+          codSubst =
+                  Optionals.match (findPairFirst cod) Maps.empty (\cv -> Logic.ifElse (Maps.member cv selfRefSubst) Maps.empty (Optionals.match (findSelfRefVar groupedByInput) Maps.empty (\refVar -> Logic.ifElse (Equality.equal cv refVar) Maps.empty (Maps.singleton cv refVar))))
+          domVars = Sets.fromList (Lists.bind doms (\d -> Sets.toList (collectTypeVars d)))
+          danglingSubst =
+                  Optionals.match (findPairFirst cod) Maps.empty (\cv -> Logic.ifElse (Sets.member cv domVars) Maps.empty (Optionals.match (findSelfRefVar groupedByInput) Maps.empty (\refVar -> Maps.singleton cv (Model.TypeVariable refVar))))
+      in (Maps.union (Maps.union (Maps.union (nameMapToTypeMap selfRefSubst) (nameMapToTypeMap codSubst)) danglingSubst) (nameMapToTypeMap directRefSubst))
+
+directRefSubstitution :: (Eq t0, Ord t0) => (S.Set t0 -> Maybe t0 -> M.Map t0 [t0] -> M.Map t0 t0)
+directRefSubstitution directInputVars codVar grouped =
+    Lists.foldl (\subst -> \entry -> directRefSubstitution_processGroup directInputVars codVar subst (Pairs.first entry) (Pairs.second entry)) Maps.empty (Maps.toList grouped)
+
+directRefSubstitution_processGroup :: (Eq t0, Ord t0) => (S.Set t0 -> Maybe t0 -> M.Map t0 t0 -> t0 -> [t0] -> M.Map t0 t0)
+directRefSubstitution_processGroup directInputVars codVar subst inVar outVars =
+
+      let selfRefCount = Lists.length (Lists.filter (\v -> Equality.equal v inVar) outVars)
+          nonSelfVars = Lists.filter (\v -> Logic.not (Equality.equal v inVar)) outVars
+          safeNonSelfVars =
+                  Lists.filter (\v -> Logic.and (Logic.not (Sets.member v directInputVars)) (Logic.not (Equality.equal (Just v) codVar))) nonSelfVars
+      in (Logic.ifElse (Logic.and (Ordering.gte selfRefCount 2) (Logic.not (Lists.isEmpty safeNonSelfVars))) (Lists.foldl (\s -> \v -> Maps.insert v inVar s) subst safeNonSelfVars) subst)
+
+domTypeArgs :: JavaEnvironment.Aliases -> Model.Type -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.TypeArgument]
+domTypeArgs aliases d cx g =
+
+      let args = extractTypeApplicationArgs (Strip.deannotateType d)
+      in (Logic.ifElse (Logic.not (Lists.isEmpty args)) (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) args) (Right (javaTypeArgumentsForType d)))
+
+elementJavaIdentifier :: Bool -> Bool -> JavaEnvironment.Aliases -> Model.Name -> Syntax.Identifier
+elementJavaIdentifier isPrim isMethod aliases name =
+
+      let qn = CoreNames.qualifyName name
+          ns_ = Util.qualifiedNameModuleName qn
+          local = Util.qualifiedNameLocal qn
+          sep = Logic.ifElse isMethod "::" "."
+      in (Logic.ifElse isPrim (Syntax.Identifier (Strings.concat2 (Strings.concat2 (elementJavaIdentifier_qualify aliases ns_ (Formatting.capitalize local)) ".") JavaNames.applyMethodName)) (Optionals.match ns_ (Syntax.Identifier (Utils.sanitizeJavaName local)) (\n -> Syntax.Identifier (Strings.concat2 (Strings.concat2 (elementJavaIdentifier_qualify aliases (namespaceParent n) (elementsClassName n)) sep) (Utils.sanitizeJavaName local)))))
+
+elementJavaIdentifier_qualify :: JavaEnvironment.Aliases -> Maybe Packaging.ModuleName -> String -> String
+elementJavaIdentifier_qualify aliases mns s =
+    Syntax.unIdentifier (Utils.nameToJavaName aliases (CoreNames.unqualifyName (Util.QualifiedName {
+      Util.qualifiedNameModuleName = mns,
+      Util.qualifiedNameLocal = s})))
+
+elementsClassName :: Packaging.ModuleName -> String
+elementsClassName ns =
+
+      let nsStr = Packaging.unModuleName ns
+          parts = Strings.splitOn "." nsStr
+      in (Formatting.sanitizeWithUnderscores Language.reservedWords (Formatting.capitalize (Optionals.withDefault nsStr (Lists.last parts))))
+
+elementsQualifiedName :: Packaging.ModuleName -> Model.Name
+elementsQualifiedName ns =
+    CoreNames.unqualifyName (Util.QualifiedName {
+      Util.qualifiedNameModuleName = (namespaceParent ns),
+      Util.qualifiedNameLocal = (elementsClassName ns)})
+
+encodeApplication :: JavaEnvironment.JavaEnvironment -> Model.Application -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeApplication env app cx g0 =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+          g = JavaEnvironment.javaEnvironmentGraph env
+          gathered = Analysis.gatherArgsWithTypeApps (Model.TermApplication app) [] []
+          fun = Pairs.first gathered
+          args = Pairs.first (Pairs.second gathered)
+          typeApps = Pairs.second (Pairs.second gathered)
+      in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g (Annotations.termAnnotationInternal fun))) (\mfunTyp -> Eithers.bind (Optionals.match mfunTyp (Checking.typeOfTerm cx g fun) (\t -> Right t)) (\funTyp ->
+        let arity = Arity.typeArity funTyp
+            deannotatedFun = Strip.deannotateTerm fun
+            calleeName =
+                    case deannotatedFun of
+                      Model.TermVariable v0 -> Just v0
+                      _ -> Nothing
+        in (Eithers.bind (Optionals.match calleeName (Right args) (\cname -> annotateLambdaArgs cname typeApps args cx g)) (\annotatedArgs -> case deannotatedFun of
+          Model.TermVariable v0 -> Logic.ifElse (Optionals.isGiven (Maps.lookup v0 (Graph.graphPrimitives g))) (
+            let hargs = Lists.take arity annotatedArgs
+                rargs = Lists.drop arity annotatedArgs
+            in (Eithers.bind (functionCall env True v0 hargs [] cx g) (\initialCall -> Eithers.foldList (\acc -> \h -> Eithers.bind (encodeTerm env h cx g) (\jarg -> Right (applyJavaArg acc jarg))) initialCall rargs))) (Logic.ifElse (Logic.and (isRecursiveVariable aliases v0) (Logic.not (isLambdaBoundIn v0 (JavaEnvironment.aliasesLambdaVars aliases)))) (encodeApplication_fallback env aliases g typeApps (Model.applicationFunction app) (Model.applicationArgument app) cx g) (Eithers.bind (classifyDataReference v0 cx g) (\symClass ->
+            let methodArity =
+                    case symClass of
+                      JavaEnvironment.JavaSymbolClassHoistedLambda v1 -> v1
+                      _ -> arity
+                hargs = Lists.take methodArity annotatedArgs
+                rargs = Lists.drop methodArity annotatedArgs
+                trusted = JavaEnvironment.aliasesTrustedTypeVars aliases
+                inScope = JavaEnvironment.aliasesInScopeTypeParams aliases
+                filteredTypeApps =
+                        Logic.ifElse (Logic.or (Sets.isEmpty trusted) (Sets.isEmpty inScope)) [] (
+                          let allVars = Sets.unions (Lists.map (\t -> collectTypeVars t) typeApps)
+                          in (Logic.ifElse (Logic.not (Sets.isEmpty (Sets.difference allVars inScope))) [] (Logic.ifElse (Sets.isEmpty (Sets.difference allVars trusted)) typeApps [])))
+            in (Eithers.bind (Logic.ifElse (Lists.isEmpty filteredTypeApps) (Right []) (correctTypeApps g v0 hargs filteredTypeApps cx g)) (\safeTypeApps -> Eithers.bind (filterPhantomTypeArgs v0 safeTypeApps cx g) (\finalTypeApps -> Eithers.bind (functionCall env False v0 hargs finalTypeApps cx g) (\initialCall -> Eithers.foldList (\acc -> \h -> Eithers.bind (encodeTerm env h cx g) (\jarg -> Right (applyJavaArg acc jarg))) initialCall rargs)))))))
+          _ -> encodeApplication_fallback env aliases g typeApps (Model.applicationFunction app) (Model.applicationArgument app) cx g)))))
+
+encodeApplication_fallback :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> Graph.Graph -> [Model.Type] -> Model.Term -> Model.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeApplication_fallback env aliases gr typeApps lhs rhs cx g =
+    Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g (Annotations.termAnnotationInternal lhs))) (\mt -> Eithers.bind (Optionals.match mt (Checking.typeOfTerm cx g lhs) (\typ -> Right typ)) (\t -> case (Strip.deannotateTypeParameters (Strip.deannotateType t)) of
+      Model.TypeFunction v0 ->
+        let dom = Model.functionTypeDomain v0
+            cod = Model.functionTypeCodomain v0
+            defaultExpr =
+                    \_bug438_dflt -> Eithers.bind (encodeTerm env lhs cx g) (\jfun -> Eithers.bind (encodeTerm env rhs cx g) (\jarg -> Right (applyJavaArg jfun jarg)))
+            elimBranch =
+                    \_bug438_elim -> Eithers.bind (encodeTerm env rhs cx g) (\jarg -> Eithers.bind (Logic.ifElse (Logic.not (Lists.isEmpty (javaTypeArgumentsForType dom))) (Right dom) (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g (Annotations.termAnnotationInternal rhs))) (\mrt -> Optionals.match mrt (Eithers.bind (Checking.typeOfTerm cx g rhs) (\rt -> Right (Logic.ifElse (Logic.not (Lists.isEmpty (javaTypeArgumentsForType rt))) rt dom))) (\rt -> Right (Logic.ifElse (Logic.not (Lists.isEmpty (javaTypeArgumentsForType rt))) rt dom))))) (\enrichedDom -> encodeElimination env (Just jarg) enrichedDom cod (Strip.deannotateTerm lhs) cx g))
+        in case (Strip.deannotateAndDetypeTerm lhs) of
+          Model.TermProject _ -> elimBranch ()
+          Model.TermCases _ -> elimBranch ()
+          Model.TermUnwrap _ -> elimBranch ()
+          _ -> defaultExpr ()
+      _ -> Eithers.bind (encodeTerm env lhs cx g) (\jfun -> Eithers.bind (encodeTerm env rhs cx g) (\jarg -> Right (applyJavaArg jfun jarg)))))
+
+encodeDefinitions :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map Model.Name Syntax.CompilationUnit)
+encodeDefinitions overlaySubs mod defs cx g =
+
+      let aliases = Utils.importAliasesForModule overlaySubs mod
+          env =
+                  JavaEnvironment.JavaEnvironment {
+                    JavaEnvironment.javaEnvironmentAliases = aliases,
+                    JavaEnvironment.javaEnvironmentGraph = g}
+          pkg = Utils.javaPackageDeclaration (Packaging.moduleName mod)
+          partitioned = CoreEnvironment.partitionDefinitions defs
+          typeDefs = Pairs.first partitioned
+          termDefs = Pairs.second partitioned
+          nonTypedefDefs =
+                  Lists.filter (\td ->
+                    let typ = Model.typeSchemeBody (Packaging.typeDefinitionBody td)
+                    in (isSerializableJavaType typ)) typeDefs
+      in (Eithers.bind (Eithers.mapList (\td -> encodeTypeDefinition pkg aliases td cx g) nonTypedefDefs) (\typeUnits -> Eithers.bind (Logic.ifElse (Lists.isEmpty termDefs) (Right []) (Eithers.bind (Eithers.mapList (\td -> encodeTermDefinition env td cx g) termDefs) (\dataMembers -> Right [
+        constructElementsInterface mod dataMembers]))) (\termUnits -> Right (Maps.fromList (Lists.concat2 typeUnits termUnits)))))
+
+encodeElimination :: JavaEnvironment.JavaEnvironment -> Maybe Syntax.Expression -> Model.Type -> Model.Type -> Model.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeElimination env marg dom cod elimTerm cx g =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+      in case (Strip.deannotateAndDetypeTerm elimTerm) of
+        Model.TermProject v0 ->
+          let fname = Model.projectionFieldName v0
+          in (Eithers.bind (encodeType aliases Sets.empty dom cx g) (\jdom0 -> Eithers.bind (Utils.javaTypeToJavaReferenceType jdom0 cx) (\_ -> Optionals.match marg (
+            let projVar = Model.Name "projected"
+                jbody =
+                        Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.variableToJavaIdentifier projVar) (Utils.javaIdentifier (Model.unName fname)))
+            in (Right (Utils.javaLambda projVar jbody))) (\jarg ->
+            let qual = Syntax.FieldAccess_QualifierPrimary (Utils.javaExpressionToJavaPrimary jarg)
+            in (Right (Utils.javaFieldAccessToJavaExpression (Syntax.FieldAccess {
+              Syntax.fieldAccessQualifier = qual,
+              Syntax.fieldAccessIdentifier = (Utils.javaIdentifier (Model.unName fname))})))))))
+        Model.TermCases v0 ->
+          let tname = Model.caseStatementTypeName v0
+              def_ = Model.caseStatementDefault v0
+              fields = Model.caseStatementCases v0
+          in (Optionals.match marg (
+            let uVar = Model.Name "u"
+                domTypeArgs0 =
+                        \ty -> \acc -> case (Strip.deannotateType ty) of
+                          Model.TypeApplication v1 -> domTypeArgs0 (Model.applicationTypeFunction v1) (Lists.cons (Model.applicationTypeArgument v1) acc)
+                          _ -> acc
+                domTypeArgs = domTypeArgs0 dom []
+                bareElim = Strip.deannotateAndDetypeTerm elimTerm
+                wrappedElimTerm =
+                        Lists.foldl (\trm -> \t -> Model.TermTypeApplication (Model.TypeApplicationTerm {
+                          Model.typeApplicationTermBody = trm,
+                          Model.typeApplicationTermType = t})) bareElim domTypeArgs
+                typedLambda =
+                        Model.TermLambda (Model.Lambda {
+                          Model.lambdaParameter = uVar,
+                          Model.lambdaDomain = (Just dom),
+                          Model.lambdaBody = (Model.TermApplication (Model.Application {
+                            Model.applicationFunction = wrappedElimTerm,
+                            Model.applicationArgument = (Model.TermVariable uVar)}))})
+            in (encodeTerm env typedLambda cx g)) (\jarg ->
+            let prim = Utils.javaExpressionToJavaPrimary jarg
+                consId = innerClassRef aliases tname JavaNames.partialVisitorName
+                effectiveCod = cod
+            in (Eithers.bind (encodeType aliases Sets.empty effectiveCod cx g) (\jcod -> Eithers.bind (Utils.javaTypeToJavaReferenceType jcod cx) (\rt -> Eithers.bind (domTypeArgs aliases dom cx g) (\domArgs -> Eithers.bind (Logic.ifElse (Lists.isEmpty domArgs) (javaTypeArgumentsForNamedType tname cx g) (Right domArgs)) (\targArgs ->
+              let targs = explicitTypeArguments (Lists.concat2 targArgs [
+                    Syntax.TypeArgumentReference rt])
+              in (Eithers.bind (Logic.ifElse (Lists.isEmpty domArgs) (javaTypeArgumentsForNamedType tname cx g) (Right domArgs)) (\unionArgs -> Eithers.bind (Optionals.match def_ (Right []) (\d -> Eithers.bind (otherwiseBranch env aliases dom cod tname jcod unionArgs d cx g) (\b -> Right [
+                b]))) (\otherwiseBranches -> Eithers.bind (Eithers.mapList (\f -> visitBranch env aliases dom tname jcod unionArgs f cx g) fields) (\visitBranches ->
+                let body = Syntax.ClassBody (Lists.concat2 otherwiseBranches visitBranches)
+                    visitor = Utils.javaConstructorCall (Utils.javaConstructorName consId (Just targs)) [] (Just body)
+                in (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Right prim)) (Syntax.Identifier JavaNames.acceptMethodName) [
+                  visitor]))))))))))))))
+        Model.TermUnwrap _ ->
+          let withArg =
+                  \ja -> Utils.javaFieldAccessToJavaExpression (Syntax.FieldAccess {
+                    Syntax.fieldAccessQualifier = (Syntax.FieldAccess_QualifierPrimary (Utils.javaExpressionToJavaPrimary ja)),
+                    Syntax.fieldAccessIdentifier = (Utils.javaIdentifier JavaNames.valueFieldName)})
+          in (Right (Optionals.match marg (
+            let wVar = Model.Name "wrapped"
+                wArg = Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier wVar)
+            in (Utils.javaLambda wVar (withArg wArg))) (\jarg -> withArg jarg)))
+        _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "unexpected " (Strings.concat2 "elimination case" (Strings.concat2 " in " "encodeElimination")))))
+
+encodeFunction :: JavaEnvironment.JavaEnvironment -> Model.Type -> Model.Type -> Model.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeFunction env dom cod funTerm cx g =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+          encodeLambdaFallback =
+                  \env2 -> \lam ->
+                    let lambdaVar = Model.lambdaParameter lam
+                        body = Model.lambdaBody lam
+                    in (Eithers.bind (analyzeJavaFunction env2 body cx g) (\fs ->
+                      let bindings = Typing.functionStructureBindings fs
+                          innerBody = Typing.functionStructureBody fs
+                          env3 = Typing.functionStructureEnvironment fs
+                      in (Eithers.bind (bindingsToStatements env3 bindings cx g) (\bindResult ->
+                        let bindingStmts = Pairs.first bindResult
+                            env4 = Pairs.second bindResult
+                        in (Eithers.bind (encodeTerm env4 innerBody cx g) (\jbody ->
+                          let lam1 =
+                                  Logic.ifElse (Lists.isEmpty bindings) (Utils.javaLambda lambdaVar jbody) (
+                                    let returnSt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jbody))
+                                    in (Utils.javaLambdaFromBlock lambdaVar (Syntax.Block (Lists.concat2 bindingStmts [
+                                      returnSt]))))
+                          in (applyCastIfSafe aliases (Model.TypeFunction (Model.FunctionType {
+                            Model.functionTypeDomain = dom,
+                            Model.functionTypeCodomain = cod})) lam1 cx g)))))))
+      in case (Strip.deannotateTerm funTerm) of
+        Model.TermProject _ -> encodeElimination env Nothing dom cod (Strip.deannotateTerm funTerm) cx g
+        Model.TermCases _ -> encodeElimination env Nothing dom cod (Strip.deannotateTerm funTerm) cx g
+        Model.TermUnwrap _ -> encodeElimination env Nothing dom cod (Strip.deannotateTerm funTerm) cx g
+        Model.TermLambda v0 -> withLambda env v0 (\env2 ->
+          let lambdaVar = Model.lambdaParameter v0
+              body = Model.lambdaBody v0
+          in case (Strip.deannotateTerm body) of
+            Model.TermLambda v1 -> case (Strip.deannotateType cod) of
+              Model.TypeFunction v2 ->
+                let dom2 = Model.functionTypeDomain v2
+                    cod2 = Model.functionTypeCodomain v2
+                in (Eithers.bind (encodeFunction env2 dom2 cod2 (Model.TermLambda v1) cx g) (\innerJavaLambda ->
+                  let lam1 = Utils.javaLambda lambdaVar innerJavaLambda
+                  in (applyCastIfSafe aliases (Model.TypeFunction (Model.FunctionType {
+                    Model.functionTypeDomain = dom,
+                    Model.functionTypeCodomain = cod})) lam1 cx g)))
+              _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "expected function type for lambda body, but got: " (PrintModel.type_ cod))))
+            _ -> encodeLambdaFallback env2 v0)
+        _ -> Right (encodeLiteral (Model.LiteralString (Strings.concat2 "Unimplemented function variant: " (PrintModel.term funTerm))))
+
+encodeFunctionFormTerm :: JavaEnvironment.JavaEnvironment -> [M.Map Model.Name Model.Term] -> Model.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeFunctionFormTerm env anns term cx g =
+
+      let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+      in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mt -> Eithers.bind (Optionals.match mt (Optionals.match (tryInferFunctionType term) (Checking.typeOfTerm cx g term) (\inferredType -> Right inferredType)) (\t -> Right t)) (\typ -> case (Strip.deannotateType typ) of
+        Model.TypeFunction v0 -> encodeFunction env (Model.functionTypeDomain v0) (Model.functionTypeCodomain v0) term cx g
+        _ -> encodeNullaryConstant env typ term cx g)))
+
+encodeFunctionPrimitiveByName :: JavaEnvironment.JavaEnvironment -> Model.Type -> Model.Type -> Model.Name -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeFunctionPrimitiveByName env dom cod name cx g =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+          classWithApply = Syntax.unIdentifier (elementJavaIdentifier True False aliases name)
+          suffix = Strings.concat2 "." JavaNames.applyMethodName
+          className =
+                  Strings.fromList (Lists.take (Math.sub (Strings.length classWithApply) (Strings.length suffix)) (Strings.toList classWithApply))
+          arity =
+                  Arity.typeArity (Model.TypeFunction (Model.FunctionType {
+                    Model.functionTypeDomain = dom,
+                    Model.functionTypeCodomain = cod}))
+      in (Logic.ifElse (Ordering.lte arity 1) (Right (Utils.javaIdentifierToJavaExpression (Syntax.Identifier (Strings.concat [
+        className,
+        "::",
+        JavaNames.applyMethodName])))) (
+        let paramNames = Lists.map (\i -> Model.Name (Strings.concat2 "p" (Literals.printInt32 i))) (Math.range 0 arity)
+            paramExprs = Lists.map (\p -> Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier p)) paramNames
+            classId = Syntax.Identifier className
+            call =
+                    Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic classId (Syntax.Identifier JavaNames.applyMethodName) paramExprs)
+            curried = buildCurriedLambda paramNames call
+        in (Eithers.bind (encodeType aliases Sets.empty (Model.TypeFunction (Model.FunctionType {
+          Model.functionTypeDomain = dom,
+          Model.functionTypeCodomain = cod})) cx g) (\jtype -> Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt -> Right (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression rt (Utils.javaExpressionToJavaUnaryExpression curried))))))))
+
+encodeLiteral :: Model.Literal -> Syntax.Expression
+encodeLiteral lit =
+    case lit of
+      Model.LiteralBinary v0 ->
+        let byteValues = Literals.binaryToBytes v0
+        in (Utils.javaArrayCreation Utils.javaBytePrimitiveType (Just (Utils.javaArrayInitializer (Lists.map (\w -> Utils.javaLiteralToJavaExpression (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int32ToBigint (Logic.ifElse (Ordering.gt w 127) (Math.sub w 256) w))))) byteValues))))
+      Model.LiteralBoolean v0 -> encodeLiteral_litExp (Utils.javaBoolean v0)
+      Model.LiteralDecimal v0 -> Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "java.math.BigDecimal") Nothing) [
+        encodeLiteral (Model.LiteralString (Literals.printDecimal v0))] Nothing
+      Model.LiteralFloat v0 -> encodeLiteral_encodeFloat v0
+      Model.LiteralInteger v0 -> encodeLiteral_encodeInteger v0
+      Model.LiteralString v0 -> encodeLiteral_litExp (Utils.javaString v0)
+
+encodeLiteralType :: Model.LiteralType -> t0 -> t1 -> Either t2 Syntax.Type
+encodeLiteralType lt cx g =
+    case lt of
+      Model.LiteralTypeBinary -> Right (Syntax.TypeReference (Syntax.ReferenceTypeArray (Syntax.ArrayType {
+        Syntax.arrayTypeDims = (Syntax.Dims [
+          []]),
+        Syntax.arrayTypeVariant = (Syntax.ArrayType_VariantPrimitive (Syntax.PrimitiveTypeWithAnnotations {
+          Syntax.primitiveTypeWithAnnotationsType = (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeByte)),
+          Syntax.primitiveTypeWithAnnotationsAnnotations = []}))})))
+      Model.LiteralTypeBoolean -> encodeLiteralType_simple "Boolean" cx g
+      Model.LiteralTypeDecimal -> Right (Utils.javaRefType [] (Just (JavaNames.javaPackageName [
+        "java",
+        "math"])) "BigDecimal")
+      Model.LiteralTypeFloat v0 -> case v0 of
+        Model.FloatTypeFloat32 -> encodeLiteralType_simple "Float" cx g
+        Model.FloatTypeFloat64 -> encodeLiteralType_simple "Double" cx g
+      Model.LiteralTypeInteger v0 -> case v0 of
+        Model.IntegerTypeBigint -> Right (Utils.javaRefType [] (Just (JavaNames.javaPackageName [
+          "java",
+          "math"])) "BigInteger")
+        Model.IntegerTypeInt8 -> encodeLiteralType_simple "Byte" cx g
+        Model.IntegerTypeInt16 -> encodeLiteralType_simple "Short" cx g
+        Model.IntegerTypeInt32 -> encodeLiteralType_simple "Integer" cx g
+        Model.IntegerTypeInt64 -> encodeLiteralType_simple "Long" cx g
+        Model.IntegerTypeUint8 -> encodeLiteralType_simple "Short" cx g
+        Model.IntegerTypeUint16 -> encodeLiteralType_simple "Character" cx g
+        Model.IntegerTypeUint32 -> encodeLiteralType_simple "Long" cx g
+        Model.IntegerTypeUint64 -> Right (Utils.javaRefType [] (Just (JavaNames.javaPackageName [
+          "java",
+          "math"])) "BigInteger")
+      Model.LiteralTypeString -> encodeLiteralType_simple "String" cx g
+
+encodeLiteralType_simple :: String -> t0 -> t1 -> Either t2 Syntax.Type
+encodeLiteralType_simple n cx g = Right (Utils.javaRefType [] Nothing n)
+
+encodeLiteral_encodeFloat :: Model.FloatValue -> Syntax.Expression
+encodeLiteral_encodeFloat f =
+    case f of
+      Model.FloatValueFloat32 v0 -> encodeLiteral_encodeFloat32 v0
+      Model.FloatValueFloat64 v0 -> encodeLiteral_encodeFloat64 v0
+
+encodeLiteral_encodeFloat32 :: Float -> Syntax.Expression
+encodeLiteral_encodeFloat32 v =
+
+      let s = Literals.printFloat32 v
+      in (Logic.ifElse (Equality.equal s "NaN") (encodeLiteral_javaSpecialFloatExpr "Float" "NaN") (Logic.ifElse (Equality.equal s "Infinity") (encodeLiteral_javaSpecialFloatExpr "Float" "POSITIVE_INFINITY") (Logic.ifElse (Equality.equal s "-Infinity") (encodeLiteral_javaSpecialFloatExpr "Float" "NEGATIVE_INFINITY") (encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeFloatingPoint Syntax.FloatingPointTypeFloat)) (encodeLiteral_litExp (Syntax.LiteralFloatingPoint (Syntax.FloatingPointLiteral (Literals.float32ToFloat64 v))))))))
+
+encodeLiteral_encodeFloat64 :: Double -> Syntax.Expression
+encodeLiteral_encodeFloat64 v =
+
+      let s = Literals.printFloat64 v
+      in (Logic.ifElse (Equality.equal s "NaN") (encodeLiteral_javaSpecialFloatExpr "Double" "NaN") (Logic.ifElse (Equality.equal s "Infinity") (encodeLiteral_javaSpecialFloatExpr "Double" "POSITIVE_INFINITY") (Logic.ifElse (Equality.equal s "-Infinity") (encodeLiteral_javaSpecialFloatExpr "Double" "NEGATIVE_INFINITY") (Logic.ifElse (Equality.equal s "-0.0") (encodeLiteral_javaParseDouble "-0.0") (encodeLiteral_litExp (Syntax.LiteralFloatingPoint (Syntax.FloatingPointLiteral v)))))))
+
+encodeLiteral_encodeInteger :: Model.IntegerValue -> Syntax.Expression
+encodeLiteral_encodeInteger i =
+    case i of
+      Model.IntegerValueBigint v0 -> Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "java.math.BigInteger") Nothing) [
+        encodeLiteral (Model.LiteralString (Literals.printBigint v0))] Nothing
+      Model.IntegerValueInt8 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeByte)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int8ToBigint v0))))
+      Model.IntegerValueInt16 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeShort)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int16ToBigint v0))))
+      Model.IntegerValueInt32 v0 -> encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int32ToBigint v0)))
+      Model.IntegerValueInt64 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeLong)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.int64ToBigint v0))))
+      Model.IntegerValueUint8 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeShort)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.uint8ToBigint v0))))
+      Model.IntegerValueUint16 v0 -> encodeLiteral_litExp (Syntax.LiteralCharacter v0)
+      Model.IntegerValueUint32 v0 -> encodeLiteral_primCast (Syntax.PrimitiveTypeNumeric (Syntax.NumericTypeIntegral Syntax.IntegralTypeLong)) (encodeLiteral_litExp (Syntax.LiteralInteger (Syntax.IntegerLiteral (Literals.uint32ToBigint v0))))
+      Model.IntegerValueUint64 v0 -> Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "java.math.BigInteger") Nothing) [
+        encodeLiteral (Model.LiteralString (Literals.printBigint (Literals.uint64ToBigint v0)))] Nothing
+
+encodeLiteral_javaParseDouble :: String -> Syntax.Expression
+encodeLiteral_javaParseDouble value =
+    Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "Double") (Syntax.Identifier "parseDouble") [
+      encodeLiteral (Model.LiteralString value)])
+
+encodeLiteral_javaSpecialFloatExpr :: String -> String -> Syntax.Expression
+encodeLiteral_javaSpecialFloatExpr className fieldName =
+    Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
+      Syntax.expressionNameQualifier = (Just (Syntax.AmbiguousName [
+        Syntax.Identifier className])),
+      Syntax.expressionNameIdentifier = (Syntax.Identifier fieldName)})
+
+encodeLiteral_litExp :: Syntax.Literal -> Syntax.Expression
+encodeLiteral_litExp l = Utils.javaLiteralToJavaExpression l
+
+encodeLiteral_primCast :: Syntax.PrimitiveType -> Syntax.Expression -> Syntax.Expression
+encodeLiteral_primCast pt expr =
+    Utils.javaCastExpressionToJavaExpression (Utils.javaCastPrimitive pt (Utils.javaExpressionToJavaUnaryExpression expr))
+
+encodeNullaryConstant :: t0 -> t1 -> Model.Term -> t2 -> t3 -> Either Errors.Error t4
+encodeNullaryConstant env typ funTerm cx g =
+    Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "unexpected " (Strings.concat2 "nullary function" (Strings.concat2 " in " (PrintModel.term funTerm))))))
+
+encodeNullaryConstant_typeArgsFromReturnType :: JavaEnvironment.Aliases -> Model.Type -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.TypeArgument]
+encodeNullaryConstant_typeArgsFromReturnType aliases t cx g =
+    case (Strip.deannotateType t) of
+      Model.TypeSet v0 -> Eithers.bind (encodeType aliases Sets.empty v0 cx g) (\jst -> Eithers.bind (Utils.javaTypeToJavaReferenceType jst cx) (\rt -> Right [
+        Syntax.TypeArgumentReference rt]))
+      Model.TypeList v0 -> Eithers.bind (encodeType aliases Sets.empty v0 cx g) (\jlt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jlt cx) (\rt -> Right [
+        Syntax.TypeArgumentReference rt]))
+      Model.TypeOptional v0 -> Eithers.bind (encodeType aliases Sets.empty v0 cx g) (\jmt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jmt cx) (\rt -> Right [
+        Syntax.TypeArgumentReference rt]))
+      Model.TypeMap v0 -> Eithers.bind (encodeType aliases Sets.empty (Model.mapTypeKeys v0) cx g) (\jkt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jkt cx) (\rk -> Eithers.bind (encodeType aliases Sets.empty (Model.mapTypeValues v0) cx g) (\jvt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jvt cx) (\rv -> Right [
+        Syntax.TypeArgumentReference rk,
+        (Syntax.TypeArgumentReference rv)]))))
+      _ -> Right []
+
+encodeNullaryPrimitiveByName :: JavaEnvironment.JavaEnvironment -> Model.Type -> Model.Name -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeNullaryPrimitiveByName env typ name cx g =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+      in (Eithers.bind (encodeNullaryConstant_typeArgsFromReturnType aliases typ cx g) (\targs -> Logic.ifElse (Lists.isEmpty targs) (
+        let header = Syntax.MethodInvocation_HeaderSimple (Syntax.MethodName (elementJavaIdentifier True False aliases name))
+        in (Right (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
+          Syntax.methodInvocationHeader = header,
+          Syntax.methodInvocationArguments = []})))) (
+        let fullName = Syntax.unIdentifier (elementJavaIdentifier True False aliases name)
+            parts = Strings.splitOn "." fullName
+            className = Syntax.Identifier (Strings.join "." (Optionals.withDefault [] (Lists.init parts)))
+            methodName = Syntax.Identifier (Optionals.withDefault fullName (Lists.last parts))
+        in (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs className methodName targs []))))))
+
+encodeTerm :: JavaEnvironment.JavaEnvironment -> Model.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeTerm env term cx g = encodeTermInternal env [] [] term cx g
+
+encodeTermDefinition :: JavaEnvironment.JavaEnvironment -> Packaging.TermDefinition -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.InterfaceMemberDeclarationWithComments
+encodeTermDefinition env tdef cx g =
+
+      let name = Packaging.termDefinitionName tdef
+          term0 = Packaging.termDefinitionBody tdef
+      in (Eithers.bind (Annotations.getTermDescription cx g term0) (\mDoc ->
+        let ts =
+                Optionals.match (Packaging.termDefinitionSignature tdef) (Model.TypeScheme {
+                  Model.typeSchemeVariables = [],
+                  Model.typeSchemeBody = (Model.TypeVariable (Model.Name "hydra.core.model.Unit")),
+                  Model.typeSchemeConstraints = Maps.empty}) (\sig -> Scoping.termSignatureToTypeScheme sig)
+            term = Variables.unshadowVariables term0
+        in (Eithers.bind (analyzeJavaFunction env term cx g) (\fs ->
+          let schemeVars = Lists.filter (\v -> isSimpleName v) (Model.typeSchemeVariables ts)
+              termVars = Typing.functionStructureTypeParams fs
+              schemeTypeVars = collectTypeVars (Model.typeSchemeBody ts)
+              usedSchemeVars = Lists.filter (\v -> Sets.member v schemeTypeVars) schemeVars
+              tparams = Logic.ifElse (Lists.isEmpty usedSchemeVars) termVars usedSchemeVars
+              params = Typing.functionStructureParams fs
+              bindings = Typing.functionStructureBindings fs
+              body = Typing.functionStructureBody fs
+              doms = Typing.functionStructureDomains fs
+              env2 = Typing.functionStructureEnvironment fs
+              schemeType = Model.typeSchemeBody ts
+              numParams = Lists.length params
+              peelResult = peelDomainsAndCod numParams schemeType
+              schemeDoms = Pairs.first peelResult
+              cod = Pairs.second peelResult
+              schemeVarSet = Sets.fromList tparams
+          in (Eithers.bind (Logic.ifElse (Lists.isEmpty tparams) (Right Maps.empty) (buildSubstFromAnnotations schemeVarSet term cx g)) (\typeVarSubst ->
+            let overgenSubst = detectAccumulatorUnification schemeDoms cod tparams
+                overgenVarSubst =
+                        Maps.fromList (Optionals.givens (Lists.map (\entry ->
+                          let k = Pairs.first entry
+                              v = Pairs.second entry
+                          in case v of
+                            Model.TypeVariable v0 -> Just (k, v0)
+                            _ -> Nothing) (Maps.toList overgenSubst)))
+                fixedCod = Logic.ifElse (Maps.isEmpty overgenSubst) cod (substituteTypeVarsWithTypes overgenSubst cod)
+                fixedDoms =
+                        Logic.ifElse (Maps.isEmpty overgenSubst) schemeDoms (Lists.map (\d -> substituteTypeVarsWithTypes overgenSubst d) schemeDoms)
+                fixedTparams =
+                        Logic.ifElse (Maps.isEmpty overgenSubst) tparams (Lists.filter (\v -> Logic.not (Maps.member v overgenSubst)) tparams)
+                constraints = Model.typeSchemeConstraints ts
+                jparams = Lists.map (\v -> Utils.javaTypeParameter (Formatting.capitalize (Model.unName v))) fixedTparams
+                aliases2base = JavaEnvironment.javaEnvironmentAliases env2
+                trustedVars = Sets.unions (Lists.map (\d -> collectTypeVars d) (Lists.concat2 fixedDoms [
+                      fixedCod]))
+                fixedSchemeVarSet = Sets.fromList fixedTparams
+                aliases2 =
+                        JavaEnvironment.Aliases {
+                          JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases2base),
+                          JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases2base),
+                          JavaEnvironment.aliasesBranchVars = (JavaEnvironment.aliasesBranchVars aliases2base),
+                          JavaEnvironment.aliasesRecursiveVars = (JavaEnvironment.aliasesRecursiveVars aliases2base),
+                          JavaEnvironment.aliasesInScopeTypeParams = fixedSchemeVarSet,
+                          JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases2base),
+                          JavaEnvironment.aliasesInScopeJavaVars = (JavaEnvironment.aliasesInScopeJavaVars aliases2base),
+                          JavaEnvironment.aliasesVarRenames = (JavaEnvironment.aliasesVarRenames aliases2base),
+                          JavaEnvironment.aliasesLambdaVars = (Sets.union (JavaEnvironment.aliasesLambdaVars aliases2base) (Sets.fromList params)),
+                          JavaEnvironment.aliasesTypeVarSubst = (Maps.union overgenVarSubst typeVarSubst),
+                          JavaEnvironment.aliasesTrustedTypeVars = (Sets.intersection trustedVars fixedSchemeVarSet),
+                          JavaEnvironment.aliasesMethodCodomain = (Just fixedCod),
+                          JavaEnvironment.aliasesThunkedVars = (JavaEnvironment.aliasesThunkedVars aliases2base)}
+                env2WithTypeParams =
+                        JavaEnvironment.JavaEnvironment {
+                          JavaEnvironment.javaEnvironmentAliases = aliases2,
+                          JavaEnvironment.javaEnvironmentGraph = (JavaEnvironment.javaEnvironmentGraph env2)}
+            in (Eithers.bind (bindingsToStatements env2WithTypeParams bindings cx g) (\bindResult ->
+              let bindingStmts = Pairs.first bindResult
+                  env3 = Pairs.second bindResult
+              in (Eithers.bind (Logic.ifElse (Maps.isEmpty overgenSubst) (Right body) (applyOvergenSubstToTermAnnotations overgenSubst body cx g)) (\body_ ->
+                let annotatedBody = propagateTypesInAppChain fixedCod fixedCod body_
+                in (Eithers.bind (Eithers.mapList (\pair -> Eithers.bind (encodeType aliases2 Sets.empty (Pairs.first pair) cx g) (\jdom -> Right (Utils.javaTypeToJavaFormalParameter jdom (Pairs.second pair)))) (Lists.zip fixedDoms params)) (\jformalParams -> Eithers.bind (encodeType aliases2 Sets.empty fixedCod cx g) (\jcod ->
+                  let result = Utils.javaTypeToJavaResult jcod
+                      mods = [
+                            Syntax.InterfaceMethodModifierStatic]
+                      jname = Utils.sanitizeJavaName (Formatting.decapitalize (CoreNames.localNameOf name))
+                      isTCO = Logic.and (Logic.not (Lists.isEmpty params)) (Analysis.isSelfTailRecursive name body)
+                  in (Eithers.bind (Logic.ifElse isTCO (
+                    let tcoSuffix = "_tco"
+                        snapshotNames = Lists.map (\p -> Model.Name (Strings.concat2 (Model.unName p) tcoSuffix)) params
+                        tcoVarRenames = Maps.fromList (Lists.zip params snapshotNames)
+                        snapshotDecls =
+                                Lists.map (\pair -> Utils.finalVarDeclarationStatement (Utils.variableToJavaIdentifier (Pairs.second pair)) (Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier (Pairs.first pair)))) (Lists.zip params snapshotNames)
+                        tcoBody =
+                                Logic.ifElse (Lists.isEmpty bindings) annotatedBody (Model.TermLet (Model.Let {
+                                  Model.letBindings = bindings,
+                                  Model.letBody = annotatedBody}))
+                    in (Eithers.bind (encodeTermTCO env2WithTypeParams name params tparams tcoVarRenames 0 tcoBody cx g) (\tcoStmts ->
+                      let whileBodyStmts = Lists.concat2 snapshotDecls tcoStmts
+                          whileBodyBlock =
+                                  Syntax.StatementWithoutTrailing (Syntax.StatementWithoutTrailingSubstatementBlock (Syntax.Block whileBodyStmts))
+                          noCond = Nothing
+                          whileStmt =
+                                  Syntax.BlockStatementStatement (Syntax.StatementWhile (Syntax.WhileStatement {
+                                    Syntax.whileStatementCond = noCond,
+                                    Syntax.whileStatementBody = whileBodyBlock}))
+                      in (Right [
+                        whileStmt])))) (Eithers.bind (encodeTerm env3 annotatedBody cx g) (\jbody ->
+                    let returnSt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jbody))
+                    in (Right (Lists.concat2 bindingStmts [
+                      returnSt]))))) (\methodBody ->
+                    let imdMember = Utils.interfaceMethodDeclaration mods jparams jname jformalParams result (Just methodBody)
+                    in (Right (Optionals.match mDoc (noInterfaceComment imdMember) (\doc -> withInterfaceCommentString doc imdMember))))))))))))))))))
+
+encodeTermInternal :: JavaEnvironment.JavaEnvironment -> [M.Map Model.Name Model.Term] -> [Syntax.Type] -> Model.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeTermInternal env anns tyapps term cx g0 =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+          g = JavaEnvironment.javaEnvironmentGraph env
+          encode = \t -> encodeTerm env t cx g
+      in case term of
+        Model.TermAnnotated v0 -> encodeTermInternal env (Lists.cons (Annotations.getAnnotationMap (Model.annotatedTermAnnotation v0)) anns) tyapps (Model.annotatedTermBody v0) cx g
+        Model.TermApplication v0 -> encodeApplication env v0 cx g
+        Model.TermEither v0 -> Eithers.bind (Logic.ifElse (Lists.isEmpty tyapps) (Right Nothing) (Eithers.bind (takeTypeArgs "either" 2 tyapps cx g) (\ta -> Right (Just ta)))) (\mtargs ->
+          let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+          in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mEitherType ->
+            let branchTypes =
+                    Optionals.bind mEitherType (\etyp -> case (Strip.deannotateType etyp) of
+                      Model.TypeEither v1 -> Just (Model.eitherTypeLeft v1, (Model.eitherTypeRight v1))
+                      _ -> Nothing)
+                encodeWithType =
+                        \branchType -> \t1 ->
+                          let annotated = Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ branchType)) t1
+                          in (encodeTermInternal env anns [] annotated cx g)
+                eitherCall =
+                        \methodName -> \expr -> Optionals.match mtargs (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.core.overlay.java.util.Either") (Syntax.Identifier methodName) [
+                          expr])) (\targs -> Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.Either") (Syntax.Identifier methodName) targs [
+                          expr]))
+            in (Eithers.either (\term1 -> Eithers.bind (Optionals.match branchTypes (encode term1) (\bt -> encodeWithType (Pairs.first bt) term1)) (\expr -> Right (eitherCall "left" expr))) (\term1 -> Eithers.bind (Optionals.match branchTypes (encode term1) (\bt -> encodeWithType (Pairs.second bt) term1)) (\expr -> Right (eitherCall "right" expr))) v0))))
+        Model.TermLambda _ -> encodeFunctionFormTerm env anns term cx g
+        Model.TermProject _ -> encodeFunctionFormTerm env anns term cx g
+        Model.TermCases _ -> encodeFunctionFormTerm env anns term cx g
+        Model.TermUnwrap _ -> encodeFunctionFormTerm env anns term cx g
+        Model.TermLet v0 ->
+          let bindings = Model.letBindings v0
+              body = Model.letBody v0
+          in (Logic.ifElse (Lists.isEmpty bindings) (encodeTermInternal env anns [] body cx g) (Eithers.bind (bindingsToStatements env bindings cx g) (\bindResult ->
+            let bindingStmts = Pairs.first bindResult
+                env2 = Pairs.second bindResult
+            in (Eithers.bind (encodeTermInternal env2 anns [] body cx g) (\jbody ->
+              let returnSt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jbody))
+                  block = Syntax.Block (Lists.concat2 bindingStmts [
+                        returnSt])
+                  nullaryLambda =
+                          Syntax.ExpressionLambda (Syntax.LambdaExpression {
+                            Syntax.lambdaExpressionParameters = (Syntax.LambdaParametersTuple []),
+                            Syntax.lambdaExpressionBody = (Syntax.LambdaBodyBlock block)})
+                  combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+                  g2 = JavaEnvironment.javaEnvironmentGraph env2
+                  aliases2 = JavaEnvironment.javaEnvironmentAliases env2
+              in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mt -> Eithers.bind (Optionals.match mt (Checking.typeOfTerm cx g2 body) (\t -> Right t)) (\letType -> Eithers.bind (encodeType aliases2 Sets.empty letType cx g) (\jLetType -> Eithers.bind (Utils.javaTypeToJavaReferenceType jLetType cx) (\rt ->
+                let supplierRt =
+                        Syntax.ReferenceTypeClassOrInterface (Syntax.ClassOrInterfaceTypeClass (Utils.javaClassType [
+                          rt] JavaNames.javaUtilFunctionPackageName "Supplier"))
+                    castExpr =
+                            Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression supplierRt (Utils.javaExpressionToJavaUnaryExpression nullaryLambda))
+                in (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Right (Utils.javaExpressionToJavaPrimary castExpr))) (Syntax.Identifier "get") [])))))))))))))
+        Model.TermList v0 -> Logic.ifElse (Lists.isEmpty v0) (Logic.ifElse (Lists.isEmpty tyapps) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.core.overlay.java.util.ConsList") (Syntax.Identifier "empty") []))) (Eithers.bind (takeTypeArgs "list" 1 tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.ConsList") (Syntax.Identifier "empty") targs []))))) (Eithers.bind (Eithers.mapList encode v0) (\jels -> Eithers.bind (collectionTypeArgs "list" 1 aliases anns tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.ConsList") (Syntax.Identifier "of") targs jels)))))
+        Model.TermLiteral v0 -> Right (encodeLiteral v0)
+        Model.TermMap v0 -> Logic.ifElse (Maps.isEmpty v0) (Logic.ifElse (Lists.isEmpty tyapps) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.core.overlay.java.util.PersistentMap") (Syntax.Identifier "empty") []))) (Eithers.bind (takeTypeArgs "map" 2 tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.PersistentMap") (Syntax.Identifier "empty") targs []))))) (Eithers.bind (Eithers.mapList encode (Maps.keys v0)) (\jkeys -> Eithers.bind (Eithers.mapList encode (Maps.elems v0)) (\jvals ->
+          let pairExprs =
+                  Lists.map (\kv -> Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "java.util.Map") (Syntax.Identifier "entry") [
+                    Pairs.first kv,
+                    (Pairs.second kv)])) (Lists.zip jkeys jvals)
+          in (Eithers.bind (collectionTypeArgs "map" 2 aliases anns tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.PersistentMap") (Syntax.Identifier "ofEntries") targs pairExprs)))))))
+        Model.TermOptional v0 -> Optionals.match v0 (Logic.ifElse (Lists.isEmpty tyapps) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.core.overlay.java.util.Optional") (Syntax.Identifier "none") []))) (Eithers.bind (takeTypeArgs "optional" 1 tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.Optional") (Syntax.Identifier "none") targs []))))) (\term1 -> Eithers.bind (encode term1) (\expr -> Eithers.bind (collectionTypeArgs "optional" 1 aliases anns tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.Optional") (Syntax.Identifier "given") targs [
+          expr])))))
+        Model.TermPair v0 -> Eithers.bind (encode (Pairs.first v0)) (\jterm1 -> Eithers.bind (encode (Pairs.second v0)) (\jterm2 -> Eithers.bind (Logic.ifElse (Lists.isEmpty tyapps) (Right Nothing) (Eithers.bind (Eithers.mapList (\jt -> Utils.javaTypeToJavaReferenceType jt cx) tyapps) (\rts -> Right (Just (Syntax.TypeArgumentsOrDiamondArguments (Lists.map (\rt -> Syntax.TypeArgumentReference rt) rts)))))) (\mtargs -> Right (Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "hydra.core.overlay.java.util.Pair") mtargs) [
+          jterm1,
+          jterm2] Nothing))))
+        Model.TermRecord v0 ->
+          let recName = Model.recordTypeName v0
+              mRecordType = Eithers.either (\_ -> Nothing) (\t -> Just t) (Resolution.requireType cx g recName)
+              strippedRecTyp = Optionals.map (\recTyp -> stripForalls (Strip.deannotateType recTyp)) mRecordType
+              mFieldTypeMap =
+                      Optionals.bind strippedRecTyp (\bodyTyp -> case bodyTyp of
+                        Model.TypeRecord v1 -> Just (Maps.fromList (Lists.map (\ft -> (Model.fieldTypeName ft, (Model.fieldTypeType ft))) v1))
+                        _ -> Nothing)
+              combinedAnnsRec = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+          in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnnsRec)) (\mAnnotType ->
+            let mTypeSubst =
+                    Optionals.bind mAnnotType (\annTyp -> Optionals.bind mRecordType (\recTyp ->
+                      let args = extractTypeApplicationArgs (Strip.deannotateType annTyp)
+                          params = collectForallParams (Strip.deannotateType recTyp)
+                      in (Logic.ifElse (Logic.or (Lists.isEmpty args) (Logic.not (Equality.equal (Lists.length args) (Lists.length params)))) Nothing (Just (Maps.fromList (Lists.zip params args))))))
+                encodeField =
+                        \fld -> Optionals.match mFieldTypeMap (encode (Model.fieldTerm fld)) (\ftmap ->
+                          let mftyp = Maps.lookup (Model.fieldName fld) ftmap
+                          in (Optionals.match mftyp (encode (Model.fieldTerm fld)) (\ftyp ->
+                            let resolvedType = Optionals.match mTypeSubst ftyp (\subst -> applySubstFull subst ftyp)
+                                annotatedFieldTerm =
+                                        Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ resolvedType)) (Model.fieldTerm fld)
+                            in (encodeTermInternal env anns [] annotatedFieldTerm cx g))))
+            in (Eithers.bind (Eithers.mapList encodeField (Model.recordFields v0)) (\fieldExprs ->
+              let consId = Utils.nameToJavaName aliases recName
+              in (Eithers.bind (Logic.ifElse (Logic.not (Lists.isEmpty tyapps)) (Eithers.bind (Eithers.mapList (\jt -> Utils.javaTypeToJavaReferenceType jt cx) tyapps) (\rts -> Right (Just (Syntax.TypeArgumentsOrDiamondArguments (Lists.map (\rt -> Syntax.TypeArgumentReference rt) rts))))) (
+                let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+                in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mtyp -> Optionals.match mtyp (Right Nothing) (\annTyp ->
+                  let typeArgs = extractTypeApplicationArgs (Strip.deannotateType annTyp)
+                  in (Logic.ifElse (Lists.isEmpty typeArgs) (Right Nothing) (Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Utils.javaTypeToJavaReferenceType jt cx)) typeArgs) (\jTypeArgs -> Right (Just (Syntax.TypeArgumentsOrDiamondArguments (Lists.map (\rt -> Syntax.TypeArgumentReference rt) jTypeArgs))))))))))) (\mtargs -> Right (Utils.javaConstructorCall (Utils.javaConstructorName consId mtargs) fieldExprs Nothing)))))))
+        Model.TermSet v0 -> Logic.ifElse (Sets.isEmpty v0) (Logic.ifElse (Lists.isEmpty tyapps) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStatic (Syntax.Identifier "hydra.core.overlay.java.util.PersistentSet") (Syntax.Identifier "empty") []))) (Eithers.bind (takeTypeArgs "set" 1 tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.PersistentSet") (Syntax.Identifier "empty") targs []))))) (
+          let slist = Sets.toList v0
+          in (Eithers.bind (Eithers.mapList encode slist) (\jels -> Eithers.bind (collectionTypeArgs "set" 1 aliases anns tyapps cx g) (\targs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.PersistentSet") (Syntax.Identifier "of") targs jels))))))
+        Model.TermTypeLambda v0 -> withTypeLambda env v0 (\env2 ->
+          let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+          in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mtyp ->
+            let annotatedBody =
+                    Optionals.match mtyp (Model.typeLambdaBody v0) (\t -> case t of
+                      Model.TypeForall v1 -> Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ (Model.forallTypeBody v1))) (Model.typeLambdaBody v0)
+                      _ -> Model.typeLambdaBody v0)
+            in (encodeTerm env2 annotatedBody cx g))))
+        Model.TermInject v0 ->
+          let injTypeName = Model.injectionTypeName v0
+              injField = Model.injectionField v0
+              injFieldName = Model.fieldName injField
+              injFieldTerm = Model.fieldTerm injField
+              typeId = Syntax.unIdentifier (Utils.nameToJavaName aliases injTypeName)
+              consId =
+                      Syntax.Identifier (Strings.concat [
+                        typeId,
+                        ".",
+                        (Utils.sanitizeJavaName (Formatting.capitalize (Model.unName injFieldName)))])
+          in (Eithers.bind (isFieldUnitType injTypeName injFieldName cx g) (\fieldIsUnit -> Eithers.bind (Logic.ifElse (Logic.or (Predicates.isUnitTerm (Strip.deannotateTerm injFieldTerm)) fieldIsUnit) (Right []) (Eithers.bind (encode injFieldTerm) (\ex -> Right [
+            ex]))) (\args -> Right (Utils.javaConstructorCall (Utils.javaConstructorName consId Nothing) args Nothing))))
+        Model.TermVariable v0 -> Optionals.match (Maps.lookup v0 (Graph.graphPrimitives g)) (encodeVariable env v0 cx g) (\_ ->
+          let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+          in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mt -> Eithers.bind (Optionals.match mt (Checking.typeOfTerm cx g term) (\t -> Right t)) (\typ -> case (Strip.deannotateType typ) of
+            Model.TypeFunction v1 -> encodeFunctionPrimitiveByName env (Model.functionTypeDomain v1) (Model.functionTypeCodomain v1) v0 cx g
+            _ -> encodeNullaryPrimitiveByName env typ v0 cx g))))
+        Model.TermUnit -> Right (Utils.javaLiteralToJavaExpression Syntax.LiteralNull)
+        Model.TermWrap v0 -> Eithers.bind (encode (Model.wrappedTermBody v0)) (\jarg -> Right (Utils.javaConstructorCall (Utils.javaConstructorName (Utils.nameToJavaName aliases (Model.wrappedTermTypeName v0)) Nothing) [
+          jarg] Nothing))
+        Model.TermTypeApplication v0 ->
+          let atyp = Model.typeApplicationTermType v0
+              body = Model.typeApplicationTermBody v0
+          in (Eithers.bind (encodeType aliases Sets.empty atyp cx g) (\jatyp ->
+            let combinedAnns = Lists.foldl (\acc -> \m -> Maps.union acc m) Maps.empty anns
+            in (Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g combinedAnns)) (\mtyp -> Eithers.bind (Optionals.match mtyp (Checking.typeOfTerm cx g term) (\t -> Right t)) (\typ ->
+              let collected0 = collectTypeApps0 body [
+                    atyp]
+                  innermostBody0 = Pairs.first collected0
+                  allTypeArgs0 = Pairs.second collected0
+              in (Eithers.bind (correctCastType innermostBody0 allTypeArgs0 typ cx g) (\correctedTyp ->
+                let collected = collectTypeApps body [
+                      atyp]
+                    innermostBody = Pairs.first collected
+                    allTypeArgs = Pairs.second collected
+                in case innermostBody of
+                  Model.TermVariable v1 -> Eithers.bind (classifyDataReference v1 cx g) (\cls -> typeAppNullaryOrHoisted env aliases anns tyapps jatyp body correctedTyp v1 cls allTypeArgs cx g)
+                  Model.TermEither v1 -> Logic.ifElse (Equality.equal (Lists.length allTypeArgs) 2) (
+                    let eitherBranchTypes =
+                            (Optionals.withDefault correctedTyp (Lists.at 0 allTypeArgs), (Optionals.withDefault correctedTyp (Lists.at 1 allTypeArgs)))
+                    in (Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Utils.javaTypeToJavaReferenceType jt cx)) allTypeArgs) (\jTypeArgs ->
+                      let eitherTargs = Lists.map (\rt -> Syntax.TypeArgumentReference rt) jTypeArgs
+                          encodeEitherBranch =
+                                  \branchType -> \t1 ->
+                                    let annotated = Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ branchType)) t1
+                                    in (encodeTermInternal env anns [] annotated cx g)
+                      in (Eithers.either (\term1 -> Eithers.bind (encodeEitherBranch (Pairs.first eitherBranchTypes) term1) (\expr -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.Either") (Syntax.Identifier "left") eitherTargs [
+                        expr])))) (\term1 -> Eithers.bind (encodeEitherBranch (Pairs.second eitherBranchTypes) term1) (\expr -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs (Syntax.Identifier "hydra.core.overlay.java.util.Either") (Syntax.Identifier "right") eitherTargs [
+                        expr])))) v1)))) (typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g)
+                  _ -> typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g)))))))
+        _ -> Right (encodeLiteral (Model.LiteralString "Unimplemented term variant"))
+
+encodeTermTCO :: JavaEnvironment.JavaEnvironment -> Model.Name -> [Model.Name] -> [Model.Name] -> M.Map Model.Name Model.Name -> Int -> Model.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error [Syntax.BlockStatement]
+encodeTermTCO env0 funcName paramNames tparams tcoVarRenames tcoDepth term cx g =
+
+      let aliases0 = JavaEnvironment.javaEnvironmentAliases env0
+          env =
+                  JavaEnvironment.JavaEnvironment {
+                    JavaEnvironment.javaEnvironmentAliases = JavaEnvironment.Aliases {
+                      JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases0),
+                      JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases0),
+                      JavaEnvironment.aliasesBranchVars = (JavaEnvironment.aliasesBranchVars aliases0),
+                      JavaEnvironment.aliasesRecursiveVars = (JavaEnvironment.aliasesRecursiveVars aliases0),
+                      JavaEnvironment.aliasesInScopeTypeParams = (JavaEnvironment.aliasesInScopeTypeParams aliases0),
+                      JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases0),
+                      JavaEnvironment.aliasesInScopeJavaVars = (JavaEnvironment.aliasesInScopeJavaVars aliases0),
+                      JavaEnvironment.aliasesVarRenames = (Maps.union tcoVarRenames (JavaEnvironment.aliasesVarRenames aliases0)),
+                      JavaEnvironment.aliasesLambdaVars = (JavaEnvironment.aliasesLambdaVars aliases0),
+                      JavaEnvironment.aliasesTypeVarSubst = (JavaEnvironment.aliasesTypeVarSubst aliases0),
+                      JavaEnvironment.aliasesTrustedTypeVars = (JavaEnvironment.aliasesTrustedTypeVars aliases0),
+                      JavaEnvironment.aliasesMethodCodomain = (JavaEnvironment.aliasesMethodCodomain aliases0),
+                      JavaEnvironment.aliasesThunkedVars = (JavaEnvironment.aliasesThunkedVars aliases0)},
+                    JavaEnvironment.javaEnvironmentGraph = (JavaEnvironment.javaEnvironmentGraph env0)}
+          stripped = Strip.deannotateAndDetypeTerm term
+          gathered = Analysis.gatherApplications stripped
+          gatherArgs = Pairs.first gathered
+          gatherFun = Pairs.second gathered
+          strippedFun = Strip.deannotateAndDetypeTerm gatherFun
+          isSelfCall =
+                  case strippedFun of
+                    Model.TermVariable v0 -> Equality.equal v0 funcName
+                    _ -> False
+      in (Logic.ifElse (Logic.and isSelfCall (Equality.equal (Lists.length gatherArgs) (Lists.length paramNames))) (
+        let changePairs =
+                Lists.filter (\pair -> Logic.not (case (Strip.deannotateAndDetypeTerm (Pairs.second pair)) of
+                  Model.TermVariable v0 -> Equality.equal v0 (Pairs.first pair)
+                  _ -> False)) (Lists.zip paramNames gatherArgs)
+            changedParams = Lists.map Pairs.first changePairs
+        in (Eithers.bind (Eithers.mapList (\pair -> encodeTerm env (Pairs.second pair) cx g) changePairs) (\jChangedArgs ->
+          let assignments =
+                  Lists.map (\pair ->
+                    let paramName = Pairs.first pair
+                        jArg = Pairs.second pair
+                    in (Syntax.BlockStatementStatement (Utils.javaAssignmentStatement (Syntax.LeftHandSideExpressionName (Utils.javaIdentifierToJavaExpressionName (Utils.variableToJavaIdentifier paramName))) jArg))) (Lists.zip changedParams jChangedArgs)
+              continueStmt =
+                      Syntax.BlockStatementStatement (Syntax.StatementWithoutTrailing (Syntax.StatementWithoutTrailingSubstatementContinue (Syntax.ContinueStatement Nothing)))
+          in (Right (Lists.concat2 assignments [
+            continueStmt]))))) (case stripped of
+        Model.TermLet v0 ->
+          let letBindings = Model.letBindings v0
+              letBody = Model.letBody v0
+          in (Eithers.bind (bindingsToStatements env letBindings cx g) (\bindResult ->
+            let letStmts = Pairs.first bindResult
+                envAfterLet = Pairs.second bindResult
+            in (Eithers.bind (encodeTermTCO envAfterLet funcName paramNames tparams tcoVarRenames tcoDepth letBody cx g) (\tcoBodyStmts -> Right (Lists.concat2 letStmts tcoBodyStmts)))))
+        _ ->
+          let gathered2 = Analysis.gatherApplications term
+              args2 = Pairs.first gathered2
+              body2 = Pairs.second gathered2
+          in (Logic.ifElse (Equality.equal (Lists.length args2) 1) (
+            let arg = Optionals.withDefault Model.TermUnit (Lists.head args2)
+            in case (Strip.deannotateAndDetypeTerm body2) of
+              Model.TermCases v0 ->
+                let aliases = JavaEnvironment.javaEnvironmentAliases env
+                    tname = Model.caseStatementTypeName v0
+                    dflt = Model.caseStatementDefault v0
+                    cases_ = Model.caseStatementCases v0
+                    tnameIsGeneric =
+                            Optionals.match (Maps.lookup tname (Graph.graphSchemaTypes g)) False (\ts -> Logic.not (Lists.isEmpty (Model.typeSchemeVariables ts)))
+                    domArgs =
+                            Logic.ifElse tnameIsGeneric (Lists.map (\tp -> Utils.typeParameterToTypeArgument (Utils.javaTypeParameter (Formatting.capitalize (Model.unName tp)))) tparams) []
+                in (Eithers.bind (encodeTerm env arg cx g) (\jArgRaw ->
+                  let depthSuffix = Logic.ifElse (Equality.equal tcoDepth 0) "" (Literals.printInt32 tcoDepth)
+                      matchVarId =
+                              Utils.javaIdentifier (Strings.concat [
+                                "_tco_match_",
+                                (Formatting.decapitalize (CoreNames.localNameOf tname)),
+                                depthSuffix])
+                      matchDecl = Utils.varDeclarationStatement matchVarId jArgRaw
+                      jArg = Utils.javaIdentifierToJavaExpression matchVarId
+                  in (Eithers.bind (Eithers.mapList (\field ->
+                    let fieldName = Model.caseAlternativeName field
+                        variantRefType =
+                                Utils.nameToJavaReferenceType aliases True domArgs tname (Just (Formatting.capitalize (Model.unName fieldName)))
+                        variantRawType = Utils.nameToJavaReferenceType aliases True [] tname (Just (Formatting.capitalize (Model.unName fieldName)))
+                    in case (Strip.deannotateTerm (Model.caseAlternativeHandler field)) of
+                      Model.TermLambda v1 -> withLambda env v1 (\env2 ->
+                        let lambdaParam = Model.lambdaParameter v1
+                            branchBody = Model.lambdaBody v1
+                            env3 = insertBranchVar lambdaParam env2
+                            varId = Utils.variableToJavaIdentifier lambdaParam
+                            castExpr =
+                                    Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression variantRefType (Utils.javaExpressionToJavaUnaryExpression jArg))
+                            localDecl = Utils.varDeclarationStatement varId castExpr
+                            isBranchTailCall = Analysis.isTailRecursiveInTailPosition funcName branchBody
+                        in (Eithers.bind (Logic.ifElse isBranchTailCall (encodeTermTCO env3 funcName paramNames tparams tcoVarRenames (Math.add tcoDepth 1) branchBody cx g) (Eithers.bind (analyzeJavaFunction env3 branchBody cx g) (\fs ->
+                          let bindings = Typing.functionStructureBindings fs
+                              innerBody = Typing.functionStructureBody fs
+                              env4 = Typing.functionStructureEnvironment fs
+                          in (Eithers.bind (bindingsToStatements env4 bindings cx g) (\bindResult ->
+                            let bindingStmts = Pairs.first bindResult
+                                env5 = Pairs.second bindResult
+                            in (Eithers.bind (encodeTerm env5 innerBody cx g) (\jret ->
+                              let returnStmt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jret))
+                              in (Right (Lists.concat2 bindingStmts [
+                                returnStmt]))))))))) (\bodyStmts ->
+                          let relExpr =
+                                  Utils.javaInstanceOf (Utils.javaUnaryExpressionToJavaRelationalExpression (Utils.javaExpressionToJavaUnaryExpression jArg)) variantRawType
+                              condExpr = Utils.javaRelationalExpressionToJavaExpression relExpr
+                              blockStmts = Lists.cons localDecl bodyStmts
+                              ifBody = Syntax.StatementWithoutTrailing (Syntax.StatementWithoutTrailingSubstatementBlock (Syntax.Block blockStmts))
+                          in (Right (Syntax.BlockStatementStatement (Syntax.StatementIfThen (Syntax.IfThenStatement {
+                            Syntax.ifThenStatementExpression = condExpr,
+                            Syntax.ifThenStatementStatement = ifBody})))))))
+                      _ -> Left (Errors.ErrorOther (Errors.OtherError "TCO: case branch is not a lambda"))) cases_) (\ifBlocks -> Eithers.bind (Optionals.match dflt (Right [
+                    Syntax.BlockStatementStatement (Utils.javaThrowIllegalStateException [
+                      Utils.javaAdditiveExpressionToJavaExpression (Utils.addExpressions [
+                        Utils.javaStringMultiplicativeExpression "Non-exhaustive patterns when matching"])])]) (\d -> Eithers.bind (encodeTerm env d cx g) (\dExpr -> Right [
+                    Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just dExpr))]))) (\defaultStmt -> Right (Lists.concat [
+                    [
+                      matchDecl],
+                    ifBlocks,
+                    defaultStmt]))))))
+              _ -> Eithers.bind (encodeTerm env term cx g) (\expr -> Right [
+                Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just expr))])) (Eithers.bind (encodeTerm env term cx g) (\expr -> Right [
+            Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just expr))])))))
+
+encodeType :: JavaEnvironment.Aliases -> S.Set Model.Name -> Model.Type -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Type
+encodeType aliases boundVars t cx g =
+
+      let inScopeTypeParams = JavaEnvironment.aliasesInScopeTypeParams aliases
+          typeVarSubst = JavaEnvironment.aliasesTypeVarSubst aliases
+      in case (Strip.deannotateType t) of
+        Model.TypeApplication v0 -> Eithers.bind (encodeType aliases boundVars (Model.applicationTypeFunction v0) cx g) (\jlhs -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.applicationTypeArgument v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jrhs -> Utils.addJavaTypeParameter jrhs jlhs cx))
+        Model.TypeFunction v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.functionTypeDomain v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jdom -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.functionTypeCodomain v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jcod -> Right (Utils.javaRefType [
+          jdom,
+          jcod] JavaNames.javaUtilFunctionPackageName "Function")))
+        Model.TypeForall v0 -> Eithers.bind (encodeType aliases (Sets.insert (Model.forallTypeParameter v0) boundVars) (Model.forallTypeBody v0) cx g) (\jbody -> Utils.addJavaTypeParameter (Utils.javaTypeVariable (Model.unName (Model.forallTypeParameter v0))) jbody cx)
+        Model.TypeList v0 -> Eithers.bind (encodeType aliases boundVars v0 cx g) (\jet -> Eithers.bind (Eithers.bind (Right jet) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\rt -> Right (Utils.javaRefType [
+          rt] JavaNames.javaUtilPackageName "List")))
+        Model.TypeEffect v0 -> encodeType aliases boundVars v0 cx g
+        Model.TypeLiteral v0 -> encodeLiteralType v0 cx g
+        Model.TypeEither v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.eitherTypeLeft v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jlt -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.eitherTypeRight v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jrt -> Right (Utils.javaRefType [
+          jlt,
+          jrt] JavaNames.hydraUtilPackageName "Either")))
+        Model.TypeMap v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.mapTypeKeys v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jkt -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.mapTypeValues v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jvt -> Right (Utils.javaRefType [
+          jkt,
+          jvt] JavaNames.javaUtilPackageName "Map")))
+        Model.TypePair v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.pairTypeFirst v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jfirst -> Eithers.bind (Eithers.bind (encodeType aliases boundVars (Model.pairTypeSecond v0) cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jsecond -> Right (Utils.javaRefType [
+          jfirst,
+          jsecond] JavaNames.hydraUtilPackageName "Pair")))
+        Model.TypeUnit -> Right (Utils.javaRefType [] JavaNames.javaLangPackageName "Void")
+        Model.TypeRecord v0 -> Logic.ifElse (Lists.isEmpty v0) (Right (Utils.javaRefType [] JavaNames.javaLangPackageName "Void")) (Left (Errors.ErrorOther (Errors.OtherError "unexpected anonymous record type")))
+        Model.TypeOptional v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars v0 cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jot -> Right (Utils.javaRefType [
+          jot] JavaNames.hydraUtilPackageName "Optional"))
+        Model.TypeSet v0 -> Eithers.bind (Eithers.bind (encodeType aliases boundVars v0 cx g) (\jt_ -> Utils.javaTypeToJavaReferenceType jt_ cx)) (\jst -> Right (Utils.javaRefType [
+          jst] JavaNames.javaUtilPackageName "Set"))
+        Model.TypeUnion _ -> Left (Errors.ErrorOther (Errors.OtherError "unexpected anonymous union type"))
+        Model.TypeVariable v0 ->
+          let name = Optionals.withDefault v0 (Maps.lookup v0 typeVarSubst)
+          in (Eithers.bind (encodeType_resolveIfTypedef aliases boundVars inScopeTypeParams name cx g) (\resolved -> Optionals.match resolved (Right (Logic.ifElse (Logic.or (Sets.member name boundVars) (Sets.member name inScopeTypeParams)) (Syntax.TypeReference (Utils.javaTypeVariable (Model.unName name))) (Logic.ifElse (isLambdaBoundVariable name) (Syntax.TypeReference (Utils.javaTypeVariable (Model.unName name))) (Logic.ifElse (isUnresolvedInferenceVar name) (Syntax.TypeReference (Syntax.ReferenceTypeClassOrInterface (Syntax.ClassOrInterfaceTypeClass (Utils.javaClassType [] JavaNames.javaLangPackageName "Object")))) (Syntax.TypeReference (Utils.nameToJavaReferenceType aliases True [] name Nothing)))))) (\resolvedType -> encodeType aliases boundVars resolvedType cx g)))
+        Model.TypeWrap _ -> Left (Errors.ErrorOther (Errors.OtherError "unexpected anonymous wrap type"))
+        _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "can't encode unsupported type in Java: " (PrintModel.type_ t))))
+
+encodeTypeDefinition :: Syntax.PackageDeclaration -> JavaEnvironment.Aliases -> Packaging.TypeDefinition -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (Model.Name, Syntax.CompilationUnit)
+encodeTypeDefinition pkg aliases tdef cx g =
+
+      let name = Packaging.typeDefinitionName tdef
+          typ = Model.typeSchemeBody (Packaging.typeDefinitionBody tdef)
+          serializable = isSerializableJavaType typ
+          imports =
+                  Logic.ifElse serializable [
+                    Syntax.ImportDeclarationSingleType (Syntax.SingleTypeImportDeclaration (Utils.javaTypeName (Syntax.Identifier "java.io.Serializable")))] []
+      in (Eithers.bind (toClassDecl False serializable aliases [] name typ cx g) (\decl -> Eithers.bind (Annotations.getTypeDescription cx g typ) (\comment ->
+        let tdecl =
+                Syntax.TopLevelClassOrInterfaceDeclarationWithComments {
+                  Syntax.topLevelClassOrInterfaceDeclarationWithCommentsValue = (Syntax.TopLevelClassOrInterfaceDeclarationClass decl),
+                  Syntax.topLevelClassOrInterfaceDeclarationWithCommentsComments = comment}
+        in (Right (
+          name,
+          (Syntax.CompilationUnitOrdinary (Syntax.OrdinaryCompilationUnit {
+            Syntax.ordinaryCompilationUnitPackage = (Just pkg),
+            Syntax.ordinaryCompilationUnitImports = imports,
+            Syntax.ordinaryCompilationUnitTypes = [
+              tdecl]})))))))
+
+encodeType_resolveIfTypedef :: t0 -> S.Set Model.Name -> S.Set Model.Name -> Model.Name -> t1 -> Graph.Graph -> Either t2 (Maybe Model.Type)
+encodeType_resolveIfTypedef aliases boundVars inScopeTypeParams name cx g =
+    Logic.ifElse (Logic.or (Sets.member name boundVars) (Sets.member name inScopeTypeParams)) (Right Nothing) (Logic.ifElse (isLambdaBoundVariable name) (Right Nothing) (
+      let schemaTypes = Graph.graphSchemaTypes g
+      in (Optionals.match (Maps.lookup name schemaTypes) (Right Nothing) (\ts -> Logic.ifElse (Logic.not (Lists.isEmpty (Model.typeSchemeVariables ts))) (Right Nothing) (case (Strip.deannotateType (Model.typeSchemeBody ts)) of
+        Model.TypeRecord _ -> Right Nothing
+        Model.TypeUnion _ -> Right Nothing
+        Model.TypeWrap _ -> Right Nothing
+        _ -> Right (Just (Model.typeSchemeBody ts)))))))
+
+encodeVariable :: JavaEnvironment.JavaEnvironment -> Model.Name -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeVariable env name cx g =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+          resolvedName = Utils.lookupJavaVarName aliases name
+          jid = Utils.javaIdentifier (Model.unName resolvedName)
+      in (Logic.ifElse (Sets.member name (JavaEnvironment.aliasesBranchVars aliases)) (Right (Utils.javaFieldAccessToJavaExpression (Syntax.FieldAccess {
+        Syntax.fieldAccessQualifier = (Syntax.FieldAccess_QualifierPrimary (Utils.javaExpressionToJavaPrimary (Utils.javaIdentifierToJavaExpression jid))),
+        Syntax.fieldAccessIdentifier = (Utils.javaIdentifier JavaNames.valueFieldName)}))) (Logic.ifElse (Logic.and (Equality.equal name (Model.Name (Strings.concat [
+        JavaNames.instanceName,
+        "_",
+        JavaNames.valueFieldName]))) (isRecursiveVariable aliases name)) (
+        let instanceExpr = Utils.javaIdentifierToJavaExpression (Utils.javaIdentifier JavaNames.instanceName)
+        in (Right (Utils.javaFieldAccessToJavaExpression (Syntax.FieldAccess {
+          Syntax.fieldAccessQualifier = (Syntax.FieldAccess_QualifierPrimary (Utils.javaExpressionToJavaPrimary instanceExpr)),
+          Syntax.fieldAccessIdentifier = (Utils.javaIdentifier JavaNames.valueFieldName)})))) (Logic.ifElse (Logic.and (isRecursiveVariable aliases name) (Logic.not (isLambdaBoundIn name (JavaEnvironment.aliasesLambdaVars aliases)))) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Left (Syntax.ExpressionName {
+        Syntax.expressionNameQualifier = Nothing,
+        Syntax.expressionNameIdentifier = jid}))) (Syntax.Identifier JavaNames.getMethodName) []))) (Logic.ifElse (Logic.and (Sets.member name (JavaEnvironment.aliasesThunkedVars aliases)) (Logic.not (isLambdaBoundIn name (JavaEnvironment.aliasesLambdaVars aliases)))) (Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation (Just (Left (Syntax.ExpressionName {
+        Syntax.expressionNameQualifier = Nothing,
+        Syntax.expressionNameIdentifier = jid}))) (Syntax.Identifier JavaNames.getMethodName) []))) (Logic.ifElse (isLambdaBoundIn name (JavaEnvironment.aliasesLambdaVars aliases)) (
+        let actualName = findMatchingLambdaVar name (JavaEnvironment.aliasesLambdaVars aliases)
+            resolvedActual = Utils.lookupJavaVarName aliases actualName
+        in (Right (Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier resolvedActual)))) (Logic.ifElse (Sets.member name (JavaEnvironment.aliasesInScopeJavaVars aliases)) (Right (Utils.javaIdentifierToJavaExpression (elementJavaIdentifier False False aliases resolvedName))) (Eithers.bind (classifyDataReference name cx g) (\cls -> case cls of
+        JavaEnvironment.JavaSymbolClassHoistedLambda v0 -> encodeVariable_hoistedLambdaCase aliases name v0 cx g
+        JavaEnvironment.JavaSymbolClassLocalVariable -> Right (Utils.javaIdentifierToJavaExpression (elementJavaIdentifier False False aliases resolvedName))
+        JavaEnvironment.JavaSymbolClassConstant -> Right (Utils.javaIdentifierToJavaExpression (elementJavaIdentifier False False aliases name))
+        JavaEnvironment.JavaSymbolClassNullaryFunction -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation Nothing (elementJavaIdentifier False False aliases name) []))
+        JavaEnvironment.JavaSymbolClassUnaryFunction -> Right (Utils.javaIdentifierToJavaExpression (elementJavaIdentifier False True aliases name))))))))))
+
+encodeVariable_buildCurried :: [Model.Name] -> Syntax.Expression -> Syntax.Expression
+encodeVariable_buildCurried params inner =
+    Optionals.withDefault inner (Optionals.map (\p -> Utils.javaLambda (Pairs.first p) (encodeVariable_buildCurried (Pairs.second p) inner)) (Lists.uncons params))
+
+encodeVariable_hoistedLambdaCase :: JavaEnvironment.Aliases -> Model.Name -> Int -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeVariable_hoistedLambdaCase aliases name arity cx g =
+
+      let paramNames = Lists.map (\i -> Model.Name (Strings.concat2 "p" (Literals.printInt32 i))) (Math.range 0 arity)
+          paramExprs = Lists.map (\pn -> Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier pn)) paramNames
+          call =
+                  Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation Nothing (elementJavaIdentifier False False aliases name) paramExprs)
+          lam = encodeVariable_buildCurried paramNames call
+      in (Eithers.bind (Right (Lexical.lookupBinding g name)) (\mel -> Optionals.match mel (Right lam) (\el -> Optionals.match (Model.bindingTypeScheme el) (Right lam) (\ts ->
+        let typ = Model.typeSchemeBody ts
+        in (Eithers.bind (encodeType aliases Sets.empty typ cx g) (\jtype -> Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt -> Right (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression rt (Utils.javaExpressionToJavaUnaryExpression lam))))))))))
+
+eqClause :: String -> Model.FieldType -> Syntax.InclusiveOrExpression
+eqClause tmpName ft =
+
+      let fname = Model.unName (Model.fieldTypeName ft)
+          ftype = Model.fieldTypeType ft
+      in (Logic.ifElse (isBinaryType ftype) (arraysEqualsClause tmpName fname) (Logic.ifElse (isBigIntegerType ftype) (compareToZeroClause tmpName fname) (equalsClause tmpName fname)))
+
+equalsClause :: String -> String -> Syntax.InclusiveOrExpression
+equalsClause tmpName fname =
+
+      let thisArg =
+              Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Syntax.Identifier "this") (Utils.javaIdentifier fname))
+          otherArg =
+                  Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Utils.javaIdentifier tmpName) (Utils.javaIdentifier fname))
+          header =
+                  Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+                    Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "java.util.Objects"))),
+                    Syntax.methodInvocation_ComplexTypeArguments = [],
+                    Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.equalsMethodName)})
+      in (Utils.javaPostfixExpressionToJavaInclusiveOrExpression (Utils.javaMethodInvocationToJavaPostfixExpression (Syntax.MethodInvocation {
+        Syntax.methodInvocationHeader = header,
+        Syntax.methodInvocationArguments = [
+          thisArg,
+          otherArg]})))
+
+explicitTypeArguments :: [Syntax.TypeArgument] -> Syntax.TypeArgumentsOrDiamond
+explicitTypeArguments args = Syntax.TypeArgumentsOrDiamondArguments args
+
+extractArgType :: t0 -> Model.Type -> Model.Type
+extractArgType _lhs typ =
+    case typ of
+      Model.TypeApplication v0 -> case (Model.applicationTypeFunction v0) of
+        Model.TypeApplication _ -> Model.applicationTypeArgument v0
+        _ -> typ
+      _ -> typ
+
+extractDirectReturn :: S.Set Model.Name -> Model.Type -> [(Model.Name, Model.Name)]
+extractDirectReturn tparamSet t = extractDirectReturn_go tparamSet t
+
+extractDirectReturn_go :: S.Set Model.Name -> Model.Type -> [(Model.Name, Model.Name)]
+extractDirectReturn_go tparamSet t =
+    case (Strip.deannotateType t) of
+      Model.TypeFunction v0 ->
+        let dom = Strip.deannotateType (Model.functionTypeDomain v0)
+            cod = Model.functionTypeCodomain v0
+        in case dom of
+          Model.TypeVariable v1 -> Logic.ifElse (Sets.member v1 tparamSet) (case (Strip.deannotateType cod) of
+            Model.TypeFunction v2 ->
+              let midArg = Strip.deannotateType (Model.functionTypeDomain v2)
+                  retPart = Strip.deannotateType (Model.functionTypeCodomain v2)
+              in case midArg of
+                Model.TypeVariable v3 -> Logic.ifElse (Sets.member v3 tparamSet) [] (case retPart of
+                  Model.TypeVariable v4 -> Logic.ifElse (Sets.member v4 tparamSet) [
+                    (v1, v4)] []
+                  _ -> [])
+                _ -> case retPart of
+                  Model.TypeVariable v3 -> Logic.ifElse (Sets.member v3 tparamSet) [
+                    (v1, v3)] []
+                  _ -> []
+            _ -> []) (extractDirectReturn_go tparamSet cod)
+          _ -> extractDirectReturn_go tparamSet cod
+      _ -> []
+
+extractInOutPair :: Model.Type -> [(Model.Name, Model.Name)]
+extractInOutPair t =
+    case (Strip.deannotateType t) of
+      Model.TypeFunction v0 -> case (Strip.deannotateType (Model.functionTypeDomain v0)) of
+        Model.TypeVariable v1 ->
+          let retType = unwrapReturnType (Model.functionTypeCodomain v0)
+          in case (Strip.deannotateType retType) of
+            Model.TypePair v2 -> case (Strip.deannotateType (Model.pairTypeFirst v2)) of
+              Model.TypeVariable v3 -> [
+                (v1, v3)]
+              _ -> []
+            _ -> []
+        _ -> []
+      _ -> []
+
+extractTypeApplicationArgs :: Model.Type -> [Model.Type]
+extractTypeApplicationArgs typ = Lists.reverse (extractTypeApplicationArgs_go typ)
+
+extractTypeApplicationArgs_go :: Model.Type -> [Model.Type]
+extractTypeApplicationArgs_go t =
+    case t of
+      Model.TypeApplication v0 -> Lists.cons (Model.applicationTypeArgument v0) (extractTypeApplicationArgs_go (Model.applicationTypeFunction v0))
+      _ -> []
+
+fieldToStringPart :: Model.FieldType -> [Syntax.MultiplicativeExpression]
+fieldToStringPart f =
+
+      let fname = Model.unName (Model.fieldTypeName f)
+          nameLiteral = Utils.javaStringMultiplicativeExpression (Strings.concat2 fname "=")
+          valueExpr =
+                  Syntax.MultiplicativeExpressionUnary (Utils.javaExpressionToJavaUnaryExpression (Utils.javaExpressionNameToJavaExpression (Utils.fieldExpression (Syntax.Identifier "this") (Utils.javaIdentifier fname))))
+      in [
+        Utils.javaStringMultiplicativeExpression ", ",
+        nameLiteral,
+        valueExpr]
+
+fieldTypeToFormalParam :: JavaEnvironment.Aliases -> Model.FieldType -> t0 -> Graph.Graph -> Either Errors.Error Syntax.FormalParameter
+fieldTypeToFormalParam aliases ft cx g =
+    Eithers.bind (encodeType aliases Sets.empty (Model.fieldTypeType ft) cx g) (\jt -> Right (Utils.javaTypeToJavaFormalParameter jt (Model.fieldTypeName ft)))
+
+filterByFlags :: [t0] -> [Bool] -> [t0]
+filterByFlags xs flags = Lists.map (\p -> Pairs.first p) (Lists.filter (\p -> Pairs.second p) (Lists.zip xs flags))
+
+filterPhantomTypeArgs :: Model.Name -> [Model.Type] -> t0 -> Graph.Graph -> Either t1 [Model.Type]
+filterPhantomTypeArgs calleeName allTypeArgs cx g =
+    Eithers.bind (Right (Lexical.lookupBinding g calleeName)) (\mel -> Optionals.match mel (Right allTypeArgs) (\el -> Optionals.match (Model.bindingTypeScheme el) (Right allTypeArgs) (\ts ->
+      let schemeVars = Lists.filter (\v -> isSimpleName v) (Model.typeSchemeVariables ts)
+          schemeTypeVars = collectTypeVars (Model.typeSchemeBody ts)
+          schemeType = Model.typeSchemeBody ts
+          nParams = countFunctionParams schemeType
+          peeled = peelDomainTypes nParams schemeType
+          calleeDoms = Pairs.first peeled
+          calleeCod = Pairs.second peeled
+          overgenSubst = detectAccumulatorUnification calleeDoms calleeCod schemeVars
+          keepFlags = Lists.map (\v -> Logic.and (Sets.member v schemeTypeVars) (Logic.not (Maps.member v overgenSubst))) schemeVars
+      in (Logic.ifElse (Logic.not (Equality.equal (Lists.length schemeVars) (Lists.length allTypeArgs))) (Right allTypeArgs) (Right (filterPhantomTypeArgs_filterAndApply allTypeArgs keepFlags overgenSubst))))))
+
+filterPhantomTypeArgs_filterAndApply :: [Model.Type] -> [Bool] -> M.Map Model.Name Model.Type -> [Model.Type]
+filterPhantomTypeArgs_filterAndApply allTypeArgs keepFlags overgenSubst =
+
+      let filtered = Lists.map (\p -> Pairs.first p) (Lists.filter (\p -> Pairs.second p) (Lists.zip allTypeArgs keepFlags))
+      in (Logic.ifElse (Logic.not (Maps.isEmpty overgenSubst)) (Lists.map (\t -> substituteTypeVarsWithTypes overgenSubst t) filtered) filtered)
+
+findMatchingLambdaVar :: Model.Name -> S.Set Model.Name -> Model.Name
+findMatchingLambdaVar name lambdaVars =
+    Logic.ifElse (Sets.member name lambdaVars) name (Logic.ifElse (isLambdaBoundIn_isQualified name) (Optionals.withDefault name (Lists.find (\lv -> Logic.and (isLambdaBoundIn_isQualified lv) (Equality.equal (CoreNames.localNameOf lv) (CoreNames.localNameOf name))) (Sets.toList lambdaVars))) (Logic.ifElse (Sets.member (Model.Name (CoreNames.localNameOf name)) lambdaVars) (Model.Name (CoreNames.localNameOf name)) name))
+
+findPairFirst :: Model.Type -> Maybe Model.Name
+findPairFirst t =
+    case (Strip.deannotateType t) of
+      Model.TypePair v0 -> case (Strip.deannotateType (Model.pairTypeFirst v0)) of
+        Model.TypeVariable v1 -> Just v1
+        _ -> Nothing
+      _ -> Nothing
+
+findSelfRefVar :: (Eq t0, Ord t0) => (M.Map t0 [t0] -> Maybe t0)
+findSelfRefVar grouped =
+
+      let selfRefs = Lists.filter (\entry -> Lists.member (Pairs.first entry) (Pairs.second entry)) (Maps.toList grouped)
+      in (Optionals.map (\entry -> Pairs.first entry) (Lists.head selfRefs))
+
+first20Primes :: [Integer]
+first20Primes =
+    [
+      2,
+      3,
+      5,
+      7,
+      11,
+      13,
+      17,
+      19,
+      23,
+      29,
+      31,
+      37,
+      41,
+      43,
+      47,
+      53,
+      59,
+      61,
+      67,
+      71]
+
+flattenApps :: Model.Term -> [Model.Term] -> ([Model.Term], Model.Term)
+flattenApps t acc =
+    case (Strip.deannotateTerm t) of
+      Model.TermApplication v0 -> flattenApps (Model.applicationFunction v0) (Lists.cons (Model.applicationArgument v0) acc)
+      _ -> (acc, t)
+
+flattenBindings :: [Model.Binding] -> [Model.Binding]
+flattenBindings bindings =
+    Lists.bind bindings (\b -> case (Strip.deannotateTerm (Model.bindingTerm b)) of
+      Model.TermLet v0 -> Lists.concat2 (flattenBindings (Model.letBindings v0)) [
+        Model.Binding {
+          Model.bindingName = (Model.bindingName b),
+          Model.bindingTerm = (Model.letBody v0),
+          Model.bindingTypeScheme = (Model.bindingTypeScheme b)}]
+      _ -> [
+        b])
+
+freshJavaName :: Model.Name -> S.Set Model.Name -> Model.Name
+freshJavaName base avoid = freshJavaName_go base avoid 2
+
+freshJavaName_go :: Model.Name -> S.Set Model.Name -> Int -> Model.Name
+freshJavaName_go base avoid i =
+
+      let candidate = Model.Name (Strings.concat2 (Model.unName base) (Literals.printInt32 i))
+      in (Logic.ifElse (Sets.member candidate avoid) (freshJavaName_go base avoid (Math.add i 1)) candidate)
+
+functionCall :: JavaEnvironment.JavaEnvironment -> Bool -> Model.Name -> [Model.Term] -> [Model.Type] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+functionCall env isPrim name args typeApps cx g =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+          isLambdaBound = isLambdaBoundIn name (JavaEnvironment.aliasesLambdaVars aliases)
+      in (Eithers.bind (Eithers.mapList (\arg -> encodeTerm env arg cx g) args) (\jargs0 ->
+        let wrapResult = wrapLazyArguments g name jargs0
+            jargs = Pairs.first wrapResult
+            mMethodOverride = Pairs.second wrapResult
+        in (Logic.ifElse (Logic.or (isLocalVariable name) isLambdaBound) (Eithers.bind (encodeVariable env name cx g) (\baseExpr -> Right (Lists.foldl (\acc -> \jarg -> applyJavaArg acc jarg) baseExpr jargs))) (
+          let overrideMethodName =
+                  \jid -> Optionals.match mMethodOverride jid (\m ->
+                    let s = Syntax.unIdentifier jid
+                    in (Syntax.Identifier (Strings.concat2 (Strings.fromList (Lists.take (Math.sub (Strings.length s) (Strings.length JavaNames.applyMethodName)) (Strings.toList s))) m)))
+          in (Logic.ifElse (Lists.isEmpty typeApps) (
+            let header =
+                    Syntax.MethodInvocation_HeaderSimple (Syntax.MethodName (overrideMethodName (elementJavaIdentifier isPrim False aliases name)))
+            in (Right (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
+              Syntax.methodInvocationHeader = header,
+              Syntax.methodInvocationArguments = jargs})))) (
+            let qn = CoreNames.qualifyName name
+                mns = Util.qualifiedNameModuleName qn
+                localName = Util.qualifiedNameLocal qn
+            in (Optionals.match mns (
+              let header =
+                      Syntax.MethodInvocation_HeaderSimple (Syntax.MethodName (overrideMethodName (elementJavaIdentifier isPrim False aliases name)))
+              in (Right (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
+                Syntax.methodInvocationHeader = header,
+                Syntax.methodInvocationArguments = jargs})))) (\ns_ ->
+              let classId = Utils.nameToJavaName aliases (elementsQualifiedName ns_)
+                  methodId =
+                          Logic.ifElse isPrim (overrideMethodName (Syntax.Identifier (Strings.concat2 (Syntax.unIdentifier (Utils.nameToJavaName aliases (CoreNames.unqualifyName (Util.QualifiedName {
+                            Util.qualifiedNameModuleName = (Just ns_),
+                            Util.qualifiedNameLocal = (Formatting.capitalize localName)})))) (Strings.concat2 "." JavaNames.applyMethodName)))) (Syntax.Identifier (Utils.sanitizeJavaName localName))
+              in (Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) typeApps) (\jTypeArgs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs classId methodId jTypeArgs jargs))))))))))))
+
+getCodomain :: M.Map Model.Name Model.Term -> t0 -> Graph.Graph -> Either Errors.Error Model.Type
+getCodomain ann cx g = Eithers.map (\ft -> Model.functionTypeCodomain ft) (getFunctionType ann cx g)
+
+getFunctionType :: M.Map Model.Name Model.Term -> t0 -> Graph.Graph -> Either Errors.Error Model.FunctionType
+getFunctionType ann cx g =
+    Eithers.bind (Eithers.bimap (\_de -> Errors.ErrorOther (Errors.OtherError (Errors.unDecodingError _de))) (\_a -> _a) (Annotations.getType g ann)) (\mt -> Optionals.match mt (Left (Errors.ErrorOther (Errors.OtherError "type annotation is required for function and elimination terms in Java"))) (\t -> case t of
+      Model.TypeFunction v0 -> Right v0
+      _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "expected function type, got: " (PrintModel.type_ t))))))
+
+groupPairsByFirst :: Ord t0 => ([(t0, t1)] -> M.Map t0 [t1])
+groupPairsByFirst pairs =
+    Lists.foldl (\m -> \p ->
+      let k = Pairs.first p
+          v = Pairs.second p
+      in (Maps.alter (\mv -> Optionals.match mv (Just [
+        v]) (\vs -> Just (Lists.concat2 vs [
+        v]))) k m)) Maps.empty pairs
+
+hashCodeCompareExpr :: String -> String -> Syntax.Expression
+hashCodeCompareExpr otherVar fname =
+
+      let header =
+              Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+                Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "Integer"))),
+                Syntax.methodInvocation_ComplexTypeArguments = [],
+                Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier "compare")})
+          thisHashCode =
+                  Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
+                    Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+                      Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantExpression (Syntax.ExpressionName {
+                        Syntax.expressionNameQualifier = Nothing,
+                        Syntax.expressionNameIdentifier = (Syntax.Identifier (Utils.sanitizeJavaName fname))})),
+                      Syntax.methodInvocation_ComplexTypeArguments = [],
+                      Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hashCodeMethodName)})),
+                    Syntax.methodInvocationArguments = []})
+          otherHashCode =
+                  Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
+                    Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+                      Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantExpression (Utils.fieldExpression (Utils.javaIdentifier otherVar) (Utils.javaIdentifier fname))),
+                      Syntax.methodInvocation_ComplexTypeArguments = [],
+                      Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hashCodeMethodName)})),
+                    Syntax.methodInvocationArguments = []})
+      in (Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
+        Syntax.methodInvocationHeader = header,
+        Syntax.methodInvocationArguments = [
+          thisHashCode,
+          otherHashCode]}))
+
+hashCodeMultPair :: Integer -> Model.Name -> Syntax.MultiplicativeExpression
+hashCodeMultPair i fname =
+
+      let fnameStr = Model.unName fname
+          lhs =
+                  Syntax.MultiplicativeExpressionUnary (Utils.javaPrimaryToJavaUnaryExpression (Utils.javaLiteralToJavaPrimary (Utils.javaInt i)))
+          rhs =
+                  Utils.javaPostfixExpressionToJavaUnaryExpression (Utils.javaMethodInvocationToJavaPostfixExpression (Syntax.MethodInvocation {
+                    Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+                      Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "java.util.Objects"))),
+                      Syntax.methodInvocation_ComplexTypeArguments = [],
+                      Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hashCodeMethodName)})),
+                    Syntax.methodInvocationArguments = [
+                      Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
+                        Syntax.expressionNameQualifier = Nothing,
+                        Syntax.expressionNameIdentifier = (Syntax.Identifier (Utils.sanitizeJavaName fnameStr))})]}))
+      in (Syntax.MultiplicativeExpressionTimes (Syntax.MultiplicativeExpression_Binary {
+        Syntax.multiplicativeExpression_BinaryLhs = lhs,
+        Syntax.multiplicativeExpression_BinaryRhs = rhs}))
+
+hydraOrdinalMethod :: Maybe Int -> Syntax.ClassBodyDeclaration
+hydraOrdinalMethod ordinal =
+
+      let mods =
+              Logic.ifElse (Optionals.isNone ordinal) [
+                Syntax.MethodModifierPublic,
+                Syntax.MethodModifierAbstract] [
+                Syntax.MethodModifierPublic]
+          anns = Logic.ifElse (Optionals.isNone ordinal) [] [
+                Utils.overrideAnnotation]
+          result = Utils.javaTypeToJavaResult Utils.javaIntType
+          body =
+                  Optionals.map (\n -> [
+                    Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaIntExpression (Literals.int32ToBigint n))))]) ordinal
+      in (Utils.methodDeclaration mods [] anns JavaNames.hydraOrdinalMethodName [] result body)
+
+innerClassRef :: JavaEnvironment.Aliases -> Model.Name -> String -> Syntax.Identifier
+innerClassRef aliases name local =
+
+      let id = Syntax.unIdentifier (Utils.nameToJavaName aliases name)
+      in (Syntax.Identifier (Strings.concat2 (Strings.concat2 id ".") local))
+
+insertBranchVar :: Model.Name -> JavaEnvironment.JavaEnvironment -> JavaEnvironment.JavaEnvironment
+insertBranchVar name env =
+
+      let aliases = JavaEnvironment.javaEnvironmentAliases env
+      in JavaEnvironment.JavaEnvironment {
+        JavaEnvironment.javaEnvironmentAliases = JavaEnvironment.Aliases {
+          JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases),
+          JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases),
+          JavaEnvironment.aliasesBranchVars = (Sets.insert name (JavaEnvironment.aliasesBranchVars aliases)),
+          JavaEnvironment.aliasesRecursiveVars = (JavaEnvironment.aliasesRecursiveVars aliases),
+          JavaEnvironment.aliasesInScopeTypeParams = (JavaEnvironment.aliasesInScopeTypeParams aliases),
+          JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases),
+          JavaEnvironment.aliasesInScopeJavaVars = (JavaEnvironment.aliasesInScopeJavaVars aliases),
+          JavaEnvironment.aliasesVarRenames = (JavaEnvironment.aliasesVarRenames aliases),
+          JavaEnvironment.aliasesLambdaVars = (JavaEnvironment.aliasesLambdaVars aliases),
+          JavaEnvironment.aliasesTypeVarSubst = (JavaEnvironment.aliasesTypeVarSubst aliases),
+          JavaEnvironment.aliasesTrustedTypeVars = (JavaEnvironment.aliasesTrustedTypeVars aliases),
+          JavaEnvironment.aliasesMethodCodomain = Nothing,
+          JavaEnvironment.aliasesThunkedVars = (JavaEnvironment.aliasesThunkedVars aliases)},
+        JavaEnvironment.javaEnvironmentGraph = (JavaEnvironment.javaEnvironmentGraph env)}
+
+interfaceTypes :: Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Model.Name -> [Syntax.InterfaceType]
+interfaceTypes isSer aliases tparams elName =
+
+      let javaSerializableType =
+              Syntax.InterfaceType (Syntax.ClassType {
+                Syntax.classTypeAnnotations = [],
+                Syntax.classTypeQualifier = Syntax.ClassTypeQualifierNone,
+                Syntax.classTypeIdentifier = (Utils.javaTypeIdentifier "Serializable"),
+                Syntax.classTypeArguments = []})
+          selfTypeArg =
+                  Syntax.TypeArgumentReference (Utils.nameToJavaReferenceType aliases False (Lists.map (\tp_ -> Utils.typeParameterToTypeArgument tp_) tparams) elName Nothing)
+          javaComparableType =
+                  Syntax.InterfaceType (Syntax.ClassType {
+                    Syntax.classTypeAnnotations = [],
+                    Syntax.classTypeQualifier = Syntax.ClassTypeQualifierNone,
+                    Syntax.classTypeIdentifier = (Utils.javaTypeIdentifier "Comparable"),
+                    Syntax.classTypeArguments = [
+                      selfTypeArg]})
+      in (Logic.ifElse isSer [
+        javaSerializableType,
+        javaComparableType] [])
+
+isBigIntegerType :: Model.Type -> Bool
+isBigIntegerType typ =
+    case (Strip.deannotateType typ) of
+      Model.TypeLiteral v0 -> case v0 of
+        Model.LiteralTypeInteger v1 -> case v1 of
+          Model.IntegerTypeBigint -> True
+          _ -> False
+        _ -> False
+      _ -> False
+
+isBinaryType :: Model.Type -> Bool
+isBinaryType typ =
+    case (Strip.deannotateType typ) of
+      Model.TypeLiteral v0 -> case v0 of
+        Model.LiteralTypeBinary -> True
+        _ -> False
+      _ -> False
+
+isFieldUnitType :: Model.Name -> Model.Name -> t0 -> Graph.Graph -> Either t1 Bool
+isFieldUnitType typeName fieldName cx g =
+
+      let schemaTypes = Graph.graphSchemaTypes g
+      in (Optionals.match (Maps.lookup typeName schemaTypes) (Right False) (\ts -> case (Strip.deannotateType (Model.typeSchemeBody ts)) of
+        Model.TypeUnion v0 -> Right (Optionals.match (Lists.find (\ft -> Equality.equal (Model.fieldTypeName ft) fieldName) v0) False (\ft -> Predicates.isUnitType (Strip.deannotateType (Model.fieldTypeType ft))))
+        _ -> Right False))
+
+isLambdaBoundIn :: Model.Name -> S.Set Model.Name -> Bool
+isLambdaBoundIn name lambdaVars =
+    Logic.or (Sets.member name lambdaVars) (Logic.or (Logic.and (isLambdaBoundIn_isQualified name) (Optionals.isGiven (Lists.find (\lv -> Logic.and (isLambdaBoundIn_isQualified lv) (Equality.equal (CoreNames.localNameOf lv) (CoreNames.localNameOf name))) (Sets.toList lambdaVars)))) (Logic.and (Logic.not (isLambdaBoundIn_isQualified name)) (Sets.member (Model.Name (CoreNames.localNameOf name)) lambdaVars)))
+
+isLambdaBoundIn_isQualified :: Model.Name -> Bool
+isLambdaBoundIn_isQualified n = Optionals.isGiven (Util.qualifiedNameModuleName (CoreNames.qualifyName n))
+
+isLambdaBoundVariable :: Model.Name -> Bool
+isLambdaBoundVariable name =
+
+      let v = Model.unName name
+      in (Ordering.lte (Strings.length v) 4)
+
+isLocalVariable :: Model.Name -> Bool
+isLocalVariable name = Optionals.isNone (Util.qualifiedNameModuleName (CoreNames.qualifyName name))
+
+isNonComparableType :: Model.Type -> Bool
+isNonComparableType typ =
+    case (Strip.deannotateType typ) of
+      Model.TypeEither _ -> True
+      Model.TypeFunction _ -> True
+      Model.TypeUnit -> True
+      Model.TypeLiteral v0 -> case v0 of
+        Model.LiteralTypeBinary -> True
+        _ -> False
+      Model.TypeForall v0 -> isNonComparableType (Model.forallTypeBody v0)
+      _ -> False
+
+isRecursiveVariable :: JavaEnvironment.Aliases -> Model.Name -> Bool
+isRecursiveVariable aliases name = Sets.member name (JavaEnvironment.aliasesRecursiveVars aliases)
+
+isSerializableJavaType :: Model.Type -> Bool
+isSerializableJavaType typ = Predicates.isNominalType typ
+
+isSimpleName :: Model.Name -> Bool
+isSimpleName name = Equality.equal (Lists.length (Strings.splitOn "." (Model.unName name))) 1
+
+isUnresolvedInferenceVar :: Model.Name -> Bool
+isUnresolvedInferenceVar name =
+
+      let chars = Strings.toList (Model.unName name)
+      in (Optionals.withDefault False (Optionals.map (\p ->
+        let firstCh = Pairs.first p
+            rest = Pairs.second p
+        in (Logic.ifElse (Logic.not (Equality.equal firstCh 116)) False (Logic.and (Logic.not (Lists.isEmpty rest)) (Lists.isEmpty (Lists.filter (\c -> Logic.not (isUnresolvedInferenceVar_isDigit c)) rest))))) (Lists.uncons chars)))
+
+isUnresolvedInferenceVar_isDigit :: Int -> Bool
+isUnresolvedInferenceVar_isDigit c = Logic.and (Ordering.gte c 48) (Ordering.lte c 57)
+
+java11Features :: JavaEnvironment.JavaFeatures
+java11Features = JavaEnvironment.JavaFeatures {
+  JavaEnvironment.javaFeaturesSupportsDiamondOperator = True}
+
+java8Features :: JavaEnvironment.JavaFeatures
+java8Features = JavaEnvironment.JavaFeatures {
+  JavaEnvironment.javaFeaturesSupportsDiamondOperator = False}
+
+javaComparableRefType :: Syntax.ReferenceType
+javaComparableRefType =
+    Syntax.ReferenceTypeClassOrInterface (Syntax.ClassOrInterfaceTypeClass (Syntax.ClassType {
+      Syntax.classTypeAnnotations = [],
+      Syntax.classTypeQualifier = Syntax.ClassTypeQualifierNone,
+      Syntax.classTypeIdentifier = (Utils.javaTypeIdentifier "Comparable"),
+      Syntax.classTypeArguments = []}))
+
+javaEnvGetGraph :: JavaEnvironment.JavaEnvironment -> Graph.Graph
+javaEnvGetGraph env = JavaEnvironment.javaEnvironmentGraph env
+
+javaEnvSetGraph :: Graph.Graph -> JavaEnvironment.JavaEnvironment -> JavaEnvironment.JavaEnvironment
+javaEnvSetGraph g env =
+    JavaEnvironment.JavaEnvironment {
+      JavaEnvironment.javaEnvironmentAliases = (JavaEnvironment.javaEnvironmentAliases env),
+      JavaEnvironment.javaEnvironmentGraph = g}
+
+javaFeatures :: JavaEnvironment.JavaFeatures
+javaFeatures = java11Features
+
+javaIdentifierToString :: Syntax.Identifier -> String
+javaIdentifierToString id = Syntax.unIdentifier id
+
+javaTypeArgumentsForNamedType :: Model.Name -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.TypeArgument]
+javaTypeArgumentsForNamedType tname cx g =
+    Eithers.bind (Resolution.requireType cx g tname) (\typ -> Right (Lists.map (\tp_ -> Utils.typeParameterToTypeArgument tp_) (javaTypeParametersForType typ)))
+
+javaTypeArgumentsForType :: Model.Type -> [Syntax.TypeArgument]
+javaTypeArgumentsForType typ = Lists.reverse (Lists.map Utils.typeParameterToTypeArgument (javaTypeParametersForType typ))
+
+javaTypeParametersForType :: Model.Type -> [Syntax.TypeParameter]
+javaTypeParametersForType typ =
+
+      let toParam = \name -> Utils.javaTypeParameter (Formatting.capitalize (Model.unName name))
+          boundVars = javaTypeParametersForType_bvars typ
+          freeVars = Lists.filter (\v -> isLambdaBoundVariable v) (Sets.toList (Variables.freeVariablesInType typ))
+          vars = Lists.distinct (Lists.concat2 boundVars freeVars)
+      in (Lists.map toParam vars)
+
+javaTypeParametersForType_bvars :: Model.Type -> [Model.Name]
+javaTypeParametersForType_bvars t =
+    case t of
+      Model.TypeForall v0 -> Lists.cons (Model.forallTypeParameter v0) (javaTypeParametersForType_bvars (Model.forallTypeBody v0))
+      _ -> []
+
+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))))
+
+moduleToJava :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map String String)
+moduleToJava overlaySubs mod defs cx g =
+    Eithers.bind (encodeDefinitions overlaySubs mod defs cx g) (\units -> Right (Maps.fromList (Lists.map (\entry ->
+      let name = Pairs.first entry
+          unit = Pairs.second entry
+      in (bindingNameToFilePath name, (Serialization.printExpr (Serialization.parenthesize (Serde.compilationUnitToExpr unit))))) (Maps.toList units))))
+
+nameMapToTypeMap :: Ord t0 => (M.Map t0 Model.Name -> M.Map t0 Model.Type)
+nameMapToTypeMap m = Maps.map (\v -> Model.TypeVariable v) m
+
+namespaceParent :: Packaging.ModuleName -> Maybe Packaging.ModuleName
+namespaceParent ns =
+
+      let parts = Strings.splitOn "." (Packaging.unModuleName ns)
+          initParts = Optionals.withDefault [] (Lists.init parts)
+      in (Logic.ifElse (Lists.isEmpty initParts) Nothing (Just (Packaging.ModuleName (Strings.join "." initParts))))
+
+noComment :: Syntax.ClassBodyDeclaration -> Syntax.ClassBodyDeclarationWithComments
+noComment decl =
+    Syntax.ClassBodyDeclarationWithComments {
+      Syntax.classBodyDeclarationWithCommentsValue = decl,
+      Syntax.classBodyDeclarationWithCommentsComments = Nothing}
+
+noInterfaceComment :: Syntax.InterfaceMemberDeclaration -> Syntax.InterfaceMemberDeclarationWithComments
+noInterfaceComment decl =
+    Syntax.InterfaceMemberDeclarationWithComments {
+      Syntax.interfaceMemberDeclarationWithCommentsValue = decl,
+      Syntax.interfaceMemberDeclarationWithCommentsComments = Nothing}
+
+otherwiseBranch :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> Model.Type -> Model.Type -> Model.Name -> Syntax.Type -> [Syntax.TypeArgument] -> Model.Term -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
+otherwiseBranch env aliases dom cod tname jcod targs d cx g =
+
+      let jdom = Syntax.TypeReference (Utils.nameToJavaReferenceType aliases True targs tname Nothing)
+          mods = [
+                Syntax.MethodModifierPublic]
+          anns = [
+                Utils.overrideAnnotation]
+          param = Utils.javaTypeToJavaFormalParameter jdom (Model.Name "instance")
+          result = Syntax.ResultType (Syntax.UnannType jcod)
+      in (Eithers.bind (analyzeJavaFunction env d cx g) (\fs ->
+        let bindings = Typing.functionStructureBindings fs
+            rawBody = Typing.functionStructureBody fs
+            innerBody = annotateBodyWithCod cod rawBody
+            env2 = Typing.functionStructureEnvironment fs
+        in (Eithers.bind (bindingsToStatements env2 bindings cx g) (\bindResult ->
+          let bindingStmts = Pairs.first bindResult
+              env3 = Pairs.second bindResult
+          in (Eithers.bind (encodeTerm env3 innerBody cx g) (\jret ->
+            let returnStmt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jret))
+                allStmts = Lists.concat2 bindingStmts [
+                      returnStmt]
+            in (Right (noComment (Utils.methodDeclaration mods [] anns JavaNames.otherwiseMethodName [
+              param] result (Just allStmts))))))))))
+
+peelDomainTypes :: Int -> Model.Type -> ([Model.Type], Model.Type)
+peelDomainTypes n t =
+    Logic.ifElse (Ordering.lte n 0) ([], t) (case (Strip.deannotateType t) of
+      Model.TypeFunction v0 ->
+        let rest = peelDomainTypes (Math.sub n 1) (Model.functionTypeCodomain v0)
+        in (Lists.cons (Model.functionTypeDomain v0) (Pairs.first rest), (Pairs.second rest))
+      _ -> ([], t))
+
+peelDomainsAndCod :: Int -> Model.Type -> ([Model.Type], Model.Type)
+peelDomainsAndCod n t =
+    Logic.ifElse (Ordering.lte n 0) ([], t) (case (Strip.deannotateType t) of
+      Model.TypeFunction v0 ->
+        let rest = peelDomainsAndCod (Math.sub n 1) (Model.functionTypeCodomain v0)
+        in (Lists.cons (Model.functionTypeDomain v0) (Pairs.first rest), (Pairs.second rest))
+      _ -> ([], t))
+
+peelExpectedTypes :: M.Map Model.Name Model.Type -> Int -> Model.Type -> [Model.Type]
+peelExpectedTypes subst n t =
+    Logic.ifElse (Equality.equal n 0) [] (case (Strip.deannotateType t) of
+      Model.TypeFunction v0 -> Lists.cons (applySubstFull subst (Model.functionTypeDomain v0)) (peelExpectedTypes subst (Math.sub n 1) (Model.functionTypeCodomain v0))
+      _ -> [])
+
+propagateType :: Model.Type -> Model.Term -> Model.Term
+propagateType typ term =
+
+      let setTypeAnn = \t -> Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ typ)) t
+      in case (Strip.deannotateTerm term) of
+        Model.TermLambda _ ->
+          let annotated = setTypeAnn term
+          in case (Strip.deannotateType typ) of
+            Model.TypeFunction v1 -> propagateType_propagateIntoLambda (Model.functionTypeCodomain v1) annotated
+            _ -> annotated
+        Model.TermLet v0 ->
+          let propagatedBindings =
+                  Lists.map (\b -> Optionals.match (Model.bindingTypeScheme b) b (\ts -> Model.Binding {
+                    Model.bindingName = (Model.bindingName b),
+                    Model.bindingTerm = (propagateType (Model.typeSchemeBody ts) (Model.bindingTerm b)),
+                    Model.bindingTypeScheme = (Model.bindingTypeScheme b)})) (Model.letBindings v0)
+          in (setTypeAnn (propagateType_rebuildLet term propagatedBindings (propagateType typ (Model.letBody v0))))
+        Model.TermApplication v0 ->
+          let fun = Model.applicationFunction v0
+              arg = Model.applicationArgument v0
+              annotatedFun =
+                      case (Strip.deannotateTerm fun) of
+                        Model.TermCases v1 ->
+                          let dom = Resolution.nominalApplication (Model.caseStatementTypeName v1) []
+                              ft =
+                                      Model.TypeFunction (Model.FunctionType {
+                                        Model.functionTypeDomain = dom,
+                                        Model.functionTypeCodomain = typ})
+                          in (Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ ft)) fun)
+                        _ -> fun
+          in (setTypeAnn (Model.TermApplication (Model.Application {
+            Model.applicationFunction = annotatedFun,
+            Model.applicationArgument = arg})))
+        _ -> setTypeAnn term
+
+propagateType_propagateIntoLambda :: Model.Type -> Model.Term -> Model.Term
+propagateType_propagateIntoLambda cod t =
+    case t of
+      Model.TermAnnotated v0 -> Model.TermAnnotated (Model.AnnotatedTerm {
+        Model.annotatedTermBody = (propagateType_propagateIntoLambda cod (Model.annotatedTermBody v0)),
+        Model.annotatedTermAnnotation = (Model.annotatedTermAnnotation v0)})
+      Model.TermLambda v0 -> Model.TermLambda (Model.Lambda {
+        Model.lambdaParameter = (Model.lambdaParameter v0),
+        Model.lambdaDomain = (Model.lambdaDomain v0),
+        Model.lambdaBody = (propagateType cod (Model.lambdaBody v0))})
+      _ -> t
+
+propagateType_rebuildLet :: Model.Term -> [Model.Binding] -> Model.Term -> Model.Term
+propagateType_rebuildLet t bindings newBody =
+    case t of
+      Model.TermAnnotated v0 -> Model.TermAnnotated (Model.AnnotatedTerm {
+        Model.annotatedTermBody = (propagateType_rebuildLet (Model.annotatedTermBody v0) bindings newBody),
+        Model.annotatedTermAnnotation = (Model.annotatedTermAnnotation v0)})
+      Model.TermLet _ -> Model.TermLet (Model.Let {
+        Model.letBindings = bindings,
+        Model.letBody = newBody})
+      _ -> t
+
+propagateTypesInAppChain :: Model.Type -> Model.Type -> Model.Term -> Model.Term
+propagateTypesInAppChain fixedCod resultType t =
+
+      let flattened = flattenApps t []
+          args = Pairs.first flattened
+          fun = Pairs.second flattened
+          lambdaDomsResult = collectLambdaDomains fun
+          lambdaDoms = Pairs.first lambdaDomsResult
+          nArgs = Lists.length args
+          nLambdaDoms = Lists.length lambdaDoms
+      in (Logic.ifElse (Logic.and (Ordering.gt nLambdaDoms 0) (Ordering.gt nArgs 0)) (
+        let bodyRetType = Pairs.second (peelDomainsAndCod (Math.sub nLambdaDoms nArgs) resultType)
+            funType =
+                    Lists.foldl (\c -> \d -> Model.TypeFunction (Model.FunctionType {
+                      Model.functionTypeDomain = d,
+                      Model.functionTypeCodomain = c})) bodyRetType (Lists.reverse lambdaDoms)
+            annotatedFun = Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ funType)) fun
+        in (rebuildApps annotatedFun args funType)) (case (Strip.deannotateTerm t) of
+        Model.TermApplication v0 ->
+          let lhs = Model.applicationFunction v0
+              rhs = Model.applicationArgument v0
+              annotatedLhs =
+                      case (Strip.deannotateTerm lhs) of
+                        Model.TermCases v1 ->
+                          let dom = Resolution.nominalApplication (Model.caseStatementTypeName v1) []
+                              ft =
+                                      Model.TypeFunction (Model.FunctionType {
+                                        Model.functionTypeDomain = dom,
+                                        Model.functionTypeCodomain = fixedCod})
+                          in (Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ ft)) lhs)
+                        _ -> lhs
+          in (Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ resultType)) (Model.TermApplication (Model.Application {
+            Model.applicationFunction = annotatedLhs,
+            Model.applicationArgument = rhs})))
+        _ -> Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ resultType)) t))
+
+rebuildApps :: Model.Term -> [Model.Term] -> Model.Type -> Model.Term
+rebuildApps f args fType =
+    Logic.ifElse (Lists.isEmpty args) f (case (Strip.deannotateType fType) of
+      Model.TypeFunction v0 -> Optionals.withDefault f (Optionals.map (\p ->
+        let arg = Pairs.first p
+            rest = Pairs.second p
+            remainingType = Model.functionTypeCodomain v0
+            app =
+                    Model.TermApplication (Model.Application {
+                      Model.applicationFunction = f,
+                      Model.applicationArgument = arg})
+            annotatedApp = Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ remainingType)) app
+        in (rebuildApps annotatedApp rest remainingType)) (Lists.uncons args))
+      _ -> Lists.foldl (\acc -> \a -> Model.TermApplication (Model.Application {
+        Model.applicationFunction = acc,
+        Model.applicationArgument = a})) f args)
+
+recordBuilderClass :: JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Model.Name -> [Model.FieldType] -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.ClassBodyDeclarationWithComments]
+recordBuilderClass aliases tparams elName fields cx g =
+
+      let typeArgRefs = Lists.map Utils.typeParameterToReferenceType tparams
+          typeArgs = Lists.map (\rt -> Syntax.TypeArgumentReference rt) typeArgRefs
+          mTypeArgs = Logic.ifElse (Lists.isEmpty tparams) Nothing (Just (Syntax.TypeArgumentsOrDiamondArguments typeArgs))
+          recordLocalName = Utils.sanitizeJavaName (CoreNames.localNameOf elName)
+          builderType = Utils.javaRefType typeArgRefs Nothing "Builder"
+          builderResult = Utils.javaTypeToJavaResult builderType
+          recordType = Utils.javaRefType typeArgRefs Nothing recordLocalName
+          recordResult = Utils.javaTypeToJavaResult recordType
+          returnThisStmt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just Utils.javaThis))
+      in (Eithers.bind (Eithers.mapList (\f ->
+        let mods = [
+              Syntax.FieldModifierPrivate]
+            ftype = Model.fieldTypeType f
+            fname = Model.fieldTypeName f
+        in (Eithers.bind (encodeType aliases Sets.empty ftype cx g) (\jt -> Right (noComment (Utils.javaMemberField mods jt (Utils.fieldNameToJavaVariableDeclarator fname)))))) fields) (\builderFields -> Eithers.bind (Eithers.mapList (\f ->
+        let mods = [
+              Syntax.MethodModifierPublic]
+            fname = Model.fieldTypeName f
+            assignStmt = Syntax.BlockStatementStatement (Utils.toAssignStmt fname)
+        in (Eithers.bind (fieldTypeToFormalParam aliases f cx g) (\param -> Right (noComment (Utils.methodDeclaration mods [] [] (builderSetterName fname) [
+          param] builderResult (Just [
+          assignStmt,
+          returnThisStmt])))))) fields) (\setterMethods ->
+        let buildMods = [
+              Syntax.MethodModifierPublic]
+            buildArgs = Lists.map (\f -> Utils.fieldNameToJavaExpression (Model.fieldTypeName f)) fields
+            buildReturnStmt =
+                    Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier recordLocalName) mTypeArgs) buildArgs Nothing)))
+            buildMethod =
+                    withCommentString (Strings.concat2 "Builds an immutable {@link " (Strings.concat2 recordLocalName "}.")) (Utils.methodDeclaration buildMods [] [] "build" [] recordResult (Just [
+                      buildReturnStmt]))
+            builderClassDecl =
+                    Utils.javaClassDeclaration aliases tparams (Model.Name "Builder") [
+                      Syntax.ClassModifierPublic,
+                      Syntax.ClassModifierStatic,
+                      Syntax.ClassModifierFinal] Nothing [] (Lists.concat [
+                      builderFields,
+                      setterMethods,
+                      [
+                        buildMethod]])
+            builderClassMember =
+                    withCommentString (Strings.concat2 "A fluent builder for {@link " (Strings.concat2 recordLocalName "}.")) (Syntax.ClassBodyDeclarationClassMember (Syntax.ClassMemberDeclarationClass builderClassDecl))
+            factoryMods =
+                    [
+                      Syntax.MethodModifierPublic,
+                      Syntax.MethodModifierStatic]
+            factoryReturnStmt =
+                    Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "Builder") mTypeArgs) [] Nothing)))
+            factoryMethod =
+                    withCommentString (Strings.concat2 "Creates a new fluent builder for {@link " (Strings.concat2 recordLocalName "}.")) (Utils.methodDeclaration factoryMods tparams [] "builder" [] builderResult (Just [
+                      factoryReturnStmt]))
+        in (Right [
+          factoryMethod,
+          builderClassMember]))))
+
+recordCompareToMethod :: JavaEnvironment.Aliases -> t0 -> Model.Name -> [Model.FieldType] -> Syntax.ClassBodyDeclaration
+recordCompareToMethod aliases tparams elName fields =
+
+      let anns =
+              [
+                Utils.overrideAnnotation,
+                Utils.suppressWarningsUncheckedAnnotation]
+          mods = [
+                Syntax.MethodModifierPublic]
+          param =
+                  Utils.javaTypeToJavaFormalParameter (Utils.javaTypeFromTypeName aliases elName) (Model.Name JavaNames.otherInstanceName)
+          result = Utils.javaTypeToJavaResult Utils.javaIntType
+      in (Utils.methodDeclaration mods [] anns JavaNames.compareToMethodName [
+        param] result (Just (compareToBody aliases JavaNames.otherInstanceName fields)))
+
+recordConstructor :: JavaEnvironment.Aliases -> Model.Name -> [Model.FieldType] -> t0 -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclaration
+recordConstructor aliases elName fields cx g =
+
+      let assignStmts = Lists.map (\f -> Syntax.BlockStatementStatement (Utils.toAssignStmt (Model.fieldTypeName f))) fields
+      in (Eithers.bind (Eithers.mapList (\f -> fieldTypeToFormalParam aliases f cx g) fields) (\params -> Right (Utils.makeConstructor aliases elName False params assignStmts)))
+
+recordEqualsMethod :: JavaEnvironment.Aliases -> Model.Name -> [Model.FieldType] -> Syntax.ClassBodyDeclaration
+recordEqualsMethod aliases elName fields =
+
+      let anns = [
+            Utils.overrideAnnotation]
+          mods = [
+                Syntax.MethodModifierPublic]
+          param = Utils.javaTypeToJavaFormalParameter (Utils.javaRefType [] Nothing "Object") (Model.Name JavaNames.otherInstanceName)
+          result = Utils.javaTypeToJavaResult Utils.javaBooleanType
+          tmpName = "o"
+          instanceOfStmt =
+                  Syntax.BlockStatementStatement (Syntax.StatementIfThen (Syntax.IfThenStatement {
+                    Syntax.ifThenStatementExpression = (Utils.javaUnaryExpressionToJavaExpression (Syntax.UnaryExpressionOther (Syntax.UnaryExpressionNotPlusMinusNot (Utils.javaRelationalExpressionToJavaUnaryExpression (Utils.javaInstanceOf (Utils.javaIdentifierToJavaRelationalExpression (Utils.javaIdentifier JavaNames.otherInstanceName)) (Utils.nameToJavaReferenceType aliases False [] elName Nothing)))))),
+                    Syntax.ifThenStatementStatement = (Utils.javaReturnStatement (Just (Utils.javaBooleanExpression False)))}))
+          castStmt =
+                  Utils.variableDeclarationStatement aliases (Utils.javaTypeFromTypeName aliases elName) (Utils.javaIdentifier tmpName) (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression (Utils.nameToJavaReferenceType aliases False [] elName Nothing) (Utils.javaIdentifierToJavaUnaryExpression (Syntax.Identifier (Utils.sanitizeJavaName JavaNames.otherInstanceName)))))
+          returnAllFieldsEqual =
+                  Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Logic.ifElse (Lists.isEmpty fields) (Utils.javaBooleanExpression True) (Utils.javaConditionalAndExpressionToJavaExpression (Syntax.ConditionalAndExpression (Lists.map (\f -> eqClause tmpName f) fields))))))
+      in (Utils.methodDeclaration mods [] anns JavaNames.equalsMethodName [
+        param] result (Just [
+        instanceOfStmt,
+        castStmt,
+        returnAllFieldsEqual]))
+
+recordHashCodeMethod :: [Model.FieldType] -> Syntax.ClassBodyDeclaration
+recordHashCodeMethod fields =
+
+      let anns = [
+            Utils.overrideAnnotation]
+          mods = [
+                Syntax.MethodModifierPublic]
+          result = Utils.javaTypeToJavaResult Utils.javaIntType
+          returnSum =
+                  Syntax.BlockStatementStatement (Logic.ifElse (Lists.isEmpty fields) (Utils.javaReturnStatement (Just (Utils.javaIntExpression 0))) (Utils.javaReturnStatement (Just (Utils.javaAdditiveExpressionToJavaExpression (Utils.addExpressions (Lists.zipWith hashCodeMultPair first20Primes (Lists.map (\f -> Model.fieldTypeName f) fields)))))))
+      in (Utils.methodDeclaration mods [] anns JavaNames.hashCodeMethodName [] result (Just [
+        returnSum]))
+
+recordMemberVar :: JavaEnvironment.Aliases -> Model.FieldType -> t0 -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclaration
+recordMemberVar aliases ft cx g =
+
+      let mods =
+              [
+                Syntax.FieldModifierPublic,
+                Syntax.FieldModifierFinal]
+          fname = Model.fieldTypeName ft
+          ftype = Model.fieldTypeType ft
+      in (Eithers.bind (encodeType aliases Sets.empty ftype cx g) (\jt -> Right (Utils.javaMemberField mods jt (Utils.fieldNameToJavaVariableDeclarator fname))))
+
+recordToStringMethod :: Model.Name -> [Model.FieldType] -> Syntax.ClassBodyDeclaration
+recordToStringMethod elName fields =
+
+      let anns = [
+            Utils.overrideAnnotation]
+          mods = [
+                Syntax.MethodModifierPublic]
+          result = Utils.javaTypeToJavaResult (Utils.javaRefType [] Nothing "String")
+          className = Model.unName elName
+          fieldParts = Lists.drop 1 (Lists.concat (Lists.map fieldToStringPart fields))
+          allParts =
+                  Lists.concat2 [
+                    Utils.javaStringMultiplicativeExpression (Strings.concat2 className "{")] (Lists.concat2 fieldParts [
+                    Utils.javaStringMultiplicativeExpression "}"])
+          returnStr =
+                  Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaAdditiveExpressionToJavaExpression (Utils.addExpressions allParts))))
+      in (Utils.methodDeclaration mods [] anns JavaNames.toStringMethodName [] result (Just [
+        returnStr]))
+
+recordWithMethod :: JavaEnvironment.Aliases -> Model.Name -> [Model.FieldType] -> Model.FieldType -> t0 -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclaration
+recordWithMethod aliases elName fields field cx g =
+
+      let mods = [
+            Syntax.MethodModifierPublic]
+          anns = []
+          methodName =
+                  Strings.concat2 "with" (Formatting.nonAlnumToUnderscores (Formatting.capitalize (Model.unName (Model.fieldTypeName field))))
+          result = Utils.referenceTypeToResult (Utils.nameToJavaReferenceType aliases False [] elName Nothing)
+          consId = Syntax.Identifier (Utils.sanitizeJavaName (CoreNames.localNameOf elName))
+          fieldArgs = Lists.map (\f -> Utils.fieldNameToJavaExpression (Model.fieldTypeName f)) fields
+          returnStmt =
+                  Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaConstructorCall (Utils.javaConstructorName consId Nothing) fieldArgs Nothing)))
+      in (Eithers.bind (fieldTypeToFormalParam aliases field cx g) (\param -> Right (Utils.methodDeclaration mods [] anns methodName [
+        param] result (Just [
+        returnStmt]))))
+
+resolveTypeApps :: [Model.Name] -> [Model.Type] -> M.Map Model.Name Model.Type -> [Model.Type]
+resolveTypeApps schemeVars fallbackTypeApps argSubst =
+
+      let resolvedVars = Sets.fromList (Maps.keys argSubst)
+          unresolvedVars = Lists.filter (\v -> Logic.not (Sets.member v resolvedVars)) schemeVars
+          usedTypes = Sets.fromList (Maps.elems argSubst)
+          unusedIrTypes = Lists.filter (\t -> Logic.not (Sets.member t usedTypes)) fallbackTypeApps
+          remainingSubst = Maps.fromList (Lists.zip unresolvedVars unusedIrTypes)
+          fullSubst = Maps.union argSubst remainingSubst
+      in (Lists.map (\v -> Maps.findWithDefault (Model.TypeVariable v) v fullSubst) schemeVars)
+
+selfRefSubstitution :: (Eq t0, Ord t0) => (M.Map t0 [t0] -> M.Map t0 t0)
+selfRefSubstitution grouped =
+    Lists.foldl (\subst -> \entry -> selfRefSubstitution_processGroup subst (Pairs.first entry) (Pairs.second entry)) Maps.empty (Maps.toList grouped)
+
+selfRefSubstitution_processGroup :: (Eq t0, Ord t0) => (M.Map t0 t0 -> t0 -> [t0] -> M.Map t0 t0)
+selfRefSubstitution_processGroup subst inVar outVars =
+    Logic.ifElse (Lists.member inVar outVars) (Lists.foldl (\s -> \v -> Logic.ifElse (Equality.equal v inVar) s (Maps.insert v inVar s)) subst outVars) subst
+
+serializableTypes :: Bool -> [Syntax.InterfaceType]
+serializableTypes isSer =
+
+      let javaSerializableType =
+              Syntax.InterfaceType (Syntax.ClassType {
+                Syntax.classTypeAnnotations = [],
+                Syntax.classTypeQualifier = Syntax.ClassTypeQualifierNone,
+                Syntax.classTypeIdentifier = (Utils.javaTypeIdentifier "Serializable"),
+                Syntax.classTypeArguments = []})
+      in (Logic.ifElse isSer [
+        javaSerializableType] [])
+
+splitConstantInitializer :: Syntax.InterfaceMemberDeclaration -> [Syntax.InterfaceMemberDeclaration]
+splitConstantInitializer member =
+    case member of
+      Syntax.InterfaceMemberDeclarationConstant v0 -> Lists.bind (Syntax.constantDeclarationVariables v0) (splitConstantInitializer_splitVar (Syntax.constantDeclarationModifiers v0) (Syntax.constantDeclarationType v0))
+      _ -> [
+        member]
+
+splitConstantInitializer_splitVar :: [Syntax.ConstantModifier] -> Syntax.UnannType -> Syntax.VariableDeclarator -> [Syntax.InterfaceMemberDeclaration]
+splitConstantInitializer_splitVar mods utype vd =
+
+      let vid = Syntax.variableDeclaratorId vd
+          mInit = Syntax.variableDeclaratorInitializer vd
+      in (Optionals.match mInit [
+        Syntax.InterfaceMemberDeclarationConstant (Syntax.ConstantDeclaration {
+          Syntax.constantDeclarationModifiers = mods,
+          Syntax.constantDeclarationType = utype,
+          Syntax.constantDeclarationVariables = [
+            vd]})] (\init_ -> case init_ of
+        Syntax.VariableInitializerExpression v0 ->
+          let varName = javaIdentifierToString (Syntax.variableDeclaratorIdIdentifier vid)
+              helperName = Strings.concat2 "_init_" varName
+              callExpr = Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocation Nothing (Syntax.Identifier helperName) [])
+              field =
+                      Syntax.InterfaceMemberDeclarationConstant (Syntax.ConstantDeclaration {
+                        Syntax.constantDeclarationModifiers = mods,
+                        Syntax.constantDeclarationType = utype,
+                        Syntax.constantDeclarationVariables = [
+                          Syntax.VariableDeclarator {
+                            Syntax.variableDeclaratorId = vid,
+                            Syntax.variableDeclaratorInitializer = (Just (Syntax.VariableInitializerExpression callExpr))}]})
+              returnSt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just v0))
+              resultType = Syntax.ResultType utype
+              helper =
+                      Utils.interfaceMethodDeclaration [
+                        Syntax.InterfaceMethodModifierStatic,
+                        Syntax.InterfaceMethodModifierPrivate] [] helperName [] resultType (Just [
+                        returnSt])
+          in [
+            field,
+            helper]
+        _ -> [
+          Syntax.InterfaceMemberDeclarationConstant (Syntax.ConstantDeclaration {
+            Syntax.constantDeclarationModifiers = mods,
+            Syntax.constantDeclarationType = utype,
+            Syntax.constantDeclarationVariables = [
+              vd]})]))
+
+stripForalls :: Model.Type -> Model.Type
+stripForalls t =
+    case (Strip.deannotateType t) of
+      Model.TypeForall v0 -> stripForalls (Model.forallTypeBody v0)
+      _ -> t
+
+substituteTypeVarsWithTypes :: M.Map Model.Name Model.Type -> Model.Type -> Model.Type
+substituteTypeVarsWithTypes subst t = substituteTypeVarsWithTypes_go subst (Strip.deannotateType t)
+
+substituteTypeVarsWithTypes_go :: M.Map Model.Name Model.Type -> Model.Type -> Model.Type
+substituteTypeVarsWithTypes_go subst t =
+    case (Strip.deannotateType t) of
+      Model.TypeVariable v0 -> Optionals.match (Maps.lookup v0 subst) t (\rep -> rep)
+      Model.TypeFunction v0 -> Model.TypeFunction (Model.FunctionType {
+        Model.functionTypeDomain = (substituteTypeVarsWithTypes_go subst (Model.functionTypeDomain v0)),
+        Model.functionTypeCodomain = (substituteTypeVarsWithTypes_go subst (Model.functionTypeCodomain v0))})
+      Model.TypeApplication v0 -> Model.TypeApplication (Model.ApplicationType {
+        Model.applicationTypeFunction = (substituteTypeVarsWithTypes_go subst (Model.applicationTypeFunction v0)),
+        Model.applicationTypeArgument = (substituteTypeVarsWithTypes_go subst (Model.applicationTypeArgument v0))})
+      Model.TypeList v0 -> Model.TypeList (substituteTypeVarsWithTypes_go subst v0)
+      Model.TypeSet v0 -> Model.TypeSet (substituteTypeVarsWithTypes_go subst v0)
+      Model.TypeOptional v0 -> Model.TypeOptional (substituteTypeVarsWithTypes_go subst v0)
+      Model.TypeEffect v0 -> Model.TypeEffect (substituteTypeVarsWithTypes_go subst v0)
+      Model.TypeMap v0 -> Model.TypeMap (Model.MapType {
+        Model.mapTypeKeys = (substituteTypeVarsWithTypes_go subst (Model.mapTypeKeys v0)),
+        Model.mapTypeValues = (substituteTypeVarsWithTypes_go subst (Model.mapTypeValues v0))})
+      Model.TypePair v0 -> Model.TypePair (Model.PairType {
+        Model.pairTypeFirst = (substituteTypeVarsWithTypes_go subst (Model.pairTypeFirst v0)),
+        Model.pairTypeSecond = (substituteTypeVarsWithTypes_go subst (Model.pairTypeSecond v0))})
+      Model.TypeEither v0 -> Model.TypeEither (Model.EitherType {
+        Model.eitherTypeLeft = (substituteTypeVarsWithTypes_go subst (Model.eitherTypeLeft v0)),
+        Model.eitherTypeRight = (substituteTypeVarsWithTypes_go subst (Model.eitherTypeRight v0))})
+      Model.TypeForall v0 -> Model.TypeForall (Model.ForallType {
+        Model.forallTypeParameter = (Model.forallTypeParameter v0),
+        Model.forallTypeBody = (substituteTypeVarsWithTypes_go subst (Model.forallTypeBody v0))})
+      _ -> t
+
+tagCmpNotZeroExpr :: Syntax.Expression
+tagCmpNotZeroExpr =
+    Utils.javaEqualityExpressionToJavaExpression (Syntax.EqualityExpressionNotEqual (Syntax.EqualityExpression_Binary {
+      Syntax.equalityExpression_BinaryLhs = lhs,
+      Syntax.equalityExpression_BinaryRhs = rhs}))
+  where
+    lhs =
+        Utils.javaRelationalExpressionToJavaEqualityExpression (Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionName (Syntax.ExpressionName {
+          Syntax.expressionNameQualifier = Nothing,
+          Syntax.expressionNameIdentifier = (Utils.javaIdentifier "tagCmp")})))
+    rhs =
+        Utils.javaPostfixExpressionToJavaRelationalExpression (Syntax.PostfixExpressionPrimary (Utils.javaLiteralToJavaPrimary (Utils.javaInt 0)))
+
+tagCompareExpr :: Syntax.Expression
+tagCompareExpr =
+    Utils.javaMethodInvocationToJavaExpression (Syntax.MethodInvocation {
+      Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+        Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantType (Utils.javaTypeName (Syntax.Identifier "Integer"))),
+        Syntax.methodInvocation_ComplexTypeArguments = [],
+        Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier "compare")})),
+      Syntax.methodInvocationArguments = [
+        Utils.javaMethodInvocationToJavaExpression thisOrdinal,
+        (Utils.javaMethodInvocationToJavaExpression otherOrdinal)]})
+  where
+    thisOrdinal =
+        Syntax.MethodInvocation {
+          Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+            Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantPrimary (Utils.javaExpressionToJavaPrimary Utils.javaThis)),
+            Syntax.methodInvocation_ComplexTypeArguments = [],
+            Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hydraOrdinalMethodName)})),
+          Syntax.methodInvocationArguments = []}
+    otherOrdinal =
+        Syntax.MethodInvocation {
+          Syntax.methodInvocationHeader = (Syntax.MethodInvocation_HeaderComplex (Syntax.MethodInvocation_Complex {
+            Syntax.methodInvocation_ComplexVariant = (Syntax.MethodInvocation_VariantExpression (Syntax.ExpressionName {
+              Syntax.expressionNameQualifier = Nothing,
+              Syntax.expressionNameIdentifier = (Syntax.Identifier JavaNames.otherInstanceName)})),
+            Syntax.methodInvocation_ComplexTypeArguments = [],
+            Syntax.methodInvocation_ComplexIdentifier = (Syntax.Identifier JavaNames.hydraOrdinalMethodName)})),
+          Syntax.methodInvocationArguments = []}
+
+takeTypeArgs :: String -> Int -> [Syntax.Type] -> t0 -> t1 -> Either Errors.Error [Syntax.TypeArgument]
+takeTypeArgs label n tyapps cx g =
+    Logic.ifElse (Ordering.lt (Lists.length tyapps) n) (Left (Errors.ErrorOther (Errors.OtherError (Strings.concat [
+      "needed type arguments for ",
+      label,
+      ", found too few"])))) (Eithers.mapList (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt))) (Lists.take n tyapps))
+
+toClassDecl :: Bool -> Bool -> JavaEnvironment.Aliases -> [Syntax.TypeParameter] -> Model.Name -> Model.Type -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassDeclaration
+toClassDecl isInner isSer aliases tparams elName t cx g =
+
+      let wrap =
+              \t_ -> declarationForRecordType isInner isSer aliases tparams elName [
+                Model.FieldType {
+                  Model.fieldTypeName = (Model.Name "value"),
+                  Model.fieldTypeType = (Strip.deannotateType t_)}] cx g
+      in case (Strip.deannotateType t) of
+        Model.TypeRecord v0 -> declarationForRecordType isInner isSer aliases tparams elName v0 cx g
+        Model.TypeUnion v0 -> declarationForUnionType isSer aliases tparams elName v0 cx g
+        Model.TypeForall v0 ->
+          let v = Model.forallTypeParameter v0
+              body = Model.forallTypeBody v0
+              param = Utils.javaTypeParameter (Formatting.capitalize (Model.unName v))
+          in (toClassDecl False isSer aliases (Lists.concat2 tparams [
+            param]) elName body cx g)
+        Model.TypeWrap v0 -> declarationForRecordType isInner isSer aliases tparams elName [
+          Model.FieldType {
+            Model.fieldTypeName = (Model.Name "value"),
+            Model.fieldTypeType = v0}] cx g
+        _ -> wrap t
+
+toDeclInit :: JavaEnvironment.Aliases -> Graph.Graph -> S.Set Model.Name -> [Model.Binding] -> Model.Name -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (Maybe Syntax.BlockStatement)
+toDeclInit aliasesExt gExt recursiveVars flatBindings name cx g =
+    Logic.ifElse (Sets.member name recursiveVars) (
+      let binding =
+              Optionals.withDefault (Model.Binding {
+                Model.bindingName = name,
+                Model.bindingTerm = Model.TermUnit,
+                Model.bindingTypeScheme = Nothing}) (Lists.head (Lists.filter (\b -> Equality.equal (Model.bindingName b) name) flatBindings))
+          value = Model.bindingTerm binding
+      in (Eithers.bind (Optionals.match (Model.bindingTypeScheme binding) (Checking.typeOfTerm cx gExt value) (\ts -> Right (Model.typeSchemeBody ts))) (\typ -> Eithers.bind (encodeType aliasesExt Sets.empty typ cx g) (\jtype ->
+        let id = Utils.variableToJavaIdentifier name
+            arid = Syntax.Identifier "java.util.concurrent.atomic.AtomicReference"
+            aid =
+                    Syntax.AnnotatedIdentifier {
+                      Syntax.annotatedIdentifierAnnotations = [],
+                      Syntax.annotatedIdentifierIdentifier = arid}
+        in (Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt ->
+          let targs = typeArgsOrDiamond [
+                Syntax.TypeArgumentReference rt]
+              ci =
+                      Syntax.ClassOrInterfaceTypeToInstantiate {
+                        Syntax.classOrInterfaceTypeToInstantiateIdentifiers = [
+                          aid],
+                        Syntax.classOrInterfaceTypeToInstantiateTypeArguments = (Just targs)}
+              body = Utils.javaConstructorCall ci [] Nothing
+              pkg =
+                      JavaNames.javaPackageName [
+                        "java",
+                        "util",
+                        "concurrent",
+                        "atomic"]
+              artype = Utils.javaRefType [
+                    rt] (Just pkg) "AtomicReference"
+          in (Right (Just (Utils.variableDeclarationStatement aliasesExt artype id body))))))))) (Right Nothing)
+
+toDeclStatement :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> Graph.Graph -> S.Set Model.Name -> S.Set Model.Name -> [Model.Binding] -> Model.Name -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.BlockStatement
+toDeclStatement envExt aliasesExt gExt recursiveVars thunkedVars flatBindings name cx g =
+
+      let binding =
+              Optionals.withDefault (Model.Binding {
+                Model.bindingName = name,
+                Model.bindingTerm = Model.TermUnit,
+                Model.bindingTypeScheme = Nothing}) (Lists.head (Lists.filter (\b -> Equality.equal (Model.bindingName b) name) flatBindings))
+          value = Model.bindingTerm binding
+      in (Eithers.bind (Optionals.match (Model.bindingTypeScheme binding) (Checking.typeOfTerm cx gExt value) (\ts -> Right (Model.typeSchemeBody ts))) (\typ -> Eithers.bind (encodeType aliasesExt Sets.empty typ cx g) (\jtype ->
+        let id = Utils.variableToJavaIdentifier name
+            annotatedValue = Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ typ)) value
+        in (Eithers.bind (encodeTerm envExt annotatedValue cx g) (\rhs -> Logic.ifElse (Sets.member name recursiveVars) (Right (Syntax.BlockStatementStatement (Utils.javaMethodInvocationToJavaStatement (Utils.methodInvocation (Just (Left (Syntax.ExpressionName {
+          Syntax.expressionNameQualifier = Nothing,
+          Syntax.expressionNameIdentifier = id}))) (Syntax.Identifier JavaNames.setMethodName) [
+          rhs])))) (Logic.ifElse (Sets.member name thunkedVars) (Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt ->
+          let lazyType = Utils.javaRefType [
+                rt] JavaNames.hydraUtilPackageName "Lazy"
+              lambdaBody = Syntax.LambdaBodyExpression rhs
+              supplierLambda =
+                      Syntax.ExpressionLambda (Syntax.LambdaExpression {
+                        Syntax.lambdaExpressionParameters = (Syntax.LambdaParametersTuple []),
+                        Syntax.lambdaExpressionBody = lambdaBody})
+              targs = typeArgsOrDiamond [
+                    Syntax.TypeArgumentReference rt]
+              lazyExpr =
+                      Utils.javaConstructorCall (Utils.javaConstructorName (Syntax.Identifier "hydra.core.overlay.java.util.Lazy") (Just targs)) [
+                        supplierLambda] Nothing
+          in (Right (Utils.variableDeclarationStatement aliasesExt lazyType id lazyExpr)))) (Right (Utils.variableDeclarationStatement aliasesExt jtype id rhs))))))))
+
+tryInferFunctionType :: Model.Term -> Maybe Model.Type
+tryInferFunctionType funTerm =
+    case (Strip.deannotateTerm funTerm) of
+      Model.TermLambda v0 -> Optionals.bind (Model.lambdaDomain v0) (\dom ->
+        let mCod =
+                case (Model.lambdaBody v0) of
+                  Model.TermAnnotated v1 -> Optionals.bind (Maps.lookup Constants.keyType (Annotations.getAnnotationMap (Model.annotatedTermAnnotation v1))) (\typeTerm -> decodeTypeFromTerm typeTerm)
+                  Model.TermLambda _ -> tryInferFunctionType (Model.lambdaBody v0)
+                  _ -> Nothing
+        in (Optionals.map (\cod -> Model.TypeFunction (Model.FunctionType {
+          Model.functionTypeDomain = dom,
+          Model.functionTypeCodomain = cod})) mCod))
+      _ -> Nothing
+
+typeAppFallbackCast :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> [M.Map Model.Name Model.Term] -> [Syntax.Type] -> Syntax.Type -> Model.Term -> Model.Type -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+typeAppFallbackCast env aliases anns tyapps jatyp body typ cx g =
+
+      let annotatedBody = Annotations.setTermAnnotation Constants.keyType (Just (EncodeModel.type_ typ)) body
+      in (Eithers.bind (encodeTermInternal env anns (Lists.cons jatyp tyapps) annotatedBody cx g) (\jbody -> Eithers.bind (encodeType aliases Sets.empty typ cx g) (\jtype -> Eithers.bind (Utils.javaTypeToJavaReferenceType jtype cx) (\rt -> Right (Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression rt (Utils.javaExpressionToJavaUnaryExpression jbody)))))))
+
+typeAppNullaryOrHoisted :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> [M.Map Model.Name Model.Term] -> [Syntax.Type] -> Syntax.Type -> Model.Term -> Model.Type -> Model.Name -> JavaEnvironment.JavaSymbolClass -> [Model.Type] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.Expression
+typeAppNullaryOrHoisted env aliases anns tyapps jatyp body correctedTyp varName cls allTypeArgs cx g =
+
+      let qn = CoreNames.qualifyName varName
+          mns = Util.qualifiedNameModuleName qn
+          localName = Util.qualifiedNameLocal qn
+      in case cls of
+        JavaEnvironment.JavaSymbolClassNullaryFunction -> Optionals.match mns (typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g) (\ns_ ->
+          let classId = Utils.nameToJavaName aliases (elementsQualifiedName ns_)
+              methodId = Syntax.Identifier (Utils.sanitizeJavaName localName)
+          in (Eithers.bind (filterPhantomTypeArgs varName allTypeArgs cx g) (\filteredTypeArgs -> Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) filteredTypeArgs) (\jTypeArgs -> Right (Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs classId methodId jTypeArgs []))))))
+        JavaEnvironment.JavaSymbolClassHoistedLambda v0 -> Optionals.match mns (typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g) (\ns_ ->
+          let classId = Utils.nameToJavaName aliases (elementsQualifiedName ns_)
+              methodId = Syntax.Identifier (Utils.sanitizeJavaName localName)
+          in (Eithers.bind (filterPhantomTypeArgs varName allTypeArgs cx g) (\filteredTypeArgs -> Eithers.bind (Eithers.mapList (\t -> Eithers.bind (encodeType aliases Sets.empty t cx g) (\jt -> Eithers.bind (Utils.javaTypeToJavaReferenceType jt cx) (\rt -> Right (Syntax.TypeArgumentReference rt)))) filteredTypeArgs) (\jTypeArgs ->
+            let paramNames = Lists.map (\i -> Model.Name (Strings.concat2 "p" (Literals.printInt32 i))) (Math.range 0 v0)
+                paramExprs = Lists.map (\p -> Utils.javaIdentifierToJavaExpression (Utils.variableToJavaIdentifier p)) paramNames
+                call =
+                        Utils.javaMethodInvocationToJavaExpression (Utils.methodInvocationStaticWithTypeArgs classId methodId jTypeArgs paramExprs)
+            in (Right (buildCurriedLambda paramNames call))))))
+        _ -> typeAppFallbackCast env aliases anns tyapps jatyp body correctedTyp cx g
+
+typeArgsOrDiamond :: [Syntax.TypeArgument] -> Syntax.TypeArgumentsOrDiamond
+typeArgsOrDiamond args =
+    Logic.ifElse (JavaEnvironment.javaFeaturesSupportsDiamondOperator javaFeatures) Syntax.TypeArgumentsOrDiamondDiamond (Syntax.TypeArgumentsOrDiamondArguments args)
+
+typesMatch :: Model.Type -> Model.Type -> Bool
+typesMatch a b =
+    case a of
+      Model.TypeVariable v0 -> case b of
+        Model.TypeVariable v1 -> Equality.equal v0 v1
+        _ -> True
+      Model.TypeWrap v0 -> case b of
+        Model.TypeWrap v1 -> Equality.equal v0 v1
+        _ -> True
+      _ -> True
+
+unwrapReturnType :: Model.Type -> Model.Type
+unwrapReturnType t =
+    case (Strip.deannotateType t) of
+      Model.TypeFunction v0 -> unwrapReturnType (Model.functionTypeCodomain v0)
+      Model.TypeApplication v0 -> unwrapReturnType (Model.applicationTypeArgument v0)
+      _ -> t
+
+variantCompareToMethod :: JavaEnvironment.Aliases -> t0 -> Model.Name -> Model.Name -> Int -> [Model.FieldType] -> [Syntax.ClassBodyDeclaration]
+variantCompareToMethod aliases tparams parentName variantName ordinal fields =
+
+      let anns =
+              [
+                Utils.overrideAnnotation,
+                Utils.suppressWarningsUncheckedAnnotation]
+          mods = [
+                Syntax.MethodModifierPublic]
+          param =
+                  Utils.javaTypeToJavaFormalParameter (Utils.javaTypeFromTypeName aliases parentName) (Model.Name JavaNames.otherInstanceName)
+          result = Utils.javaTypeToJavaResult Utils.javaIntType
+          varTmpName = "o"
+          tagDeclStmt = Utils.variableDeclarationStatement aliases Utils.javaIntType (Utils.javaIdentifier "tagCmp") tagCompareExpr
+          tagReturnStmt =
+                  Syntax.BlockStatementStatement (Syntax.StatementIfThen (Syntax.IfThenStatement {
+                    Syntax.ifThenStatementExpression = tagCmpNotZeroExpr,
+                    Syntax.ifThenStatementStatement = (Utils.javaReturnStatement (Just (Utils.javaExpressionNameToJavaExpression (Syntax.ExpressionName {
+                      Syntax.expressionNameQualifier = Nothing,
+                      Syntax.expressionNameIdentifier = (Utils.javaIdentifier "tagCmp")}))))}))
+          variantJavaType = Utils.javaTypeFromTypeName aliases variantName
+          castOtherExpr =
+                  Utils.javaCastExpressionToJavaExpression (Utils.javaCastExpression (Utils.nameToJavaReferenceType aliases False [] variantName Nothing) (Utils.javaIdentifierToJavaUnaryExpression (Syntax.Identifier JavaNames.otherInstanceName)))
+          castDeclStmt = Utils.variableDeclarationStatement aliases variantJavaType (Utils.javaIdentifier varTmpName) castOtherExpr
+          emptyReturn = [
+                Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just (Utils.javaIntExpression 0)))]
+          valueCompareStmt =
+                  Logic.ifElse (Lists.isEmpty fields) emptyReturn (Lists.concat2 [
+                    castDeclStmt] (compareToBody aliases varTmpName fields))
+          body =
+                  Lists.concat2 [
+                    tagDeclStmt,
+                    tagReturnStmt] valueCompareStmt
+      in [
+        Utils.methodDeclaration mods [] anns JavaNames.compareToMethodName [
+          param] result (Just body),
+        (hydraOrdinalMethod (Just ordinal))]
+
+visitBranch :: JavaEnvironment.JavaEnvironment -> JavaEnvironment.Aliases -> Model.Type -> Model.Name -> Syntax.Type -> [Syntax.TypeArgument] -> Model.CaseAlternative -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error Syntax.ClassBodyDeclarationWithComments
+visitBranch env aliases dom tname jcod targs field cx g =
+
+      let jdom =
+              Syntax.TypeReference (Utils.nameToJavaReferenceType aliases True targs tname (Just (Formatting.capitalize (Model.unName (Model.caseAlternativeName field)))))
+          mods = [
+                Syntax.MethodModifierPublic]
+          anns = [
+                Utils.overrideAnnotation]
+          result = Syntax.ResultType (Syntax.UnannType jcod)
+      in case (Strip.deannotateTerm (Model.caseAlternativeHandler field)) of
+        Model.TermLambda v0 -> withLambda env v0 (\env2 ->
+          let lambdaParam = Model.lambdaParameter v0
+              body = Model.lambdaBody v0
+              env3 = insertBranchVar lambdaParam env2
+          in (Eithers.bind (analyzeJavaFunction env3 body cx g) (\fs ->
+            let bindings = Typing.functionStructureBindings fs
+                innerBody = Typing.functionStructureBody fs
+                env4 = Typing.functionStructureEnvironment fs
+            in (Eithers.bind (bindingsToStatements env4 bindings cx g) (\bindResult ->
+              let bindingStmts = Pairs.first bindResult
+                  env5 = Pairs.second bindResult
+              in (Eithers.bind (encodeTerm env5 innerBody cx g) (\jret ->
+                let param = Utils.javaTypeToJavaFormalParameter jdom lambdaParam
+                    returnStmt = Syntax.BlockStatementStatement (Utils.javaReturnStatement (Just jret))
+                    allStmts = Lists.concat2 bindingStmts [
+                          returnStmt]
+                in (Right (noComment (Utils.methodDeclaration mods [] anns JavaNames.visitMethodName [
+                  param] result (Just allStmts)))))))))))
+        _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.concat2 "visitBranch: field term is not a lambda: " (PrintModel.term (Model.caseAlternativeHandler field)))))
+
+withCommentString :: String -> Syntax.ClassBodyDeclaration -> Syntax.ClassBodyDeclarationWithComments
+withCommentString comment decl =
+    Syntax.ClassBodyDeclarationWithComments {
+      Syntax.classBodyDeclarationWithCommentsValue = decl,
+      Syntax.classBodyDeclarationWithCommentsComments = (Just comment)}
+
+withInterfaceCommentString :: String -> Syntax.InterfaceMemberDeclaration -> Syntax.InterfaceMemberDeclarationWithComments
+withInterfaceCommentString comment decl =
+    Syntax.InterfaceMemberDeclarationWithComments {
+      Syntax.interfaceMemberDeclarationWithCommentsValue = decl,
+      Syntax.interfaceMemberDeclarationWithCommentsComments = (Just comment)}
+
+withLambda :: JavaEnvironment.JavaEnvironment -> Model.Lambda -> (JavaEnvironment.JavaEnvironment -> t0) -> t0
+withLambda env lam k =
+    CoreEnvironment.withLambdaContext javaEnvGetGraph javaEnvSetGraph env lam (\env1 ->
+      let aliases = JavaEnvironment.javaEnvironmentAliases env1
+          aliases2 =
+                  JavaEnvironment.Aliases {
+                    JavaEnvironment.aliasesCurrentNamespace = (JavaEnvironment.aliasesCurrentNamespace aliases),
+                    JavaEnvironment.aliasesPackages = (JavaEnvironment.aliasesPackages aliases),
+                    JavaEnvironment.aliasesBranchVars = (JavaEnvironment.aliasesBranchVars aliases),
+                    JavaEnvironment.aliasesRecursiveVars = (JavaEnvironment.aliasesRecursiveVars aliases),
+                    JavaEnvironment.aliasesInScopeTypeParams = (JavaEnvironment.aliasesInScopeTypeParams aliases),
+                    JavaEnvironment.aliasesPolymorphicLocals = (JavaEnvironment.aliasesPolymorphicLocals aliases),
+                    JavaEnvironment.aliasesInScopeJavaVars = (JavaEnvironment.aliasesInScopeJavaVars aliases),
+                    JavaEnvironment.aliasesVarRenames = (JavaEnvironment.aliasesVarRenames aliases),
+                    JavaEnvironment.aliasesLambdaVars = (Sets.insert (Model.lambdaParameter lam) (JavaEnvironment.aliasesLambdaVars aliases)),
+                    JavaEnvironment.aliasesTypeVarSubst = (JavaEnvironment.aliasesTypeVarSubst aliases),
+                    JavaEnvironment.aliasesTrustedTypeVars = (JavaEnvironment.aliasesTrustedTypeVars aliases),
+                    JavaEnvironment.aliasesMethodCodomain = (JavaEnvironment.aliasesMethodCodomain aliases),
+                    JavaEnvironment.aliasesThunkedVars = (JavaEnvironment.aliasesThunkedVars aliases)}
+          env2 =
+                  JavaEnvironment.JavaEnvironment {
+                    JavaEnvironment.javaEnvironmentAliases = aliases2,
+                    JavaEnvironment.javaEnvironmentGraph = (JavaEnvironment.javaEnvironmentGraph env1)}
+      in (k env2))
+
+withTypeLambda :: JavaEnvironment.JavaEnvironment -> Model.TypeLambda -> (JavaEnvironment.JavaEnvironment -> t0) -> t0
+withTypeLambda = CoreEnvironment.withTypeLambdaContext javaEnvGetGraph javaEnvSetGraph
+
+wrapInSupplierLambda :: Syntax.Expression -> Syntax.Expression
+wrapInSupplierLambda expr =
+    Syntax.ExpressionLambda (Syntax.LambdaExpression {
+      Syntax.lambdaExpressionParameters = (Syntax.LambdaParametersTuple []),
+      Syntax.lambdaExpressionBody = (Syntax.LambdaBodyExpression expr)})
+
+wrapLazyArguments :: Graph.Graph -> Model.Name -> [Syntax.Expression] -> ([Syntax.Expression], (Maybe String))
+wrapLazyArguments g name args =
+
+      let lazyFlags = lazyFlagsForPrimitive g name
+          anyLazy = Lists.foldl (\b -> \f -> Logic.or b f) False lazyFlags
+      in (Logic.ifElse (Logic.and anyLazy (Equality.equal (Lists.length args) (Lists.length lazyFlags))) (
+        Lists.map (\pair -> Logic.ifElse (Pairs.second pair) (wrapInSupplierLambda (Pairs.first pair)) (Pairs.first pair)) (Lists.zip args lazyFlags),
+        (Just (Logic.ifElse (Equality.equal name (Model.Name "hydra.core.lib.logic.ifElse")) "lazy" "applyLazy"))) (args, Nothing))
diff --git a/src/main/haskell/Hydra/Java/Dsl/Environment.hs b/src/main/haskell/Hydra/Java/Dsl/Environment.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Java/Dsl/Environment.hs
@@ -0,0 +1,1559 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | DSL functions for hydra.java.environment
+
+module Hydra.Java.Dsl.Environment where
+
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Java.Dsl.Syntax as DslSyntax
+import qualified Hydra.Java.Environment as Environment
+import qualified Hydra.Java.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
+
+-- | DSL constructor for hydra.java.environment.Aliases
+aliases :: Typed.TypedTerm Packaging.ModuleName -> Typed.TypedTerm (M.Map Packaging.ModuleName Syntax.PackageName) -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm (M.Map Model.Name Model.Name) -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm (M.Map Model.Name Model.Name) -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm (Maybe Model.Type) -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliases currentNamespace packages branchVars recursiveVars inScopeTypeParams polymorphicLocals inScopeJavaVars varRenames lambdaVars typeVarSubst trustedTypeVars methodCodomain thunkedVars =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Typed.unTypedTerm currentNamespace)},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Typed.unTypedTerm packages)},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Typed.unTypedTerm branchVars)},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Typed.unTypedTerm recursiveVars)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Typed.unTypedTerm inScopeTypeParams)},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Typed.unTypedTerm polymorphicLocals)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Typed.unTypedTerm inScopeJavaVars)},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Typed.unTypedTerm varRenames)},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Typed.unTypedTerm lambdaVars)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Typed.unTypedTerm typeVarSubst)},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Typed.unTypedTerm trustedTypeVars)},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Typed.unTypedTerm methodCodomain)},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Typed.unTypedTerm thunkedVars)}]}))
+
+-- | DSL name token for hydra.java.environment.Aliases
+aliasesAliases :: Typed.TypedName Environment.Aliases
+aliasesAliases = Typed.TypedName (Model.Name "hydra.java.environment.Aliases")
+
+-- | DSL accessor for the branchVars field of hydra.java.environment.Aliases
+aliasesBranchVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name)
+aliasesBranchVars x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "branchVars")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the currentNamespace field of hydra.java.environment.Aliases
+aliasesCurrentNamespace :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm Packaging.ModuleName
+aliasesCurrentNamespace x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "currentNamespace")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the inScopeJavaVars field of hydra.java.environment.Aliases
+aliasesInScopeJavaVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name)
+aliasesInScopeJavaVars x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the inScopeTypeParams field of hydra.java.environment.Aliases
+aliasesInScopeTypeParams :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name)
+aliasesInScopeTypeParams x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the lambdaVars field of hydra.java.environment.Aliases
+aliasesLambdaVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name)
+aliasesLambdaVars x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "lambdaVars")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the methodCodomain field of hydra.java.environment.Aliases
+aliasesMethodCodomain :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (Maybe Model.Type)
+aliasesMethodCodomain x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "methodCodomain")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the packages field of hydra.java.environment.Aliases
+aliasesPackages :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Packaging.ModuleName Syntax.PackageName)
+aliasesPackages x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "packages")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the polymorphicLocals field of hydra.java.environment.Aliases
+aliasesPolymorphicLocals :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name)
+aliasesPolymorphicLocals x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the recursiveVars field of hydra.java.environment.Aliases
+aliasesRecursiveVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name)
+aliasesRecursiveVars x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "recursiveVars")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the thunkedVars field of hydra.java.environment.Aliases
+aliasesThunkedVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name)
+aliasesThunkedVars x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "thunkedVars")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the trustedTypeVars field of hydra.java.environment.Aliases
+aliasesTrustedTypeVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name)
+aliasesTrustedTypeVars x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeVarSubst field of hydra.java.environment.Aliases
+aliasesTypeVarSubst :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Model.Name Model.Name)
+aliasesTypeVarSubst x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the varRenames field of hydra.java.environment.Aliases
+aliasesVarRenames :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Model.Name Model.Name)
+aliasesVarRenames x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+        Model.projectionFieldName = (Model.Name "varRenames")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the branchVars field of hydra.java.environment.Aliases
+aliasesWithBranchVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithBranchVars original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the currentNamespace field of hydra.java.environment.Aliases
+aliasesWithCurrentNamespace :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm Packaging.ModuleName -> Typed.TypedTerm Environment.Aliases
+aliasesWithCurrentNamespace original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the inScopeJavaVars field of hydra.java.environment.Aliases
+aliasesWithInScopeJavaVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithInScopeJavaVars original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the inScopeTypeParams field of hydra.java.environment.Aliases
+aliasesWithInScopeTypeParams :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithInScopeTypeParams original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the lambdaVars field of hydra.java.environment.Aliases
+aliasesWithLambdaVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithLambdaVars original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the methodCodomain field of hydra.java.environment.Aliases
+aliasesWithMethodCodomain :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (Maybe Model.Type) -> Typed.TypedTerm Environment.Aliases
+aliasesWithMethodCodomain original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the packages field of hydra.java.environment.Aliases
+aliasesWithPackages :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Packaging.ModuleName Syntax.PackageName) -> Typed.TypedTerm Environment.Aliases
+aliasesWithPackages original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the polymorphicLocals field of hydra.java.environment.Aliases
+aliasesWithPolymorphicLocals :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithPolymorphicLocals original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the recursiveVars field of hydra.java.environment.Aliases
+aliasesWithRecursiveVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithRecursiveVars original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the thunkedVars field of hydra.java.environment.Aliases
+aliasesWithThunkedVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithThunkedVars original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the trustedTypeVars field of hydra.java.environment.Aliases
+aliasesWithTrustedTypeVars :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (S.Set Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithTrustedTypeVars original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeVarSubst field of hydra.java.environment.Aliases
+aliasesWithTypeVarSubst :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Model.Name Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithTypeVarSubst original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "varRenames")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the varRenames field of hydra.java.environment.Aliases
+aliasesWithVarRenames :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm (M.Map Model.Name Model.Name) -> Typed.TypedTerm Environment.Aliases
+aliasesWithVarRenames original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.Aliases"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "currentNamespace"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "currentNamespace")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "packages"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "packages")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "branchVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "branchVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "recursiveVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "recursiveVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeTypeParams"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeTypeParams")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "polymorphicLocals"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "polymorphicLocals")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inScopeJavaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "inScopeJavaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "varRenames"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "lambdaVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "lambdaVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeVarSubst"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "typeVarSubst")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trustedTypeVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "trustedTypeVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "methodCodomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "methodCodomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "thunkedVars"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.Aliases"),
+              Model.projectionFieldName = (Model.Name "thunkedVars")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.environment.JavaEnvironment
+javaEnvironment :: Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Environment.JavaEnvironment
+javaEnvironment aliases graph =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.JavaEnvironment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "aliases"),
+          Model.fieldTerm = (Typed.unTypedTerm aliases)},
+        Model.Field {
+          Model.fieldName = (Model.Name "graph"),
+          Model.fieldTerm = (Typed.unTypedTerm graph)}]}))
+
+-- | DSL accessor for the aliases field of hydra.java.environment.JavaEnvironment
+javaEnvironmentAliases :: Typed.TypedTerm Environment.JavaEnvironment -> Typed.TypedTerm Environment.Aliases
+javaEnvironmentAliases x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.JavaEnvironment"),
+        Model.projectionFieldName = (Model.Name "aliases")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the graph field of hydra.java.environment.JavaEnvironment
+javaEnvironmentGraph :: Typed.TypedTerm Environment.JavaEnvironment -> Typed.TypedTerm Graph.Graph
+javaEnvironmentGraph x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.JavaEnvironment"),
+        Model.projectionFieldName = (Model.Name "graph")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.environment.JavaEnvironment
+javaEnvironmentJavaEnvironment :: Typed.TypedName Environment.JavaEnvironment
+javaEnvironmentJavaEnvironment = Typed.TypedName (Model.Name "hydra.java.environment.JavaEnvironment")
+
+-- | DSL updater for the aliases field of hydra.java.environment.JavaEnvironment
+javaEnvironmentWithAliases :: Typed.TypedTerm Environment.JavaEnvironment -> Typed.TypedTerm Environment.Aliases -> Typed.TypedTerm Environment.JavaEnvironment
+javaEnvironmentWithAliases original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.JavaEnvironment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "aliases"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "graph"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.JavaEnvironment"),
+              Model.projectionFieldName = (Model.Name "graph")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the graph field of hydra.java.environment.JavaEnvironment
+javaEnvironmentWithGraph :: Typed.TypedTerm Environment.JavaEnvironment -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Environment.JavaEnvironment
+javaEnvironmentWithGraph original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.JavaEnvironment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "aliases"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.environment.JavaEnvironment"),
+              Model.projectionFieldName = (Model.Name "aliases")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "graph"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.environment.JavaFeatures
+javaFeatures :: Typed.TypedTerm Bool -> Typed.TypedTerm Environment.JavaFeatures
+javaFeatures supportsDiamondOperator =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.JavaFeatures"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "supportsDiamondOperator"),
+          Model.fieldTerm = (Typed.unTypedTerm supportsDiamondOperator)}]}))
+
+-- | DSL name token for hydra.java.environment.JavaFeatures
+javaFeaturesJavaFeatures :: Typed.TypedName Environment.JavaFeatures
+javaFeaturesJavaFeatures = Typed.TypedName (Model.Name "hydra.java.environment.JavaFeatures")
+
+-- | DSL accessor for the supportsDiamondOperator field of hydra.java.environment.JavaFeatures
+javaFeaturesSupportsDiamondOperator :: Typed.TypedTerm Environment.JavaFeatures -> Typed.TypedTerm Bool
+javaFeaturesSupportsDiamondOperator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.environment.JavaFeatures"),
+        Model.projectionFieldName = (Model.Name "supportsDiamondOperator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the supportsDiamondOperator field of hydra.java.environment.JavaFeatures
+javaFeaturesWithSupportsDiamondOperator :: Typed.TypedTerm Environment.JavaFeatures -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.JavaFeatures
+javaFeaturesWithSupportsDiamondOperator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.environment.JavaFeatures"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "supportsDiamondOperator"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the constant variant of hydra.java.environment.JavaSymbolClass
+javaSymbolClassConstant :: Typed.TypedTerm Environment.JavaSymbolClass
+javaSymbolClassConstant =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.environment.JavaSymbolClass"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "constant"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the hoistedLambda variant of hydra.java.environment.JavaSymbolClass
+javaSymbolClassHoistedLambda :: Typed.TypedTerm Int -> Typed.TypedTerm Environment.JavaSymbolClass
+javaSymbolClassHoistedLambda x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.environment.JavaSymbolClass"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "hoistedLambda"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.environment.JavaSymbolClass
+javaSymbolClassJavaSymbolClass :: Typed.TypedName Environment.JavaSymbolClass
+javaSymbolClassJavaSymbolClass = Typed.TypedName (Model.Name "hydra.java.environment.JavaSymbolClass")
+
+-- | DSL injection for the localVariable variant of hydra.java.environment.JavaSymbolClass
+javaSymbolClassLocalVariable :: Typed.TypedTerm Environment.JavaSymbolClass
+javaSymbolClassLocalVariable =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.environment.JavaSymbolClass"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "localVariable"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the nullaryFunction variant of hydra.java.environment.JavaSymbolClass
+javaSymbolClassNullaryFunction :: Typed.TypedTerm Environment.JavaSymbolClass
+javaSymbolClassNullaryFunction =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.environment.JavaSymbolClass"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "nullaryFunction"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the unaryFunction variant of hydra.java.environment.JavaSymbolClass
+javaSymbolClassUnaryFunction :: Typed.TypedTerm Environment.JavaSymbolClass
+javaSymbolClassUnaryFunction =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.environment.JavaSymbolClass"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unaryFunction"),
+        Model.fieldTerm = Model.TermUnit}}))
diff --git a/src/main/haskell/Hydra/Java/Dsl/Language.hs b/src/main/haskell/Hydra/Java/Dsl/Language.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Java/Dsl/Language.hs
@@ -0,0 +1,47 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | DSL functions for hydra.java.language
+
+module Hydra.Java.Dsl.Language where
+
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Classes as Classes
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Errors as Errors
+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.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.Relational as Relational
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+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.Java.Language as Language
+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
+
+-- | DSL reference to hydra.java.language.javaLanguage
+javaLanguage :: Typed.TypedTerm Coders.Language
+javaLanguage = Typed.TypedTerm (Model.TermVariable (Model.Name "hydra.java.language.javaLanguage"))
+
+-- | DSL reference to hydra.java.language.javaMaxTupleLength
+javaMaxTupleLength :: Typed.TypedTerm Int
+javaMaxTupleLength = Typed.TypedTerm (Model.TermVariable (Model.Name "hydra.java.language.javaMaxTupleLength"))
+
+-- | DSL reference to hydra.java.language.reservedWords
+reservedWords :: Typed.TypedTerm (S.Set String)
+reservedWords = Typed.TypedTerm (Model.TermVariable (Model.Name "hydra.java.language.reservedWords"))
diff --git a/src/main/haskell/Hydra/Java/Dsl/Syntax.hs b/src/main/haskell/Hydra/Java/Dsl/Syntax.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Java/Dsl/Syntax.hs
@@ -0,0 +1,16885 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | DSL functions for hydra.java.syntax
+
+module Hydra.Java.Dsl.Syntax where
+
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Java.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
+
+-- | DSL constructor for the hydra.java.syntax.AdditionalBound wrapper
+additionalBound :: Typed.TypedTerm Syntax.InterfaceType -> Typed.TypedTerm Syntax.AdditionalBound
+additionalBound x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.AdditionalBound"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.AdditionalBound
+additionalBoundAdditionalBound :: Typed.TypedName Syntax.AdditionalBound
+additionalBoundAdditionalBound = Typed.TypedName (Model.Name "hydra.java.syntax.AdditionalBound")
+
+-- | DSL name token for hydra.java.syntax.AdditiveExpression
+additiveExpressionAdditiveExpression :: Typed.TypedName Syntax.AdditiveExpression
+additiveExpressionAdditiveExpression = Typed.TypedName (Model.Name "hydra.java.syntax.AdditiveExpression")
+
+-- | DSL injection for the minus variant of hydra.java.syntax.AdditiveExpression
+additiveExpressionMinus :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression
+additiveExpressionMinus x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "minus"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the plus variant of hydra.java.syntax.AdditiveExpression
+additiveExpressionPlus :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression
+additiveExpressionPlus x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "plus"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the unary variant of hydra.java.syntax.AdditiveExpression
+additiveExpressionUnary :: Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.AdditiveExpression
+additiveExpressionUnary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.AdditiveExpression_Binary
+additiveExpression_Binary :: Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.AdditiveExpression_Binary
+additiveExpression_Binary lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL name token for hydra.java.syntax.AdditiveExpression_Binary
+additiveExpression_BinaryAdditiveExpression_Binary :: Typed.TypedName Syntax.AdditiveExpression_Binary
+additiveExpression_BinaryAdditiveExpression_Binary =
+    Typed.TypedName (Model.Name "hydra.java.syntax.AdditiveExpression_Binary")
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.AdditiveExpression_Binary
+additiveExpression_BinaryLhs :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression
+additiveExpression_BinaryLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression_Binary"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.AdditiveExpression_Binary
+additiveExpression_BinaryRhs :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
+additiveExpression_BinaryRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression_Binary"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.AdditiveExpression_Binary
+additiveExpression_BinaryWithLhs :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.AdditiveExpression_Binary
+additiveExpression_BinaryWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression_Binary"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.AdditiveExpression_Binary
+additiveExpression_BinaryWithRhs :: Typed.TypedTerm Syntax.AdditiveExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.AdditiveExpression_Binary
+additiveExpression_BinaryWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AdditiveExpression_Binary"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for the hydra.java.syntax.AmbiguousName wrapper
+ambiguousName :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.AmbiguousName
+ambiguousName x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.AmbiguousName"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.AmbiguousName
+ambiguousNameAmbiguousName :: Typed.TypedName Syntax.AmbiguousName
+ambiguousNameAmbiguousName = Typed.TypedName (Model.Name "hydra.java.syntax.AmbiguousName")
+
+-- | DSL constructor for the hydra.java.syntax.AndExpression wrapper
+andExpression :: Typed.TypedTerm [Syntax.EqualityExpression] -> Typed.TypedTerm Syntax.AndExpression
+andExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.AndExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.AndExpression
+andExpressionAndExpression :: Typed.TypedName Syntax.AndExpression
+andExpressionAndExpression = Typed.TypedName (Model.Name "hydra.java.syntax.AndExpression")
+
+-- | DSL constructor for hydra.java.syntax.AnnotatedIdentifier
+annotatedIdentifier :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.AnnotatedIdentifier
+annotatedIdentifier annotations identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotatedIdentifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL name token for hydra.java.syntax.AnnotatedIdentifier
+annotatedIdentifierAnnotatedIdentifier :: Typed.TypedName Syntax.AnnotatedIdentifier
+annotatedIdentifierAnnotatedIdentifier = Typed.TypedName (Model.Name "hydra.java.syntax.AnnotatedIdentifier")
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.AnnotatedIdentifier
+annotatedIdentifierAnnotations :: Typed.TypedTerm Syntax.AnnotatedIdentifier -> Typed.TypedTerm [Syntax.Annotation]
+annotatedIdentifierAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotatedIdentifier"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.AnnotatedIdentifier
+annotatedIdentifierIdentifier :: Typed.TypedTerm Syntax.AnnotatedIdentifier -> Typed.TypedTerm Syntax.Identifier
+annotatedIdentifierIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotatedIdentifier"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the annotations field of hydra.java.syntax.AnnotatedIdentifier
+annotatedIdentifierWithAnnotations :: Typed.TypedTerm Syntax.AnnotatedIdentifier -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.AnnotatedIdentifier
+annotatedIdentifierWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotatedIdentifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotatedIdentifier"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.AnnotatedIdentifier
+annotatedIdentifierWithIdentifier :: Typed.TypedTerm Syntax.AnnotatedIdentifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.AnnotatedIdentifier
+annotatedIdentifierWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotatedIdentifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotatedIdentifier"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.Annotation
+annotationAnnotation :: Typed.TypedName Syntax.Annotation
+annotationAnnotation = Typed.TypedName (Model.Name "hydra.java.syntax.Annotation")
+
+-- | DSL constructor for the hydra.java.syntax.AnnotationInterfaceBody wrapper
+annotationInterfaceBody :: Typed.TypedTerm [Syntax.AnnotationInterfaceMemberDeclaration] -> Typed.TypedTerm Syntax.AnnotationInterfaceBody
+annotationInterfaceBody x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceBody"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.AnnotationInterfaceBody
+annotationInterfaceBodyAnnotationInterfaceBody :: Typed.TypedName Syntax.AnnotationInterfaceBody
+annotationInterfaceBodyAnnotationInterfaceBody = Typed.TypedName (Model.Name "hydra.java.syntax.AnnotationInterfaceBody")
+
+-- | DSL constructor for hydra.java.syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclaration :: Typed.TypedTerm [Syntax.InterfaceModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.AnnotationInterfaceBody -> Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclaration modifiers identifier body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL name token for hydra.java.syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationAnnotationInterfaceDeclaration :: Typed.TypedName Syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationAnnotationInterfaceDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration")
+
+-- | DSL accessor for the body field of hydra.java.syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationBody :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceBody
+annotationInterfaceDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationIdentifier :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
+annotationInterfaceDeclarationIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationModifiers :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceModifier]
+annotationInterfaceDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationWithBody :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceBody -> Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationWithIdentifier :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          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.java.syntax.AnnotationInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationWithModifiers :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceModifier] -> Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration
+annotationInterfaceDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.AnnotationInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclaration :: Typed.TypedTerm [Syntax.AnnotationInterfaceElementModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm (Maybe Syntax.DefaultValue) -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclaration modifiers type_ identifier dims default_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm dims)},
+        Model.Field {
+          Model.fieldName = (Model.Name "default"),
+          Model.fieldTerm = (Typed.unTypedTerm default_)}]}))
+
+-- | DSL name token for hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationAnnotationInterfaceElementDeclaration :: Typed.TypedName Syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationAnnotationInterfaceElementDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration")
+
+-- | DSL accessor for the default field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationDefault :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm (Maybe Syntax.DefaultValue)
+annotationInterfaceElementDeclarationDefault x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+        Model.projectionFieldName = (Model.Name "default")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the dims field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationDims :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm (Maybe Syntax.Dims)
+annotationInterfaceElementDeclarationDims x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+        Model.projectionFieldName = (Model.Name "dims")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationIdentifier :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.Identifier
+annotationInterfaceElementDeclarationIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationModifiers :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm [Syntax.AnnotationInterfaceElementModifier]
+annotationInterfaceElementDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationType :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.UnannType
+annotationInterfaceElementDeclarationType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the default field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithDefault :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm (Maybe Syntax.DefaultValue) -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithDefault original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "default"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the dims field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithDims :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithDims original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          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.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "default")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithIdentifier :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            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.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "default")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithModifiers :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm [Syntax.AnnotationInterfaceElementModifier] -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            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.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "default")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithType :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration
+annotationInterfaceElementDeclarationWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            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.java.syntax.AnnotationInterfaceElementDeclaration"),
+              Model.projectionFieldName = (Model.Name "default")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the abstract variant of hydra.java.syntax.AnnotationInterfaceElementModifier
+annotationInterfaceElementModifierAbstract :: Typed.TypedTerm Syntax.AnnotationInterfaceElementModifier
+annotationInterfaceElementModifierAbstract =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "abstract"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.AnnotationInterfaceElementModifier
+annotationInterfaceElementModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.AnnotationInterfaceElementModifier
+annotationInterfaceElementModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.AnnotationInterfaceElementModifier
+annotationInterfaceElementModifierAnnotationInterfaceElementModifier :: Typed.TypedName Syntax.AnnotationInterfaceElementModifier
+annotationInterfaceElementModifierAnnotationInterfaceElementModifier =
+    Typed.TypedName (Model.Name "hydra.java.syntax.AnnotationInterfaceElementModifier")
+
+-- | DSL injection for the public variant of hydra.java.syntax.AnnotationInterfaceElementModifier
+annotationInterfaceElementModifierPublic :: Typed.TypedTerm Syntax.AnnotationInterfaceElementModifier
+annotationInterfaceElementModifierPublic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceElementModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "public"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the annotationInterface variant of hydra.java.syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationAnnotationInterface :: Typed.TypedTerm Syntax.AnnotationInterfaceElementDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationAnnotationInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotationInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationAnnotationInterfaceMemberDeclaration :: Typed.TypedName Syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationAnnotationInterfaceMemberDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration")
+
+-- | DSL injection for the class variant of hydra.java.syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationClass x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "class"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the constant variant of hydra.java.syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationConstant :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationConstant x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "constant"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the interface variant of hydra.java.syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.AnnotationInterfaceMemberDeclaration
+annotationInterfaceMemberDeclarationInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "interface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the marker variant of hydra.java.syntax.Annotation
+annotationMarker :: Typed.TypedTerm Syntax.MarkerAnnotation -> Typed.TypedTerm Syntax.Annotation
+annotationMarker x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Annotation"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "marker"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the normal variant of hydra.java.syntax.Annotation
+annotationNormal :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm Syntax.Annotation
+annotationNormal x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Annotation"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "normal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the singleElement variant of hydra.java.syntax.Annotation
+annotationSingleElement :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm Syntax.Annotation
+annotationSingleElement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Annotation"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "singleElement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ArrayAccess
+arrayAccess :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ArrayAccess_Variant -> Typed.TypedTerm Syntax.ArrayAccess
+arrayAccess expression variant =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayAccess"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Typed.unTypedTerm variant)}]}))
+
+-- | DSL name token for hydra.java.syntax.ArrayAccess
+arrayAccessArrayAccess :: Typed.TypedName Syntax.ArrayAccess
+arrayAccessArrayAccess = Typed.TypedName (Model.Name "hydra.java.syntax.ArrayAccess")
+
+-- | DSL accessor for the expression field of hydra.java.syntax.ArrayAccess
+arrayAccessExpression :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm (Maybe Syntax.Expression)
+arrayAccessExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayAccess"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the variant field of hydra.java.syntax.ArrayAccess
+arrayAccessVariant :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm Syntax.ArrayAccess_Variant
+arrayAccessVariant x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayAccess"),
+        Model.projectionFieldName = (Model.Name "variant")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.ArrayAccess
+arrayAccessWithExpression :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ArrayAccess
+arrayAccessWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayAccess"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayAccess"),
+              Model.projectionFieldName = (Model.Name "variant")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the variant field of hydra.java.syntax.ArrayAccess
+arrayAccessWithVariant :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm Syntax.ArrayAccess_Variant -> Typed.TypedTerm Syntax.ArrayAccess
+arrayAccessWithVariant original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayAccess"),
+      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.java.syntax.ArrayAccess"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.ArrayAccess_Variant
+arrayAccess_VariantArrayAccess_Variant :: Typed.TypedName Syntax.ArrayAccess_Variant
+arrayAccess_VariantArrayAccess_Variant = Typed.TypedName (Model.Name "hydra.java.syntax.ArrayAccess_Variant")
+
+-- | DSL injection for the arrayCreationWithInitializer variant of hydra.java.syntax.ArrayAccess_Variant
+arrayAccess_VariantArrayCreationWithInitializer :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer -> Typed.TypedTerm Syntax.ArrayAccess_Variant
+arrayAccess_VariantArrayCreationWithInitializer x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayAccess_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "arrayCreationWithInitializer"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the name variant of hydra.java.syntax.ArrayAccess_Variant
+arrayAccess_VariantName :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.ArrayAccess_Variant
+arrayAccess_VariantName x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayAccess_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "name"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the primary variant of hydra.java.syntax.ArrayAccess_Variant
+arrayAccess_VariantPrimary :: Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression -> Typed.TypedTerm Syntax.ArrayAccess_Variant
+arrayAccess_VariantPrimary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayAccess_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ArrayCreationExpression
+arrayCreationExpressionArrayCreationExpression :: Typed.TypedName Syntax.ArrayCreationExpression
+arrayCreationExpressionArrayCreationExpression = Typed.TypedName (Model.Name "hydra.java.syntax.ArrayCreationExpression")
+
+-- | DSL injection for the noInit variant of hydra.java.syntax.ArrayCreationExpression
+arrayCreationExpressionNoInit :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpression
+arrayCreationExpressionNoInit x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "noInit"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the withInit variant of hydra.java.syntax.ArrayCreationExpression
+arrayCreationExpressionWithInit :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpression
+arrayCreationExpressionWithInit x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "withInit"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithInitializer
+arrayCreationExpressionWithInitializerArrayCreationExpressionWithInitializer :: Typed.TypedName Syntax.ArrayCreationExpressionWithInitializer
+arrayCreationExpressionWithInitializerArrayCreationExpressionWithInitializer =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer")
+
+-- | DSL injection for the classOrInterface variant of hydra.java.syntax.ArrayCreationExpressionWithInitializer
+arrayCreationExpressionWithInitializerClassOrInterface :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer
+arrayCreationExpressionWithInitializerClassOrInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classOrInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the primitive variant of hydra.java.syntax.ArrayCreationExpressionWithInitializer
+arrayCreationExpressionWithInitializerPrimitive :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer
+arrayCreationExpressionWithInitializerPrimitive x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primitive"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm [Syntax.Dims] -> Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterface type_ dims array =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm dims)},
+        Model.Field {
+          Model.fieldName = (Model.Name "array"),
+          Model.fieldTerm = (Typed.unTypedTerm array)}]}))
+
+-- | DSL accessor for the array field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceArray :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ArrayInitializer
+arrayCreationExpressionWithInitializer_ClassOrInterfaceArray x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+        Model.projectionFieldName = (Model.Name "array")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceArrayCreationExpressionWithInitializer_ClassOrInterface :: Typed.TypedName Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceArrayCreationExpressionWithInitializer_ClassOrInterface =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface")
+
+-- | DSL accessor for the dims field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm [Syntax.Dims]
+arrayCreationExpressionWithInitializer_ClassOrInterfaceDims x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+        Model.projectionFieldName = (Model.Name "dims")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType
+arrayCreationExpressionWithInitializer_ClassOrInterfaceType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the array field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceWithArray :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceWithArray original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "array"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the dims field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceWithDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm [Syntax.Dims] -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceWithDims original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "array"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "array")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceWithType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface
+arrayCreationExpressionWithInitializer_ClassOrInterfaceWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "array"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "array")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_Primitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm [Syntax.Dims] -> Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_Primitive type_ dims array =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm dims)},
+        Model.Field {
+          Model.fieldName = (Model.Name "array"),
+          Model.fieldTerm = (Typed.unTypedTerm array)}]}))
+
+-- | DSL accessor for the array field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveArray :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.ArrayInitializer
+arrayCreationExpressionWithInitializer_PrimitiveArray x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+        Model.projectionFieldName = (Model.Name "array")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveArrayCreationExpressionWithInitializer_Primitive :: Typed.TypedName Syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveArrayCreationExpressionWithInitializer_Primitive =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive")
+
+-- | DSL accessor for the dims field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm [Syntax.Dims]
+arrayCreationExpressionWithInitializer_PrimitiveDims x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+        Model.projectionFieldName = (Model.Name "dims")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
+arrayCreationExpressionWithInitializer_PrimitiveType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the array field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveWithArray :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveWithArray original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "array"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the dims field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveWithDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm [Syntax.Dims] -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveWithDims original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "array"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "array")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveWithType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithInitializer_Primitive
+arrayCreationExpressionWithInitializer_PrimitiveWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "array"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "array")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer
+arrayCreationExpressionWithoutInitializerArrayCreationExpressionWithoutInitializer :: Typed.TypedName Syntax.ArrayCreationExpressionWithoutInitializer
+arrayCreationExpressionWithoutInitializerArrayCreationExpressionWithoutInitializer =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer")
+
+-- | DSL injection for the classOrInterface variant of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer
+arrayCreationExpressionWithoutInitializerClassOrInterface :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer
+arrayCreationExpressionWithoutInitializerClassOrInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classOrInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the primitive variant of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer
+arrayCreationExpressionWithoutInitializerPrimitive :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer
+arrayCreationExpressionWithoutInitializerPrimitive x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primitive"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm [Syntax.DimExpr] -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterface type_ dimExprs dims =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dimExprs"),
+          Model.fieldTerm = (Typed.unTypedTerm dimExprs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm dims)}]}))
+
+-- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceArrayCreationExpressionWithoutInitializer_ClassOrInterface :: Typed.TypedName Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceArrayCreationExpressionWithoutInitializer_ClassOrInterface =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface")
+
+-- | DSL accessor for the dimExprs field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDimExprs :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm [Syntax.DimExpr]
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDimExprs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+        Model.projectionFieldName = (Model.Name "dimExprs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the dims field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm (Maybe Syntax.Dims)
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDims x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+        Model.projectionFieldName = (Model.Name "dims")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the dimExprs field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithDimExprs :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm [Syntax.DimExpr] -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithDimExprs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dimExprs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the dims field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithDims original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dimExprs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "dimExprs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+arrayCreationExpressionWithoutInitializer_ClassOrInterfaceWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dimExprs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "dimExprs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_Primitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm [Syntax.DimExpr] -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_Primitive type_ dimExprs dims =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dimExprs"),
+          Model.fieldTerm = (Typed.unTypedTerm dimExprs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm dims)}]}))
+
+-- | DSL name token for hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveArrayCreationExpressionWithoutInitializer_Primitive :: Typed.TypedName Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveArrayCreationExpressionWithoutInitializer_Primitive =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive")
+
+-- | DSL accessor for the dimExprs field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveDimExprs :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm [Syntax.DimExpr]
+arrayCreationExpressionWithoutInitializer_PrimitiveDimExprs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+        Model.projectionFieldName = (Model.Name "dimExprs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the dims field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm (Maybe Syntax.Dims)
+arrayCreationExpressionWithoutInitializer_PrimitiveDims x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+        Model.projectionFieldName = (Model.Name "dims")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
+arrayCreationExpressionWithoutInitializer_PrimitiveType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the dimExprs field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveWithDimExprs :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm [Syntax.DimExpr] -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveWithDimExprs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dimExprs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the dims field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveWithDims :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveWithDims original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dimExprs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "dimExprs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveWithType :: Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.ArrayCreationExpressionWithoutInitializer_Primitive
+arrayCreationExpressionWithoutInitializer_PrimitiveWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dimExprs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "dimExprs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.ArrayInitializer wrapper
+arrayInitializer :: Typed.TypedTerm [[Syntax.VariableInitializer]] -> Typed.TypedTerm Syntax.ArrayInitializer
+arrayInitializer x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ArrayInitializer"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ArrayInitializer
+arrayInitializerArrayInitializer :: Typed.TypedName Syntax.ArrayInitializer
+arrayInitializerArrayInitializer = Typed.TypedName (Model.Name "hydra.java.syntax.ArrayInitializer")
+
+-- | DSL constructor for hydra.java.syntax.ArrayType
+arrayType :: Typed.TypedTerm Syntax.Dims -> Typed.TypedTerm Syntax.ArrayType_Variant -> Typed.TypedTerm Syntax.ArrayType
+arrayType dims variant =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm dims)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Typed.unTypedTerm variant)}]}))
+
+-- | DSL name token for hydra.java.syntax.ArrayType
+arrayTypeArrayType :: Typed.TypedName Syntax.ArrayType
+arrayTypeArrayType = Typed.TypedName (Model.Name "hydra.java.syntax.ArrayType")
+
+-- | DSL accessor for the dims field of hydra.java.syntax.ArrayType
+arrayTypeDims :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.Dims
+arrayTypeDims x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayType"),
+        Model.projectionFieldName = (Model.Name "dims")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the variant field of hydra.java.syntax.ArrayType
+arrayTypeVariant :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.ArrayType_Variant
+arrayTypeVariant x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayType"),
+        Model.projectionFieldName = (Model.Name "variant")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the dims field of hydra.java.syntax.ArrayType
+arrayTypeWithDims :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.Dims -> Typed.TypedTerm Syntax.ArrayType
+arrayTypeWithDims original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayType"),
+              Model.projectionFieldName = (Model.Name "variant")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the variant field of hydra.java.syntax.ArrayType
+arrayTypeWithVariant :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.ArrayType_Variant -> Typed.TypedTerm Syntax.ArrayType
+arrayTypeWithVariant original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ArrayType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ArrayType"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.ArrayType_Variant
+arrayType_VariantArrayType_Variant :: Typed.TypedName Syntax.ArrayType_Variant
+arrayType_VariantArrayType_Variant = Typed.TypedName (Model.Name "hydra.java.syntax.ArrayType_Variant")
+
+-- | DSL injection for the classOrInterface variant of hydra.java.syntax.ArrayType_Variant
+arrayType_VariantClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ArrayType_Variant
+arrayType_VariantClassOrInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayType_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classOrInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the primitive variant of hydra.java.syntax.ArrayType_Variant
+arrayType_VariantPrimitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.ArrayType_Variant
+arrayType_VariantPrimitive x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayType_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primitive"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the variable variant of hydra.java.syntax.ArrayType_Variant
+arrayType_VariantVariable :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.ArrayType_Variant
+arrayType_VariantVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ArrayType_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.AssertStatement
+assertStatementAssertStatement :: Typed.TypedName Syntax.AssertStatement
+assertStatementAssertStatement = Typed.TypedName (Model.Name "hydra.java.syntax.AssertStatement")
+
+-- | DSL injection for the pair variant of hydra.java.syntax.AssertStatement
+assertStatementPair :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.AssertStatement
+assertStatementPair x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssertStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "pair"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the single variant of hydra.java.syntax.AssertStatement
+assertStatementSingle :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement
+assertStatementSingle x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssertStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "single"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.AssertStatement_Pair
+assertStatement_Pair :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement_Pair
+assertStatement_Pair first second =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AssertStatement_Pair"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "first"),
+          Model.fieldTerm = (Typed.unTypedTerm first)},
+        Model.Field {
+          Model.fieldName = (Model.Name "second"),
+          Model.fieldTerm = (Typed.unTypedTerm second)}]}))
+
+-- | DSL name token for hydra.java.syntax.AssertStatement_Pair
+assertStatement_PairAssertStatement_Pair :: Typed.TypedName Syntax.AssertStatement_Pair
+assertStatement_PairAssertStatement_Pair = Typed.TypedName (Model.Name "hydra.java.syntax.AssertStatement_Pair")
+
+-- | DSL accessor for the first field of hydra.java.syntax.AssertStatement_Pair
+assertStatement_PairFirst :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.Expression
+assertStatement_PairFirst x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AssertStatement_Pair"),
+        Model.projectionFieldName = (Model.Name "first")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the second field of hydra.java.syntax.AssertStatement_Pair
+assertStatement_PairSecond :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.Expression
+assertStatement_PairSecond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.AssertStatement_Pair"),
+        Model.projectionFieldName = (Model.Name "second")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the first field of hydra.java.syntax.AssertStatement_Pair
+assertStatement_PairWithFirst :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement_Pair
+assertStatement_PairWithFirst original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AssertStatement_Pair"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "first"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "second"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AssertStatement_Pair"),
+              Model.projectionFieldName = (Model.Name "second")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the second field of hydra.java.syntax.AssertStatement_Pair
+assertStatement_PairWithSecond :: Typed.TypedTerm Syntax.AssertStatement_Pair -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement_Pair
+assertStatement_PairWithSecond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.AssertStatement_Pair"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "first"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.AssertStatement_Pair"),
+              Model.projectionFieldName = (Model.Name "first")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "second"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.Assignment
+assignment :: Typed.TypedTerm Syntax.LeftHandSide -> Typed.TypedTerm Syntax.AssignmentOperator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Assignment
+assignment lhs op expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "op"),
+          Model.fieldTerm = (Typed.unTypedTerm op)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL name token for hydra.java.syntax.Assignment
+assignmentAssignment :: Typed.TypedName Syntax.Assignment
+assignmentAssignment = Typed.TypedName (Model.Name "hydra.java.syntax.Assignment")
+
+-- | DSL accessor for the expression field of hydra.java.syntax.Assignment
+assignmentExpression :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.Expression
+assignmentExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL injection for the assignment variant of hydra.java.syntax.AssignmentExpression
+assignmentExpressionAssignment :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.AssignmentExpression
+assignmentExpressionAssignment x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "assignment"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.AssignmentExpression
+assignmentExpressionAssignmentExpression :: Typed.TypedName Syntax.AssignmentExpression
+assignmentExpressionAssignmentExpression = Typed.TypedName (Model.Name "hydra.java.syntax.AssignmentExpression")
+
+-- | DSL injection for the conditional variant of hydra.java.syntax.AssignmentExpression
+assignmentExpressionConditional :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.AssignmentExpression
+assignmentExpressionConditional x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "conditional"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.Assignment
+assignmentLhs :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.LeftHandSide
+assignmentLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the op field of hydra.java.syntax.Assignment
+assignmentOp :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOp x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+        Model.projectionFieldName = (Model.Name "op")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL injection for the and variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorAnd :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorAnd =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "and"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.AssignmentOperator
+assignmentOperatorAssignmentOperator :: Typed.TypedName Syntax.AssignmentOperator
+assignmentOperatorAssignmentOperator = Typed.TypedName (Model.Name "hydra.java.syntax.AssignmentOperator")
+
+-- | DSL injection for the div variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorDiv :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorDiv =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "div"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the minus variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorMinus :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorMinus =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "minus"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the mod variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorMod :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorMod =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "mod"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the or variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorOr :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorOr =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "or"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the plus variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorPlus :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorPlus =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "plus"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the shiftLeft variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorShiftLeft :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorShiftLeft =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "shiftLeft"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the shiftRight variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorShiftRight :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorShiftRight =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "shiftRight"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the shiftRightZeroFill variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorShiftRightZeroFill :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorShiftRightZeroFill =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "shiftRightZeroFill"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the simple variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorSimple :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorSimple =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the times variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorTimes :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorTimes =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "times"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the xor variant of hydra.java.syntax.AssignmentOperator
+assignmentOperatorXor :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorXor =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "xor"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.Assignment
+assignmentWithExpression :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Assignment
+assignmentWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "op"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+              Model.projectionFieldName = (Model.Name "op")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.Assignment
+assignmentWithLhs :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.LeftHandSide -> Typed.TypedTerm Syntax.Assignment
+assignmentWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "op"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+              Model.projectionFieldName = (Model.Name "op")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the op field of hydra.java.syntax.Assignment
+assignmentWithOp :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.AssignmentOperator -> Typed.TypedTerm Syntax.Assignment
+assignmentWithOp original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "op"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Assignment"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.BasicForStatement
+basicForStatement :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.BasicForStatement
+basicForStatement cond body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.BasicForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL name token for hydra.java.syntax.BasicForStatement
+basicForStatementBasicForStatement :: Typed.TypedName Syntax.BasicForStatement
+basicForStatementBasicForStatement = Typed.TypedName (Model.Name "hydra.java.syntax.BasicForStatement")
+
+-- | DSL accessor for the body field of hydra.java.syntax.BasicForStatement
+basicForStatementBody :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.Statement
+basicForStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.BasicForStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.BasicForStatement
+basicForStatementCond :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.ForCond
+basicForStatementCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.BasicForStatement"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for hydra.java.syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIf :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIf cond body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL name token for hydra.java.syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIfBasicForStatementNoShortIf :: Typed.TypedName Syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIfBasicForStatementNoShortIf =
+    Typed.TypedName (Model.Name "hydra.java.syntax.BasicForStatementNoShortIf")
+
+-- | DSL accessor for the body field of hydra.java.syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIfBody :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+basicForStatementNoShortIfBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIfCond :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.ForCond
+basicForStatementNoShortIfCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIfWithBody :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIfWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIfWithCond :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm Syntax.BasicForStatementNoShortIf
+basicForStatementNoShortIfWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.BasicForStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          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.java.syntax.BasicForStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the body field of hydra.java.syntax.BasicForStatement
+basicForStatementWithBody :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.BasicForStatement
+basicForStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.BasicForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.BasicForStatement"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.BasicForStatement
+basicForStatementWithCond :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm Syntax.BasicForStatement
+basicForStatementWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.BasicForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          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.java.syntax.BasicForStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.Block wrapper
+block :: Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.Block
+block x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.Block"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.Block
+blockBlock :: Typed.TypedName Syntax.Block
+blockBlock = Typed.TypedName (Model.Name "hydra.java.syntax.Block")
+
+-- | DSL name token for hydra.java.syntax.BlockStatement
+blockStatementBlockStatement :: Typed.TypedName Syntax.BlockStatement
+blockStatementBlockStatement = Typed.TypedName (Model.Name "hydra.java.syntax.BlockStatement")
+
+-- | DSL injection for the localClassOrInterface variant of hydra.java.syntax.BlockStatement
+blockStatementLocalClassOrInterface :: Typed.TypedTerm Syntax.LocalClassOrInterfaceDeclaration -> Typed.TypedTerm Syntax.BlockStatement
+blockStatementLocalClassOrInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.BlockStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "localClassOrInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the localVariableDeclaration variant of hydra.java.syntax.BlockStatement
+blockStatementLocalVariableDeclaration :: Typed.TypedTerm Syntax.LocalVariableDeclarationStatement -> Typed.TypedTerm Syntax.BlockStatement
+blockStatementLocalVariableDeclaration x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.BlockStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "localVariableDeclaration"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the statement variant of hydra.java.syntax.BlockStatement
+blockStatementStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.BlockStatement
+blockStatementStatement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.BlockStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "statement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the array variant of hydra.java.syntax.BooleanArray
+booleanArrayArray :: Typed.TypedTerm Syntax.BooleanArray -> Typed.TypedTerm Syntax.BooleanArray
+booleanArrayArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.BooleanArray"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "array"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.BooleanArray
+booleanArrayBooleanArray :: Typed.TypedName Syntax.BooleanArray
+booleanArrayBooleanArray = Typed.TypedName (Model.Name "hydra.java.syntax.BooleanArray")
+
+-- | DSL injection for the simple variant of hydra.java.syntax.BooleanArray
+booleanArraySimple :: Typed.TypedTerm Syntax.BooleanArray
+booleanArraySimple =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.BooleanArray"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for the hydra.java.syntax.BreakStatement wrapper
+breakStatement :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.BreakStatement
+breakStatement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.BreakStatement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.BreakStatement
+breakStatementBreakStatement :: Typed.TypedName Syntax.BreakStatement
+breakStatementBreakStatement = Typed.TypedName (Model.Name "hydra.java.syntax.BreakStatement")
+
+-- | DSL constructor for the hydra.java.syntax.CaseConstant wrapper
+caseConstant :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.CaseConstant
+caseConstant x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.CaseConstant"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.CaseConstant
+caseConstantCaseConstant :: Typed.TypedName Syntax.CaseConstant
+caseConstantCaseConstant = Typed.TypedName (Model.Name "hydra.java.syntax.CaseConstant")
+
+-- | DSL constructor for hydra.java.syntax.CasePattern
+casePattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm (Maybe Syntax.Guard) -> Typed.TypedTerm Syntax.CasePattern
+casePattern pattern guard =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CasePattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Typed.unTypedTerm pattern)},
+        Model.Field {
+          Model.fieldName = (Model.Name "guard"),
+          Model.fieldTerm = (Typed.unTypedTerm guard)}]}))
+
+-- | DSL name token for hydra.java.syntax.CasePattern
+casePatternCasePattern :: Typed.TypedName Syntax.CasePattern
+casePatternCasePattern = Typed.TypedName (Model.Name "hydra.java.syntax.CasePattern")
+
+-- | DSL accessor for the guard field of hydra.java.syntax.CasePattern
+casePatternGuard :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm (Maybe Syntax.Guard)
+casePatternGuard x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CasePattern"),
+        Model.projectionFieldName = (Model.Name "guard")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the pattern field of hydra.java.syntax.CasePattern
+casePatternPattern :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm Syntax.Pattern
+casePatternPattern x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CasePattern"),
+        Model.projectionFieldName = (Model.Name "pattern")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the guard field of hydra.java.syntax.CasePattern
+casePatternWithGuard :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm (Maybe Syntax.Guard) -> Typed.TypedTerm Syntax.CasePattern
+casePatternWithGuard original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CasePattern"),
+      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.java.syntax.CasePattern"),
+              Model.projectionFieldName = (Model.Name "pattern")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "guard"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the pattern field of hydra.java.syntax.CasePattern
+casePatternWithPattern :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.CasePattern
+casePatternWithPattern original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CasePattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "guard"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CasePattern"),
+              Model.projectionFieldName = (Model.Name "guard")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.CastExpression
+castExpressionCastExpression :: Typed.TypedName Syntax.CastExpression
+castExpressionCastExpression = Typed.TypedName (Model.Name "hydra.java.syntax.CastExpression")
+
+-- | DSL injection for the lambda variant of hydra.java.syntax.CastExpression
+castExpressionLambda :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.CastExpression
+castExpressionLambda x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.CastExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "lambda"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the notPlusMinus variant of hydra.java.syntax.CastExpression
+castExpressionNotPlusMinus :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.CastExpression
+castExpressionNotPlusMinus x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.CastExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "notPlusMinus"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the primitive variant of hydra.java.syntax.CastExpression
+castExpressionPrimitive :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.CastExpression
+castExpressionPrimitive x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.CastExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primitive"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.CastExpression_Lambda
+castExpression_Lambda :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.CastExpression_Lambda
+castExpression_Lambda refAndBounds expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_Lambda"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "refAndBounds"),
+          Model.fieldTerm = (Typed.unTypedTerm refAndBounds)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL name token for hydra.java.syntax.CastExpression_Lambda
+castExpression_LambdaCastExpression_Lambda :: Typed.TypedName Syntax.CastExpression_Lambda
+castExpression_LambdaCastExpression_Lambda = Typed.TypedName (Model.Name "hydra.java.syntax.CastExpression_Lambda")
+
+-- | DSL accessor for the expression field of hydra.java.syntax.CastExpression_Lambda
+castExpression_LambdaExpression :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.LambdaExpression
+castExpression_LambdaExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_Lambda"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the refAndBounds field of hydra.java.syntax.CastExpression_Lambda
+castExpression_LambdaRefAndBounds :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
+castExpression_LambdaRefAndBounds x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_Lambda"),
+        Model.projectionFieldName = (Model.Name "refAndBounds")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.CastExpression_Lambda
+castExpression_LambdaWithExpression :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.CastExpression_Lambda
+castExpression_LambdaWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_Lambda"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "refAndBounds"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_Lambda"),
+              Model.projectionFieldName = (Model.Name "refAndBounds")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the refAndBounds field of hydra.java.syntax.CastExpression_Lambda
+castExpression_LambdaWithRefAndBounds :: Typed.TypedTerm Syntax.CastExpression_Lambda -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.CastExpression_Lambda
+castExpression_LambdaWithRefAndBounds original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_Lambda"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "refAndBounds"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_Lambda"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinus :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinus refAndBounds expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "refAndBounds"),
+          Model.fieldTerm = (Typed.unTypedTerm refAndBounds)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL name token for hydra.java.syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinusCastExpression_NotPlusMinus :: Typed.TypedName Syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinusCastExpression_NotPlusMinus =
+    Typed.TypedName (Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus")
+
+-- | DSL accessor for the expression field of hydra.java.syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinusExpression :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.UnaryExpression
+castExpression_NotPlusMinusExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the refAndBounds field of hydra.java.syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinusRefAndBounds :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
+castExpression_NotPlusMinusRefAndBounds x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
+        Model.projectionFieldName = (Model.Name "refAndBounds")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinusWithExpression :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinusWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "refAndBounds"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
+              Model.projectionFieldName = (Model.Name "refAndBounds")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the refAndBounds field of hydra.java.syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinusWithRefAndBounds :: Typed.TypedTerm Syntax.CastExpression_NotPlusMinus -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.CastExpression_NotPlusMinus
+castExpression_NotPlusMinusWithRefAndBounds original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "refAndBounds"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.CastExpression_Primitive
+castExpression_Primitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.CastExpression_Primitive
+castExpression_Primitive type_ expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL name token for hydra.java.syntax.CastExpression_Primitive
+castExpression_PrimitiveCastExpression_Primitive :: Typed.TypedName Syntax.CastExpression_Primitive
+castExpression_PrimitiveCastExpression_Primitive =
+    Typed.TypedName (Model.Name "hydra.java.syntax.CastExpression_Primitive")
+
+-- | DSL accessor for the expression field of hydra.java.syntax.CastExpression_Primitive
+castExpression_PrimitiveExpression :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.UnaryExpression
+castExpression_PrimitiveExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_Primitive"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.CastExpression_Primitive
+castExpression_PrimitiveType :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
+castExpression_PrimitiveType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_Primitive"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.CastExpression_Primitive
+castExpression_PrimitiveWithExpression :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.CastExpression_Primitive
+castExpression_PrimitiveWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_Primitive"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.CastExpression_Primitive
+castExpression_PrimitiveWithType :: Typed.TypedTerm Syntax.CastExpression_Primitive -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.CastExpression_Primitive
+castExpression_PrimitiveWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_Primitive"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_Primitive"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.CastExpression_RefAndBounds
+castExpression_RefAndBounds :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm [Syntax.AdditionalBound] -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
+castExpression_RefAndBounds type_ bounds =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "bounds"),
+          Model.fieldTerm = (Typed.unTypedTerm bounds)}]}))
+
+-- | DSL accessor for the bounds field of hydra.java.syntax.CastExpression_RefAndBounds
+castExpression_RefAndBoundsBounds :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm [Syntax.AdditionalBound]
+castExpression_RefAndBoundsBounds x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
+        Model.projectionFieldName = (Model.Name "bounds")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.CastExpression_RefAndBounds
+castExpression_RefAndBoundsCastExpression_RefAndBounds :: Typed.TypedName Syntax.CastExpression_RefAndBounds
+castExpression_RefAndBoundsCastExpression_RefAndBounds =
+    Typed.TypedName (Model.Name "hydra.java.syntax.CastExpression_RefAndBounds")
+
+-- | DSL accessor for the type field of hydra.java.syntax.CastExpression_RefAndBounds
+castExpression_RefAndBoundsType :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.ReferenceType
+castExpression_RefAndBoundsType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the bounds field of hydra.java.syntax.CastExpression_RefAndBounds
+castExpression_RefAndBoundsWithBounds :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm [Syntax.AdditionalBound] -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
+castExpression_RefAndBoundsWithBounds original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "bounds"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.CastExpression_RefAndBounds
+castExpression_RefAndBoundsWithType :: Typed.TypedTerm Syntax.CastExpression_RefAndBounds -> Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.CastExpression_RefAndBounds
+castExpression_RefAndBoundsWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "bounds"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CastExpression_RefAndBounds"),
+              Model.projectionFieldName = (Model.Name "bounds")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.CatchClause
+catchClause :: Typed.TypedTerm (Maybe Syntax.CatchFormalParameter) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.CatchClause
+catchClause parameter block =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchClause"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameter"),
+          Model.fieldTerm = (Typed.unTypedTerm parameter)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm block)}]}))
+
+-- | DSL accessor for the block field of hydra.java.syntax.CatchClause
+catchClauseBlock :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm Syntax.Block
+catchClauseBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchClause"),
+        Model.projectionFieldName = (Model.Name "block")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.CatchClause
+catchClauseCatchClause :: Typed.TypedName Syntax.CatchClause
+catchClauseCatchClause = Typed.TypedName (Model.Name "hydra.java.syntax.CatchClause")
+
+-- | DSL accessor for the parameter field of hydra.java.syntax.CatchClause
+catchClauseParameter :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm (Maybe Syntax.CatchFormalParameter)
+catchClauseParameter x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchClause"),
+        Model.projectionFieldName = (Model.Name "parameter")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the block field of hydra.java.syntax.CatchClause
+catchClauseWithBlock :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.CatchClause
+catchClauseWithBlock original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchClause"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameter"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchClause"),
+              Model.projectionFieldName = (Model.Name "parameter")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the parameter field of hydra.java.syntax.CatchClause
+catchClauseWithParameter :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm (Maybe Syntax.CatchFormalParameter) -> Typed.TypedTerm Syntax.CatchClause
+catchClauseWithParameter original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchClause"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameter"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchClause"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.CatchFormalParameter
+catchFormalParameter :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.CatchFormalParameter
+catchFormalParameter modifiers type_ id =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm id)}]}))
+
+-- | DSL name token for hydra.java.syntax.CatchFormalParameter
+catchFormalParameterCatchFormalParameter :: Typed.TypedName Syntax.CatchFormalParameter
+catchFormalParameterCatchFormalParameter = Typed.TypedName (Model.Name "hydra.java.syntax.CatchFormalParameter")
+
+-- | DSL accessor for the id field of hydra.java.syntax.CatchFormalParameter
+catchFormalParameterId :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm Syntax.VariableDeclaratorId
+catchFormalParameterId x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+        Model.projectionFieldName = (Model.Name "id")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.CatchFormalParameter
+catchFormalParameterModifiers :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm [Syntax.VariableModifier]
+catchFormalParameterModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.CatchFormalParameter
+catchFormalParameterType :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm Syntax.CatchType
+catchFormalParameterType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the id field of hydra.java.syntax.CatchFormalParameter
+catchFormalParameterWithId :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.CatchFormalParameter
+catchFormalParameterWithId original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.CatchFormalParameter"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.CatchFormalParameter
+catchFormalParameterWithModifiers :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.CatchFormalParameter
+catchFormalParameterWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.CatchFormalParameter"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.CatchFormalParameter
+catchFormalParameterWithType :: Typed.TypedTerm Syntax.CatchFormalParameter -> Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm Syntax.CatchFormalParameter
+catchFormalParameterWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchFormalParameter"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.CatchType
+catchType :: Typed.TypedTerm Syntax.UnannClassType -> Typed.TypedTerm [Syntax.ClassType] -> Typed.TypedTerm Syntax.CatchType
+catchType type_ types =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Typed.unTypedTerm types)}]}))
+
+-- | DSL name token for hydra.java.syntax.CatchType
+catchTypeCatchType :: Typed.TypedName Syntax.CatchType
+catchTypeCatchType = Typed.TypedName (Model.Name "hydra.java.syntax.CatchType")
+
+-- | DSL accessor for the type field of hydra.java.syntax.CatchType
+catchTypeType :: Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm Syntax.UnannClassType
+catchTypeType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchType"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the types field of hydra.java.syntax.CatchType
+catchTypeTypes :: Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm [Syntax.ClassType]
+catchTypeTypes x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchType"),
+        Model.projectionFieldName = (Model.Name "types")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the type field of hydra.java.syntax.CatchType
+catchTypeWithType :: Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm Syntax.UnannClassType -> Typed.TypedTerm Syntax.CatchType
+catchTypeWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchType"),
+              Model.projectionFieldName = (Model.Name "types")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the types field of hydra.java.syntax.CatchType
+catchTypeWithTypes :: Typed.TypedTerm Syntax.CatchType -> Typed.TypedTerm [Syntax.ClassType] -> Typed.TypedTerm Syntax.CatchType
+catchTypeWithTypes original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CatchType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CatchType"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for the hydra.java.syntax.Catches wrapper
+catches :: Typed.TypedTerm [Syntax.CatchClause] -> Typed.TypedTerm Syntax.Catches
+catches x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.Catches"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.Catches
+catchesCatches :: Typed.TypedName Syntax.Catches
+catchesCatches = Typed.TypedName (Model.Name "hydra.java.syntax.Catches")
+
+-- | DSL constructor for the hydra.java.syntax.ClassBody wrapper
+classBody :: Typed.TypedTerm [Syntax.ClassBodyDeclarationWithComments] -> Typed.TypedTerm Syntax.ClassBody
+classBody x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ClassBody"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ClassBody
+classBodyClassBody :: Typed.TypedName Syntax.ClassBody
+classBodyClassBody = Typed.TypedName (Model.Name "hydra.java.syntax.ClassBody")
+
+-- | DSL name token for hydra.java.syntax.ClassBodyDeclaration
+classBodyDeclarationClassBodyDeclaration :: Typed.TypedName Syntax.ClassBodyDeclaration
+classBodyDeclarationClassBodyDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.ClassBodyDeclaration")
+
+-- | DSL injection for the classMember variant of hydra.java.syntax.ClassBodyDeclaration
+classBodyDeclarationClassMember :: Typed.TypedTerm Syntax.ClassMemberDeclaration -> Typed.TypedTerm Syntax.ClassBodyDeclaration
+classBodyDeclarationClassMember x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classMember"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the constructorDeclaration variant of hydra.java.syntax.ClassBodyDeclaration
+classBodyDeclarationConstructorDeclaration :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ClassBodyDeclaration
+classBodyDeclarationConstructorDeclaration x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "constructorDeclaration"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the instanceInitializer variant of hydra.java.syntax.ClassBodyDeclaration
+classBodyDeclarationInstanceInitializer :: Typed.TypedTerm Syntax.InstanceInitializer -> Typed.TypedTerm Syntax.ClassBodyDeclaration
+classBodyDeclarationInstanceInitializer x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "instanceInitializer"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the staticInitializer variant of hydra.java.syntax.ClassBodyDeclaration
+classBodyDeclarationStaticInitializer :: Typed.TypedTerm Syntax.StaticInitializer -> Typed.TypedTerm Syntax.ClassBodyDeclaration
+classBodyDeclarationStaticInitializer x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "staticInitializer"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithComments :: Typed.TypedTerm Syntax.ClassBodyDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithComments value comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm value)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL name token for hydra.java.syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithCommentsClassBodyDeclarationWithComments :: Typed.TypedName Syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithCommentsClassBodyDeclarationWithComments =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ClassBodyDeclarationWithComments")
+
+-- | DSL accessor for the comments field of hydra.java.syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments -> Typed.TypedTerm (Maybe String)
+classBodyDeclarationWithCommentsComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the value field of hydra.java.syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithCommentsValue :: Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments -> Typed.TypedTerm Syntax.ClassBodyDeclaration
+classBodyDeclarationWithCommentsValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the comments field of hydra.java.syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithCommentsWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
+      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.java.syntax.ClassBodyDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the value field of hydra.java.syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithCommentsWithValue :: Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments -> Typed.TypedTerm Syntax.ClassBodyDeclaration -> Typed.TypedTerm Syntax.ClassBodyDeclarationWithComments
+classBodyDeclarationWithCommentsWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          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.java.syntax.ClassBodyDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.ClassDeclaration
+classDeclarationClassDeclaration :: Typed.TypedName Syntax.ClassDeclaration
+classDeclarationClassDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.ClassDeclaration")
+
+-- | DSL injection for the enum variant of hydra.java.syntax.ClassDeclaration
+classDeclarationEnum :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.ClassDeclaration
+classDeclarationEnum x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "enum"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the normal variant of hydra.java.syntax.ClassDeclaration
+classDeclarationNormal :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.ClassDeclaration
+classDeclarationNormal x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "normal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the record variant of hydra.java.syntax.ClassDeclaration
+classDeclarationRecord :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.ClassDeclaration
+classDeclarationRecord x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "record"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ClassInstanceCreationExpression
+classInstanceCreationExpression :: Typed.TypedTerm (Maybe Syntax.ClassInstanceCreationExpression_Qualifier) -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression
+classInstanceCreationExpression qualifier expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm qualifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL name token for hydra.java.syntax.ClassInstanceCreationExpression
+classInstanceCreationExpressionClassInstanceCreationExpression :: Typed.TypedName Syntax.ClassInstanceCreationExpression
+classInstanceCreationExpressionClassInstanceCreationExpression =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression")
+
+-- | DSL accessor for the expression field of hydra.java.syntax.ClassInstanceCreationExpression
+classInstanceCreationExpressionExpression :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
+classInstanceCreationExpressionExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the qualifier field of hydra.java.syntax.ClassInstanceCreationExpression
+classInstanceCreationExpressionQualifier :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm (Maybe Syntax.ClassInstanceCreationExpression_Qualifier)
+classInstanceCreationExpressionQualifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
+        Model.projectionFieldName = (Model.Name "qualifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.ClassInstanceCreationExpression
+classInstanceCreationExpressionWithExpression :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression
+classInstanceCreationExpressionWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "qualifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the qualifier field of hydra.java.syntax.ClassInstanceCreationExpression
+classInstanceCreationExpressionWithQualifier :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm (Maybe Syntax.ClassInstanceCreationExpression_Qualifier) -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression
+classInstanceCreationExpressionWithQualifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.ClassInstanceCreationExpression_Qualifier
+classInstanceCreationExpression_QualifierClassInstanceCreationExpression_Qualifier :: Typed.TypedName Syntax.ClassInstanceCreationExpression_Qualifier
+classInstanceCreationExpression_QualifierClassInstanceCreationExpression_Qualifier =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression_Qualifier")
+
+-- | DSL injection for the expression variant of hydra.java.syntax.ClassInstanceCreationExpression_Qualifier
+classInstanceCreationExpression_QualifierExpression :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression_Qualifier
+classInstanceCreationExpression_QualifierExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression_Qualifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the primary variant of hydra.java.syntax.ClassInstanceCreationExpression_Qualifier
+classInstanceCreationExpression_QualifierPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.ClassInstanceCreationExpression_Qualifier
+classInstanceCreationExpression_QualifierPrimary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassInstanceCreationExpression_Qualifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the boolean variant of hydra.java.syntax.ClassLiteral
+classLiteralBoolean :: Typed.TypedTerm Syntax.BooleanArray -> Typed.TypedTerm Syntax.ClassLiteral
+classLiteralBoolean x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassLiteral"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "boolean"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ClassLiteral
+classLiteralClassLiteral :: Typed.TypedName Syntax.ClassLiteral
+classLiteralClassLiteral = Typed.TypedName (Model.Name "hydra.java.syntax.ClassLiteral")
+
+-- | DSL injection for the numericType variant of hydra.java.syntax.ClassLiteral
+classLiteralNumericType :: Typed.TypedTerm Syntax.NumericTypeArray -> Typed.TypedTerm Syntax.ClassLiteral
+classLiteralNumericType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassLiteral"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "numericType"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the type variant of hydra.java.syntax.ClassLiteral
+classLiteralType :: Typed.TypedTerm Syntax.TypeNameArray -> Typed.TypedTerm Syntax.ClassLiteral
+classLiteralType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassLiteral"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "type"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the void variant of hydra.java.syntax.ClassLiteral
+classLiteralVoid :: Typed.TypedTerm Syntax.ClassLiteral
+classLiteralVoid =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassLiteral"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "void"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the class variant of hydra.java.syntax.ClassMemberDeclaration
+classMemberDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.ClassMemberDeclaration
+classMemberDeclarationClass x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "class"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ClassMemberDeclaration
+classMemberDeclarationClassMemberDeclaration :: Typed.TypedName Syntax.ClassMemberDeclaration
+classMemberDeclarationClassMemberDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.ClassMemberDeclaration")
+
+-- | DSL injection for the field variant of hydra.java.syntax.ClassMemberDeclaration
+classMemberDeclarationField :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm Syntax.ClassMemberDeclaration
+classMemberDeclarationField x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "field"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the interface variant of hydra.java.syntax.ClassMemberDeclaration
+classMemberDeclarationInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.ClassMemberDeclaration
+classMemberDeclarationInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "interface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the method variant of hydra.java.syntax.ClassMemberDeclaration
+classMemberDeclarationMethod :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.ClassMemberDeclaration
+classMemberDeclarationMethod x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "method"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the none variant of hydra.java.syntax.ClassMemberDeclaration
+classMemberDeclarationNone :: Typed.TypedTerm Syntax.ClassMemberDeclaration
+classMemberDeclarationNone =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "none"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the abstract variant of hydra.java.syntax.ClassModifier
+classModifierAbstract :: Typed.TypedTerm Syntax.ClassModifier
+classModifierAbstract =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "abstract"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.ClassModifier
+classModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.ClassModifier
+classModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ClassModifier
+classModifierClassModifier :: Typed.TypedName Syntax.ClassModifier
+classModifierClassModifier = Typed.TypedName (Model.Name "hydra.java.syntax.ClassModifier")
+
+-- | DSL injection for the final variant of hydra.java.syntax.ClassModifier
+classModifierFinal :: Typed.TypedTerm Syntax.ClassModifier
+classModifierFinal =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "final"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the nonSealed variant of hydra.java.syntax.ClassModifier
+classModifierNonSealed :: Typed.TypedTerm Syntax.ClassModifier
+classModifierNonSealed =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "nonSealed"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the private variant of hydra.java.syntax.ClassModifier
+classModifierPrivate :: Typed.TypedTerm Syntax.ClassModifier
+classModifierPrivate =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "private"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the protected variant of hydra.java.syntax.ClassModifier
+classModifierProtected :: Typed.TypedTerm Syntax.ClassModifier
+classModifierProtected =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "protected"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the public variant of hydra.java.syntax.ClassModifier
+classModifierPublic :: Typed.TypedTerm Syntax.ClassModifier
+classModifierPublic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "public"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the sealed variant of hydra.java.syntax.ClassModifier
+classModifierSealed :: Typed.TypedTerm Syntax.ClassModifier
+classModifierSealed =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "sealed"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the static variant of hydra.java.syntax.ClassModifier
+classModifierStatic :: Typed.TypedTerm Syntax.ClassModifier
+classModifierStatic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "static"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the strictfp variant of hydra.java.syntax.ClassModifier
+classModifierStrictfp :: Typed.TypedTerm Syntax.ClassModifier
+classModifierStrictfp =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "strictfp"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the class variant of hydra.java.syntax.ClassOrInterfaceType
+classOrInterfaceTypeClass :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.ClassOrInterfaceType
+classOrInterfaceTypeClass x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "class"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ClassOrInterfaceType
+classOrInterfaceTypeClassOrInterfaceType :: Typed.TypedName Syntax.ClassOrInterfaceType
+classOrInterfaceTypeClassOrInterfaceType = Typed.TypedName (Model.Name "hydra.java.syntax.ClassOrInterfaceType")
+
+-- | DSL injection for the interface variant of hydra.java.syntax.ClassOrInterfaceType
+classOrInterfaceTypeInterface :: Typed.TypedTerm Syntax.InterfaceType -> Typed.TypedTerm Syntax.ClassOrInterfaceType
+classOrInterfaceTypeInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "interface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiate :: Typed.TypedTerm [Syntax.AnnotatedIdentifier] -> Typed.TypedTerm (Maybe Syntax.TypeArgumentsOrDiamond) -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiate identifiers typeArguments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm identifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)}]}))
+
+-- | DSL name token for hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiateClassOrInterfaceTypeToInstantiate :: Typed.TypedName Syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiateClassOrInterfaceTypeToInstantiate =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate")
+
+-- | DSL accessor for the identifiers field of hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiateIdentifiers :: Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm [Syntax.AnnotatedIdentifier]
+classOrInterfaceTypeToInstantiateIdentifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
+        Model.projectionFieldName = (Model.Name "identifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiateTypeArguments :: Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm (Maybe Syntax.TypeArgumentsOrDiamond)
+classOrInterfaceTypeToInstantiateTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifiers field of hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiateWithIdentifiers :: Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm [Syntax.AnnotatedIdentifier] -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiateWithIdentifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiateWithTypeArguments :: Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm (Maybe Syntax.TypeArgumentsOrDiamond) -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate
+classOrInterfaceTypeToInstantiateWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"),
+              Model.projectionFieldName = (Model.Name "identifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.ClassType
+classType :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.ClassTypeQualifier -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.ClassType
+classType annotations qualifier identifier arguments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm qualifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm arguments)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.ClassType
+classTypeAnnotations :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.Annotation]
+classTypeAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the arguments field of hydra.java.syntax.ClassType
+classTypeArguments :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.TypeArgument]
+classTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+        Model.projectionFieldName = (Model.Name "arguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ClassType
+classTypeClassType :: Typed.TypedName Syntax.ClassType
+classTypeClassType = Typed.TypedName (Model.Name "hydra.java.syntax.ClassType")
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.ClassType
+classTypeIdentifier :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.TypeIdentifier
+classTypeIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the qualifier field of hydra.java.syntax.ClassType
+classTypeQualifier :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.ClassTypeQualifier
+classTypeQualifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+        Model.projectionFieldName = (Model.Name "qualifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ClassTypeQualifier
+classTypeQualifierClassTypeQualifier :: Typed.TypedName Syntax.ClassTypeQualifier
+classTypeQualifierClassTypeQualifier = Typed.TypedName (Model.Name "hydra.java.syntax.ClassTypeQualifier")
+
+-- | DSL injection for the none variant of hydra.java.syntax.ClassTypeQualifier
+classTypeQualifierNone :: Typed.TypedTerm Syntax.ClassTypeQualifier
+classTypeQualifierNone =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassTypeQualifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "none"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the package variant of hydra.java.syntax.ClassTypeQualifier
+classTypeQualifierPackage :: Typed.TypedTerm Syntax.PackageName -> Typed.TypedTerm Syntax.ClassTypeQualifier
+classTypeQualifierPackage x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassTypeQualifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "package"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the parent variant of hydra.java.syntax.ClassTypeQualifier
+classTypeQualifierParent :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ClassTypeQualifier
+classTypeQualifierParent x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ClassTypeQualifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "parent"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL updater for the annotations field of hydra.java.syntax.ClassType
+classTypeWithAnnotations :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.ClassType
+classTypeWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "qualifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the arguments field of hydra.java.syntax.ClassType
+classTypeWithArguments :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.ClassType
+classTypeWithArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "qualifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.ClassType
+classTypeWithIdentifier :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.ClassType
+classTypeWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "qualifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          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.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the qualifier field of hydra.java.syntax.ClassType
+classTypeWithQualifier :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.ClassTypeQualifier -> Typed.TypedTerm Syntax.ClassType
+classTypeWithQualifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.ClassType"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.CompactConstructorDeclaration
+compactConstructorDeclaration :: Typed.TypedTerm [Syntax.ConstructorModifier] -> Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm Syntax.CompactConstructorDeclaration
+compactConstructorDeclaration modifiers name body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.CompactConstructorDeclaration
+compactConstructorDeclarationBody :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorBody
+compactConstructorDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.CompactConstructorDeclaration
+compactConstructorDeclarationCompactConstructorDeclaration :: Typed.TypedName Syntax.CompactConstructorDeclaration
+compactConstructorDeclarationCompactConstructorDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.CompactConstructorDeclaration")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.CompactConstructorDeclaration
+compactConstructorDeclarationModifiers :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm [Syntax.ConstructorModifier]
+compactConstructorDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.java.syntax.CompactConstructorDeclaration
+compactConstructorDeclarationName :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.SimpleTypeName
+compactConstructorDeclarationName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.CompactConstructorDeclaration
+compactConstructorDeclarationWithBody :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm Syntax.CompactConstructorDeclaration
+compactConstructorDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.CompactConstructorDeclaration
+compactConstructorDeclarationWithModifiers :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm [Syntax.ConstructorModifier] -> Typed.TypedTerm Syntax.CompactConstructorDeclaration
+compactConstructorDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            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.java.syntax.CompactConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the name field of hydra.java.syntax.CompactConstructorDeclaration
+compactConstructorDeclarationWithName :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm Syntax.CompactConstructorDeclaration
+compactConstructorDeclarationWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.CompactConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          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.java.syntax.CompactConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.CompilationUnit
+compilationUnitCompilationUnit :: Typed.TypedName Syntax.CompilationUnit
+compilationUnitCompilationUnit = Typed.TypedName (Model.Name "hydra.java.syntax.CompilationUnit")
+
+-- | DSL injection for the modular variant of hydra.java.syntax.CompilationUnit
+compilationUnitModular :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm Syntax.CompilationUnit
+compilationUnitModular x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.CompilationUnit"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "modular"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the ordinary variant of hydra.java.syntax.CompilationUnit
+compilationUnitOrdinary :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm Syntax.CompilationUnit
+compilationUnitOrdinary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.CompilationUnit"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "ordinary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.ConditionalAndExpression wrapper
+conditionalAndExpression :: Typed.TypedTerm [Syntax.InclusiveOrExpression] -> Typed.TypedTerm Syntax.ConditionalAndExpression
+conditionalAndExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ConditionalAndExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ConditionalAndExpression
+conditionalAndExpressionConditionalAndExpression :: Typed.TypedName Syntax.ConditionalAndExpression
+conditionalAndExpressionConditionalAndExpression =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ConditionalAndExpression")
+
+-- | DSL name token for hydra.java.syntax.ConditionalExpression
+conditionalExpressionConditionalExpression :: Typed.TypedName Syntax.ConditionalExpression
+conditionalExpressionConditionalExpression = Typed.TypedName (Model.Name "hydra.java.syntax.ConditionalExpression")
+
+-- | DSL injection for the simple variant of hydra.java.syntax.ConditionalExpression
+conditionalExpressionSimple :: Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.ConditionalExpression
+conditionalExpressionSimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the ternaryCond variant of hydra.java.syntax.ConditionalExpression
+conditionalExpressionTernaryCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalExpression
+conditionalExpressionTernaryCond x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "ternaryCond"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the ternaryLambda variant of hydra.java.syntax.ConditionalExpression
+conditionalExpressionTernaryLambda :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.ConditionalExpression
+conditionalExpressionTernaryLambda x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "ternaryLambda"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCond :: Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCond cond ifTrue ifFalse =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifTrue"),
+          Model.fieldTerm = (Typed.unTypedTerm ifTrue)},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifFalse"),
+          Model.fieldTerm = (Typed.unTypedTerm ifFalse)}]}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalOrExpression
+conditionalExpression_TernaryCondCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondConditionalExpression_TernaryCond :: Typed.TypedName Syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondConditionalExpression_TernaryCond =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond")
+
+-- | DSL accessor for the ifFalse field of hydra.java.syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondIfFalse :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalExpression
+conditionalExpression_TernaryCondIfFalse x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+        Model.projectionFieldName = (Model.Name "ifFalse")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the ifTrue field of hydra.java.syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondIfTrue :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.Expression
+conditionalExpression_TernaryCondIfTrue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+        Model.projectionFieldName = (Model.Name "ifTrue")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondWithCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifTrue"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+              Model.projectionFieldName = (Model.Name "ifTrue")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifFalse"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+              Model.projectionFieldName = (Model.Name "ifFalse")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the ifFalse field of hydra.java.syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondWithIfFalse :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondWithIfFalse original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifTrue"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+              Model.projectionFieldName = (Model.Name "ifTrue")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifFalse"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the ifTrue field of hydra.java.syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondWithIfTrue :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryCond
+conditionalExpression_TernaryCondWithIfTrue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifTrue"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifFalse"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"),
+              Model.projectionFieldName = (Model.Name "ifFalse")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambda :: Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambda cond ifTrue ifFalse =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifTrue"),
+          Model.fieldTerm = (Typed.unTypedTerm ifTrue)},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifFalse"),
+          Model.fieldTerm = (Typed.unTypedTerm ifFalse)}]}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.ConditionalOrExpression
+conditionalExpression_TernaryLambdaCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaConditionalExpression_TernaryLambda :: Typed.TypedName Syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaConditionalExpression_TernaryLambda =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda")
+
+-- | DSL accessor for the ifFalse field of hydra.java.syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaIfFalse :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.LambdaExpression
+conditionalExpression_TernaryLambdaIfFalse x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+        Model.projectionFieldName = (Model.Name "ifFalse")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the ifTrue field of hydra.java.syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaIfTrue :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.Expression
+conditionalExpression_TernaryLambdaIfTrue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+        Model.projectionFieldName = (Model.Name "ifTrue")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaWithCond :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifTrue"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+              Model.projectionFieldName = (Model.Name "ifTrue")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifFalse"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+              Model.projectionFieldName = (Model.Name "ifFalse")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the ifFalse field of hydra.java.syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaWithIfFalse :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaWithIfFalse original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifTrue"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+              Model.projectionFieldName = (Model.Name "ifTrue")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifFalse"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the ifTrue field of hydra.java.syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaWithIfTrue :: Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression_TernaryLambda
+conditionalExpression_TernaryLambdaWithIfTrue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifTrue"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "ifFalse"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"),
+              Model.projectionFieldName = (Model.Name "ifFalse")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.ConditionalOrExpression wrapper
+conditionalOrExpression :: Typed.TypedTerm [Syntax.ConditionalAndExpression] -> Typed.TypedTerm Syntax.ConditionalOrExpression
+conditionalOrExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ConditionalOrExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ConditionalOrExpression
+conditionalOrExpressionConditionalOrExpression :: Typed.TypedName Syntax.ConditionalOrExpression
+conditionalOrExpressionConditionalOrExpression = Typed.TypedName (Model.Name "hydra.java.syntax.ConditionalOrExpression")
+
+-- | DSL constructor for hydra.java.syntax.ConstantDeclaration
+constantDeclaration :: Typed.TypedTerm [Syntax.ConstantModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.ConstantDeclaration
+constantDeclaration modifiers type_ variables =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variables"),
+          Model.fieldTerm = (Typed.unTypedTerm variables)}]}))
+
+-- | DSL name token for hydra.java.syntax.ConstantDeclaration
+constantDeclarationConstantDeclaration :: Typed.TypedName Syntax.ConstantDeclaration
+constantDeclarationConstantDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.ConstantDeclaration")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.ConstantDeclaration
+constantDeclarationModifiers :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm [Syntax.ConstantModifier]
+constantDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.ConstantDeclaration
+constantDeclarationType :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm Syntax.UnannType
+constantDeclarationType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the variables field of hydra.java.syntax.ConstantDeclaration
+constantDeclarationVariables :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator]
+constantDeclarationVariables x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+        Model.projectionFieldName = (Model.Name "variables")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.ConstantDeclaration
+constantDeclarationWithModifiers :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm [Syntax.ConstantModifier] -> Typed.TypedTerm Syntax.ConstantDeclaration
+constantDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.ConstantDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "variables"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+              Model.projectionFieldName = (Model.Name "variables")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.ConstantDeclaration
+constantDeclarationWithType :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.ConstantDeclaration
+constantDeclarationWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variables"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+              Model.projectionFieldName = (Model.Name "variables")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the variables field of hydra.java.syntax.ConstantDeclaration
+constantDeclarationWithVariables :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.ConstantDeclaration
+constantDeclarationWithVariables original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstantDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.ConstantDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "variables"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for the hydra.java.syntax.ConstantExpression wrapper
+constantExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConstantExpression
+constantExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ConstantExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ConstantExpression
+constantExpressionConstantExpression :: Typed.TypedName Syntax.ConstantExpression
+constantExpressionConstantExpression = Typed.TypedName (Model.Name "hydra.java.syntax.ConstantExpression")
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.ConstantModifier
+constantModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.ConstantModifier
+constantModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConstantModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ConstantModifier
+constantModifierConstantModifier :: Typed.TypedName Syntax.ConstantModifier
+constantModifierConstantModifier = Typed.TypedName (Model.Name "hydra.java.syntax.ConstantModifier")
+
+-- | DSL injection for the final variant of hydra.java.syntax.ConstantModifier
+constantModifierFinal :: Typed.TypedTerm Syntax.ConstantModifier
+constantModifierFinal =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConstantModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "final"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the public variant of hydra.java.syntax.ConstantModifier
+constantModifierPublic :: Typed.TypedTerm Syntax.ConstantModifier
+constantModifierPublic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConstantModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "public"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the static variant of hydra.java.syntax.ConstantModifier
+constantModifierStatic :: Typed.TypedTerm Syntax.ConstantModifier
+constantModifierStatic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConstantModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "static"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for hydra.java.syntax.ConstructorBody
+constructorBody :: Typed.TypedTerm (Maybe Syntax.ExplicitConstructorInvocation) -> Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.ConstructorBody
+constructorBody invocation statements =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorBody"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "invocation"),
+          Model.fieldTerm = (Typed.unTypedTerm invocation)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statements"),
+          Model.fieldTerm = (Typed.unTypedTerm statements)}]}))
+
+-- | DSL name token for hydra.java.syntax.ConstructorBody
+constructorBodyConstructorBody :: Typed.TypedName Syntax.ConstructorBody
+constructorBodyConstructorBody = Typed.TypedName (Model.Name "hydra.java.syntax.ConstructorBody")
+
+-- | DSL accessor for the invocation field of hydra.java.syntax.ConstructorBody
+constructorBodyInvocation :: Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm (Maybe Syntax.ExplicitConstructorInvocation)
+constructorBodyInvocation x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorBody"),
+        Model.projectionFieldName = (Model.Name "invocation")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the statements field of hydra.java.syntax.ConstructorBody
+constructorBodyStatements :: Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm [Syntax.BlockStatement]
+constructorBodyStatements x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorBody"),
+        Model.projectionFieldName = (Model.Name "statements")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the invocation field of hydra.java.syntax.ConstructorBody
+constructorBodyWithInvocation :: Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm (Maybe Syntax.ExplicitConstructorInvocation) -> Typed.TypedTerm Syntax.ConstructorBody
+constructorBodyWithInvocation original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorBody"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "invocation"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorBody"),
+              Model.projectionFieldName = (Model.Name "statements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the statements field of hydra.java.syntax.ConstructorBody
+constructorBodyWithStatements :: Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.ConstructorBody
+constructorBodyWithStatements original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorBody"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "invocation"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorBody"),
+              Model.projectionFieldName = (Model.Name "invocation")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "statements"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.ConstructorDeclaration
+constructorDeclaration :: Typed.TypedTerm [Syntax.ConstructorModifier] -> Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm (Maybe Syntax.Throws) -> Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm Syntax.ConstructorDeclaration
+constructorDeclaration modifiers constructor throws body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructor"),
+          Model.fieldTerm = (Typed.unTypedTerm constructor)},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Typed.unTypedTerm throws)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationBody :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorBody
+constructorDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the constructor field of hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationConstructor :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorDeclarator
+constructorDeclarationConstructor x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+        Model.projectionFieldName = (Model.Name "constructor")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationConstructorDeclaration :: Typed.TypedName Syntax.ConstructorDeclaration
+constructorDeclarationConstructorDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.ConstructorDeclaration")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationModifiers :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm [Syntax.ConstructorModifier]
+constructorDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the throws field of hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationThrows :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm (Maybe Syntax.Throws)
+constructorDeclarationThrows x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+        Model.projectionFieldName = (Model.Name "throws")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationWithBody :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorBody -> Typed.TypedTerm Syntax.ConstructorDeclaration
+constructorDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructor"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "constructor")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "throws")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the constructor field of hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationWithConstructor :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm Syntax.ConstructorDeclaration
+constructorDeclarationWithConstructor original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructor"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "throws")})),
+            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.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationWithModifiers :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm [Syntax.ConstructorModifier] -> Typed.TypedTerm Syntax.ConstructorDeclaration
+constructorDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructor"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "constructor")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "throws")})),
+            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.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the throws field of hydra.java.syntax.ConstructorDeclaration
+constructorDeclarationWithThrows :: Typed.TypedTerm Syntax.ConstructorDeclaration -> Typed.TypedTerm (Maybe Syntax.Throws) -> Typed.TypedTerm Syntax.ConstructorDeclaration
+constructorDeclarationWithThrows original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructor"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "constructor")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          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.java.syntax.ConstructorDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.ConstructorDeclarator
+constructorDeclarator :: Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter) -> Typed.TypedTerm [Syntax.FormalParameter] -> Typed.TypedTerm Syntax.ConstructorDeclarator
+constructorDeclarator parameters name receiverParameter formalParameters =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm parameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Typed.unTypedTerm receiverParameter)},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm formalParameters)}]}))
+
+-- | DSL name token for hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorConstructorDeclarator :: Typed.TypedName Syntax.ConstructorDeclarator
+constructorDeclaratorConstructorDeclarator = Typed.TypedName (Model.Name "hydra.java.syntax.ConstructorDeclarator")
+
+-- | DSL accessor for the formalParameters field of hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorFormalParameters :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm [Syntax.FormalParameter]
+constructorDeclaratorFormalParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+        Model.projectionFieldName = (Model.Name "formalParameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorName :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm Syntax.SimpleTypeName
+constructorDeclaratorName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the parameters field of hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorParameters :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm [Syntax.TypeParameter]
+constructorDeclaratorParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+        Model.projectionFieldName = (Model.Name "parameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the receiverParameter field of hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorReceiverParameter :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter)
+constructorDeclaratorReceiverParameter x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+        Model.projectionFieldName = (Model.Name "receiverParameter")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the formalParameters field of hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorWithFormalParameters :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm [Syntax.FormalParameter] -> Typed.TypedTerm Syntax.ConstructorDeclarator
+constructorDeclaratorWithFormalParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "receiverParameter")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorWithName :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm Syntax.ConstructorDeclarator
+constructorDeclaratorWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "receiverParameter")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "formalParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the parameters field of hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorWithParameters :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.ConstructorDeclarator
+constructorDeclaratorWithParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "receiverParameter")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "formalParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the receiverParameter field of hydra.java.syntax.ConstructorDeclarator
+constructorDeclaratorWithReceiverParameter :: Typed.TypedTerm Syntax.ConstructorDeclarator -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter) -> Typed.TypedTerm Syntax.ConstructorDeclarator
+constructorDeclaratorWithReceiverParameter original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ConstructorDeclarator"),
+              Model.projectionFieldName = (Model.Name "formalParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.ConstructorModifier
+constructorModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.ConstructorModifier
+constructorModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConstructorModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ConstructorModifier
+constructorModifierConstructorModifier :: Typed.TypedName Syntax.ConstructorModifier
+constructorModifierConstructorModifier = Typed.TypedName (Model.Name "hydra.java.syntax.ConstructorModifier")
+
+-- | DSL injection for the private variant of hydra.java.syntax.ConstructorModifier
+constructorModifierPrivate :: Typed.TypedTerm Syntax.ConstructorModifier
+constructorModifierPrivate =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConstructorModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "private"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the protected variant of hydra.java.syntax.ConstructorModifier
+constructorModifierProtected :: Typed.TypedTerm Syntax.ConstructorModifier
+constructorModifierProtected =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConstructorModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "protected"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the public variant of hydra.java.syntax.ConstructorModifier
+constructorModifierPublic :: Typed.TypedTerm Syntax.ConstructorModifier
+constructorModifierPublic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ConstructorModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "public"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for the hydra.java.syntax.ContinueStatement wrapper
+continueStatement :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ContinueStatement
+continueStatement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ContinueStatement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ContinueStatement
+continueStatementContinueStatement :: Typed.TypedName Syntax.ContinueStatement
+continueStatementContinueStatement = Typed.TypedName (Model.Name "hydra.java.syntax.ContinueStatement")
+
+-- | DSL constructor for the hydra.java.syntax.DefaultValue wrapper
+defaultValue :: Typed.TypedTerm Syntax.ElementValue -> Typed.TypedTerm Syntax.DefaultValue
+defaultValue x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.DefaultValue"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.DefaultValue
+defaultValueDefaultValue :: Typed.TypedName Syntax.DefaultValue
+defaultValueDefaultValue = Typed.TypedName (Model.Name "hydra.java.syntax.DefaultValue")
+
+-- | DSL constructor for hydra.java.syntax.DimExpr
+dimExpr :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.DimExpr
+dimExpr annotations expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.DimExpr"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.DimExpr
+dimExprAnnotations :: Typed.TypedTerm Syntax.DimExpr -> Typed.TypedTerm [Syntax.Annotation]
+dimExprAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.DimExpr"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.DimExpr
+dimExprDimExpr :: Typed.TypedName Syntax.DimExpr
+dimExprDimExpr = Typed.TypedName (Model.Name "hydra.java.syntax.DimExpr")
+
+-- | DSL accessor for the expression field of hydra.java.syntax.DimExpr
+dimExprExpression :: Typed.TypedTerm Syntax.DimExpr -> Typed.TypedTerm (Maybe Syntax.Expression)
+dimExprExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.DimExpr"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the annotations field of hydra.java.syntax.DimExpr
+dimExprWithAnnotations :: Typed.TypedTerm Syntax.DimExpr -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.DimExpr
+dimExprWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.DimExpr"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.DimExpr"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.DimExpr
+dimExprWithExpression :: Typed.TypedTerm Syntax.DimExpr -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.DimExpr
+dimExprWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.DimExpr"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.DimExpr"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for the hydra.java.syntax.Dims wrapper
+dims :: Typed.TypedTerm [[Syntax.Annotation]] -> Typed.TypedTerm Syntax.Dims
+dims x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.Dims"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.Dims
+dimsDims :: Typed.TypedName Syntax.Dims
+dimsDims = Typed.TypedName (Model.Name "hydra.java.syntax.Dims")
+
+-- | DSL constructor for hydra.java.syntax.DoStatement
+doStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DoStatement
+doStatement body cond =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.DoStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.DoStatement
+doStatementBody :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.Statement
+doStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.DoStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.DoStatement
+doStatementCond :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.Expression
+doStatementCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.DoStatement"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.DoStatement
+doStatementDoStatement :: Typed.TypedName Syntax.DoStatement
+doStatementDoStatement = Typed.TypedName (Model.Name "hydra.java.syntax.DoStatement")
+
+-- | DSL updater for the body field of hydra.java.syntax.DoStatement
+doStatementWithBody :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.DoStatement
+doStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.DoStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.DoStatement"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.DoStatement
+doStatementWithCond :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DoStatement
+doStatementWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.DoStatement"),
+      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.java.syntax.DoStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.ElementValue
+elementValueAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.ElementValue
+elementValueAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ElementValue"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.ElementValueArrayInitializer wrapper
+elementValueArrayInitializer :: Typed.TypedTerm [Syntax.ElementValue] -> Typed.TypedTerm Syntax.ElementValueArrayInitializer
+elementValueArrayInitializer x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ElementValueArrayInitializer"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ElementValueArrayInitializer
+elementValueArrayInitializerElementValueArrayInitializer :: Typed.TypedName Syntax.ElementValueArrayInitializer
+elementValueArrayInitializerElementValueArrayInitializer =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ElementValueArrayInitializer")
+
+-- | DSL injection for the conditionalExpression variant of hydra.java.syntax.ElementValue
+elementValueConditionalExpression :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.ElementValue
+elementValueConditionalExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ElementValue"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "conditionalExpression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ElementValue
+elementValueElementValue :: Typed.TypedName Syntax.ElementValue
+elementValueElementValue = Typed.TypedName (Model.Name "hydra.java.syntax.ElementValue")
+
+-- | DSL injection for the elementValueArrayInitializer variant of hydra.java.syntax.ElementValue
+elementValueElementValueArrayInitializer :: Typed.TypedTerm Syntax.ElementValueArrayInitializer -> Typed.TypedTerm Syntax.ElementValue
+elementValueElementValueArrayInitializer x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ElementValue"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "elementValueArrayInitializer"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ElementValuePair
+elementValuePair :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ElementValue -> Typed.TypedTerm Syntax.ElementValuePair
+elementValuePair key value =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ElementValuePair"),
+      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)}]}))
+
+-- | DSL name token for hydra.java.syntax.ElementValuePair
+elementValuePairElementValuePair :: Typed.TypedName Syntax.ElementValuePair
+elementValuePairElementValuePair = Typed.TypedName (Model.Name "hydra.java.syntax.ElementValuePair")
+
+-- | DSL accessor for the key field of hydra.java.syntax.ElementValuePair
+elementValuePairKey :: Typed.TypedTerm Syntax.ElementValuePair -> Typed.TypedTerm Syntax.Identifier
+elementValuePairKey x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ElementValuePair"),
+        Model.projectionFieldName = (Model.Name "key")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the value field of hydra.java.syntax.ElementValuePair
+elementValuePairValue :: Typed.TypedTerm Syntax.ElementValuePair -> Typed.TypedTerm Syntax.ElementValue
+elementValuePairValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ElementValuePair"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the key field of hydra.java.syntax.ElementValuePair
+elementValuePairWithKey :: Typed.TypedTerm Syntax.ElementValuePair -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ElementValuePair
+elementValuePairWithKey original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ElementValuePair"),
+      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.java.syntax.ElementValuePair"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the value field of hydra.java.syntax.ElementValuePair
+elementValuePairWithValue :: Typed.TypedTerm Syntax.ElementValuePair -> Typed.TypedTerm Syntax.ElementValue -> Typed.TypedTerm Syntax.ElementValuePair
+elementValuePairWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ElementValuePair"),
+      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.java.syntax.ElementValuePair"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.EnhancedForCond
+enhancedForCond :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.EnhancedForCond
+enhancedForCond declaration expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "declaration"),
+          Model.fieldTerm = (Typed.unTypedTerm declaration)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL accessor for the declaration field of hydra.java.syntax.EnhancedForCond
+enhancedForCondDeclaration :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.LocalVariableDeclaration
+enhancedForCondDeclaration x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForCond"),
+        Model.projectionFieldName = (Model.Name "declaration")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.EnhancedForCond
+enhancedForCondEnhancedForCond :: Typed.TypedName Syntax.EnhancedForCond
+enhancedForCondEnhancedForCond = Typed.TypedName (Model.Name "hydra.java.syntax.EnhancedForCond")
+
+-- | DSL accessor for the expression field of hydra.java.syntax.EnhancedForCond
+enhancedForCondExpression :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.Expression
+enhancedForCondExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForCond"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the declaration field of hydra.java.syntax.EnhancedForCond
+enhancedForCondWithDeclaration :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.EnhancedForCond
+enhancedForCondWithDeclaration original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "declaration"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForCond"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.EnhancedForCond
+enhancedForCondWithExpression :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.EnhancedForCond
+enhancedForCondWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "declaration"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForCond"),
+              Model.projectionFieldName = (Model.Name "declaration")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.EnhancedForStatement
+enhancedForStatement :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.EnhancedForStatement
+enhancedForStatement cond body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.EnhancedForStatement
+enhancedForStatementBody :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.Statement
+enhancedForStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.EnhancedForStatement
+enhancedForStatementCond :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.EnhancedForCond
+enhancedForStatementCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatement"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.EnhancedForStatement
+enhancedForStatementEnhancedForStatement :: Typed.TypedName Syntax.EnhancedForStatement
+enhancedForStatementEnhancedForStatement = Typed.TypedName (Model.Name "hydra.java.syntax.EnhancedForStatement")
+
+-- | DSL constructor for hydra.java.syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIf :: Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIf cond body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIfBody :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+enhancedForStatementNoShortIfBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIfCond :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.EnhancedForCond
+enhancedForStatementNoShortIfCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIfEnhancedForStatementNoShortIf :: Typed.TypedName Syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIfEnhancedForStatementNoShortIf =
+    Typed.TypedName (Model.Name "hydra.java.syntax.EnhancedForStatementNoShortIf")
+
+-- | DSL updater for the body field of hydra.java.syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIfWithBody :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIfWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIfWithCond :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf
+enhancedForStatementNoShortIfWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          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.java.syntax.EnhancedForStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the body field of hydra.java.syntax.EnhancedForStatement
+enhancedForStatementWithBody :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.EnhancedForStatement
+enhancedForStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatement"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.EnhancedForStatement
+enhancedForStatementWithCond :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.EnhancedForCond -> Typed.TypedTerm Syntax.EnhancedForStatement
+enhancedForStatementWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnhancedForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          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.java.syntax.EnhancedForStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.EnumBody wrapper
+enumBody :: Typed.TypedTerm [Syntax.EnumBody_Element] -> Typed.TypedTerm Syntax.EnumBody
+enumBody x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.EnumBody"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.EnumBody
+enumBodyEnumBody :: Typed.TypedName Syntax.EnumBody
+enumBodyEnumBody = Typed.TypedName (Model.Name "hydra.java.syntax.EnumBody")
+
+-- | DSL constructor for hydra.java.syntax.EnumBody_Element
+enumBody_Element :: Typed.TypedTerm [Syntax.EnumConstant] -> Typed.TypedTerm [Syntax.ClassBodyDeclaration] -> Typed.TypedTerm Syntax.EnumBody_Element
+enumBody_Element constants bodyDeclarations =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumBody_Element"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "constants"),
+          Model.fieldTerm = (Typed.unTypedTerm constants)},
+        Model.Field {
+          Model.fieldName = (Model.Name "bodyDeclarations"),
+          Model.fieldTerm = (Typed.unTypedTerm bodyDeclarations)}]}))
+
+-- | DSL accessor for the bodyDeclarations field of hydra.java.syntax.EnumBody_Element
+enumBody_ElementBodyDeclarations :: Typed.TypedTerm Syntax.EnumBody_Element -> Typed.TypedTerm [Syntax.ClassBodyDeclaration]
+enumBody_ElementBodyDeclarations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumBody_Element"),
+        Model.projectionFieldName = (Model.Name "bodyDeclarations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the constants field of hydra.java.syntax.EnumBody_Element
+enumBody_ElementConstants :: Typed.TypedTerm Syntax.EnumBody_Element -> Typed.TypedTerm [Syntax.EnumConstant]
+enumBody_ElementConstants x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumBody_Element"),
+        Model.projectionFieldName = (Model.Name "constants")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.EnumBody_Element
+enumBody_ElementEnumBody_Element :: Typed.TypedName Syntax.EnumBody_Element
+enumBody_ElementEnumBody_Element = Typed.TypedName (Model.Name "hydra.java.syntax.EnumBody_Element")
+
+-- | DSL updater for the bodyDeclarations field of hydra.java.syntax.EnumBody_Element
+enumBody_ElementWithBodyDeclarations :: Typed.TypedTerm Syntax.EnumBody_Element -> Typed.TypedTerm [Syntax.ClassBodyDeclaration] -> Typed.TypedTerm Syntax.EnumBody_Element
+enumBody_ElementWithBodyDeclarations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumBody_Element"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "constants"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumBody_Element"),
+              Model.projectionFieldName = (Model.Name "constants")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "bodyDeclarations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the constants field of hydra.java.syntax.EnumBody_Element
+enumBody_ElementWithConstants :: Typed.TypedTerm Syntax.EnumBody_Element -> Typed.TypedTerm [Syntax.EnumConstant] -> Typed.TypedTerm Syntax.EnumBody_Element
+enumBody_ElementWithConstants original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumBody_Element"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "constants"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "bodyDeclarations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumBody_Element"),
+              Model.projectionFieldName = (Model.Name "bodyDeclarations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.EnumConstant
+enumConstant :: Typed.TypedTerm [Syntax.EnumConstantModifier] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe [Syntax.Expression]) -> Typed.TypedTerm (Maybe Syntax.ClassBody) -> Typed.TypedTerm Syntax.EnumConstant
+enumConstant modifiers identifier arguments body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm arguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the arguments field of hydra.java.syntax.EnumConstant
+enumConstantArguments :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm (Maybe [Syntax.Expression])
+enumConstantArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+        Model.projectionFieldName = (Model.Name "arguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.EnumConstant
+enumConstantBody :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm (Maybe Syntax.ClassBody)
+enumConstantBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.EnumConstant
+enumConstantEnumConstant :: Typed.TypedName Syntax.EnumConstant
+enumConstantEnumConstant = Typed.TypedName (Model.Name "hydra.java.syntax.EnumConstant")
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.EnumConstant
+enumConstantIdentifier :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm Syntax.Identifier
+enumConstantIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for the hydra.java.syntax.EnumConstantModifier wrapper
+enumConstantModifier :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.EnumConstantModifier
+enumConstantModifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.EnumConstantModifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.EnumConstantModifier
+enumConstantModifierEnumConstantModifier :: Typed.TypedName Syntax.EnumConstantModifier
+enumConstantModifierEnumConstantModifier = Typed.TypedName (Model.Name "hydra.java.syntax.EnumConstantModifier")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.EnumConstant
+enumConstantModifiers :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm [Syntax.EnumConstantModifier]
+enumConstantModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the arguments field of hydra.java.syntax.EnumConstant
+enumConstantWithArguments :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm (Maybe [Syntax.Expression]) -> Typed.TypedTerm Syntax.EnumConstant
+enumConstantWithArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          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.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the body field of hydra.java.syntax.EnumConstant
+enumConstantWithBody :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm (Maybe Syntax.ClassBody) -> Typed.TypedTerm Syntax.EnumConstant
+enumConstantWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.EnumConstant
+enumConstantWithIdentifier :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.EnumConstant
+enumConstantWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          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.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            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.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.EnumConstant
+enumConstantWithModifiers :: Typed.TypedTerm Syntax.EnumConstant -> Typed.TypedTerm [Syntax.EnumConstantModifier] -> Typed.TypedTerm Syntax.EnumConstant
+enumConstantWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            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.java.syntax.EnumConstant"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.EnumDeclaration
+enumDeclaration :: Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.EnumBody -> Typed.TypedTerm Syntax.EnumDeclaration
+enumDeclaration modifiers identifier implements body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Typed.unTypedTerm implements)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.EnumDeclaration
+enumDeclarationBody :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.EnumBody
+enumDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.EnumDeclaration
+enumDeclarationEnumDeclaration :: Typed.TypedName Syntax.EnumDeclaration
+enumDeclarationEnumDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.EnumDeclaration")
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.EnumDeclaration
+enumDeclarationIdentifier :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
+enumDeclarationIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the implements field of hydra.java.syntax.EnumDeclaration
+enumDeclarationImplements :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm [Syntax.InterfaceType]
+enumDeclarationImplements x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+        Model.projectionFieldName = (Model.Name "implements")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.EnumDeclaration
+enumDeclarationModifiers :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm [Syntax.ClassModifier]
+enumDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.EnumDeclaration
+enumDeclarationWithBody :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.EnumBody -> Typed.TypedTerm Syntax.EnumDeclaration
+enumDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.EnumDeclaration
+enumDeclarationWithIdentifier :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.EnumDeclaration
+enumDeclarationWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            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.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the implements field of hydra.java.syntax.EnumDeclaration
+enumDeclarationWithImplements :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.EnumDeclaration
+enumDeclarationWithImplements original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          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.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.EnumDeclaration
+enumDeclarationWithModifiers :: Typed.TypedTerm Syntax.EnumDeclaration -> Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.EnumDeclaration
+enumDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            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.java.syntax.EnumDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the equal variant of hydra.java.syntax.EqualityExpression
+equalityExpressionEqual :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.EqualityExpression
+equalityExpressionEqual x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.EqualityExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "equal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.EqualityExpression
+equalityExpressionEqualityExpression :: Typed.TypedName Syntax.EqualityExpression
+equalityExpressionEqualityExpression = Typed.TypedName (Model.Name "hydra.java.syntax.EqualityExpression")
+
+-- | DSL injection for the notEqual variant of hydra.java.syntax.EqualityExpression
+equalityExpressionNotEqual :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.EqualityExpression
+equalityExpressionNotEqual x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.EqualityExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "notEqual"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the unary variant of hydra.java.syntax.EqualityExpression
+equalityExpressionUnary :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.EqualityExpression
+equalityExpressionUnary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.EqualityExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.EqualityExpression_Binary
+equalityExpression_Binary :: Typed.TypedTerm Syntax.EqualityExpression -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.EqualityExpression_Binary
+equalityExpression_Binary lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EqualityExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL name token for hydra.java.syntax.EqualityExpression_Binary
+equalityExpression_BinaryEqualityExpression_Binary :: Typed.TypedName Syntax.EqualityExpression_Binary
+equalityExpression_BinaryEqualityExpression_Binary =
+    Typed.TypedName (Model.Name "hydra.java.syntax.EqualityExpression_Binary")
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.EqualityExpression_Binary
+equalityExpression_BinaryLhs :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.EqualityExpression
+equalityExpression_BinaryLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EqualityExpression_Binary"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.EqualityExpression_Binary
+equalityExpression_BinaryRhs :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.RelationalExpression
+equalityExpression_BinaryRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.EqualityExpression_Binary"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.EqualityExpression_Binary
+equalityExpression_BinaryWithLhs :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.EqualityExpression -> Typed.TypedTerm Syntax.EqualityExpression_Binary
+equalityExpression_BinaryWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EqualityExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EqualityExpression_Binary"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.EqualityExpression_Binary
+equalityExpression_BinaryWithRhs :: Typed.TypedTerm Syntax.EqualityExpression_Binary -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.EqualityExpression_Binary
+equalityExpression_BinaryWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.EqualityExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.EqualityExpression_Binary"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the class variant of hydra.java.syntax.ExceptionType
+exceptionTypeClass :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.ExceptionType
+exceptionTypeClass x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ExceptionType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "class"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ExceptionType
+exceptionTypeExceptionType :: Typed.TypedName Syntax.ExceptionType
+exceptionTypeExceptionType = Typed.TypedName (Model.Name "hydra.java.syntax.ExceptionType")
+
+-- | DSL injection for the variable variant of hydra.java.syntax.ExceptionType
+exceptionTypeVariable :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.ExceptionType
+exceptionTypeVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ExceptionType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.ExclusiveOrExpression wrapper
+exclusiveOrExpression :: Typed.TypedTerm [Syntax.AndExpression] -> Typed.TypedTerm Syntax.ExclusiveOrExpression
+exclusiveOrExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ExclusiveOrExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ExclusiveOrExpression
+exclusiveOrExpressionExclusiveOrExpression :: Typed.TypedName Syntax.ExclusiveOrExpression
+exclusiveOrExpressionExclusiveOrExpression = Typed.TypedName (Model.Name "hydra.java.syntax.ExclusiveOrExpression")
+
+-- | DSL constructor for hydra.java.syntax.ExplicitConstructorInvocation
+explicitConstructorInvocation :: Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation
+explicitConstructorInvocation typeArguments arguments variant =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm arguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Typed.unTypedTerm variant)}]}))
+
+-- | DSL accessor for the arguments field of hydra.java.syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationArguments :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm [Syntax.Expression]
+explicitConstructorInvocationArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+        Model.projectionFieldName = (Model.Name "arguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationExplicitConstructorInvocation :: Typed.TypedName Syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationExplicitConstructorInvocation =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation")
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationTypeArguments :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm [Syntax.TypeArgument]
+explicitConstructorInvocationTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the variant field of hydra.java.syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationVariant :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocationVariant x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+        Model.projectionFieldName = (Model.Name "variant")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the arguments field of hydra.java.syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationWithArguments :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationWithArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+              Model.projectionFieldName = (Model.Name "variant")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationWithTypeArguments :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          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.java.syntax.ExplicitConstructorInvocation"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+              Model.projectionFieldName = (Model.Name "variant")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the variant field of hydra.java.syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationWithVariant :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation
+explicitConstructorInvocationWithVariant original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            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.java.syntax.ExplicitConstructorInvocation"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocation_VariantExplicitConstructorInvocation_Variant :: Typed.TypedName Syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocation_VariantExplicitConstructorInvocation_Variant =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant")
+
+-- | DSL injection for the primary variant of hydra.java.syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocation_VariantPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocation_VariantPrimary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the super variant of hydra.java.syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocation_VariantSuper :: Typed.TypedTerm (Maybe Syntax.ExpressionName) -> Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocation_VariantSuper x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "super"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the this variant of hydra.java.syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocation_VariantThis :: Typed.TypedTerm Syntax.ExplicitConstructorInvocation_Variant
+explicitConstructorInvocation_VariantThis =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "this"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the assignment variant of hydra.java.syntax.Expression
+expressionAssignment :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression
+expressionAssignment x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "assignment"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.Expression
+expressionExpression :: Typed.TypedName Syntax.Expression
+expressionExpression = Typed.TypedName (Model.Name "hydra.java.syntax.Expression")
+
+-- | DSL injection for the lambda variant of hydra.java.syntax.Expression
+expressionLambda :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.Expression
+expressionLambda x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "lambda"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ExpressionName
+expressionName :: Typed.TypedTerm (Maybe Syntax.AmbiguousName) -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExpressionName
+expressionName qualifier identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ExpressionName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm qualifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL name token for hydra.java.syntax.ExpressionName
+expressionNameExpressionName :: Typed.TypedName Syntax.ExpressionName
+expressionNameExpressionName = Typed.TypedName (Model.Name "hydra.java.syntax.ExpressionName")
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.ExpressionName
+expressionNameIdentifier :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.Identifier
+expressionNameIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExpressionName"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the qualifier field of hydra.java.syntax.ExpressionName
+expressionNameQualifier :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm (Maybe Syntax.AmbiguousName)
+expressionNameQualifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExpressionName"),
+        Model.projectionFieldName = (Model.Name "qualifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.ExpressionName
+expressionNameWithIdentifier :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExpressionName
+expressionNameWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ExpressionName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExpressionName"),
+              Model.projectionFieldName = (Model.Name "qualifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the qualifier field of hydra.java.syntax.ExpressionName
+expressionNameWithQualifier :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm (Maybe Syntax.AmbiguousName) -> Typed.TypedTerm Syntax.ExpressionName
+expressionNameWithQualifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ExpressionName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ExpressionName"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.ExpressionStatement wrapper
+expressionStatement :: Typed.TypedTerm Syntax.StatementExpression -> Typed.TypedTerm Syntax.ExpressionStatement
+expressionStatement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ExpressionStatement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ExpressionStatement
+expressionStatementExpressionStatement :: Typed.TypedName Syntax.ExpressionStatement
+expressionStatementExpressionStatement = Typed.TypedName (Model.Name "hydra.java.syntax.ExpressionStatement")
+
+-- | DSL constructor for hydra.java.syntax.FieldAccess
+fieldAccess :: Typed.TypedTerm Syntax.FieldAccess_Qualifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.FieldAccess
+fieldAccess qualifier identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FieldAccess"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm qualifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL name token for hydra.java.syntax.FieldAccess
+fieldAccessFieldAccess :: Typed.TypedName Syntax.FieldAccess
+fieldAccessFieldAccess = Typed.TypedName (Model.Name "hydra.java.syntax.FieldAccess")
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.FieldAccess
+fieldAccessIdentifier :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.Identifier
+fieldAccessIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldAccess"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the qualifier field of hydra.java.syntax.FieldAccess
+fieldAccessQualifier :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.FieldAccess_Qualifier
+fieldAccessQualifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldAccess"),
+        Model.projectionFieldName = (Model.Name "qualifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.FieldAccess
+fieldAccessWithIdentifier :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.FieldAccess
+fieldAccessWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FieldAccess"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldAccess"),
+              Model.projectionFieldName = (Model.Name "qualifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the qualifier field of hydra.java.syntax.FieldAccess
+fieldAccessWithQualifier :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.FieldAccess_Qualifier -> Typed.TypedTerm Syntax.FieldAccess
+fieldAccessWithQualifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FieldAccess"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldAccess"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.FieldAccess_Qualifier
+fieldAccess_QualifierFieldAccess_Qualifier :: Typed.TypedName Syntax.FieldAccess_Qualifier
+fieldAccess_QualifierFieldAccess_Qualifier = Typed.TypedName (Model.Name "hydra.java.syntax.FieldAccess_Qualifier")
+
+-- | DSL injection for the primary variant of hydra.java.syntax.FieldAccess_Qualifier
+fieldAccess_QualifierPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.FieldAccess_Qualifier
+fieldAccess_QualifierPrimary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldAccess_Qualifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the super variant of hydra.java.syntax.FieldAccess_Qualifier
+fieldAccess_QualifierSuper :: Typed.TypedTerm Syntax.FieldAccess_Qualifier
+fieldAccess_QualifierSuper =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldAccess_Qualifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "super"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the typed variant of hydra.java.syntax.FieldAccess_Qualifier
+fieldAccess_QualifierTyped :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.FieldAccess_Qualifier
+fieldAccess_QualifierTyped x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldAccess_Qualifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typed"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.FieldDeclaration
+fieldDeclaration :: Typed.TypedTerm [Syntax.FieldModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.FieldDeclaration
+fieldDeclaration modifiers unannType variableDeclarators =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "unannType"),
+          Model.fieldTerm = (Typed.unTypedTerm unannType)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variableDeclarators"),
+          Model.fieldTerm = (Typed.unTypedTerm variableDeclarators)}]}))
+
+-- | DSL name token for hydra.java.syntax.FieldDeclaration
+fieldDeclarationFieldDeclaration :: Typed.TypedName Syntax.FieldDeclaration
+fieldDeclarationFieldDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.FieldDeclaration")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.FieldDeclaration
+fieldDeclarationModifiers :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm [Syntax.FieldModifier]
+fieldDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the unannType field of hydra.java.syntax.FieldDeclaration
+fieldDeclarationUnannType :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm Syntax.UnannType
+fieldDeclarationUnannType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+        Model.projectionFieldName = (Model.Name "unannType")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the variableDeclarators field of hydra.java.syntax.FieldDeclaration
+fieldDeclarationVariableDeclarators :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator]
+fieldDeclarationVariableDeclarators x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+        Model.projectionFieldName = (Model.Name "variableDeclarators")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.FieldDeclaration
+fieldDeclarationWithModifiers :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm [Syntax.FieldModifier] -> Typed.TypedTerm Syntax.FieldDeclaration
+fieldDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "unannType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+              Model.projectionFieldName = (Model.Name "unannType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "variableDeclarators"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+              Model.projectionFieldName = (Model.Name "variableDeclarators")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the unannType field of hydra.java.syntax.FieldDeclaration
+fieldDeclarationWithUnannType :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.FieldDeclaration
+fieldDeclarationWithUnannType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "unannType"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "variableDeclarators"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+              Model.projectionFieldName = (Model.Name "variableDeclarators")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the variableDeclarators field of hydra.java.syntax.FieldDeclaration
+fieldDeclarationWithVariableDeclarators :: Typed.TypedTerm Syntax.FieldDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.FieldDeclaration
+fieldDeclarationWithVariableDeclarators original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "unannType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FieldDeclaration"),
+              Model.projectionFieldName = (Model.Name "unannType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "variableDeclarators"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.FieldModifier
+fieldModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.FieldModifier
+fieldModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.FieldModifier
+fieldModifierFieldModifier :: Typed.TypedName Syntax.FieldModifier
+fieldModifierFieldModifier = Typed.TypedName (Model.Name "hydra.java.syntax.FieldModifier")
+
+-- | DSL injection for the final variant of hydra.java.syntax.FieldModifier
+fieldModifierFinal :: Typed.TypedTerm Syntax.FieldModifier
+fieldModifierFinal =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "final"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the private variant of hydra.java.syntax.FieldModifier
+fieldModifierPrivate :: Typed.TypedTerm Syntax.FieldModifier
+fieldModifierPrivate =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "private"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the protected variant of hydra.java.syntax.FieldModifier
+fieldModifierProtected :: Typed.TypedTerm Syntax.FieldModifier
+fieldModifierProtected =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "protected"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the public variant of hydra.java.syntax.FieldModifier
+fieldModifierPublic :: Typed.TypedTerm Syntax.FieldModifier
+fieldModifierPublic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "public"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the static variant of hydra.java.syntax.FieldModifier
+fieldModifierStatic :: Typed.TypedTerm Syntax.FieldModifier
+fieldModifierStatic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "static"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the transient variant of hydra.java.syntax.FieldModifier
+fieldModifierTransient :: Typed.TypedTerm Syntax.FieldModifier
+fieldModifierTransient =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "transient"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the volatile variant of hydra.java.syntax.FieldModifier
+fieldModifierVolatile :: Typed.TypedTerm Syntax.FieldModifier
+fieldModifierVolatile =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FieldModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "volatile"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for the hydra.java.syntax.Finally wrapper
+finally :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.Finally
+finally x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.Finally"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.Finally
+finallyFinally :: Typed.TypedName Syntax.Finally
+finallyFinally = Typed.TypedName (Model.Name "hydra.java.syntax.Finally")
+
+-- | DSL constructor for the hydra.java.syntax.FloatingPointLiteral wrapper
+floatingPointLiteral :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.FloatingPointLiteral
+floatingPointLiteral x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.FloatingPointLiteral"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.FloatingPointLiteral
+floatingPointLiteralFloatingPointLiteral :: Typed.TypedName Syntax.FloatingPointLiteral
+floatingPointLiteralFloatingPointLiteral = Typed.TypedName (Model.Name "hydra.java.syntax.FloatingPointLiteral")
+
+-- | DSL injection for the double variant of hydra.java.syntax.FloatingPointType
+floatingPointTypeDouble :: Typed.TypedTerm Syntax.FloatingPointType
+floatingPointTypeDouble =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FloatingPointType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "double"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the float variant of hydra.java.syntax.FloatingPointType
+floatingPointTypeFloat :: Typed.TypedTerm Syntax.FloatingPointType
+floatingPointTypeFloat =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FloatingPointType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "float"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.FloatingPointType
+floatingPointTypeFloatingPointType :: Typed.TypedName Syntax.FloatingPointType
+floatingPointTypeFloatingPointType = Typed.TypedName (Model.Name "hydra.java.syntax.FloatingPointType")
+
+-- | DSL constructor for hydra.java.syntax.ForCond
+forCond :: Typed.TypedTerm (Maybe Syntax.ForInit) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.ForUpdate) -> Typed.TypedTerm Syntax.ForCond
+forCond init cond update =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Typed.unTypedTerm init)},
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "update"),
+          Model.fieldTerm = (Typed.unTypedTerm update)}]}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.ForCond
+forCondCond :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.Expression)
+forCondCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ForCond
+forCondForCond :: Typed.TypedName Syntax.ForCond
+forCondForCond = Typed.TypedName (Model.Name "hydra.java.syntax.ForCond")
+
+-- | DSL accessor for the init field of hydra.java.syntax.ForCond
+forCondInit :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.ForInit)
+forCondInit x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+        Model.projectionFieldName = (Model.Name "init")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the update field of hydra.java.syntax.ForCond
+forCondUpdate :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.ForUpdate)
+forCondUpdate x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+        Model.projectionFieldName = (Model.Name "update")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.ForCond
+forCondWithCond :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ForCond
+forCondWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+      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.java.syntax.ForCond"),
+              Model.projectionFieldName = (Model.Name "init")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          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.java.syntax.ForCond"),
+              Model.projectionFieldName = (Model.Name "update")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the init field of hydra.java.syntax.ForCond
+forCondWithInit :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.ForInit) -> Typed.TypedTerm Syntax.ForCond
+forCondWithInit original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            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.java.syntax.ForCond"),
+              Model.projectionFieldName = (Model.Name "update")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the update field of hydra.java.syntax.ForCond
+forCondWithUpdate :: Typed.TypedTerm Syntax.ForCond -> Typed.TypedTerm (Maybe Syntax.ForUpdate) -> Typed.TypedTerm Syntax.ForCond
+forCondWithUpdate original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+      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.java.syntax.ForCond"),
+              Model.projectionFieldName = (Model.Name "init")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ForCond"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "update"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.ForInit
+forInitForInit :: Typed.TypedName Syntax.ForInit
+forInitForInit = Typed.TypedName (Model.Name "hydra.java.syntax.ForInit")
+
+-- | DSL injection for the localVariable variant of hydra.java.syntax.ForInit
+forInitLocalVariable :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.ForInit
+forInitLocalVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ForInit"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "localVariable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the statements variant of hydra.java.syntax.ForInit
+forInitStatements :: Typed.TypedTerm [Syntax.StatementExpression] -> Typed.TypedTerm Syntax.ForInit
+forInitStatements x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ForInit"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "statements"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the basic variant of hydra.java.syntax.ForStatement
+forStatementBasic :: Typed.TypedTerm Syntax.BasicForStatement -> Typed.TypedTerm Syntax.ForStatement
+forStatementBasic x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ForStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "basic"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the enhanced variant of hydra.java.syntax.ForStatement
+forStatementEnhanced :: Typed.TypedTerm Syntax.EnhancedForStatement -> Typed.TypedTerm Syntax.ForStatement
+forStatementEnhanced x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ForStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "enhanced"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ForStatement
+forStatementForStatement :: Typed.TypedName Syntax.ForStatement
+forStatementForStatement = Typed.TypedName (Model.Name "hydra.java.syntax.ForStatement")
+
+-- | DSL injection for the basic variant of hydra.java.syntax.ForStatementNoShortIf
+forStatementNoShortIfBasic :: Typed.TypedTerm Syntax.BasicForStatementNoShortIf -> Typed.TypedTerm Syntax.ForStatementNoShortIf
+forStatementNoShortIfBasic x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ForStatementNoShortIf"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "basic"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the enhanced variant of hydra.java.syntax.ForStatementNoShortIf
+forStatementNoShortIfEnhanced :: Typed.TypedTerm Syntax.EnhancedForStatementNoShortIf -> Typed.TypedTerm Syntax.ForStatementNoShortIf
+forStatementNoShortIfEnhanced x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ForStatementNoShortIf"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "enhanced"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ForStatementNoShortIf
+forStatementNoShortIfForStatementNoShortIf :: Typed.TypedName Syntax.ForStatementNoShortIf
+forStatementNoShortIfForStatementNoShortIf = Typed.TypedName (Model.Name "hydra.java.syntax.ForStatementNoShortIf")
+
+-- | DSL constructor for the hydra.java.syntax.ForUpdate wrapper
+forUpdate :: Typed.TypedTerm [Syntax.StatementExpression] -> Typed.TypedTerm Syntax.ForUpdate
+forUpdate x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ForUpdate"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ForUpdate
+forUpdateForUpdate :: Typed.TypedName Syntax.ForUpdate
+forUpdateForUpdate = Typed.TypedName (Model.Name "hydra.java.syntax.ForUpdate")
+
+-- | DSL name token for hydra.java.syntax.FormalParameter
+formalParameterFormalParameter :: Typed.TypedName Syntax.FormalParameter
+formalParameterFormalParameter = Typed.TypedName (Model.Name "hydra.java.syntax.FormalParameter")
+
+-- | DSL injection for the simple variant of hydra.java.syntax.FormalParameter
+formalParameterSimple :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.FormalParameter
+formalParameterSimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the variableArity variant of hydra.java.syntax.FormalParameter
+formalParameterVariableArity :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.FormalParameter
+formalParameterVariableArity x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variableArity"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.FormalParameter_Simple
+formalParameter_Simple :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.FormalParameter_Simple
+formalParameter_Simple modifiers type_ id =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm id)}]}))
+
+-- | DSL name token for hydra.java.syntax.FormalParameter_Simple
+formalParameter_SimpleFormalParameter_Simple :: Typed.TypedName Syntax.FormalParameter_Simple
+formalParameter_SimpleFormalParameter_Simple = Typed.TypedName (Model.Name "hydra.java.syntax.FormalParameter_Simple")
+
+-- | DSL accessor for the id field of hydra.java.syntax.FormalParameter_Simple
+formalParameter_SimpleId :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.VariableDeclaratorId
+formalParameter_SimpleId x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+        Model.projectionFieldName = (Model.Name "id")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.FormalParameter_Simple
+formalParameter_SimpleModifiers :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm [Syntax.VariableModifier]
+formalParameter_SimpleModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.FormalParameter_Simple
+formalParameter_SimpleType :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.UnannType
+formalParameter_SimpleType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the id field of hydra.java.syntax.FormalParameter_Simple
+formalParameter_SimpleWithId :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.FormalParameter_Simple
+formalParameter_SimpleWithId original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.FormalParameter_Simple"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.FormalParameter_Simple
+formalParameter_SimpleWithModifiers :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.FormalParameter_Simple
+formalParameter_SimpleWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.FormalParameter_Simple"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.FormalParameter_Simple
+formalParameter_SimpleWithType :: Typed.TypedTerm Syntax.FormalParameter_Simple -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.FormalParameter_Simple
+formalParameter_SimpleWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.FormalParameter_Simple"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.Guard wrapper
+guard :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Guard
+guard x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.Guard"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.Guard
+guardGuard :: Typed.TypedName Syntax.Guard
+guardGuard = Typed.TypedName (Model.Name "hydra.java.syntax.Guard")
+
+-- | DSL constructor for the hydra.java.syntax.Identifier wrapper
+identifier :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Identifier
+identifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.Identifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.Identifier
+identifierIdentifier :: Typed.TypedName Syntax.Identifier
+identifierIdentifier = Typed.TypedName (Model.Name "hydra.java.syntax.Identifier")
+
+-- | DSL constructor for hydra.java.syntax.IfThenElseStatement
+ifThenElseStatement :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfThenElseStatement
+ifThenElseStatement cond then_ else_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "then"),
+          Model.fieldTerm = (Typed.unTypedTerm then_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "else"),
+          Model.fieldTerm = (Typed.unTypedTerm else_)}]}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.IfThenElseStatement
+ifThenElseStatementCond :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
+ifThenElseStatementCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the else field of hydra.java.syntax.IfThenElseStatement
+ifThenElseStatementElse :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.Statement
+ifThenElseStatementElse x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+        Model.projectionFieldName = (Model.Name "else")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.IfThenElseStatement
+ifThenElseStatementIfThenElseStatement :: Typed.TypedName Syntax.IfThenElseStatement
+ifThenElseStatementIfThenElseStatement = Typed.TypedName (Model.Name "hydra.java.syntax.IfThenElseStatement")
+
+-- | DSL constructor for hydra.java.syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIf :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIf cond then_ else_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "then"),
+          Model.fieldTerm = (Typed.unTypedTerm then_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "else"),
+          Model.fieldTerm = (Typed.unTypedTerm else_)}]}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfCond :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm (Maybe Syntax.Expression)
+ifThenElseStatementNoShortIfCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the else field of hydra.java.syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfElse :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+ifThenElseStatementNoShortIfElse x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "else")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfIfThenElseStatementNoShortIf :: Typed.TypedName Syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfIfThenElseStatementNoShortIf =
+    Typed.TypedName (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf")
+
+-- | DSL accessor for the then field of hydra.java.syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfThen :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+ifThenElseStatementNoShortIfThen x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "then")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfWithCond :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "then"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "then")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "else"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "else")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the else field of hydra.java.syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfWithElse :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfWithElse original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "then"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "then")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "else"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the then field of hydra.java.syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfWithThen :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf
+ifThenElseStatementNoShortIfWithThen original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "then"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "else"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "else")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL accessor for the then field of hydra.java.syntax.IfThenElseStatement
+ifThenElseStatementThen :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.StatementNoShortIf
+ifThenElseStatementThen x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+        Model.projectionFieldName = (Model.Name "then")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.IfThenElseStatement
+ifThenElseStatementWithCond :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.IfThenElseStatement
+ifThenElseStatementWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "then"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+              Model.projectionFieldName = (Model.Name "then")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "else"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+              Model.projectionFieldName = (Model.Name "else")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the else field of hydra.java.syntax.IfThenElseStatement
+ifThenElseStatementWithElse :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfThenElseStatement
+ifThenElseStatementWithElse original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "then"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+              Model.projectionFieldName = (Model.Name "then")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "else"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the then field of hydra.java.syntax.IfThenElseStatement
+ifThenElseStatementWithThen :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.IfThenElseStatement
+ifThenElseStatementWithThen original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "then"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "else"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenElseStatement"),
+              Model.projectionFieldName = (Model.Name "else")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.IfThenStatement
+ifThenStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfThenStatement
+ifThenStatement expression statement =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Typed.unTypedTerm statement)}]}))
+
+-- | DSL accessor for the expression field of hydra.java.syntax.IfThenStatement
+ifThenStatementExpression :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Expression
+ifThenStatementExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenStatement"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.IfThenStatement
+ifThenStatementIfThenStatement :: Typed.TypedName Syntax.IfThenStatement
+ifThenStatementIfThenStatement = Typed.TypedName (Model.Name "hydra.java.syntax.IfThenStatement")
+
+-- | DSL accessor for the statement field of hydra.java.syntax.IfThenStatement
+ifThenStatementStatement :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Statement
+ifThenStatementStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenStatement"),
+        Model.projectionFieldName = (Model.Name "statement")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.IfThenStatement
+ifThenStatementWithExpression :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfThenStatement
+ifThenStatementWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.IfThenStatement"),
+              Model.projectionFieldName = (Model.Name "statement")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the statement field of hydra.java.syntax.IfThenStatement
+ifThenStatementWithStatement :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfThenStatement
+ifThenStatementWithStatement original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.IfThenStatement"),
+      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.java.syntax.IfThenStatement"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.ImportDeclaration
+importDeclarationImportDeclaration :: Typed.TypedName Syntax.ImportDeclaration
+importDeclarationImportDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.ImportDeclaration")
+
+-- | DSL injection for the singleStaticImport variant of hydra.java.syntax.ImportDeclaration
+importDeclarationSingleStaticImport :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.ImportDeclaration
+importDeclarationSingleStaticImport x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ImportDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "singleStaticImport"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the singleType variant of hydra.java.syntax.ImportDeclaration
+importDeclarationSingleType :: Typed.TypedTerm Syntax.SingleTypeImportDeclaration -> Typed.TypedTerm Syntax.ImportDeclaration
+importDeclarationSingleType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ImportDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "singleType"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the staticImportOnDemand variant of hydra.java.syntax.ImportDeclaration
+importDeclarationStaticImportOnDemand :: Typed.TypedTerm Syntax.StaticImportOnDemandDeclaration -> Typed.TypedTerm Syntax.ImportDeclaration
+importDeclarationStaticImportOnDemand x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ImportDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "staticImportOnDemand"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the typeImportOnDemand variant of hydra.java.syntax.ImportDeclaration
+importDeclarationTypeImportOnDemand :: Typed.TypedTerm Syntax.TypeImportOnDemandDeclaration -> Typed.TypedTerm Syntax.ImportDeclaration
+importDeclarationTypeImportOnDemand x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ImportDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typeImportOnDemand"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.InclusiveOrExpression wrapper
+inclusiveOrExpression :: Typed.TypedTerm [Syntax.ExclusiveOrExpression] -> Typed.TypedTerm Syntax.InclusiveOrExpression
+inclusiveOrExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.InclusiveOrExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.InclusiveOrExpression
+inclusiveOrExpressionInclusiveOrExpression :: Typed.TypedName Syntax.InclusiveOrExpression
+inclusiveOrExpressionInclusiveOrExpression = Typed.TypedName (Model.Name "hydra.java.syntax.InclusiveOrExpression")
+
+-- | DSL constructor for the hydra.java.syntax.InstanceInitializer wrapper
+instanceInitializer :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.InstanceInitializer
+instanceInitializer x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.InstanceInitializer"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.InstanceInitializer
+instanceInitializerInstanceInitializer :: Typed.TypedName Syntax.InstanceInitializer
+instanceInitializerInstanceInitializer = Typed.TypedName (Model.Name "hydra.java.syntax.InstanceInitializer")
+
+-- | DSL constructor for hydra.java.syntax.InstanceofExpression
+instanceofExpression :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs -> Typed.TypedTerm Syntax.InstanceofExpression
+instanceofExpression lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL name token for hydra.java.syntax.InstanceofExpression
+instanceofExpressionInstanceofExpression :: Typed.TypedName Syntax.InstanceofExpression
+instanceofExpressionInstanceofExpression = Typed.TypedName (Model.Name "hydra.java.syntax.InstanceofExpression")
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.InstanceofExpression
+instanceofExpressionLhs :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.RelationalExpression
+instanceofExpressionLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.InstanceofExpression
+instanceofExpressionRhs :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs
+instanceofExpressionRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.InstanceofExpression
+instanceofExpressionWithLhs :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.InstanceofExpression
+instanceofExpressionWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.InstanceofExpression
+instanceofExpressionWithRhs :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs -> Typed.TypedTerm Syntax.InstanceofExpression
+instanceofExpressionWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.InstanceofExpression_Rhs
+instanceofExpression_RhsInstanceofExpression_Rhs :: Typed.TypedName Syntax.InstanceofExpression_Rhs
+instanceofExpression_RhsInstanceofExpression_Rhs =
+    Typed.TypedName (Model.Name "hydra.java.syntax.InstanceofExpression_Rhs")
+
+-- | DSL injection for the pattern variant of hydra.java.syntax.InstanceofExpression_Rhs
+instanceofExpression_RhsPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs
+instanceofExpression_RhsPattern x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression_Rhs"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "pattern"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the referenceType variant of hydra.java.syntax.InstanceofExpression_Rhs
+instanceofExpression_RhsReferenceType :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.InstanceofExpression_Rhs
+instanceofExpression_RhsReferenceType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InstanceofExpression_Rhs"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "referenceType"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.IntegerLiteral wrapper
+integerLiteral :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.IntegerLiteral
+integerLiteral x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.IntegerLiteral"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.IntegerLiteral
+integerLiteralIntegerLiteral :: Typed.TypedName Syntax.IntegerLiteral
+integerLiteralIntegerLiteral = Typed.TypedName (Model.Name "hydra.java.syntax.IntegerLiteral")
+
+-- | DSL injection for the byte variant of hydra.java.syntax.IntegralType
+integralTypeByte :: Typed.TypedTerm Syntax.IntegralType
+integralTypeByte =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.IntegralType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "byte"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the char variant of hydra.java.syntax.IntegralType
+integralTypeChar :: Typed.TypedTerm Syntax.IntegralType
+integralTypeChar =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.IntegralType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "char"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the int variant of hydra.java.syntax.IntegralType
+integralTypeInt :: Typed.TypedTerm Syntax.IntegralType
+integralTypeInt =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.IntegralType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "int"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.IntegralType
+integralTypeIntegralType :: Typed.TypedName Syntax.IntegralType
+integralTypeIntegralType = Typed.TypedName (Model.Name "hydra.java.syntax.IntegralType")
+
+-- | DSL injection for the long variant of hydra.java.syntax.IntegralType
+integralTypeLong :: Typed.TypedTerm Syntax.IntegralType
+integralTypeLong =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.IntegralType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "long"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the short variant of hydra.java.syntax.IntegralType
+integralTypeShort :: Typed.TypedTerm Syntax.IntegralType
+integralTypeShort =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.IntegralType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "short"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for the hydra.java.syntax.InterfaceBody wrapper
+interfaceBody :: Typed.TypedTerm [Syntax.InterfaceMemberDeclarationWithComments] -> Typed.TypedTerm Syntax.InterfaceBody
+interfaceBody x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.InterfaceBody"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.InterfaceBody
+interfaceBodyInterfaceBody :: Typed.TypedName Syntax.InterfaceBody
+interfaceBodyInterfaceBody = Typed.TypedName (Model.Name "hydra.java.syntax.InterfaceBody")
+
+-- | DSL injection for the annotationInterface variant of hydra.java.syntax.InterfaceDeclaration
+interfaceDeclarationAnnotationInterface :: Typed.TypedTerm Syntax.AnnotationInterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceDeclaration
+interfaceDeclarationAnnotationInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotationInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.InterfaceDeclaration
+interfaceDeclarationInterfaceDeclaration :: Typed.TypedName Syntax.InterfaceDeclaration
+interfaceDeclarationInterfaceDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.InterfaceDeclaration")
+
+-- | DSL injection for the normalInterface variant of hydra.java.syntax.InterfaceDeclaration
+interfaceDeclarationNormalInterface :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceDeclaration
+interfaceDeclarationNormalInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "normalInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the class variant of hydra.java.syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationClass x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "class"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the constant variant of hydra.java.syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationConstant :: Typed.TypedTerm Syntax.ConstantDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationConstant x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "constant"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the interface variant of hydra.java.syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "interface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationInterfaceMemberDeclaration :: Typed.TypedName Syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationInterfaceMemberDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.InterfaceMemberDeclaration")
+
+-- | DSL injection for the interfaceMethod variant of hydra.java.syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationInterfaceMethod :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationInterfaceMethod x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "interfaceMethod"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithComments :: Typed.TypedTerm Syntax.InterfaceMemberDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithComments value comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm value)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.java.syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments -> Typed.TypedTerm (Maybe String)
+interfaceMemberDeclarationWithCommentsComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithCommentsInterfaceMemberDeclarationWithComments :: Typed.TypedName Syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithCommentsInterfaceMemberDeclarationWithComments =
+    Typed.TypedName (Model.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments")
+
+-- | DSL accessor for the value field of hydra.java.syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithCommentsValue :: Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration
+interfaceMemberDeclarationWithCommentsValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the comments field of hydra.java.syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithCommentsWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
+      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.java.syntax.InterfaceMemberDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the value field of hydra.java.syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithCommentsWithValue :: Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments -> Typed.TypedTerm Syntax.InterfaceMemberDeclaration -> Typed.TypedTerm Syntax.InterfaceMemberDeclarationWithComments
+interfaceMemberDeclarationWithCommentsWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          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.java.syntax.InterfaceMemberDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.InterfaceMethodDeclaration
+interfaceMethodDeclaration :: Typed.TypedTerm [Syntax.InterfaceMethodModifier] -> Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodBody -> Typed.TypedTerm Syntax.InterfaceMethodDeclaration
+interfaceMethodDeclaration modifiers header body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Typed.unTypedTerm header)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationBody :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.MethodBody
+interfaceMethodDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the header field of hydra.java.syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationHeader :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.MethodHeader
+interfaceMethodDeclarationHeader x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+        Model.projectionFieldName = (Model.Name "header")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationInterfaceMethodDeclaration :: Typed.TypedName Syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationInterfaceMethodDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationModifiers :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm [Syntax.InterfaceMethodModifier]
+interfaceMethodDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationWithBody :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.MethodBody -> Typed.TypedTerm Syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the header field of hydra.java.syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationWithHeader :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationWithHeader original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          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.java.syntax.InterfaceMethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationWithModifiers :: Typed.TypedTerm Syntax.InterfaceMethodDeclaration -> Typed.TypedTerm [Syntax.InterfaceMethodModifier] -> Typed.TypedTerm Syntax.InterfaceMethodDeclaration
+interfaceMethodDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            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.java.syntax.InterfaceMethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the abstract variant of hydra.java.syntax.InterfaceMethodModifier
+interfaceMethodModifierAbstract :: Typed.TypedTerm Syntax.InterfaceMethodModifier
+interfaceMethodModifierAbstract =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "abstract"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.InterfaceMethodModifier
+interfaceMethodModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.InterfaceMethodModifier
+interfaceMethodModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the default variant of hydra.java.syntax.InterfaceMethodModifier
+interfaceMethodModifierDefault :: Typed.TypedTerm Syntax.InterfaceMethodModifier
+interfaceMethodModifierDefault =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "default"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.InterfaceMethodModifier
+interfaceMethodModifierInterfaceMethodModifier :: Typed.TypedName Syntax.InterfaceMethodModifier
+interfaceMethodModifierInterfaceMethodModifier = Typed.TypedName (Model.Name "hydra.java.syntax.InterfaceMethodModifier")
+
+-- | DSL injection for the private variant of hydra.java.syntax.InterfaceMethodModifier
+interfaceMethodModifierPrivate :: Typed.TypedTerm Syntax.InterfaceMethodModifier
+interfaceMethodModifierPrivate =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "private"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the public variant of hydra.java.syntax.InterfaceMethodModifier
+interfaceMethodModifierPublic :: Typed.TypedTerm Syntax.InterfaceMethodModifier
+interfaceMethodModifierPublic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "public"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the static variant of hydra.java.syntax.InterfaceMethodModifier
+interfaceMethodModifierStatic :: Typed.TypedTerm Syntax.InterfaceMethodModifier
+interfaceMethodModifierStatic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "static"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the strictfp variant of hydra.java.syntax.InterfaceMethodModifier
+interfaceMethodModifierStrictfp :: Typed.TypedTerm Syntax.InterfaceMethodModifier
+interfaceMethodModifierStrictfp =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceMethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "strictfp"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the abstract variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierAbstract :: Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierAbstract =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "abstract"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.InterfaceModifier
+interfaceModifierInterfaceModifier :: Typed.TypedName Syntax.InterfaceModifier
+interfaceModifierInterfaceModifier = Typed.TypedName (Model.Name "hydra.java.syntax.InterfaceModifier")
+
+-- | DSL injection for the nonSealed variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierNonSealed :: Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierNonSealed =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "nonSealed"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the private variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierPrivate :: Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierPrivate =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "private"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the protected variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierProtected :: Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierProtected =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "protected"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the public variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierPublic :: Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierPublic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "public"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the sealed variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierSealed :: Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierSealed =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "sealed"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the static variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierStatic :: Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierStatic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "static"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the strictfp variant of hydra.java.syntax.InterfaceModifier
+interfaceModifierStrictfp :: Typed.TypedTerm Syntax.InterfaceModifier
+interfaceModifierStrictfp =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.InterfaceModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "strictfp"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for the hydra.java.syntax.InterfaceType wrapper
+interfaceType :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.InterfaceType
+interfaceType x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.InterfaceType"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.InterfaceType
+interfaceTypeInterfaceType :: Typed.TypedName Syntax.InterfaceType
+interfaceTypeInterfaceType = Typed.TypedName (Model.Name "hydra.java.syntax.InterfaceType")
+
+-- | DSL constructor for hydra.java.syntax.LabeledStatement
+labeledStatement :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStatement
+labeledStatement identifier statement =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LabeledStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Typed.unTypedTerm statement)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.LabeledStatement
+labeledStatementIdentifier :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Identifier
+labeledStatementIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LabeledStatement"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.LabeledStatement
+labeledStatementLabeledStatement :: Typed.TypedName Syntax.LabeledStatement
+labeledStatementLabeledStatement = Typed.TypedName (Model.Name "hydra.java.syntax.LabeledStatement")
+
+-- | DSL constructor for hydra.java.syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIf :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIf identifier statement =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Typed.unTypedTerm statement)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIfIdentifier :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.Identifier
+labeledStatementNoShortIfIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIfLabeledStatementNoShortIf :: Typed.TypedName Syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIfLabeledStatementNoShortIf =
+    Typed.TypedName (Model.Name "hydra.java.syntax.LabeledStatementNoShortIf")
+
+-- | DSL accessor for the statement field of hydra.java.syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIfStatement :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+labeledStatementNoShortIfStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "statement")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIfWithIdentifier :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIfWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "statement")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the statement field of hydra.java.syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIfWithStatement :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.LabeledStatementNoShortIf
+labeledStatementNoShortIfWithStatement original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LabeledStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL accessor for the statement field of hydra.java.syntax.LabeledStatement
+labeledStatementStatement :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement
+labeledStatementStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LabeledStatement"),
+        Model.projectionFieldName = (Model.Name "statement")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.LabeledStatement
+labeledStatementWithIdentifier :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LabeledStatement
+labeledStatementWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LabeledStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LabeledStatement"),
+              Model.projectionFieldName = (Model.Name "statement")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the statement field of hydra.java.syntax.LabeledStatement
+labeledStatementWithStatement :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStatement
+labeledStatementWithStatement original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LabeledStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LabeledStatement"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "statement"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the block variant of hydra.java.syntax.LambdaBody
+lambdaBodyBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.LambdaBody
+lambdaBodyBlock x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LambdaBody"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "block"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the expression variant of hydra.java.syntax.LambdaBody
+lambdaBodyExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LambdaBody
+lambdaBodyExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LambdaBody"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.LambdaBody
+lambdaBodyLambdaBody :: Typed.TypedName Syntax.LambdaBody
+lambdaBodyLambdaBody = Typed.TypedName (Model.Name "hydra.java.syntax.LambdaBody")
+
+-- | DSL constructor for hydra.java.syntax.LambdaExpression
+lambdaExpression :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm Syntax.LambdaBody -> Typed.TypedTerm Syntax.LambdaExpression
+lambdaExpression parameters body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LambdaExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm parameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.LambdaExpression
+lambdaExpressionBody :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.LambdaBody
+lambdaExpressionBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaExpression"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.LambdaExpression
+lambdaExpressionLambdaExpression :: Typed.TypedName Syntax.LambdaExpression
+lambdaExpressionLambdaExpression = Typed.TypedName (Model.Name "hydra.java.syntax.LambdaExpression")
+
+-- | DSL accessor for the parameters field of hydra.java.syntax.LambdaExpression
+lambdaExpressionParameters :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.LambdaParameters
+lambdaExpressionParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaExpression"),
+        Model.projectionFieldName = (Model.Name "parameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.LambdaExpression
+lambdaExpressionWithBody :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.LambdaBody -> Typed.TypedTerm Syntax.LambdaExpression
+lambdaExpressionWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LambdaExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaExpression"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the parameters field of hydra.java.syntax.LambdaExpression
+lambdaExpressionWithParameters :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm Syntax.LambdaExpression
+lambdaExpressionWithParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LambdaExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          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.java.syntax.LambdaExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.LambdaParameter
+lambdaParameterLambdaParameter :: Typed.TypedName Syntax.LambdaParameter
+lambdaParameterLambdaParameter = Typed.TypedName (Model.Name "hydra.java.syntax.LambdaParameter")
+
+-- | DSL injection for the normal variant of hydra.java.syntax.LambdaParameter
+lambdaParameterNormal :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.LambdaParameter
+lambdaParameterNormal x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "normal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.LambdaParameterType
+lambdaParameterTypeLambdaParameterType :: Typed.TypedName Syntax.LambdaParameterType
+lambdaParameterTypeLambdaParameterType = Typed.TypedName (Model.Name "hydra.java.syntax.LambdaParameterType")
+
+-- | DSL injection for the type variant of hydra.java.syntax.LambdaParameterType
+lambdaParameterTypeType :: Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.LambdaParameterType
+lambdaParameterTypeType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameterType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "type"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the var variant of hydra.java.syntax.LambdaParameterType
+lambdaParameterTypeVar :: Typed.TypedTerm Syntax.LambdaParameterType
+lambdaParameterTypeVar =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameterType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "var"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the variableArity variant of hydra.java.syntax.LambdaParameter
+lambdaParameterVariableArity :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.LambdaParameter
+lambdaParameterVariableArity x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variableArity"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.LambdaParameter_Normal
+lambdaParameter_Normal :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LambdaParameterType -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.LambdaParameter_Normal
+lambdaParameter_Normal modifiers type_ id =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm id)}]}))
+
+-- | DSL accessor for the id field of hydra.java.syntax.LambdaParameter_Normal
+lambdaParameter_NormalId :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.VariableDeclaratorId
+lambdaParameter_NormalId x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+        Model.projectionFieldName = (Model.Name "id")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.LambdaParameter_Normal
+lambdaParameter_NormalLambdaParameter_Normal :: Typed.TypedName Syntax.LambdaParameter_Normal
+lambdaParameter_NormalLambdaParameter_Normal = Typed.TypedName (Model.Name "hydra.java.syntax.LambdaParameter_Normal")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.LambdaParameter_Normal
+lambdaParameter_NormalModifiers :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm [Syntax.VariableModifier]
+lambdaParameter_NormalModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.LambdaParameter_Normal
+lambdaParameter_NormalType :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.LambdaParameterType
+lambdaParameter_NormalType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the id field of hydra.java.syntax.LambdaParameter_Normal
+lambdaParameter_NormalWithId :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.LambdaParameter_Normal
+lambdaParameter_NormalWithId original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.LambdaParameter_Normal"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.LambdaParameter_Normal
+lambdaParameter_NormalWithModifiers :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LambdaParameter_Normal
+lambdaParameter_NormalWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.LambdaParameter_Normal"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.LambdaParameter_Normal
+lambdaParameter_NormalWithType :: Typed.TypedTerm Syntax.LambdaParameter_Normal -> Typed.TypedTerm Syntax.LambdaParameterType -> Typed.TypedTerm Syntax.LambdaParameter_Normal
+lambdaParameter_NormalWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameter_Normal"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.LambdaParameters
+lambdaParametersLambdaParameters :: Typed.TypedName Syntax.LambdaParameters
+lambdaParametersLambdaParameters = Typed.TypedName (Model.Name "hydra.java.syntax.LambdaParameters")
+
+-- | DSL injection for the single variant of hydra.java.syntax.LambdaParameters
+lambdaParametersSingle :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LambdaParameters
+lambdaParametersSingle x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameters"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "single"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the tuple variant of hydra.java.syntax.LambdaParameters
+lambdaParametersTuple :: Typed.TypedTerm [Syntax.LambdaParameters] -> Typed.TypedTerm Syntax.LambdaParameters
+lambdaParametersTuple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LambdaParameters"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "tuple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the arrayAccess variant of hydra.java.syntax.LeftHandSide
+leftHandSideArrayAccess :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm Syntax.LeftHandSide
+leftHandSideArrayAccess x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LeftHandSide"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "arrayAccess"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the expressionName variant of hydra.java.syntax.LeftHandSide
+leftHandSideExpressionName :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.LeftHandSide
+leftHandSideExpressionName x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LeftHandSide"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expressionName"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the fieldAccess variant of hydra.java.syntax.LeftHandSide
+leftHandSideFieldAccess :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.LeftHandSide
+leftHandSideFieldAccess x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LeftHandSide"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "fieldAccess"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.LeftHandSide
+leftHandSideLeftHandSide :: Typed.TypedName Syntax.LeftHandSide
+leftHandSideLeftHandSide = Typed.TypedName (Model.Name "hydra.java.syntax.LeftHandSide")
+
+-- | DSL injection for the boolean variant of hydra.java.syntax.Literal
+literalBoolean :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Literal
+literalBoolean x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "boolean"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the character variant of hydra.java.syntax.Literal
+literalCharacter :: Typed.TypedTerm Int -> Typed.TypedTerm Syntax.Literal
+literalCharacter x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "character"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the floatingPoint variant of hydra.java.syntax.Literal
+literalFloatingPoint :: Typed.TypedTerm Syntax.FloatingPointLiteral -> Typed.TypedTerm Syntax.Literal
+literalFloatingPoint x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "floatingPoint"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the integer variant of hydra.java.syntax.Literal
+literalInteger :: Typed.TypedTerm Syntax.IntegerLiteral -> Typed.TypedTerm Syntax.Literal
+literalInteger x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "integer"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.Literal
+literalLiteral :: Typed.TypedName Syntax.Literal
+literalLiteral = Typed.TypedName (Model.Name "hydra.java.syntax.Literal")
+
+-- | DSL injection for the null variant of hydra.java.syntax.Literal
+literalNull :: Typed.TypedTerm Syntax.Literal
+literalNull =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "null"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the string variant of hydra.java.syntax.Literal
+literalString :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.Literal
+literalString x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "string"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the textBlock variant of hydra.java.syntax.Literal
+literalTextBlock :: Typed.TypedTerm Syntax.TextBlock -> Typed.TypedTerm Syntax.Literal
+literalTextBlock x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "textBlock"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the class variant of hydra.java.syntax.LocalClassOrInterfaceDeclaration
+localClassOrInterfaceDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.LocalClassOrInterfaceDeclaration
+localClassOrInterfaceDeclarationClass x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LocalClassOrInterfaceDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "class"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.LocalClassOrInterfaceDeclaration
+localClassOrInterfaceDeclarationLocalClassOrInterfaceDeclaration :: Typed.TypedName Syntax.LocalClassOrInterfaceDeclaration
+localClassOrInterfaceDeclarationLocalClassOrInterfaceDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.LocalClassOrInterfaceDeclaration")
+
+-- | DSL injection for the normalInterface variant of hydra.java.syntax.LocalClassOrInterfaceDeclaration
+localClassOrInterfaceDeclarationNormalInterface :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.LocalClassOrInterfaceDeclaration
+localClassOrInterfaceDeclarationNormalInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LocalClassOrInterfaceDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "normalInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.LocalVariableDeclaration
+localVariableDeclaration :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LocalVariableType -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.LocalVariableDeclaration
+localVariableDeclaration modifiers type_ declarators =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarators"),
+          Model.fieldTerm = (Typed.unTypedTerm declarators)}]}))
+
+-- | DSL accessor for the declarators field of hydra.java.syntax.LocalVariableDeclaration
+localVariableDeclarationDeclarators :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator]
+localVariableDeclarationDeclarators x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+        Model.projectionFieldName = (Model.Name "declarators")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.LocalVariableDeclaration
+localVariableDeclarationLocalVariableDeclaration :: Typed.TypedName Syntax.LocalVariableDeclaration
+localVariableDeclarationLocalVariableDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.LocalVariableDeclaration")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.LocalVariableDeclaration
+localVariableDeclarationModifiers :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm [Syntax.VariableModifier]
+localVariableDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for the hydra.java.syntax.LocalVariableDeclarationStatement wrapper
+localVariableDeclarationStatement :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.LocalVariableDeclarationStatement
+localVariableDeclarationStatement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclarationStatement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.LocalVariableDeclarationStatement
+localVariableDeclarationStatementLocalVariableDeclarationStatement :: Typed.TypedName Syntax.LocalVariableDeclarationStatement
+localVariableDeclarationStatementLocalVariableDeclarationStatement =
+    Typed.TypedName (Model.Name "hydra.java.syntax.LocalVariableDeclarationStatement")
+
+-- | DSL accessor for the type field of hydra.java.syntax.LocalVariableDeclaration
+localVariableDeclarationType :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.LocalVariableType
+localVariableDeclarationType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the declarators field of hydra.java.syntax.LocalVariableDeclaration
+localVariableDeclarationWithDeclarators :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.LocalVariableDeclaration
+localVariableDeclarationWithDeclarators original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.LocalVariableDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarators"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.LocalVariableDeclaration
+localVariableDeclarationWithModifiers :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LocalVariableDeclaration
+localVariableDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.LocalVariableDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarators"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+              Model.projectionFieldName = (Model.Name "declarators")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.LocalVariableDeclaration
+localVariableDeclarationWithType :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.LocalVariableType -> Typed.TypedTerm Syntax.LocalVariableDeclaration
+localVariableDeclarationWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarators"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableDeclaration"),
+              Model.projectionFieldName = (Model.Name "declarators")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.LocalVariableType
+localVariableTypeLocalVariableType :: Typed.TypedName Syntax.LocalVariableType
+localVariableTypeLocalVariableType = Typed.TypedName (Model.Name "hydra.java.syntax.LocalVariableType")
+
+-- | DSL injection for the type variant of hydra.java.syntax.LocalVariableType
+localVariableTypeType :: Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.LocalVariableType
+localVariableTypeType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "type"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the var variant of hydra.java.syntax.LocalVariableType
+localVariableTypeVar :: Typed.TypedTerm Syntax.LocalVariableType
+localVariableTypeVar =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.LocalVariableType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "var"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for the hydra.java.syntax.MarkerAnnotation wrapper
+markerAnnotation :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.MarkerAnnotation
+markerAnnotation x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.MarkerAnnotation"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MarkerAnnotation
+markerAnnotationMarkerAnnotation :: Typed.TypedName Syntax.MarkerAnnotation
+markerAnnotationMarkerAnnotation = Typed.TypedName (Model.Name "hydra.java.syntax.MarkerAnnotation")
+
+-- | DSL injection for the block variant of hydra.java.syntax.MethodBody
+methodBodyBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.MethodBody
+methodBodyBlock x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodBody"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "block"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.MethodBody
+methodBodyMethodBody :: Typed.TypedName Syntax.MethodBody
+methodBodyMethodBody = Typed.TypedName (Model.Name "hydra.java.syntax.MethodBody")
+
+-- | DSL injection for the none variant of hydra.java.syntax.MethodBody
+methodBodyNone :: Typed.TypedTerm Syntax.MethodBody
+methodBodyNone =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodBody"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "none"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for hydra.java.syntax.MethodDeclaration
+methodDeclaration :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm [Syntax.MethodModifier] -> Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodBody -> Typed.TypedTerm Syntax.MethodDeclaration
+methodDeclaration annotations modifiers header body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Typed.unTypedTerm header)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.MethodDeclaration
+methodDeclarationAnnotations :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm [Syntax.Annotation]
+methodDeclarationAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.MethodDeclaration
+methodDeclarationBody :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.MethodBody
+methodDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the header field of hydra.java.syntax.MethodDeclaration
+methodDeclarationHeader :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.MethodHeader
+methodDeclarationHeader x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+        Model.projectionFieldName = (Model.Name "header")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodDeclaration
+methodDeclarationMethodDeclaration :: Typed.TypedName Syntax.MethodDeclaration
+methodDeclarationMethodDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.MethodDeclaration")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.MethodDeclaration
+methodDeclarationModifiers :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm [Syntax.MethodModifier]
+methodDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the annotations field of hydra.java.syntax.MethodDeclaration
+methodDeclarationWithAnnotations :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.MethodDeclaration
+methodDeclarationWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            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.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the body field of hydra.java.syntax.MethodDeclaration
+methodDeclarationWithBody :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.MethodBody -> Typed.TypedTerm Syntax.MethodDeclaration
+methodDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the header field of hydra.java.syntax.MethodDeclaration
+methodDeclarationWithHeader :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodDeclaration
+methodDeclarationWithHeader original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          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.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.MethodDeclaration
+methodDeclarationWithModifiers :: Typed.TypedTerm Syntax.MethodDeclaration -> Typed.TypedTerm [Syntax.MethodModifier] -> Typed.TypedTerm Syntax.MethodDeclaration
+methodDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            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.java.syntax.MethodDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.MethodDeclarator
+methodDeclarator :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter) -> Typed.TypedTerm [Syntax.FormalParameter] -> Typed.TypedTerm Syntax.MethodDeclarator
+methodDeclarator identifier receiverParameter formalParameters =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Typed.unTypedTerm receiverParameter)},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm formalParameters)}]}))
+
+-- | DSL accessor for the formalParameters field of hydra.java.syntax.MethodDeclarator
+methodDeclaratorFormalParameters :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm [Syntax.FormalParameter]
+methodDeclaratorFormalParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+        Model.projectionFieldName = (Model.Name "formalParameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.MethodDeclarator
+methodDeclaratorIdentifier :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm Syntax.Identifier
+methodDeclaratorIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodDeclarator
+methodDeclaratorMethodDeclarator :: Typed.TypedName Syntax.MethodDeclarator
+methodDeclaratorMethodDeclarator = Typed.TypedName (Model.Name "hydra.java.syntax.MethodDeclarator")
+
+-- | DSL accessor for the receiverParameter field of hydra.java.syntax.MethodDeclarator
+methodDeclaratorReceiverParameter :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter)
+methodDeclaratorReceiverParameter x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+        Model.projectionFieldName = (Model.Name "receiverParameter")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the formalParameters field of hydra.java.syntax.MethodDeclarator
+methodDeclaratorWithFormalParameters :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm [Syntax.FormalParameter] -> Typed.TypedTerm Syntax.MethodDeclarator
+methodDeclaratorWithFormalParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+              Model.projectionFieldName = (Model.Name "receiverParameter")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.MethodDeclarator
+methodDeclaratorWithIdentifier :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodDeclarator
+methodDeclaratorWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+              Model.projectionFieldName = (Model.Name "receiverParameter")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+              Model.projectionFieldName = (Model.Name "formalParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the receiverParameter field of hydra.java.syntax.MethodDeclarator
+methodDeclaratorWithReceiverParameter :: Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm (Maybe Syntax.ReceiverParameter) -> Typed.TypedTerm Syntax.MethodDeclarator
+methodDeclaratorWithReceiverParameter original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "receiverParameter"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "formalParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodDeclarator"),
+              Model.projectionFieldName = (Model.Name "formalParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.MethodHeader
+methodHeader :: Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.Result -> Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm (Maybe Syntax.Throws) -> Typed.TypedTerm Syntax.MethodHeader
+methodHeader parameters result declarator throws =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm parameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "result"),
+          Model.fieldTerm = (Typed.unTypedTerm result)},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarator"),
+          Model.fieldTerm = (Typed.unTypedTerm declarator)},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Typed.unTypedTerm throws)}]}))
+
+-- | DSL accessor for the declarator field of hydra.java.syntax.MethodHeader
+methodHeaderDeclarator :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodDeclarator
+methodHeaderDeclarator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+        Model.projectionFieldName = (Model.Name "declarator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodHeader
+methodHeaderMethodHeader :: Typed.TypedName Syntax.MethodHeader
+methodHeaderMethodHeader = Typed.TypedName (Model.Name "hydra.java.syntax.MethodHeader")
+
+-- | DSL accessor for the parameters field of hydra.java.syntax.MethodHeader
+methodHeaderParameters :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm [Syntax.TypeParameter]
+methodHeaderParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+        Model.projectionFieldName = (Model.Name "parameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the result field of hydra.java.syntax.MethodHeader
+methodHeaderResult :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.Result
+methodHeaderResult x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+        Model.projectionFieldName = (Model.Name "result")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the throws field of hydra.java.syntax.MethodHeader
+methodHeaderThrows :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm (Maybe Syntax.Throws)
+methodHeaderThrows x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+        Model.projectionFieldName = (Model.Name "throws")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the declarator field of hydra.java.syntax.MethodHeader
+methodHeaderWithDeclarator :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.MethodDeclarator -> Typed.TypedTerm Syntax.MethodHeader
+methodHeaderWithDeclarator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "result"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "result")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarator"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "throws")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the parameters field of hydra.java.syntax.MethodHeader
+methodHeaderWithParameters :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.MethodHeader
+methodHeaderWithParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "result"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "result")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "declarator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "throws")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the result field of hydra.java.syntax.MethodHeader
+methodHeaderWithResult :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm Syntax.Result -> Typed.TypedTerm Syntax.MethodHeader
+methodHeaderWithResult original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "result"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "declarator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "throws")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the throws field of hydra.java.syntax.MethodHeader
+methodHeaderWithThrows :: Typed.TypedTerm Syntax.MethodHeader -> Typed.TypedTerm (Maybe Syntax.Throws) -> Typed.TypedTerm Syntax.MethodHeader
+methodHeaderWithThrows original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "result"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "result")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodHeader"),
+              Model.projectionFieldName = (Model.Name "declarator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "throws"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.MethodInvocation
+methodInvocation :: Typed.TypedTerm Syntax.MethodInvocation_Header -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.MethodInvocation
+methodInvocation header arguments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodInvocation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Typed.unTypedTerm header)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm arguments)}]}))
+
+-- | DSL accessor for the arguments field of hydra.java.syntax.MethodInvocation
+methodInvocationArguments :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm [Syntax.Expression]
+methodInvocationArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation"),
+        Model.projectionFieldName = (Model.Name "arguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the header field of hydra.java.syntax.MethodInvocation
+methodInvocationHeader :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm Syntax.MethodInvocation_Header
+methodInvocationHeader x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation"),
+        Model.projectionFieldName = (Model.Name "header")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodInvocation
+methodInvocationMethodInvocation :: Typed.TypedName Syntax.MethodInvocation
+methodInvocationMethodInvocation = Typed.TypedName (Model.Name "hydra.java.syntax.MethodInvocation")
+
+-- | DSL updater for the arguments field of hydra.java.syntax.MethodInvocation
+methodInvocationWithArguments :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.MethodInvocation
+methodInvocationWithArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodInvocation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the header field of hydra.java.syntax.MethodInvocation
+methodInvocationWithHeader :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm Syntax.MethodInvocation_Header -> Typed.TypedTerm Syntax.MethodInvocation
+methodInvocationWithHeader original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodInvocation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          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.java.syntax.MethodInvocation"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.MethodInvocation_Complex
+methodInvocation_Complex :: Typed.TypedTerm Syntax.MethodInvocation_Variant -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodInvocation_Complex
+methodInvocation_Complex variant typeArguments identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Typed.unTypedTerm variant)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.MethodInvocation_Complex
+methodInvocation_ComplexIdentifier :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.Identifier
+methodInvocation_ComplexIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodInvocation_Complex
+methodInvocation_ComplexMethodInvocation_Complex :: Typed.TypedName Syntax.MethodInvocation_Complex
+methodInvocation_ComplexMethodInvocation_Complex =
+    Typed.TypedName (Model.Name "hydra.java.syntax.MethodInvocation_Complex")
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodInvocation_Complex
+methodInvocation_ComplexTypeArguments :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm [Syntax.TypeArgument]
+methodInvocation_ComplexTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the variant field of hydra.java.syntax.MethodInvocation_Complex
+methodInvocation_ComplexVariant :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.MethodInvocation_Variant
+methodInvocation_ComplexVariant x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+        Model.projectionFieldName = (Model.Name "variant")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.MethodInvocation_Complex
+methodInvocation_ComplexWithIdentifier :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodInvocation_Complex
+methodInvocation_ComplexWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+              Model.projectionFieldName = (Model.Name "variant")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.MethodInvocation_Complex
+methodInvocation_ComplexWithTypeArguments :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodInvocation_Complex
+methodInvocation_ComplexWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+              Model.projectionFieldName = (Model.Name "variant")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the variant field of hydra.java.syntax.MethodInvocation_Complex
+methodInvocation_ComplexWithVariant :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.MethodInvocation_Variant -> Typed.TypedTerm Syntax.MethodInvocation_Complex
+methodInvocation_ComplexWithVariant original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "variant"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Complex"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the complex variant of hydra.java.syntax.MethodInvocation_Header
+methodInvocation_HeaderComplex :: Typed.TypedTerm Syntax.MethodInvocation_Complex -> Typed.TypedTerm Syntax.MethodInvocation_Header
+methodInvocation_HeaderComplex x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Header"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "complex"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.MethodInvocation_Header
+methodInvocation_HeaderMethodInvocation_Header :: Typed.TypedName Syntax.MethodInvocation_Header
+methodInvocation_HeaderMethodInvocation_Header = Typed.TypedName (Model.Name "hydra.java.syntax.MethodInvocation_Header")
+
+-- | DSL injection for the simple variant of hydra.java.syntax.MethodInvocation_Header
+methodInvocation_HeaderSimple :: Typed.TypedTerm Syntax.MethodName -> Typed.TypedTerm Syntax.MethodInvocation_Header
+methodInvocation_HeaderSimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Header"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the expression variant of hydra.java.syntax.MethodInvocation_Variant
+methodInvocation_VariantExpression :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.MethodInvocation_Variant
+methodInvocation_VariantExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.MethodInvocation_Variant
+methodInvocation_VariantMethodInvocation_Variant :: Typed.TypedName Syntax.MethodInvocation_Variant
+methodInvocation_VariantMethodInvocation_Variant =
+    Typed.TypedName (Model.Name "hydra.java.syntax.MethodInvocation_Variant")
+
+-- | DSL injection for the primary variant of hydra.java.syntax.MethodInvocation_Variant
+methodInvocation_VariantPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.MethodInvocation_Variant
+methodInvocation_VariantPrimary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the super variant of hydra.java.syntax.MethodInvocation_Variant
+methodInvocation_VariantSuper :: Typed.TypedTerm Syntax.MethodInvocation_Variant
+methodInvocation_VariantSuper =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "super"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the type variant of hydra.java.syntax.MethodInvocation_Variant
+methodInvocation_VariantType :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.MethodInvocation_Variant
+methodInvocation_VariantType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "type"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the typeSuper variant of hydra.java.syntax.MethodInvocation_Variant
+methodInvocation_VariantTypeSuper :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.MethodInvocation_Variant
+methodInvocation_VariantTypeSuper x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodInvocation_Variant"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typeSuper"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the abstract variant of hydra.java.syntax.MethodModifier
+methodModifierAbstract :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierAbstract =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "abstract"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.MethodModifier
+methodModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.MethodModifier
+methodModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the final variant of hydra.java.syntax.MethodModifier
+methodModifierFinal :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierFinal =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "final"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.MethodModifier
+methodModifierMethodModifier :: Typed.TypedName Syntax.MethodModifier
+methodModifierMethodModifier = Typed.TypedName (Model.Name "hydra.java.syntax.MethodModifier")
+
+-- | DSL injection for the native variant of hydra.java.syntax.MethodModifier
+methodModifierNative :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierNative =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "native"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the private variant of hydra.java.syntax.MethodModifier
+methodModifierPrivate :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierPrivate =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "private"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the protected variant of hydra.java.syntax.MethodModifier
+methodModifierProtected :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierProtected =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "protected"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the public variant of hydra.java.syntax.MethodModifier
+methodModifierPublic :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierPublic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "public"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the static variant of hydra.java.syntax.MethodModifier
+methodModifierStatic :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierStatic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "static"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the strictfp variant of hydra.java.syntax.MethodModifier
+methodModifierStrictfp :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierStrictfp =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "strictfp"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the synchronized variant of hydra.java.syntax.MethodModifier
+methodModifierSynchronized :: Typed.TypedTerm Syntax.MethodModifier
+methodModifierSynchronized =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "synchronized"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for the hydra.java.syntax.MethodName wrapper
+methodName :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodName
+methodName x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.MethodName"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodName
+methodNameMethodName :: Typed.TypedName Syntax.MethodName
+methodNameMethodName = Typed.TypedName (Model.Name "hydra.java.syntax.MethodName")
+
+-- | DSL injection for the array variant of hydra.java.syntax.MethodReference
+methodReferenceArray :: Typed.TypedTerm Syntax.MethodReference_Array -> Typed.TypedTerm Syntax.MethodReference
+methodReferenceArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodReference"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "array"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the expression variant of hydra.java.syntax.MethodReference
+methodReferenceExpression :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.MethodReference
+methodReferenceExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodReference"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.MethodReference
+methodReferenceMethodReference :: Typed.TypedName Syntax.MethodReference
+methodReferenceMethodReference = Typed.TypedName (Model.Name "hydra.java.syntax.MethodReference")
+
+-- | DSL injection for the new variant of hydra.java.syntax.MethodReference
+methodReferenceNew :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm Syntax.MethodReference
+methodReferenceNew x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodReference"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "new"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the primary variant of hydra.java.syntax.MethodReference
+methodReferencePrimary :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.MethodReference
+methodReferencePrimary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodReference"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the referenceType variant of hydra.java.syntax.MethodReference
+methodReferenceReferenceType :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.MethodReference
+methodReferenceReferenceType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodReference"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "referenceType"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the super variant of hydra.java.syntax.MethodReference
+methodReferenceSuper :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Syntax.MethodReference
+methodReferenceSuper x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MethodReference"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "super"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.MethodReference_Array wrapper
+methodReference_Array :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.MethodReference_Array
+methodReference_Array x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.MethodReference_Array"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodReference_Array
+methodReference_ArrayMethodReference_Array :: Typed.TypedName Syntax.MethodReference_Array
+methodReference_ArrayMethodReference_Array = Typed.TypedName (Model.Name "hydra.java.syntax.MethodReference_Array")
+
+-- | DSL constructor for hydra.java.syntax.MethodReference_Expression
+methodReference_Expression :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Expression
+methodReference_Expression name typeArguments identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.MethodReference_Expression
+methodReference_ExpressionIdentifier :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.Identifier
+methodReference_ExpressionIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodReference_Expression
+methodReference_ExpressionMethodReference_Expression :: Typed.TypedName Syntax.MethodReference_Expression
+methodReference_ExpressionMethodReference_Expression =
+    Typed.TypedName (Model.Name "hydra.java.syntax.MethodReference_Expression")
+
+-- | DSL accessor for the name field of hydra.java.syntax.MethodReference_Expression
+methodReference_ExpressionName :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.ExpressionName
+methodReference_ExpressionName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_Expression
+methodReference_ExpressionTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm [Syntax.TypeArgument]
+methodReference_ExpressionTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.MethodReference_Expression
+methodReference_ExpressionWithIdentifier :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Expression
+methodReference_ExpressionWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+      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.java.syntax.MethodReference_Expression"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.java.syntax.MethodReference_Expression
+methodReference_ExpressionWithName :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.MethodReference_Expression
+methodReference_ExpressionWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_Expression
+methodReference_ExpressionWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Expression -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_Expression
+methodReference_ExpressionWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+      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.java.syntax.MethodReference_Expression"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Expression"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.MethodReference_New
+methodReference_New :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_New
+methodReference_New classType typeArguments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_New"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "classType"),
+          Model.fieldTerm = (Typed.unTypedTerm classType)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)}]}))
+
+-- | DSL accessor for the classType field of hydra.java.syntax.MethodReference_New
+methodReference_NewClassType :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm Syntax.ClassType
+methodReference_NewClassType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_New"),
+        Model.projectionFieldName = (Model.Name "classType")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodReference_New
+methodReference_NewMethodReference_New :: Typed.TypedName Syntax.MethodReference_New
+methodReference_NewMethodReference_New = Typed.TypedName (Model.Name "hydra.java.syntax.MethodReference_New")
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_New
+methodReference_NewTypeArguments :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm [Syntax.TypeArgument]
+methodReference_NewTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_New"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the classType field of hydra.java.syntax.MethodReference_New
+methodReference_NewWithClassType :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.MethodReference_New
+methodReference_NewWithClassType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_New"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "classType"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_New"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_New
+methodReference_NewWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_New -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_New
+methodReference_NewWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_New"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "classType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_New"),
+              Model.projectionFieldName = (Model.Name "classType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.MethodReference_Primary
+methodReference_Primary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Primary
+methodReference_Primary primary typeArguments identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "primary"),
+          Model.fieldTerm = (Typed.unTypedTerm primary)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.MethodReference_Primary
+methodReference_PrimaryIdentifier :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.Identifier
+methodReference_PrimaryIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodReference_Primary
+methodReference_PrimaryMethodReference_Primary :: Typed.TypedName Syntax.MethodReference_Primary
+methodReference_PrimaryMethodReference_Primary = Typed.TypedName (Model.Name "hydra.java.syntax.MethodReference_Primary")
+
+-- | DSL accessor for the primary field of hydra.java.syntax.MethodReference_Primary
+methodReference_PrimaryPrimary :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.Primary
+methodReference_PrimaryPrimary x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+        Model.projectionFieldName = (Model.Name "primary")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_Primary
+methodReference_PrimaryTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm [Syntax.TypeArgument]
+methodReference_PrimaryTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.MethodReference_Primary
+methodReference_PrimaryWithIdentifier :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Primary
+methodReference_PrimaryWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "primary"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+              Model.projectionFieldName = (Model.Name "primary")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the primary field of hydra.java.syntax.MethodReference_Primary
+methodReference_PrimaryWithPrimary :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.MethodReference_Primary
+methodReference_PrimaryWithPrimary original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "primary"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_Primary
+methodReference_PrimaryWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Primary -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_Primary
+methodReference_PrimaryWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "primary"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+              Model.projectionFieldName = (Model.Name "primary")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Primary"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.MethodReference_ReferenceType
+methodReference_ReferenceType :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_ReferenceType
+methodReference_ReferenceType referenceType typeArguments identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "referenceType"),
+          Model.fieldTerm = (Typed.unTypedTerm referenceType)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeIdentifier :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.Identifier
+methodReference_ReferenceTypeIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeMethodReference_ReferenceType :: Typed.TypedName Syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeMethodReference_ReferenceType =
+    Typed.TypedName (Model.Name "hydra.java.syntax.MethodReference_ReferenceType")
+
+-- | DSL accessor for the referenceType field of hydra.java.syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeReferenceType :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.ReferenceType
+methodReference_ReferenceTypeReferenceType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+        Model.projectionFieldName = (Model.Name "referenceType")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeTypeArguments :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm [Syntax.TypeArgument]
+methodReference_ReferenceTypeTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeWithIdentifier :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "referenceType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+              Model.projectionFieldName = (Model.Name "referenceType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the referenceType field of hydra.java.syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeWithReferenceType :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeWithReferenceType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "referenceType"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_ReferenceType -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_ReferenceType
+methodReference_ReferenceTypeWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "referenceType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+              Model.projectionFieldName = (Model.Name "referenceType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_ReferenceType"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.MethodReference_Super
+methodReference_Super :: Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodReference_Super
+methodReference_Super typeArguments identifier super =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "super"),
+          Model.fieldTerm = (Typed.unTypedTerm super)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.MethodReference_Super
+methodReference_SuperIdentifier :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Syntax.Identifier
+methodReference_SuperIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MethodReference_Super
+methodReference_SuperMethodReference_Super :: Typed.TypedName Syntax.MethodReference_Super
+methodReference_SuperMethodReference_Super = Typed.TypedName (Model.Name "hydra.java.syntax.MethodReference_Super")
+
+-- | DSL accessor for the super field of hydra.java.syntax.MethodReference_Super
+methodReference_SuperSuper :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Bool
+methodReference_SuperSuper x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+        Model.projectionFieldName = (Model.Name "super")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.MethodReference_Super
+methodReference_SuperTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm [Syntax.TypeArgument]
+methodReference_SuperTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.MethodReference_Super
+methodReference_SuperWithIdentifier :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodReference_Super
+methodReference_SuperWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "super"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+              Model.projectionFieldName = (Model.Name "super")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the super field of hydra.java.syntax.MethodReference_Super
+methodReference_SuperWithSuper :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodReference_Super
+methodReference_SuperWithSuper original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "super"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.MethodReference_Super
+methodReference_SuperWithTypeArguments :: Typed.TypedTerm Syntax.MethodReference_Super -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.MethodReference_Super
+methodReference_SuperWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "super"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MethodReference_Super"),
+              Model.projectionFieldName = (Model.Name "super")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.ModularCompilationUnit
+modularCompilationUnit :: Typed.TypedTerm [Syntax.ImportDeclaration] -> Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm Syntax.ModularCompilationUnit
+modularCompilationUnit imports module_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModularCompilationUnit"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Typed.unTypedTerm imports)},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Typed.unTypedTerm module_)}]}))
+
+-- | DSL accessor for the imports field of hydra.java.syntax.ModularCompilationUnit
+modularCompilationUnitImports :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm [Syntax.ImportDeclaration]
+modularCompilationUnitImports x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModularCompilationUnit"),
+        Model.projectionFieldName = (Model.Name "imports")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ModularCompilationUnit
+modularCompilationUnitModularCompilationUnit :: Typed.TypedName Syntax.ModularCompilationUnit
+modularCompilationUnitModularCompilationUnit = Typed.TypedName (Model.Name "hydra.java.syntax.ModularCompilationUnit")
+
+-- | DSL accessor for the module field of hydra.java.syntax.ModularCompilationUnit
+modularCompilationUnitModule :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm Syntax.ModuleDeclaration
+modularCompilationUnitModule x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModularCompilationUnit"),
+        Model.projectionFieldName = (Model.Name "module")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the imports field of hydra.java.syntax.ModularCompilationUnit
+modularCompilationUnitWithImports :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm [Syntax.ImportDeclaration] -> Typed.TypedTerm Syntax.ModularCompilationUnit
+modularCompilationUnitWithImports original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModularCompilationUnit"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModularCompilationUnit"),
+              Model.projectionFieldName = (Model.Name "module")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the module field of hydra.java.syntax.ModularCompilationUnit
+modularCompilationUnitWithModule :: Typed.TypedTerm Syntax.ModularCompilationUnit -> Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm Syntax.ModularCompilationUnit
+modularCompilationUnitWithModule original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModularCompilationUnit"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModularCompilationUnit"),
+              Model.projectionFieldName = (Model.Name "imports")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.ModuleDeclaration
+moduleDeclaration :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Bool -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm [Syntax.ModuleDirective] -> Typed.TypedTerm Syntax.ModuleDeclaration
+moduleDeclaration annotations open identifiers directives =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "open"),
+          Model.fieldTerm = (Typed.unTypedTerm open)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm identifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "directives"),
+          Model.fieldTerm = (Typed.unTypedTerm directives)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.ModuleDeclaration
+moduleDeclarationAnnotations :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.Annotation]
+moduleDeclarationAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the directives field of hydra.java.syntax.ModuleDeclaration
+moduleDeclarationDirectives :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.ModuleDirective]
+moduleDeclarationDirectives x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+        Model.projectionFieldName = (Model.Name "directives")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifiers field of hydra.java.syntax.ModuleDeclaration
+moduleDeclarationIdentifiers :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.Identifier]
+moduleDeclarationIdentifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ModuleDeclaration
+moduleDeclarationModuleDeclaration :: Typed.TypedName Syntax.ModuleDeclaration
+moduleDeclarationModuleDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.ModuleDeclaration")
+
+-- | DSL accessor for the open field of hydra.java.syntax.ModuleDeclaration
+moduleDeclarationOpen :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm Bool
+moduleDeclarationOpen x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+        Model.projectionFieldName = (Model.Name "open")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the annotations field of hydra.java.syntax.ModuleDeclaration
+moduleDeclarationWithAnnotations :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.ModuleDeclaration
+moduleDeclarationWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "open"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "open")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "directives"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "directives")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the directives field of hydra.java.syntax.ModuleDeclaration
+moduleDeclarationWithDirectives :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.ModuleDirective] -> Typed.TypedTerm Syntax.ModuleDeclaration
+moduleDeclarationWithDirectives original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "open"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "open")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "directives"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifiers field of hydra.java.syntax.ModuleDeclaration
+moduleDeclarationWithIdentifiers :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.ModuleDeclaration
+moduleDeclarationWithIdentifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "open"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "open")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "directives"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "directives")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the open field of hydra.java.syntax.ModuleDeclaration
+moduleDeclarationWithOpen :: Typed.TypedTerm Syntax.ModuleDeclaration -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ModuleDeclaration
+moduleDeclarationWithOpen original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "open"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "directives"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDeclaration"),
+              Model.projectionFieldName = (Model.Name "directives")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the exports variant of hydra.java.syntax.ModuleDirective
+moduleDirectiveExports :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm Syntax.ModuleDirective
+moduleDirectiveExports x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "exports"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ModuleDirective
+moduleDirectiveModuleDirective :: Typed.TypedName Syntax.ModuleDirective
+moduleDirectiveModuleDirective = Typed.TypedName (Model.Name "hydra.java.syntax.ModuleDirective")
+
+-- | DSL injection for the opens variant of hydra.java.syntax.ModuleDirective
+moduleDirectiveOpens :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm Syntax.ModuleDirective
+moduleDirectiveOpens x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "opens"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the provides variant of hydra.java.syntax.ModuleDirective
+moduleDirectiveProvides :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm Syntax.ModuleDirective
+moduleDirectiveProvides x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "provides"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the requires variant of hydra.java.syntax.ModuleDirective
+moduleDirectiveRequires :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm Syntax.ModuleDirective
+moduleDirectiveRequires x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "requires"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the uses variant of hydra.java.syntax.ModuleDirective
+moduleDirectiveUses :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.ModuleDirective
+moduleDirectiveUses x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "uses"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpens :: Typed.TypedTerm Syntax.PackageName -> Typed.TypedTerm [Syntax.ModuleName] -> Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpens package modules =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "package"),
+          Model.fieldTerm = (Typed.unTypedTerm package)},
+        Model.Field {
+          Model.fieldName = (Model.Name "modules"),
+          Model.fieldTerm = (Typed.unTypedTerm modules)}]}))
+
+-- | DSL name token for hydra.java.syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpensModuleDirective_ExportsOrOpens :: Typed.TypedName Syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpensModuleDirective_ExportsOrOpens =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens")
+
+-- | DSL accessor for the modules field of hydra.java.syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpensModules :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm [Syntax.ModuleName]
+moduleDirective_ExportsOrOpensModules x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
+        Model.projectionFieldName = (Model.Name "modules")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the package field of hydra.java.syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpensPackage :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm Syntax.PackageName
+moduleDirective_ExportsOrOpensPackage x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
+        Model.projectionFieldName = (Model.Name "package")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the modules field of hydra.java.syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpensWithModules :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm [Syntax.ModuleName] -> Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpensWithModules original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "package"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
+              Model.projectionFieldName = (Model.Name "package")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "modules"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the package field of hydra.java.syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpensWithPackage :: Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens -> Typed.TypedTerm Syntax.PackageName -> Typed.TypedTerm Syntax.ModuleDirective_ExportsOrOpens
+moduleDirective_ExportsOrOpensWithPackage original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "package"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "modules"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"),
+              Model.projectionFieldName = (Model.Name "modules")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.ModuleDirective_Provides
+moduleDirective_Provides :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.ModuleDirective_Provides
+moduleDirective_Provides to with =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Provides"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "to"),
+          Model.fieldTerm = (Typed.unTypedTerm to)},
+        Model.Field {
+          Model.fieldName = (Model.Name "with"),
+          Model.fieldTerm = (Typed.unTypedTerm with)}]}))
+
+-- | DSL name token for hydra.java.syntax.ModuleDirective_Provides
+moduleDirective_ProvidesModuleDirective_Provides :: Typed.TypedName Syntax.ModuleDirective_Provides
+moduleDirective_ProvidesModuleDirective_Provides =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ModuleDirective_Provides")
+
+-- | DSL accessor for the to field of hydra.java.syntax.ModuleDirective_Provides
+moduleDirective_ProvidesTo :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm Syntax.TypeName
+moduleDirective_ProvidesTo x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Provides"),
+        Model.projectionFieldName = (Model.Name "to")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the with field of hydra.java.syntax.ModuleDirective_Provides
+moduleDirective_ProvidesWith :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm [Syntax.TypeName]
+moduleDirective_ProvidesWith x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Provides"),
+        Model.projectionFieldName = (Model.Name "with")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the to field of hydra.java.syntax.ModuleDirective_Provides
+moduleDirective_ProvidesWithTo :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.ModuleDirective_Provides
+moduleDirective_ProvidesWithTo original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Provides"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "to"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "with"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Provides"),
+              Model.projectionFieldName = (Model.Name "with")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the with field of hydra.java.syntax.ModuleDirective_Provides
+moduleDirective_ProvidesWithWith :: Typed.TypedTerm Syntax.ModuleDirective_Provides -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.ModuleDirective_Provides
+moduleDirective_ProvidesWithWith original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Provides"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "to"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Provides"),
+              Model.projectionFieldName = (Model.Name "to")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "with"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.ModuleDirective_Requires
+moduleDirective_Requires :: Typed.TypedTerm [Syntax.RequiresModifier] -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.ModuleDirective_Requires
+moduleDirective_Requires modifiers module_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Requires"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Typed.unTypedTerm module_)}]}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.ModuleDirective_Requires
+moduleDirective_RequiresModifiers :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm [Syntax.RequiresModifier]
+moduleDirective_RequiresModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Requires"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the module field of hydra.java.syntax.ModuleDirective_Requires
+moduleDirective_RequiresModule :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm Syntax.ModuleName
+moduleDirective_RequiresModule x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Requires"),
+        Model.projectionFieldName = (Model.Name "module")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ModuleDirective_Requires
+moduleDirective_RequiresModuleDirective_Requires :: Typed.TypedName Syntax.ModuleDirective_Requires
+moduleDirective_RequiresModuleDirective_Requires =
+    Typed.TypedName (Model.Name "hydra.java.syntax.ModuleDirective_Requires")
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.ModuleDirective_Requires
+moduleDirective_RequiresWithModifiers :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm [Syntax.RequiresModifier] -> Typed.TypedTerm Syntax.ModuleDirective_Requires
+moduleDirective_RequiresWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Requires"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Requires"),
+              Model.projectionFieldName = (Model.Name "module")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the module field of hydra.java.syntax.ModuleDirective_Requires
+moduleDirective_RequiresWithModule :: Typed.TypedTerm Syntax.ModuleDirective_Requires -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.ModuleDirective_Requires
+moduleDirective_RequiresWithModule original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Requires"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleDirective_Requires"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.ModuleName
+moduleName :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.ModuleName) -> Typed.TypedTerm Syntax.ModuleName
+moduleName identifier name =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.ModuleName
+moduleNameIdentifier :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.Identifier
+moduleNameIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleName"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ModuleName
+moduleNameModuleName :: Typed.TypedName Syntax.ModuleName
+moduleNameModuleName = Typed.TypedName (Model.Name "hydra.java.syntax.ModuleName")
+
+-- | DSL accessor for the name field of hydra.java.syntax.ModuleName
+moduleNameName :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm (Maybe Syntax.ModuleName)
+moduleNameName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleName"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.ModuleName
+moduleNameWithIdentifier :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ModuleName
+moduleNameWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleName"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the name field of hydra.java.syntax.ModuleName
+moduleNameWithName :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm (Maybe Syntax.ModuleName) -> Typed.TypedTerm Syntax.ModuleName
+moduleNameWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ModuleName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ModuleName"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the divide variant of hydra.java.syntax.MultiplicativeExpression
+multiplicativeExpressionDivide :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
+multiplicativeExpressionDivide x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "divide"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the mod variant of hydra.java.syntax.MultiplicativeExpression
+multiplicativeExpressionMod :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
+multiplicativeExpressionMod x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "mod"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.MultiplicativeExpression
+multiplicativeExpressionMultiplicativeExpression :: Typed.TypedName Syntax.MultiplicativeExpression
+multiplicativeExpressionMultiplicativeExpression =
+    Typed.TypedName (Model.Name "hydra.java.syntax.MultiplicativeExpression")
+
+-- | DSL injection for the times variant of hydra.java.syntax.MultiplicativeExpression
+multiplicativeExpressionTimes :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
+multiplicativeExpressionTimes x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "times"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the unary variant of hydra.java.syntax.MultiplicativeExpression
+multiplicativeExpressionUnary :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression
+multiplicativeExpressionUnary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_Binary :: Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_Binary lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_BinaryLhs :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression
+multiplicativeExpression_BinaryLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_BinaryMultiplicativeExpression_Binary :: Typed.TypedName Syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_BinaryMultiplicativeExpression_Binary =
+    Typed.TypedName (Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary")
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_BinaryRhs :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.UnaryExpression
+multiplicativeExpression_BinaryRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_BinaryWithLhs :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.MultiplicativeExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_BinaryWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_BinaryWithRhs :: Typed.TypedTerm Syntax.MultiplicativeExpression_Binary -> Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.MultiplicativeExpression_Binary
+multiplicativeExpression_BinaryWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.NormalAnnotation
+normalAnnotation :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm [Syntax.ElementValuePair] -> Typed.TypedTerm Syntax.NormalAnnotation
+normalAnnotation typeName pairs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalAnnotation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeName"),
+          Model.fieldTerm = (Typed.unTypedTerm typeName)},
+        Model.Field {
+          Model.fieldName = (Model.Name "pairs"),
+          Model.fieldTerm = (Typed.unTypedTerm pairs)}]}))
+
+-- | DSL name token for hydra.java.syntax.NormalAnnotation
+normalAnnotationNormalAnnotation :: Typed.TypedName Syntax.NormalAnnotation
+normalAnnotationNormalAnnotation = Typed.TypedName (Model.Name "hydra.java.syntax.NormalAnnotation")
+
+-- | DSL accessor for the pairs field of hydra.java.syntax.NormalAnnotation
+normalAnnotationPairs :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm [Syntax.ElementValuePair]
+normalAnnotationPairs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalAnnotation"),
+        Model.projectionFieldName = (Model.Name "pairs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeName field of hydra.java.syntax.NormalAnnotation
+normalAnnotationTypeName :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm Syntax.TypeName
+normalAnnotationTypeName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalAnnotation"),
+        Model.projectionFieldName = (Model.Name "typeName")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the pairs field of hydra.java.syntax.NormalAnnotation
+normalAnnotationWithPairs :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm [Syntax.ElementValuePair] -> Typed.TypedTerm Syntax.NormalAnnotation
+normalAnnotationWithPairs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalAnnotation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeName"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalAnnotation"),
+              Model.projectionFieldName = (Model.Name "typeName")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "pairs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the typeName field of hydra.java.syntax.NormalAnnotation
+normalAnnotationWithTypeName :: Typed.TypedTerm Syntax.NormalAnnotation -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.NormalAnnotation
+normalAnnotationWithTypeName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalAnnotation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeName"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "pairs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalAnnotation"),
+              Model.projectionFieldName = (Model.Name "pairs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.NormalClassDeclaration
+normalClassDeclaration :: Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm (Maybe Syntax.ClassType) -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm Syntax.NormalClassDeclaration
+normalClassDeclaration modifiers identifier parameters extends implements permits body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm parameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Typed.unTypedTerm extends)},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Typed.unTypedTerm implements)},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Typed.unTypedTerm permits)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationBody :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.ClassBody
+normalClassDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the extends field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationExtends :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm (Maybe Syntax.ClassType)
+normalClassDeclarationExtends x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "extends")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationIdentifier :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
+normalClassDeclarationIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the implements field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationImplements :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.InterfaceType]
+normalClassDeclarationImplements x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "implements")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationModifiers :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.ClassModifier]
+normalClassDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationNormalClassDeclaration :: Typed.TypedName Syntax.NormalClassDeclaration
+normalClassDeclarationNormalClassDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.NormalClassDeclaration")
+
+-- | DSL accessor for the parameters field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationParameters :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
+normalClassDeclarationParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "parameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the permits field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationPermits :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.TypeName]
+normalClassDeclarationPermits x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "permits")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationWithBody :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm Syntax.NormalClassDeclaration
+normalClassDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the extends field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationWithExtends :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm (Maybe Syntax.ClassType) -> Typed.TypedTerm Syntax.NormalClassDeclaration
+normalClassDeclarationWithExtends original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationWithIdentifier :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.NormalClassDeclaration
+normalClassDeclarationWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the implements field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationWithImplements :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.NormalClassDeclaration
+normalClassDeclarationWithImplements original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationWithModifiers :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.NormalClassDeclaration
+normalClassDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the parameters field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationWithParameters :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.NormalClassDeclaration
+normalClassDeclarationWithParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the permits field of hydra.java.syntax.NormalClassDeclaration
+normalClassDeclarationWithPermits :: Typed.TypedTerm Syntax.NormalClassDeclaration -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.NormalClassDeclaration
+normalClassDeclarationWithPermits original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          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.java.syntax.NormalClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclaration :: Typed.TypedTerm [Syntax.InterfaceModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.InterfaceBody -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
+normalInterfaceDeclaration modifiers identifier parameters extends permits body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm parameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Typed.unTypedTerm extends)},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Typed.unTypedTerm permits)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationBody :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceBody
+normalInterfaceDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the extends field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationExtends :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceType]
+normalInterfaceDeclarationExtends x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "extends")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationIdentifier :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
+normalInterfaceDeclarationIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationModifiers :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceModifier]
+normalInterfaceDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationNormalInterfaceDeclaration :: Typed.TypedName Syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationNormalInterfaceDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration")
+
+-- | DSL accessor for the parameters field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationParameters :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
+normalInterfaceDeclarationParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "parameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the permits field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationPermits :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeName]
+normalInterfaceDeclarationPermits x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "permits")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithBody :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.InterfaceBody -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the extends field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithExtends :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithExtends original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithIdentifier :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithModifiers :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.InterfaceModifier] -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the parameters field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithParameters :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "permits")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the permits field of hydra.java.syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithPermits :: Typed.TypedTerm Syntax.NormalInterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeName] -> Typed.TypedTerm Syntax.NormalInterfaceDeclaration
+normalInterfaceDeclarationWithPermits original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "permits"),
+          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.java.syntax.NormalInterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the array variant of hydra.java.syntax.NumericTypeArray
+numericTypeArrayArray :: Typed.TypedTerm Syntax.NumericTypeArray -> Typed.TypedTerm Syntax.NumericTypeArray
+numericTypeArrayArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.NumericTypeArray"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "array"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.NumericTypeArray
+numericTypeArrayNumericTypeArray :: Typed.TypedName Syntax.NumericTypeArray
+numericTypeArrayNumericTypeArray = Typed.TypedName (Model.Name "hydra.java.syntax.NumericTypeArray")
+
+-- | DSL injection for the simple variant of hydra.java.syntax.NumericTypeArray
+numericTypeArraySimple :: Typed.TypedTerm Syntax.NumericType -> Typed.TypedTerm Syntax.NumericTypeArray
+numericTypeArraySimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.NumericTypeArray"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the floatingPoint variant of hydra.java.syntax.NumericType
+numericTypeFloatingPoint :: Typed.TypedTerm Syntax.FloatingPointType -> Typed.TypedTerm Syntax.NumericType
+numericTypeFloatingPoint x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.NumericType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "floatingPoint"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the integral variant of hydra.java.syntax.NumericType
+numericTypeIntegral :: Typed.TypedTerm Syntax.IntegralType -> Typed.TypedTerm Syntax.NumericType
+numericTypeIntegral x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.NumericType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "integral"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.NumericType
+numericTypeNumericType :: Typed.TypedName Syntax.NumericType
+numericTypeNumericType = Typed.TypedName (Model.Name "hydra.java.syntax.NumericType")
+
+-- | DSL constructor for hydra.java.syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnit :: Typed.TypedTerm (Maybe Syntax.PackageDeclaration) -> Typed.TypedTerm [Syntax.ImportDeclaration] -> Typed.TypedTerm [Syntax.TopLevelClassOrInterfaceDeclarationWithComments] -> Typed.TypedTerm Syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnit package imports types =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "package"),
+          Model.fieldTerm = (Typed.unTypedTerm package)},
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Typed.unTypedTerm imports)},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Typed.unTypedTerm types)}]}))
+
+-- | DSL accessor for the imports field of hydra.java.syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitImports :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm [Syntax.ImportDeclaration]
+ordinaryCompilationUnitImports x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+        Model.projectionFieldName = (Model.Name "imports")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitOrdinaryCompilationUnit :: Typed.TypedName Syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitOrdinaryCompilationUnit = Typed.TypedName (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit")
+
+-- | DSL accessor for the package field of hydra.java.syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitPackage :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm (Maybe Syntax.PackageDeclaration)
+ordinaryCompilationUnitPackage x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+        Model.projectionFieldName = (Model.Name "package")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the types field of hydra.java.syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitTypes :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm [Syntax.TopLevelClassOrInterfaceDeclarationWithComments]
+ordinaryCompilationUnitTypes x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+        Model.projectionFieldName = (Model.Name "types")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the imports field of hydra.java.syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitWithImports :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm [Syntax.ImportDeclaration] -> Typed.TypedTerm Syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitWithImports original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "package"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+              Model.projectionFieldName = (Model.Name "package")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+              Model.projectionFieldName = (Model.Name "types")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the package field of hydra.java.syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitWithPackage :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm (Maybe Syntax.PackageDeclaration) -> Typed.TypedTerm Syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitWithPackage original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "package"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+              Model.projectionFieldName = (Model.Name "imports")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+              Model.projectionFieldName = (Model.Name "types")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the types field of hydra.java.syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitWithTypes :: Typed.TypedTerm Syntax.OrdinaryCompilationUnit -> Typed.TypedTerm [Syntax.TopLevelClassOrInterfaceDeclarationWithComments] -> Typed.TypedTerm Syntax.OrdinaryCompilationUnit
+ordinaryCompilationUnitWithTypes original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "package"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+              Model.projectionFieldName = (Model.Name "package")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"),
+              Model.projectionFieldName = (Model.Name "imports")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.PackageDeclaration
+packageDeclaration :: Typed.TypedTerm [Syntax.PackageModifier] -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.PackageDeclaration
+packageDeclaration modifiers identifiers =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.PackageDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm identifiers)}]}))
+
+-- | DSL accessor for the identifiers field of hydra.java.syntax.PackageDeclaration
+packageDeclarationIdentifiers :: Typed.TypedTerm Syntax.PackageDeclaration -> Typed.TypedTerm [Syntax.Identifier]
+packageDeclarationIdentifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.PackageDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.PackageDeclaration
+packageDeclarationModifiers :: Typed.TypedTerm Syntax.PackageDeclaration -> Typed.TypedTerm [Syntax.PackageModifier]
+packageDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.PackageDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PackageDeclaration
+packageDeclarationPackageDeclaration :: Typed.TypedName Syntax.PackageDeclaration
+packageDeclarationPackageDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.PackageDeclaration")
+
+-- | DSL updater for the identifiers field of hydra.java.syntax.PackageDeclaration
+packageDeclarationWithIdentifiers :: Typed.TypedTerm Syntax.PackageDeclaration -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.PackageDeclaration
+packageDeclarationWithIdentifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.PackageDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.PackageDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.PackageDeclaration
+packageDeclarationWithModifiers :: Typed.TypedTerm Syntax.PackageDeclaration -> Typed.TypedTerm [Syntax.PackageModifier] -> Typed.TypedTerm Syntax.PackageDeclaration
+packageDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.PackageDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.PackageDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.PackageModifier wrapper
+packageModifier :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.PackageModifier
+packageModifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.PackageModifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PackageModifier
+packageModifierPackageModifier :: Typed.TypedName Syntax.PackageModifier
+packageModifierPackageModifier = Typed.TypedName (Model.Name "hydra.java.syntax.PackageModifier")
+
+-- | DSL constructor for the hydra.java.syntax.PackageName wrapper
+packageName :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.PackageName
+packageName x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.PackageName"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PackageName
+packageNamePackageName :: Typed.TypedName Syntax.PackageName
+packageNamePackageName = Typed.TypedName (Model.Name "hydra.java.syntax.PackageName")
+
+-- | DSL constructor for the hydra.java.syntax.PackageOrTypeName wrapper
+packageOrTypeName :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.PackageOrTypeName
+packageOrTypeName x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.PackageOrTypeName"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PackageOrTypeName
+packageOrTypeNamePackageOrTypeName :: Typed.TypedName Syntax.PackageOrTypeName
+packageOrTypeNamePackageOrTypeName = Typed.TypedName (Model.Name "hydra.java.syntax.PackageOrTypeName")
+
+-- | DSL name token for hydra.java.syntax.Pattern
+patternPattern :: Typed.TypedName Syntax.Pattern
+patternPattern = Typed.TypedName (Model.Name "hydra.java.syntax.Pattern")
+
+-- | DSL injection for the record variant of hydra.java.syntax.Pattern
+patternRecord :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.Pattern
+patternRecord x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "record"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the type variant of hydra.java.syntax.Pattern
+patternType :: Typed.TypedTerm Syntax.TypePattern -> Typed.TypedTerm Syntax.Pattern
+patternType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "type"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.PostDecrementExpression wrapper
+postDecrementExpression :: Typed.TypedTerm Syntax.PostfixExpression -> Typed.TypedTerm Syntax.PostDecrementExpression
+postDecrementExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.PostDecrementExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PostDecrementExpression
+postDecrementExpressionPostDecrementExpression :: Typed.TypedName Syntax.PostDecrementExpression
+postDecrementExpressionPostDecrementExpression = Typed.TypedName (Model.Name "hydra.java.syntax.PostDecrementExpression")
+
+-- | DSL constructor for the hydra.java.syntax.PostIncrementExpression wrapper
+postIncrementExpression :: Typed.TypedTerm Syntax.PostfixExpression -> Typed.TypedTerm Syntax.PostIncrementExpression
+postIncrementExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.PostIncrementExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PostIncrementExpression
+postIncrementExpressionPostIncrementExpression :: Typed.TypedName Syntax.PostIncrementExpression
+postIncrementExpressionPostIncrementExpression = Typed.TypedName (Model.Name "hydra.java.syntax.PostIncrementExpression")
+
+-- | DSL injection for the name variant of hydra.java.syntax.PostfixExpression
+postfixExpressionName :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.PostfixExpression
+postfixExpressionName x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PostfixExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "name"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the postDecrement variant of hydra.java.syntax.PostfixExpression
+postfixExpressionPostDecrement :: Typed.TypedTerm Syntax.PostDecrementExpression -> Typed.TypedTerm Syntax.PostfixExpression
+postfixExpressionPostDecrement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PostfixExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "postDecrement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the postIncrement variant of hydra.java.syntax.PostfixExpression
+postfixExpressionPostIncrement :: Typed.TypedTerm Syntax.PostIncrementExpression -> Typed.TypedTerm Syntax.PostfixExpression
+postfixExpressionPostIncrement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PostfixExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "postIncrement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.PostfixExpression
+postfixExpressionPostfixExpression :: Typed.TypedName Syntax.PostfixExpression
+postfixExpressionPostfixExpression = Typed.TypedName (Model.Name "hydra.java.syntax.PostfixExpression")
+
+-- | DSL injection for the primary variant of hydra.java.syntax.PostfixExpression
+postfixExpressionPrimary :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.PostfixExpression
+postfixExpressionPrimary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PostfixExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.PreDecrementExpression wrapper
+preDecrementExpression :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.PreDecrementExpression
+preDecrementExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.PreDecrementExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PreDecrementExpression
+preDecrementExpressionPreDecrementExpression :: Typed.TypedName Syntax.PreDecrementExpression
+preDecrementExpressionPreDecrementExpression = Typed.TypedName (Model.Name "hydra.java.syntax.PreDecrementExpression")
+
+-- | DSL constructor for the hydra.java.syntax.PreIncrementExpression wrapper
+preIncrementExpression :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.PreIncrementExpression
+preIncrementExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.PreIncrementExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PreIncrementExpression
+preIncrementExpressionPreIncrementExpression :: Typed.TypedName Syntax.PreIncrementExpression
+preIncrementExpressionPreIncrementExpression = Typed.TypedName (Model.Name "hydra.java.syntax.PreIncrementExpression")
+
+-- | DSL injection for the arrayCreation variant of hydra.java.syntax.Primary
+primaryArrayCreation :: Typed.TypedTerm Syntax.ArrayCreationExpression -> Typed.TypedTerm Syntax.Primary
+primaryArrayCreation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Primary"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "arrayCreation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the noNewArray variant of hydra.java.syntax.Primary
+primaryNoNewArray :: Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression -> Typed.TypedTerm Syntax.Primary
+primaryNoNewArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Primary"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "noNewArray"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the arrayAccess variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionArrayAccess :: Typed.TypedTerm Syntax.ArrayAccess -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionArrayAccess x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "arrayAccess"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the classInstance variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionClassInstance :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionClassInstance x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classInstance"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the classLiteral variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionClassLiteral :: Typed.TypedTerm Syntax.ClassLiteral -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionClassLiteral x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classLiteral"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the dotThis variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionDotThis :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionDotThis x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "dotThis"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the fieldAccess variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionFieldAccess :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionFieldAccess x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "fieldAccess"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the literal variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionLiteral x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "literal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the methodInvocation variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionMethodInvocation :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionMethodInvocation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "methodInvocation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the methodReference variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionMethodReference :: Typed.TypedTerm Syntax.MethodReference -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionMethodReference x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "methodReference"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the parens variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionParens :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionParens x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "parens"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionPrimaryNoNewArrayExpression :: Typed.TypedName Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionPrimaryNoNewArrayExpression =
+    Typed.TypedName (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression")
+
+-- | DSL injection for the this variant of hydra.java.syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionThis :: Typed.TypedTerm Syntax.PrimaryNoNewArrayExpression
+primaryNoNewArrayExpressionThis =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "this"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.Primary
+primaryPrimary :: Typed.TypedName Syntax.Primary
+primaryPrimary = Typed.TypedName (Model.Name "hydra.java.syntax.Primary")
+
+-- | DSL injection for the boolean variant of hydra.java.syntax.PrimitiveType
+primitiveTypeBoolean :: Typed.TypedTerm Syntax.PrimitiveType
+primitiveTypeBoolean =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimitiveType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "boolean"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the numeric variant of hydra.java.syntax.PrimitiveType
+primitiveTypeNumeric :: Typed.TypedTerm Syntax.NumericType -> Typed.TypedTerm Syntax.PrimitiveType
+primitiveTypeNumeric x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.PrimitiveType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "numeric"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.PrimitiveType
+primitiveTypePrimitiveType :: Typed.TypedName Syntax.PrimitiveType
+primitiveTypePrimitiveType = Typed.TypedName (Model.Name "hydra.java.syntax.PrimitiveType")
+
+-- | DSL constructor for hydra.java.syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotations :: Typed.TypedTerm Syntax.PrimitiveType -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotations type_ annotations =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotationsAnnotations :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm [Syntax.Annotation]
+primitiveTypeWithAnnotationsAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotationsPrimitiveTypeWithAnnotations :: Typed.TypedName Syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotationsPrimitiveTypeWithAnnotations =
+    Typed.TypedName (Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations")
+
+-- | DSL accessor for the type field of hydra.java.syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotationsType :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.PrimitiveType
+primitiveTypeWithAnnotationsType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the annotations field of hydra.java.syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotationsWithAnnotations :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotationsWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotationsWithType :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.PrimitiveType -> Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations
+primitiveTypeWithAnnotationsWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.ReceiverParameter
+receiverParameter :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ReceiverParameter
+receiverParameter annotations unannType identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "unannType"),
+          Model.fieldTerm = (Typed.unTypedTerm unannType)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.ReceiverParameter
+receiverParameterAnnotations :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm [Syntax.Annotation]
+receiverParameterAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.ReceiverParameter
+receiverParameterIdentifier :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm (Maybe Syntax.Identifier)
+receiverParameterIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ReceiverParameter
+receiverParameterReceiverParameter :: Typed.TypedName Syntax.ReceiverParameter
+receiverParameterReceiverParameter = Typed.TypedName (Model.Name "hydra.java.syntax.ReceiverParameter")
+
+-- | DSL accessor for the unannType field of hydra.java.syntax.ReceiverParameter
+receiverParameterUnannType :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm Syntax.UnannType
+receiverParameterUnannType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+        Model.projectionFieldName = (Model.Name "unannType")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the annotations field of hydra.java.syntax.ReceiverParameter
+receiverParameterWithAnnotations :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.ReceiverParameter
+receiverParameterWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "unannType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+              Model.projectionFieldName = (Model.Name "unannType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.ReceiverParameter
+receiverParameterWithIdentifier :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ReceiverParameter
+receiverParameterWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "unannType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+              Model.projectionFieldName = (Model.Name "unannType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the unannType field of hydra.java.syntax.ReceiverParameter
+receiverParameterWithUnannType :: Typed.TypedTerm Syntax.ReceiverParameter -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.ReceiverParameter
+receiverParameterWithUnannType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "unannType"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ReceiverParameter"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.RecordBody wrapper
+recordBody :: Typed.TypedTerm [Syntax.RecordBodyDeclaration] -> Typed.TypedTerm Syntax.RecordBody
+recordBody x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.RecordBody"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL injection for the classBody variant of hydra.java.syntax.RecordBodyDeclaration
+recordBodyDeclarationClassBody :: Typed.TypedTerm Syntax.ClassBodyDeclaration -> Typed.TypedTerm Syntax.RecordBodyDeclaration
+recordBodyDeclarationClassBody x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RecordBodyDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classBody"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the compactConstructor variant of hydra.java.syntax.RecordBodyDeclaration
+recordBodyDeclarationCompactConstructor :: Typed.TypedTerm Syntax.CompactConstructorDeclaration -> Typed.TypedTerm Syntax.RecordBodyDeclaration
+recordBodyDeclarationCompactConstructor x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RecordBodyDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "compactConstructor"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.RecordBodyDeclaration
+recordBodyDeclarationRecordBodyDeclaration :: Typed.TypedName Syntax.RecordBodyDeclaration
+recordBodyDeclarationRecordBodyDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.RecordBodyDeclaration")
+
+-- | DSL name token for hydra.java.syntax.RecordBody
+recordBodyRecordBody :: Typed.TypedName Syntax.RecordBody
+recordBodyRecordBody = Typed.TypedName (Model.Name "hydra.java.syntax.RecordBody")
+
+-- | DSL constructor for the hydra.java.syntax.RecordComponentModifier wrapper
+recordComponentModifier :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.RecordComponentModifier
+recordComponentModifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.RecordComponentModifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RecordComponentModifier
+recordComponentModifierRecordComponentModifier :: Typed.TypedName Syntax.RecordComponentModifier
+recordComponentModifierRecordComponentModifier = Typed.TypedName (Model.Name "hydra.java.syntax.RecordComponentModifier")
+
+-- | DSL name token for hydra.java.syntax.RecordComponent
+recordComponentRecordComponent :: Typed.TypedName Syntax.RecordComponent
+recordComponentRecordComponent = Typed.TypedName (Model.Name "hydra.java.syntax.RecordComponent")
+
+-- | DSL injection for the simple variant of hydra.java.syntax.RecordComponent
+recordComponentSimple :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.RecordComponent
+recordComponentSimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the variableArity variant of hydra.java.syntax.RecordComponent
+recordComponentVariableArity :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.RecordComponent
+recordComponentVariableArity x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variableArity"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.RecordComponent_Simple
+recordComponent_Simple :: Typed.TypedTerm [Syntax.RecordComponentModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.RecordComponent_Simple
+recordComponent_Simple modifiers type_ identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.RecordComponent_Simple
+recordComponent_SimpleIdentifier :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.Identifier
+recordComponent_SimpleIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.RecordComponent_Simple
+recordComponent_SimpleModifiers :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm [Syntax.RecordComponentModifier]
+recordComponent_SimpleModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RecordComponent_Simple
+recordComponent_SimpleRecordComponent_Simple :: Typed.TypedName Syntax.RecordComponent_Simple
+recordComponent_SimpleRecordComponent_Simple = Typed.TypedName (Model.Name "hydra.java.syntax.RecordComponent_Simple")
+
+-- | DSL accessor for the type field of hydra.java.syntax.RecordComponent_Simple
+recordComponent_SimpleType :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.UnannType
+recordComponent_SimpleType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.RecordComponent_Simple
+recordComponent_SimpleWithIdentifier :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.RecordComponent_Simple
+recordComponent_SimpleWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.RecordComponent_Simple"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.RecordComponent_Simple
+recordComponent_SimpleWithModifiers :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm [Syntax.RecordComponentModifier] -> Typed.TypedTerm Syntax.RecordComponent_Simple
+recordComponent_SimpleWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.RecordComponent_Simple"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.RecordComponent_Simple
+recordComponent_SimpleWithType :: Typed.TypedTerm Syntax.RecordComponent_Simple -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.RecordComponent_Simple
+recordComponent_SimpleWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordComponent_Simple"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.RecordDeclaration
+recordDeclaration :: Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.RecordHeader -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.RecordBody -> Typed.TypedTerm Syntax.RecordDeclaration
+recordDeclaration modifiers identifier parameters header implements body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm parameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Typed.unTypedTerm header)},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Typed.unTypedTerm implements)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.RecordDeclaration
+recordDeclarationBody :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.RecordBody
+recordDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the header field of hydra.java.syntax.RecordDeclaration
+recordDeclarationHeader :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.RecordHeader
+recordDeclarationHeader x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+        Model.projectionFieldName = (Model.Name "header")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.RecordDeclaration
+recordDeclarationIdentifier :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier
+recordDeclarationIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the implements field of hydra.java.syntax.RecordDeclaration
+recordDeclarationImplements :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.InterfaceType]
+recordDeclarationImplements x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+        Model.projectionFieldName = (Model.Name "implements")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.RecordDeclaration
+recordDeclarationModifiers :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.ClassModifier]
+recordDeclarationModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the parameters field of hydra.java.syntax.RecordDeclaration
+recordDeclarationParameters :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
+recordDeclarationParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+        Model.projectionFieldName = (Model.Name "parameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RecordDeclaration
+recordDeclarationRecordDeclaration :: Typed.TypedName Syntax.RecordDeclaration
+recordDeclarationRecordDeclaration = Typed.TypedName (Model.Name "hydra.java.syntax.RecordDeclaration")
+
+-- | DSL updater for the body field of hydra.java.syntax.RecordDeclaration
+recordDeclarationWithBody :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.RecordBody -> Typed.TypedTerm Syntax.RecordDeclaration
+recordDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the header field of hydra.java.syntax.RecordDeclaration
+recordDeclarationWithHeader :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.RecordHeader -> Typed.TypedTerm Syntax.RecordDeclaration
+recordDeclarationWithHeader original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.RecordDeclaration
+recordDeclarationWithIdentifier :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.RecordDeclaration
+recordDeclarationWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the implements field of hydra.java.syntax.RecordDeclaration
+recordDeclarationWithImplements :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.InterfaceType] -> Typed.TypedTerm Syntax.RecordDeclaration
+recordDeclarationWithImplements original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.RecordDeclaration
+recordDeclarationWithModifiers :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.ClassModifier] -> Typed.TypedTerm Syntax.RecordDeclaration
+recordDeclarationWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the parameters field of hydra.java.syntax.RecordDeclaration
+recordDeclarationWithParameters :: Typed.TypedTerm Syntax.RecordDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.RecordDeclaration
+recordDeclarationWithParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "header"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "header")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "implements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "implements")})),
+            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.java.syntax.RecordDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.RecordHeader wrapper
+recordHeader :: Typed.TypedTerm [Syntax.RecordComponent] -> Typed.TypedTerm Syntax.RecordHeader
+recordHeader x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.RecordHeader"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RecordHeader
+recordHeaderRecordHeader :: Typed.TypedName Syntax.RecordHeader
+recordHeaderRecordHeader = Typed.TypedName (Model.Name "hydra.java.syntax.RecordHeader")
+
+-- | DSL constructor for hydra.java.syntax.RecordPattern
+recordPattern :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.RecordPattern
+recordPattern type_ patterns =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "patterns"),
+          Model.fieldTerm = (Typed.unTypedTerm patterns)}]}))
+
+-- | DSL accessor for the patterns field of hydra.java.syntax.RecordPattern
+recordPatternPatterns :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm [Syntax.Pattern]
+recordPatternPatterns x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordPattern"),
+        Model.projectionFieldName = (Model.Name "patterns")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RecordPattern
+recordPatternRecordPattern :: Typed.TypedName Syntax.RecordPattern
+recordPatternRecordPattern = Typed.TypedName (Model.Name "hydra.java.syntax.RecordPattern")
+
+-- | DSL accessor for the type field of hydra.java.syntax.RecordPattern
+recordPatternType :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.ReferenceType
+recordPatternType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordPattern"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the patterns field of hydra.java.syntax.RecordPattern
+recordPatternWithPatterns :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.RecordPattern
+recordPatternWithPatterns original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordPattern"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "patterns"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.RecordPattern
+recordPatternWithType :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.RecordPattern
+recordPatternWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RecordPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "patterns"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RecordPattern"),
+              Model.projectionFieldName = (Model.Name "patterns")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the array variant of hydra.java.syntax.ReferenceType
+referenceTypeArray :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.ReferenceType
+referenceTypeArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ReferenceType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "array"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the classOrInterface variant of hydra.java.syntax.ReferenceType
+referenceTypeClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.ReferenceType
+referenceTypeClassOrInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ReferenceType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classOrInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.ReferenceType
+referenceTypeReferenceType :: Typed.TypedName Syntax.ReferenceType
+referenceTypeReferenceType = Typed.TypedName (Model.Name "hydra.java.syntax.ReferenceType")
+
+-- | DSL injection for the variable variant of hydra.java.syntax.ReferenceType
+referenceTypeVariable :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.ReferenceType
+referenceTypeVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ReferenceType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the greaterThan variant of hydra.java.syntax.RelationalExpression
+relationalExpressionGreaterThan :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpressionGreaterThan x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "greaterThan"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the greaterThanEqual variant of hydra.java.syntax.RelationalExpression
+relationalExpressionGreaterThanEqual :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpressionGreaterThanEqual x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "greaterThanEqual"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the instanceofExpression variant of hydra.java.syntax.RelationalExpression
+relationalExpressionInstanceofExpression :: Typed.TypedTerm Syntax.InstanceofExpression -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpressionInstanceofExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "instanceofExpression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the lessThan variant of hydra.java.syntax.RelationalExpression
+relationalExpressionLessThan :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpressionLessThan x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "lessThan"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the lessThanEqual variant of hydra.java.syntax.RelationalExpression
+relationalExpressionLessThanEqual :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpressionLessThanEqual x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "lessThanEqual"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.RelationalExpression
+relationalExpressionRelationalExpression :: Typed.TypedName Syntax.RelationalExpression
+relationalExpressionRelationalExpression = Typed.TypedName (Model.Name "hydra.java.syntax.RelationalExpression")
+
+-- | DSL injection for the simple variant of hydra.java.syntax.RelationalExpression
+relationalExpressionSimple :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpressionSimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThan :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThan lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL constructor for hydra.java.syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqual :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqual lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqualLhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpression_GreaterThanEqualLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqualRelationalExpression_GreaterThanEqual :: Typed.TypedName Syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqualRelationalExpression_GreaterThanEqual =
+    Typed.TypedName (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual")
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqualRhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.ShiftExpression
+relationalExpression_GreaterThanEqualRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqualWithLhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqualWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqualWithRhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThanEqual
+relationalExpression_GreaterThanEqualWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThanLhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpression_GreaterThanLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThanRelationalExpression_GreaterThan :: Typed.TypedName Syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThanRelationalExpression_GreaterThan =
+    Typed.TypedName (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan")
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThanRhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.ShiftExpression
+relationalExpression_GreaterThanRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThanWithLhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThanWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThanWithRhs :: Typed.TypedTerm Syntax.RelationalExpression_GreaterThan -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_GreaterThan
+relationalExpression_GreaterThanWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.RelationalExpression_LessThan
+relationalExpression_LessThan :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThan
+relationalExpression_LessThan lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThan"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL constructor for hydra.java.syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqual :: Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqual lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqualLhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpression_LessThanEqualLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqualRelationalExpression_LessThanEqual :: Typed.TypedName Syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqualRelationalExpression_LessThanEqual =
+    Typed.TypedName (Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual")
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqualRhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.ShiftExpression
+relationalExpression_LessThanEqualRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqualWithLhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqualWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqualWithRhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThanEqual
+relationalExpression_LessThanEqualWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.RelationalExpression_LessThan
+relationalExpression_LessThanLhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.RelationalExpression
+relationalExpression_LessThanLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThan"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.RelationalExpression_LessThan
+relationalExpression_LessThanRelationalExpression_LessThan :: Typed.TypedName Syntax.RelationalExpression_LessThan
+relationalExpression_LessThanRelationalExpression_LessThan =
+    Typed.TypedName (Model.Name "hydra.java.syntax.RelationalExpression_LessThan")
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.RelationalExpression_LessThan
+relationalExpression_LessThanRhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.ShiftExpression
+relationalExpression_LessThanRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThan"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.java.syntax.RelationalExpression_LessThan
+relationalExpression_LessThanWithLhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.RelationalExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThan
+relationalExpression_LessThanWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThan"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThan"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.RelationalExpression_LessThan
+relationalExpression_LessThanWithRhs :: Typed.TypedTerm Syntax.RelationalExpression_LessThan -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.RelationalExpression_LessThan
+relationalExpression_LessThanWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThan"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.RelationalExpression_LessThan"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.RequiresModifier
+requiresModifierRequiresModifier :: Typed.TypedName Syntax.RequiresModifier
+requiresModifierRequiresModifier = Typed.TypedName (Model.Name "hydra.java.syntax.RequiresModifier")
+
+-- | DSL injection for the static variant of hydra.java.syntax.RequiresModifier
+requiresModifierStatic :: Typed.TypedTerm Syntax.RequiresModifier
+requiresModifierStatic =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RequiresModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "static"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the transitive variant of hydra.java.syntax.RequiresModifier
+requiresModifierTransitive :: Typed.TypedTerm Syntax.RequiresModifier
+requiresModifierTransitive =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.RequiresModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "transitive"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the local variant of hydra.java.syntax.Resource
+resourceLocal :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Resource
+resourceLocal x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Resource"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "local"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.Resource
+resourceResource :: Typed.TypedName Syntax.Resource
+resourceResource = Typed.TypedName (Model.Name "hydra.java.syntax.Resource")
+
+-- | DSL constructor for the hydra.java.syntax.ResourceSpecification wrapper
+resourceSpecification :: Typed.TypedTerm [Syntax.Resource] -> Typed.TypedTerm Syntax.ResourceSpecification
+resourceSpecification x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ResourceSpecification"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ResourceSpecification
+resourceSpecificationResourceSpecification :: Typed.TypedName Syntax.ResourceSpecification
+resourceSpecificationResourceSpecification = Typed.TypedName (Model.Name "hydra.java.syntax.ResourceSpecification")
+
+-- | DSL injection for the variable variant of hydra.java.syntax.Resource
+resourceVariable :: Typed.TypedTerm Syntax.VariableAccess -> Typed.TypedTerm Syntax.Resource
+resourceVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Resource"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.Resource_Local
+resource_Local :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.LocalVariableType -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Resource_Local
+resource_Local modifiers type_ identifier expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL accessor for the expression field of hydra.java.syntax.Resource_Local
+resource_LocalExpression :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Expression
+resource_LocalExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.Resource_Local
+resource_LocalIdentifier :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Identifier
+resource_LocalIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.Resource_Local
+resource_LocalModifiers :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm [Syntax.VariableModifier]
+resource_LocalModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.Resource_Local
+resource_LocalResource_Local :: Typed.TypedName Syntax.Resource_Local
+resource_LocalResource_Local = Typed.TypedName (Model.Name "hydra.java.syntax.Resource_Local")
+
+-- | DSL accessor for the type field of hydra.java.syntax.Resource_Local
+resource_LocalType :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.LocalVariableType
+resource_LocalType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.Resource_Local
+resource_LocalWithExpression :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Resource_Local
+resource_LocalWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.Resource_Local
+resource_LocalWithIdentifier :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Resource_Local
+resource_LocalWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.Resource_Local
+resource_LocalWithModifiers :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.Resource_Local
+resource_LocalWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.Resource_Local
+resource_LocalWithType :: Typed.TypedTerm Syntax.Resource_Local -> Typed.TypedTerm Syntax.LocalVariableType -> Typed.TypedTerm Syntax.Resource_Local
+resource_LocalWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Resource_Local"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.Result
+resultResult :: Typed.TypedName Syntax.Result
+resultResult = Typed.TypedName (Model.Name "hydra.java.syntax.Result")
+
+-- | DSL injection for the type variant of hydra.java.syntax.Result
+resultType :: Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.Result
+resultType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Result"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "type"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the void variant of hydra.java.syntax.Result
+resultVoid :: Typed.TypedTerm Syntax.Result
+resultVoid =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Result"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "void"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for the hydra.java.syntax.ReturnStatement wrapper
+returnStatement :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ReturnStatement
+returnStatement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.ReturnStatement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ReturnStatement
+returnStatementReturnStatement :: Typed.TypedName Syntax.ReturnStatement
+returnStatementReturnStatement = Typed.TypedName (Model.Name "hydra.java.syntax.ReturnStatement")
+
+-- | DSL name token for hydra.java.syntax.ShiftExpression
+shiftExpressionShiftExpression :: Typed.TypedName Syntax.ShiftExpression
+shiftExpressionShiftExpression = Typed.TypedName (Model.Name "hydra.java.syntax.ShiftExpression")
+
+-- | DSL injection for the shiftLeft variant of hydra.java.syntax.ShiftExpression
+shiftExpressionShiftLeft :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression
+shiftExpressionShiftLeft x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ShiftExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "shiftLeft"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the shiftRight variant of hydra.java.syntax.ShiftExpression
+shiftExpressionShiftRight :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression
+shiftExpressionShiftRight x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ShiftExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "shiftRight"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the shiftRightZeroFill variant of hydra.java.syntax.ShiftExpression
+shiftExpressionShiftRightZeroFill :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression
+shiftExpressionShiftRightZeroFill x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ShiftExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "shiftRightZeroFill"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the unary variant of hydra.java.syntax.ShiftExpression
+shiftExpressionUnary :: Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.ShiftExpression
+shiftExpressionUnary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.ShiftExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.ShiftExpression_Binary
+shiftExpression_Binary :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.ShiftExpression_Binary
+shiftExpression_Binary lhs rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ShiftExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL accessor for the lhs field of hydra.java.syntax.ShiftExpression_Binary
+shiftExpression_BinaryLhs :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression
+shiftExpression_BinaryLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ShiftExpression_Binary"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the rhs field of hydra.java.syntax.ShiftExpression_Binary
+shiftExpression_BinaryRhs :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression
+shiftExpression_BinaryRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.ShiftExpression_Binary"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ShiftExpression_Binary
+shiftExpression_BinaryShiftExpression_Binary :: Typed.TypedName Syntax.ShiftExpression_Binary
+shiftExpression_BinaryShiftExpression_Binary = Typed.TypedName (Model.Name "hydra.java.syntax.ShiftExpression_Binary")
+
+-- | DSL updater for the lhs field of hydra.java.syntax.ShiftExpression_Binary
+shiftExpression_BinaryWithLhs :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.ShiftExpression_Binary
+shiftExpression_BinaryWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ShiftExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ShiftExpression_Binary"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.java.syntax.ShiftExpression_Binary
+shiftExpression_BinaryWithRhs :: Typed.TypedTerm Syntax.ShiftExpression_Binary -> Typed.TypedTerm Syntax.AdditiveExpression -> Typed.TypedTerm Syntax.ShiftExpression_Binary
+shiftExpression_BinaryWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.ShiftExpression_Binary"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.ShiftExpression_Binary"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for the hydra.java.syntax.SimpleTypeName wrapper
+simpleTypeName :: Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.SimpleTypeName
+simpleTypeName x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.SimpleTypeName"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SimpleTypeName
+simpleTypeNameSimpleTypeName :: Typed.TypedName Syntax.SimpleTypeName
+simpleTypeNameSimpleTypeName = Typed.TypedName (Model.Name "hydra.java.syntax.SimpleTypeName")
+
+-- | DSL constructor for hydra.java.syntax.SingleElementAnnotation
+singleElementAnnotation :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm (Maybe Syntax.ElementValue) -> Typed.TypedTerm Syntax.SingleElementAnnotation
+singleElementAnnotation name value =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SingleElementAnnotation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm value)}]}))
+
+-- | DSL accessor for the name field of hydra.java.syntax.SingleElementAnnotation
+singleElementAnnotationName :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm Syntax.TypeName
+singleElementAnnotationName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SingleElementAnnotation"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SingleElementAnnotation
+singleElementAnnotationSingleElementAnnotation :: Typed.TypedName Syntax.SingleElementAnnotation
+singleElementAnnotationSingleElementAnnotation = Typed.TypedName (Model.Name "hydra.java.syntax.SingleElementAnnotation")
+
+-- | DSL accessor for the value field of hydra.java.syntax.SingleElementAnnotation
+singleElementAnnotationValue :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm (Maybe Syntax.ElementValue)
+singleElementAnnotationValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SingleElementAnnotation"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the name field of hydra.java.syntax.SingleElementAnnotation
+singleElementAnnotationWithName :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.SingleElementAnnotation
+singleElementAnnotationWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SingleElementAnnotation"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          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.java.syntax.SingleElementAnnotation"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the value field of hydra.java.syntax.SingleElementAnnotation
+singleElementAnnotationWithValue :: Typed.TypedTerm Syntax.SingleElementAnnotation -> Typed.TypedTerm (Maybe Syntax.ElementValue) -> Typed.TypedTerm Syntax.SingleElementAnnotation
+singleElementAnnotationWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SingleElementAnnotation"),
+      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.java.syntax.SingleElementAnnotation"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.SingleStaticImportDeclaration
+singleStaticImportDeclaration :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.SingleStaticImportDeclaration
+singleStaticImportDeclaration typeName identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeName"),
+          Model.fieldTerm = (Typed.unTypedTerm typeName)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.SingleStaticImportDeclaration
+singleStaticImportDeclarationIdentifier :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.Identifier
+singleStaticImportDeclarationIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SingleStaticImportDeclaration
+singleStaticImportDeclarationSingleStaticImportDeclaration :: Typed.TypedName Syntax.SingleStaticImportDeclaration
+singleStaticImportDeclarationSingleStaticImportDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.SingleStaticImportDeclaration")
+
+-- | DSL accessor for the typeName field of hydra.java.syntax.SingleStaticImportDeclaration
+singleStaticImportDeclarationTypeName :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.TypeName
+singleStaticImportDeclarationTypeName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
+        Model.projectionFieldName = (Model.Name "typeName")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.SingleStaticImportDeclaration
+singleStaticImportDeclarationWithIdentifier :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.SingleStaticImportDeclaration
+singleStaticImportDeclarationWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeName"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
+              Model.projectionFieldName = (Model.Name "typeName")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the typeName field of hydra.java.syntax.SingleStaticImportDeclaration
+singleStaticImportDeclarationWithTypeName :: Typed.TypedTerm Syntax.SingleStaticImportDeclaration -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.SingleStaticImportDeclaration
+singleStaticImportDeclarationWithTypeName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeName"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SingleStaticImportDeclaration"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.SingleTypeImportDeclaration wrapper
+singleTypeImportDeclaration :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.SingleTypeImportDeclaration
+singleTypeImportDeclaration x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.SingleTypeImportDeclaration"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SingleTypeImportDeclaration
+singleTypeImportDeclarationSingleTypeImportDeclaration :: Typed.TypedName Syntax.SingleTypeImportDeclaration
+singleTypeImportDeclarationSingleTypeImportDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.SingleTypeImportDeclaration")
+
+-- | DSL injection for the assignment variant of hydra.java.syntax.StatementExpression
+statementExpressionAssignment :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.StatementExpression
+statementExpressionAssignment x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "assignment"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the classInstanceCreation variant of hydra.java.syntax.StatementExpression
+statementExpressionClassInstanceCreation :: Typed.TypedTerm Syntax.ClassInstanceCreationExpression -> Typed.TypedTerm Syntax.StatementExpression
+statementExpressionClassInstanceCreation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classInstanceCreation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the methodInvocation variant of hydra.java.syntax.StatementExpression
+statementExpressionMethodInvocation :: Typed.TypedTerm Syntax.MethodInvocation -> Typed.TypedTerm Syntax.StatementExpression
+statementExpressionMethodInvocation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "methodInvocation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the postDecrement variant of hydra.java.syntax.StatementExpression
+statementExpressionPostDecrement :: Typed.TypedTerm Syntax.PostDecrementExpression -> Typed.TypedTerm Syntax.StatementExpression
+statementExpressionPostDecrement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "postDecrement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the postIncrement variant of hydra.java.syntax.StatementExpression
+statementExpressionPostIncrement :: Typed.TypedTerm Syntax.PostIncrementExpression -> Typed.TypedTerm Syntax.StatementExpression
+statementExpressionPostIncrement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "postIncrement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the preDecrement variant of hydra.java.syntax.StatementExpression
+statementExpressionPreDecrement :: Typed.TypedTerm Syntax.PreDecrementExpression -> Typed.TypedTerm Syntax.StatementExpression
+statementExpressionPreDecrement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "preDecrement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the preIncrement variant of hydra.java.syntax.StatementExpression
+statementExpressionPreIncrement :: Typed.TypedTerm Syntax.PreIncrementExpression -> Typed.TypedTerm Syntax.StatementExpression
+statementExpressionPreIncrement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "preIncrement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.StatementExpression
+statementExpressionStatementExpression :: Typed.TypedName Syntax.StatementExpression
+statementExpressionStatementExpression = Typed.TypedName (Model.Name "hydra.java.syntax.StatementExpression")
+
+-- | DSL injection for the for variant of hydra.java.syntax.Statement
+statementFor :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Statement
+statementFor x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "for"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the ifThen variant of hydra.java.syntax.Statement
+statementIfThen :: Typed.TypedTerm Syntax.IfThenStatement -> Typed.TypedTerm Syntax.Statement
+statementIfThen x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "ifThen"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the ifThenElse variant of hydra.java.syntax.Statement
+statementIfThenElse :: Typed.TypedTerm Syntax.IfThenElseStatement -> Typed.TypedTerm Syntax.Statement
+statementIfThenElse x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "ifThenElse"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the labeled variant of hydra.java.syntax.Statement
+statementLabeled :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement
+statementLabeled x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "labeled"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the for variant of hydra.java.syntax.StatementNoShortIf
+statementNoShortIfFor :: Typed.TypedTerm Syntax.ForStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+statementNoShortIfFor x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementNoShortIf"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "for"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the ifThenElse variant of hydra.java.syntax.StatementNoShortIf
+statementNoShortIfIfThenElse :: Typed.TypedTerm Syntax.IfThenElseStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+statementNoShortIfIfThenElse x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementNoShortIf"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "ifThenElse"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the labeled variant of hydra.java.syntax.StatementNoShortIf
+statementNoShortIfLabeled :: Typed.TypedTerm Syntax.LabeledStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+statementNoShortIfLabeled x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementNoShortIf"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "labeled"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.StatementNoShortIf
+statementNoShortIfStatementNoShortIf :: Typed.TypedName Syntax.StatementNoShortIf
+statementNoShortIfStatementNoShortIf = Typed.TypedName (Model.Name "hydra.java.syntax.StatementNoShortIf")
+
+-- | DSL injection for the while variant of hydra.java.syntax.StatementNoShortIf
+statementNoShortIfWhile :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+statementNoShortIfWhile x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementNoShortIf"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "while"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the withoutTrailing variant of hydra.java.syntax.StatementNoShortIf
+statementNoShortIfWithoutTrailing :: Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement -> Typed.TypedTerm Syntax.StatementNoShortIf
+statementNoShortIfWithoutTrailing x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementNoShortIf"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "withoutTrailing"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.Statement
+statementStatement :: Typed.TypedName Syntax.Statement
+statementStatement = Typed.TypedName (Model.Name "hydra.java.syntax.Statement")
+
+-- | DSL injection for the while variant of hydra.java.syntax.Statement
+statementWhile :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Statement
+statementWhile x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "while"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the withoutTrailing variant of hydra.java.syntax.Statement
+statementWithoutTrailing :: Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement -> Typed.TypedTerm Syntax.Statement
+statementWithoutTrailing x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "withoutTrailing"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the assert variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementAssert :: Typed.TypedTerm Syntax.AssertStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementAssert x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "assert"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the block variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementBlock x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "block"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the break variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementBreak :: Typed.TypedTerm Syntax.BreakStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementBreak x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "break"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the continue variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementContinue :: Typed.TypedTerm Syntax.ContinueStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementContinue x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "continue"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the do variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementDo :: Typed.TypedTerm Syntax.DoStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementDo x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "do"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the empty variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementEmpty :: Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementEmpty =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "empty"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the expression variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementExpression :: Typed.TypedTerm Syntax.ExpressionStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the return variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementReturn :: Typed.TypedTerm Syntax.ReturnStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementReturn x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "return"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementStatementWithoutTrailingSubstatement :: Typed.TypedName Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementStatementWithoutTrailingSubstatement =
+    Typed.TypedName (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement")
+
+-- | DSL injection for the switch variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementSwitch :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementSwitch x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "switch"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the synchronized variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementSynchronized :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementSynchronized x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "synchronized"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the throw variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementThrow :: Typed.TypedTerm Syntax.ThrowStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementThrow x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "throw"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the try variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementTry :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementTry x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "try"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the yield variant of hydra.java.syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementYield :: Typed.TypedTerm Syntax.YieldStatement -> Typed.TypedTerm Syntax.StatementWithoutTrailingSubstatement
+statementWithoutTrailingSubstatementYield x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "yield"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.java.syntax.StaticImportOnDemandDeclaration wrapper
+staticImportOnDemandDeclaration :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.StaticImportOnDemandDeclaration
+staticImportOnDemandDeclaration x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.StaticImportOnDemandDeclaration"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.StaticImportOnDemandDeclaration
+staticImportOnDemandDeclarationStaticImportOnDemandDeclaration :: Typed.TypedName Syntax.StaticImportOnDemandDeclaration
+staticImportOnDemandDeclarationStaticImportOnDemandDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.StaticImportOnDemandDeclaration")
+
+-- | DSL constructor for the hydra.java.syntax.StaticInitializer wrapper
+staticInitializer :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.StaticInitializer
+staticInitializer x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.StaticInitializer"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.StaticInitializer
+staticInitializerStaticInitializer :: Typed.TypedName Syntax.StaticInitializer
+staticInitializerStaticInitializer = Typed.TypedName (Model.Name "hydra.java.syntax.StaticInitializer")
+
+-- | DSL constructor for the hydra.java.syntax.StringLiteral wrapper
+stringLiteral :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.StringLiteral
+stringLiteral x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.StringLiteral"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.StringLiteral
+stringLiteralStringLiteral :: Typed.TypedName Syntax.StringLiteral
+stringLiteralStringLiteral = Typed.TypedName (Model.Name "hydra.java.syntax.StringLiteral")
+
+-- | DSL injection for the legacy variant of hydra.java.syntax.SwitchBlock
+switchBlockLegacy :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm Syntax.SwitchBlock
+switchBlockLegacy x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlock"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "legacy"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the rules variant of hydra.java.syntax.SwitchBlock
+switchBlockRules :: Typed.TypedTerm [Syntax.SwitchRule] -> Typed.TypedTerm Syntax.SwitchBlock
+switchBlockRules x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlock"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "rules"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.SwitchBlockStatementGroup
+switchBlockStatementGroup :: Typed.TypedTerm [Syntax.SwitchLabel] -> Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.SwitchBlockStatementGroup
+switchBlockStatementGroup labels statements =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "labels"),
+          Model.fieldTerm = (Typed.unTypedTerm labels)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statements"),
+          Model.fieldTerm = (Typed.unTypedTerm statements)}]}))
+
+-- | DSL accessor for the labels field of hydra.java.syntax.SwitchBlockStatementGroup
+switchBlockStatementGroupLabels :: Typed.TypedTerm Syntax.SwitchBlockStatementGroup -> Typed.TypedTerm [Syntax.SwitchLabel]
+switchBlockStatementGroupLabels x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
+        Model.projectionFieldName = (Model.Name "labels")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the statements field of hydra.java.syntax.SwitchBlockStatementGroup
+switchBlockStatementGroupStatements :: Typed.TypedTerm Syntax.SwitchBlockStatementGroup -> Typed.TypedTerm [Syntax.BlockStatement]
+switchBlockStatementGroupStatements x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
+        Model.projectionFieldName = (Model.Name "statements")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SwitchBlockStatementGroup
+switchBlockStatementGroupSwitchBlockStatementGroup :: Typed.TypedName Syntax.SwitchBlockStatementGroup
+switchBlockStatementGroupSwitchBlockStatementGroup =
+    Typed.TypedName (Model.Name "hydra.java.syntax.SwitchBlockStatementGroup")
+
+-- | DSL updater for the labels field of hydra.java.syntax.SwitchBlockStatementGroup
+switchBlockStatementGroupWithLabels :: Typed.TypedTerm Syntax.SwitchBlockStatementGroup -> Typed.TypedTerm [Syntax.SwitchLabel] -> Typed.TypedTerm Syntax.SwitchBlockStatementGroup
+switchBlockStatementGroupWithLabels original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "labels"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "statements"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
+              Model.projectionFieldName = (Model.Name "statements")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the statements field of hydra.java.syntax.SwitchBlockStatementGroup
+switchBlockStatementGroupWithStatements :: Typed.TypedTerm Syntax.SwitchBlockStatementGroup -> Typed.TypedTerm [Syntax.BlockStatement] -> Typed.TypedTerm Syntax.SwitchBlockStatementGroup
+switchBlockStatementGroupWithStatements original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "labels"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlockStatementGroup"),
+              Model.projectionFieldName = (Model.Name "labels")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "statements"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.java.syntax.SwitchBlock
+switchBlockSwitchBlock :: Typed.TypedName Syntax.SwitchBlock
+switchBlockSwitchBlock = Typed.TypedName (Model.Name "hydra.java.syntax.SwitchBlock")
+
+-- | DSL constructor for hydra.java.syntax.SwitchBlock_Legacy
+switchBlock_Legacy :: Typed.TypedTerm [Syntax.SwitchBlockStatementGroup] -> Typed.TypedTerm [Syntax.SwitchLabel] -> Typed.TypedTerm Syntax.SwitchBlock_Legacy
+switchBlock_Legacy groups trailingLabels =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchBlock_Legacy"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "groups"),
+          Model.fieldTerm = (Typed.unTypedTerm groups)},
+        Model.Field {
+          Model.fieldName = (Model.Name "trailingLabels"),
+          Model.fieldTerm = (Typed.unTypedTerm trailingLabels)}]}))
+
+-- | DSL accessor for the groups field of hydra.java.syntax.SwitchBlock_Legacy
+switchBlock_LegacyGroups :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm [Syntax.SwitchBlockStatementGroup]
+switchBlock_LegacyGroups x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlock_Legacy"),
+        Model.projectionFieldName = (Model.Name "groups")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SwitchBlock_Legacy
+switchBlock_LegacySwitchBlock_Legacy :: Typed.TypedName Syntax.SwitchBlock_Legacy
+switchBlock_LegacySwitchBlock_Legacy = Typed.TypedName (Model.Name "hydra.java.syntax.SwitchBlock_Legacy")
+
+-- | DSL accessor for the trailingLabels field of hydra.java.syntax.SwitchBlock_Legacy
+switchBlock_LegacyTrailingLabels :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm [Syntax.SwitchLabel]
+switchBlock_LegacyTrailingLabels x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlock_Legacy"),
+        Model.projectionFieldName = (Model.Name "trailingLabels")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the groups field of hydra.java.syntax.SwitchBlock_Legacy
+switchBlock_LegacyWithGroups :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm [Syntax.SwitchBlockStatementGroup] -> Typed.TypedTerm Syntax.SwitchBlock_Legacy
+switchBlock_LegacyWithGroups original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchBlock_Legacy"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "groups"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "trailingLabels"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlock_Legacy"),
+              Model.projectionFieldName = (Model.Name "trailingLabels")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the trailingLabels field of hydra.java.syntax.SwitchBlock_Legacy
+switchBlock_LegacyWithTrailingLabels :: Typed.TypedTerm Syntax.SwitchBlock_Legacy -> Typed.TypedTerm [Syntax.SwitchLabel] -> Typed.TypedTerm Syntax.SwitchBlock_Legacy
+switchBlock_LegacyWithTrailingLabels original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchBlock_Legacy"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "groups"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchBlock_Legacy"),
+              Model.projectionFieldName = (Model.Name "groups")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "trailingLabels"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.SwitchExpression
+switchExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchBlock -> Typed.TypedTerm Syntax.SwitchExpression
+switchExpression cond block =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm block)}]}))
+
+-- | DSL accessor for the block field of hydra.java.syntax.SwitchExpression
+switchExpressionBlock :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.SwitchBlock
+switchExpressionBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchExpression"),
+        Model.projectionFieldName = (Model.Name "block")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.SwitchExpression
+switchExpressionCond :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.Expression
+switchExpressionCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchExpression"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SwitchExpression
+switchExpressionSwitchExpression :: Typed.TypedName Syntax.SwitchExpression
+switchExpressionSwitchExpression = Typed.TypedName (Model.Name "hydra.java.syntax.SwitchExpression")
+
+-- | DSL updater for the block field of hydra.java.syntax.SwitchExpression
+switchExpressionWithBlock :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.SwitchBlock -> Typed.TypedTerm Syntax.SwitchExpression
+switchExpressionWithBlock original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchExpression"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.SwitchExpression
+switchExpressionWithCond :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchExpression
+switchExpressionWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchExpression"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the case variant of hydra.java.syntax.SwitchLabel
+switchLabelCase :: Typed.TypedTerm [Syntax.CaseConstant] -> Typed.TypedTerm Syntax.SwitchLabel
+switchLabelCase x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchLabel"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "case"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the casePattern variant of hydra.java.syntax.SwitchLabel
+switchLabelCasePattern :: Typed.TypedTerm Syntax.CasePattern -> Typed.TypedTerm Syntax.SwitchLabel
+switchLabelCasePattern x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchLabel"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "casePattern"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the default variant of hydra.java.syntax.SwitchLabel
+switchLabelDefault :: Typed.TypedTerm Syntax.SwitchLabel
+switchLabelDefault =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchLabel"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "default"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the null variant of hydra.java.syntax.SwitchLabel
+switchLabelNull :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.SwitchLabel
+switchLabelNull x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchLabel"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "null"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.SwitchLabel
+switchLabelSwitchLabel :: Typed.TypedName Syntax.SwitchLabel
+switchLabelSwitchLabel = Typed.TypedName (Model.Name "hydra.java.syntax.SwitchLabel")
+
+-- | DSL constructor for hydra.java.syntax.SwitchRule
+switchRule :: Typed.TypedTerm Syntax.SwitchLabel -> Typed.TypedTerm Syntax.SwitchRule_Body -> Typed.TypedTerm Syntax.SwitchRule
+switchRule label body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchRule"),
+      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.java.syntax.SwitchRule
+switchRuleBody :: Typed.TypedTerm Syntax.SwitchRule -> Typed.TypedTerm Syntax.SwitchRule_Body
+switchRuleBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchRule"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the label field of hydra.java.syntax.SwitchRule
+switchRuleLabel :: Typed.TypedTerm Syntax.SwitchRule -> Typed.TypedTerm Syntax.SwitchLabel
+switchRuleLabel x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchRule"),
+        Model.projectionFieldName = (Model.Name "label")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SwitchRule
+switchRuleSwitchRule :: Typed.TypedName Syntax.SwitchRule
+switchRuleSwitchRule = Typed.TypedName (Model.Name "hydra.java.syntax.SwitchRule")
+
+-- | DSL updater for the body field of hydra.java.syntax.SwitchRule
+switchRuleWithBody :: Typed.TypedTerm Syntax.SwitchRule -> Typed.TypedTerm Syntax.SwitchRule_Body -> Typed.TypedTerm Syntax.SwitchRule
+switchRuleWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchRule"),
+      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.java.syntax.SwitchRule"),
+              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.java.syntax.SwitchRule
+switchRuleWithLabel :: Typed.TypedTerm Syntax.SwitchRule -> Typed.TypedTerm Syntax.SwitchLabel -> Typed.TypedTerm Syntax.SwitchRule
+switchRuleWithLabel original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchRule"),
+      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.java.syntax.SwitchRule"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the block variant of hydra.java.syntax.SwitchRule_Body
+switchRule_BodyBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.SwitchRule_Body
+switchRule_BodyBlock x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchRule_Body"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "block"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the expression variant of hydra.java.syntax.SwitchRule_Body
+switchRule_BodyExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchRule_Body
+switchRule_BodyExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchRule_Body"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.SwitchRule_Body
+switchRule_BodySwitchRule_Body :: Typed.TypedName Syntax.SwitchRule_Body
+switchRule_BodySwitchRule_Body = Typed.TypedName (Model.Name "hydra.java.syntax.SwitchRule_Body")
+
+-- | DSL injection for the throw variant of hydra.java.syntax.SwitchRule_Body
+switchRule_BodyThrow :: Typed.TypedTerm Syntax.ThrowStatement -> Typed.TypedTerm Syntax.SwitchRule_Body
+switchRule_BodyThrow x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.SwitchRule_Body"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "throw"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.SwitchStatement
+switchStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchBlock -> Typed.TypedTerm Syntax.SwitchStatement
+switchStatement cond block =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm block)}]}))
+
+-- | DSL accessor for the block field of hydra.java.syntax.SwitchStatement
+switchStatementBlock :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.SwitchBlock
+switchStatementBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchStatement"),
+        Model.projectionFieldName = (Model.Name "block")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.SwitchStatement
+switchStatementCond :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Expression
+switchStatementCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchStatement"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SwitchStatement
+switchStatementSwitchStatement :: Typed.TypedName Syntax.SwitchStatement
+switchStatementSwitchStatement = Typed.TypedName (Model.Name "hydra.java.syntax.SwitchStatement")
+
+-- | DSL updater for the block field of hydra.java.syntax.SwitchStatement
+switchStatementWithBlock :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.SwitchBlock -> Typed.TypedTerm Syntax.SwitchStatement
+switchStatementWithBlock original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchStatement"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.SwitchStatement
+switchStatementWithCond :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchStatement
+switchStatementWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SwitchStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SwitchStatement"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.SynchronizedStatement
+synchronizedStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.SynchronizedStatement
+synchronizedStatement expression block =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SynchronizedStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm block)}]}))
+
+-- | DSL accessor for the block field of hydra.java.syntax.SynchronizedStatement
+synchronizedStatementBlock :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.Block
+synchronizedStatementBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SynchronizedStatement"),
+        Model.projectionFieldName = (Model.Name "block")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the expression field of hydra.java.syntax.SynchronizedStatement
+synchronizedStatementExpression :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.Expression
+synchronizedStatementExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.SynchronizedStatement"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.SynchronizedStatement
+synchronizedStatementSynchronizedStatement :: Typed.TypedName Syntax.SynchronizedStatement
+synchronizedStatementSynchronizedStatement = Typed.TypedName (Model.Name "hydra.java.syntax.SynchronizedStatement")
+
+-- | DSL updater for the block field of hydra.java.syntax.SynchronizedStatement
+synchronizedStatementWithBlock :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.SynchronizedStatement
+synchronizedStatementWithBlock original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SynchronizedStatement"),
+      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.java.syntax.SynchronizedStatement"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the expression field of hydra.java.syntax.SynchronizedStatement
+synchronizedStatementWithExpression :: Typed.TypedTerm Syntax.SynchronizedStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SynchronizedStatement
+synchronizedStatementWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.SynchronizedStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.SynchronizedStatement"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.TextBlock wrapper
+textBlock :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.TextBlock
+textBlock x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.TextBlock"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TextBlock
+textBlockTextBlock :: Typed.TypedName Syntax.TextBlock
+textBlockTextBlock = Typed.TypedName (Model.Name "hydra.java.syntax.TextBlock")
+
+-- | DSL constructor for the hydra.java.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.java.syntax.ThrowStatement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.ThrowStatement
+throwStatementThrowStatement :: Typed.TypedName Syntax.ThrowStatement
+throwStatementThrowStatement = Typed.TypedName (Model.Name "hydra.java.syntax.ThrowStatement")
+
+-- | DSL constructor for the hydra.java.syntax.Throws wrapper
+throws :: Typed.TypedTerm [Syntax.ExceptionType] -> Typed.TypedTerm Syntax.Throws
+throws x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.Throws"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.Throws
+throwsThrows :: Typed.TypedName Syntax.Throws
+throwsThrows = Typed.TypedName (Model.Name "hydra.java.syntax.Throws")
+
+-- | DSL injection for the class variant of hydra.java.syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationClass x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "class"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the interface variant of hydra.java.syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "interface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the none variant of hydra.java.syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationNone :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationNone =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "none"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationTopLevelClassOrInterfaceDeclaration :: Typed.TypedName Syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationTopLevelClassOrInterfaceDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration")
+
+-- | DSL constructor for hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithComments :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithComments value comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm value)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments -> Typed.TypedTerm (Maybe String)
+topLevelClassOrInterfaceDeclarationWithCommentsComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithCommentsTopLevelClassOrInterfaceDeclarationWithComments :: Typed.TypedName Syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithCommentsTopLevelClassOrInterfaceDeclarationWithComments =
+    Typed.TypedName (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments")
+
+-- | DSL accessor for the value field of hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithCommentsValue :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration
+topLevelClassOrInterfaceDeclarationWithCommentsValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the comments field of hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithCommentsWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
+      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.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the value field of hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithCommentsWithValue :: Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclaration -> Typed.TypedTerm Syntax.TopLevelClassOrInterfaceDeclarationWithComments
+topLevelClassOrInterfaceDeclarationWithCommentsWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          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.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the simple variant of hydra.java.syntax.TryStatement
+tryStatementSimple :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.TryStatement
+tryStatementSimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TryStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.TryStatement
+tryStatementTryStatement :: Typed.TypedName Syntax.TryStatement
+tryStatementTryStatement = Typed.TypedName (Model.Name "hydra.java.syntax.TryStatement")
+
+-- | DSL injection for the withFinally variant of hydra.java.syntax.TryStatement
+tryStatementWithFinally :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.TryStatement
+tryStatementWithFinally x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TryStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "withFinally"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the withResources variant of hydra.java.syntax.TryStatement
+tryStatementWithResources :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.TryStatement
+tryStatementWithResources x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TryStatement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "withResources"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.TryStatement_Simple
+tryStatement_Simple :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.Catches -> Typed.TypedTerm Syntax.TryStatement_Simple
+tryStatement_Simple block catches =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryStatement_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm block)},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Typed.unTypedTerm catches)}]}))
+
+-- | DSL accessor for the block field of hydra.java.syntax.TryStatement_Simple
+tryStatement_SimpleBlock :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.Block
+tryStatement_SimpleBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_Simple"),
+        Model.projectionFieldName = (Model.Name "block")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the catches field of hydra.java.syntax.TryStatement_Simple
+tryStatement_SimpleCatches :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.Catches
+tryStatement_SimpleCatches x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_Simple"),
+        Model.projectionFieldName = (Model.Name "catches")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TryStatement_Simple
+tryStatement_SimpleTryStatement_Simple :: Typed.TypedName Syntax.TryStatement_Simple
+tryStatement_SimpleTryStatement_Simple = Typed.TypedName (Model.Name "hydra.java.syntax.TryStatement_Simple")
+
+-- | DSL updater for the block field of hydra.java.syntax.TryStatement_Simple
+tryStatement_SimpleWithBlock :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryStatement_Simple
+tryStatement_SimpleWithBlock original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryStatement_Simple"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_Simple"),
+              Model.projectionFieldName = (Model.Name "catches")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the catches field of hydra.java.syntax.TryStatement_Simple
+tryStatement_SimpleWithCatches :: Typed.TypedTerm Syntax.TryStatement_Simple -> Typed.TypedTerm Syntax.Catches -> Typed.TypedTerm Syntax.TryStatement_Simple
+tryStatement_SimpleWithCatches original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryStatement_Simple"),
+      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.java.syntax.TryStatement_Simple"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.TryStatement_WithFinally
+tryStatement_WithFinally :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm (Maybe Syntax.Catches) -> Typed.TypedTerm Syntax.Finally -> Typed.TypedTerm Syntax.TryStatement_WithFinally
+tryStatement_WithFinally block catches finally =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm block)},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Typed.unTypedTerm catches)},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Typed.unTypedTerm finally)}]}))
+
+-- | DSL accessor for the block field of hydra.java.syntax.TryStatement_WithFinally
+tryStatement_WithFinallyBlock :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.Block
+tryStatement_WithFinallyBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+        Model.projectionFieldName = (Model.Name "block")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the catches field of hydra.java.syntax.TryStatement_WithFinally
+tryStatement_WithFinallyCatches :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm (Maybe Syntax.Catches)
+tryStatement_WithFinallyCatches x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+        Model.projectionFieldName = (Model.Name "catches")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the finally field of hydra.java.syntax.TryStatement_WithFinally
+tryStatement_WithFinallyFinally :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.Finally
+tryStatement_WithFinallyFinally x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+        Model.projectionFieldName = (Model.Name "finally")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TryStatement_WithFinally
+tryStatement_WithFinallyTryStatement_WithFinally :: Typed.TypedName Syntax.TryStatement_WithFinally
+tryStatement_WithFinallyTryStatement_WithFinally =
+    Typed.TypedName (Model.Name "hydra.java.syntax.TryStatement_WithFinally")
+
+-- | DSL updater for the block field of hydra.java.syntax.TryStatement_WithFinally
+tryStatement_WithFinallyWithBlock :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryStatement_WithFinally
+tryStatement_WithFinallyWithBlock original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+              Model.projectionFieldName = (Model.Name "catches")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+              Model.projectionFieldName = (Model.Name "finally")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the catches field of hydra.java.syntax.TryStatement_WithFinally
+tryStatement_WithFinallyWithCatches :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm (Maybe Syntax.Catches) -> Typed.TypedTerm Syntax.TryStatement_WithFinally
+tryStatement_WithFinallyWithCatches original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+      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.java.syntax.TryStatement_WithFinally"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+              Model.projectionFieldName = (Model.Name "finally")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the finally field of hydra.java.syntax.TryStatement_WithFinally
+tryStatement_WithFinallyWithFinally :: Typed.TypedTerm Syntax.TryStatement_WithFinally -> Typed.TypedTerm Syntax.Finally -> Typed.TypedTerm Syntax.TryStatement_WithFinally
+tryStatement_WithFinallyWithFinally original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+      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.java.syntax.TryStatement_WithFinally"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryStatement_WithFinally"),
+              Model.projectionFieldName = (Model.Name "catches")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatement :: Typed.TypedTerm Syntax.ResourceSpecification -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm (Maybe Syntax.Catches) -> Typed.TypedTerm (Maybe Syntax.Finally) -> Typed.TypedTerm Syntax.TryWithResourcesStatement
+tryWithResourcesStatement resourceSpecification block catches finally =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "resourceSpecification"),
+          Model.fieldTerm = (Typed.unTypedTerm resourceSpecification)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm block)},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Typed.unTypedTerm catches)},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Typed.unTypedTerm finally)}]}))
+
+-- | DSL accessor for the block field of hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementBlock :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.Block
+tryWithResourcesStatementBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+        Model.projectionFieldName = (Model.Name "block")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the catches field of hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementCatches :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm (Maybe Syntax.Catches)
+tryWithResourcesStatementCatches x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+        Model.projectionFieldName = (Model.Name "catches")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the finally field of hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementFinally :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm (Maybe Syntax.Finally)
+tryWithResourcesStatementFinally x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+        Model.projectionFieldName = (Model.Name "finally")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the resourceSpecification field of hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementResourceSpecification :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.ResourceSpecification
+tryWithResourcesStatementResourceSpecification x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+        Model.projectionFieldName = (Model.Name "resourceSpecification")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementTryWithResourcesStatement :: Typed.TypedName Syntax.TryWithResourcesStatement
+tryWithResourcesStatementTryWithResourcesStatement =
+    Typed.TypedName (Model.Name "hydra.java.syntax.TryWithResourcesStatement")
+
+-- | DSL updater for the block field of hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementWithBlock :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryWithResourcesStatement
+tryWithResourcesStatementWithBlock original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "resourceSpecification"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "resourceSpecification")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "catches")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "finally")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the catches field of hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementWithCatches :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm (Maybe Syntax.Catches) -> Typed.TypedTerm Syntax.TryWithResourcesStatement
+tryWithResourcesStatementWithCatches original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "resourceSpecification"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "resourceSpecification")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "finally")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the finally field of hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementWithFinally :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm (Maybe Syntax.Finally) -> Typed.TypedTerm Syntax.TryWithResourcesStatement
+tryWithResourcesStatementWithFinally original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "resourceSpecification"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "resourceSpecification")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "catches")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the resourceSpecification field of hydra.java.syntax.TryWithResourcesStatement
+tryWithResourcesStatementWithResourceSpecification :: Typed.TypedTerm Syntax.TryWithResourcesStatement -> Typed.TypedTerm Syntax.ResourceSpecification -> Typed.TypedTerm Syntax.TryWithResourcesStatement
+tryWithResourcesStatementWithResourceSpecification original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "resourceSpecification"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "catches"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "catches")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "finally"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TryWithResourcesStatement"),
+              Model.projectionFieldName = (Model.Name "finally")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the reference variant of hydra.java.syntax.TypeArgument
+typeArgumentReference :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.TypeArgument
+typeArgumentReference x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TypeArgument"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "reference"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.TypeArgument
+typeArgumentTypeArgument :: Typed.TypedName Syntax.TypeArgument
+typeArgumentTypeArgument = Typed.TypedName (Model.Name "hydra.java.syntax.TypeArgument")
+
+-- | DSL injection for the wildcard variant of hydra.java.syntax.TypeArgument
+typeArgumentWildcard :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm Syntax.TypeArgument
+typeArgumentWildcard x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TypeArgument"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "wildcard"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the arguments variant of hydra.java.syntax.TypeArgumentsOrDiamond
+typeArgumentsOrDiamondArguments :: Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.TypeArgumentsOrDiamond
+typeArgumentsOrDiamondArguments x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TypeArgumentsOrDiamond"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "arguments"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the diamond variant of hydra.java.syntax.TypeArgumentsOrDiamond
+typeArgumentsOrDiamondDiamond :: Typed.TypedTerm Syntax.TypeArgumentsOrDiamond
+typeArgumentsOrDiamondDiamond =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TypeArgumentsOrDiamond"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "diamond"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.TypeArgumentsOrDiamond
+typeArgumentsOrDiamondTypeArgumentsOrDiamond :: Typed.TypedName Syntax.TypeArgumentsOrDiamond
+typeArgumentsOrDiamondTypeArgumentsOrDiamond = Typed.TypedName (Model.Name "hydra.java.syntax.TypeArgumentsOrDiamond")
+
+-- | DSL injection for the classOrInterface variant of hydra.java.syntax.TypeBound
+typeBoundClassOrInterface :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm Syntax.TypeBound
+typeBoundClassOrInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TypeBound"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classOrInterface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.TypeBound
+typeBoundTypeBound :: Typed.TypedName Syntax.TypeBound
+typeBoundTypeBound = Typed.TypedName (Model.Name "hydra.java.syntax.TypeBound")
+
+-- | DSL injection for the variable variant of hydra.java.syntax.TypeBound
+typeBoundVariable :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.TypeBound
+typeBoundVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TypeBound"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.java.syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterface :: Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm [Syntax.AdditionalBound] -> Typed.TypedTerm Syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterface type_ additional =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "additional"),
+          Model.fieldTerm = (Typed.unTypedTerm additional)}]}))
+
+-- | DSL accessor for the additional field of hydra.java.syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterfaceAdditional :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm [Syntax.AdditionalBound]
+typeBound_ClassOrInterfaceAdditional x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
+        Model.projectionFieldName = (Model.Name "additional")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterfaceType :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType
+typeBound_ClassOrInterfaceType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterfaceTypeBound_ClassOrInterface :: Typed.TypedName Syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterfaceTypeBound_ClassOrInterface =
+    Typed.TypedName (Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface")
+
+-- | DSL updater for the additional field of hydra.java.syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterfaceWithAdditional :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm [Syntax.AdditionalBound] -> Typed.TypedTerm Syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterfaceWithAdditional original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "additional"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterfaceWithType :: Typed.TypedTerm Syntax.TypeBound_ClassOrInterface -> Typed.TypedTerm Syntax.ClassOrInterfaceType -> Typed.TypedTerm Syntax.TypeBound_ClassOrInterface
+typeBound_ClassOrInterfaceWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "additional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface"),
+              Model.projectionFieldName = (Model.Name "additional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.TypeIdentifier wrapper
+typeIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeIdentifier
+typeIdentifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.TypeIdentifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TypeIdentifier
+typeIdentifierTypeIdentifier :: Typed.TypedName Syntax.TypeIdentifier
+typeIdentifierTypeIdentifier = Typed.TypedName (Model.Name "hydra.java.syntax.TypeIdentifier")
+
+-- | DSL constructor for the hydra.java.syntax.TypeImportOnDemandDeclaration wrapper
+typeImportOnDemandDeclaration :: Typed.TypedTerm Syntax.PackageOrTypeName -> Typed.TypedTerm Syntax.TypeImportOnDemandDeclaration
+typeImportOnDemandDeclaration x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.TypeImportOnDemandDeclaration"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TypeImportOnDemandDeclaration
+typeImportOnDemandDeclarationTypeImportOnDemandDeclaration :: Typed.TypedName Syntax.TypeImportOnDemandDeclaration
+typeImportOnDemandDeclarationTypeImportOnDemandDeclaration =
+    Typed.TypedName (Model.Name "hydra.java.syntax.TypeImportOnDemandDeclaration")
+
+-- | DSL constructor for hydra.java.syntax.TypeName
+typeName :: Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm (Maybe Syntax.PackageOrTypeName) -> Typed.TypedTerm Syntax.TypeName
+typeName identifier qualifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm qualifier)}]}))
+
+-- | DSL injection for the array variant of hydra.java.syntax.TypeNameArray
+typeNameArrayArray :: Typed.TypedTerm Syntax.TypeNameArray -> Typed.TypedTerm Syntax.TypeNameArray
+typeNameArrayArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TypeNameArray"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "array"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the simple variant of hydra.java.syntax.TypeNameArray
+typeNameArraySimple :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.TypeNameArray
+typeNameArraySimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.TypeNameArray"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.TypeNameArray
+typeNameArrayTypeNameArray :: Typed.TypedName Syntax.TypeNameArray
+typeNameArrayTypeNameArray = Typed.TypedName (Model.Name "hydra.java.syntax.TypeNameArray")
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.TypeName
+typeNameIdentifier :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.TypeIdentifier
+typeNameIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeName"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the qualifier field of hydra.java.syntax.TypeName
+typeNameQualifier :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm (Maybe Syntax.PackageOrTypeName)
+typeNameQualifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeName"),
+        Model.projectionFieldName = (Model.Name "qualifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TypeName
+typeNameTypeName :: Typed.TypedName Syntax.TypeName
+typeNameTypeName = Typed.TypedName (Model.Name "hydra.java.syntax.TypeName")
+
+-- | DSL updater for the identifier field of hydra.java.syntax.TypeName
+typeNameWithIdentifier :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.TypeName
+typeNameWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeName"),
+              Model.projectionFieldName = (Model.Name "qualifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the qualifier field of hydra.java.syntax.TypeName
+typeNameWithQualifier :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm (Maybe Syntax.PackageOrTypeName) -> Typed.TypedTerm Syntax.TypeName
+typeNameWithQualifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeName"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.java.syntax.TypeParameter
+typeParameter :: Typed.TypedTerm [Syntax.TypeParameterModifier] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm (Maybe Syntax.TypeBound) -> Typed.TypedTerm Syntax.TypeParameter
+typeParameter modifiers identifier bound =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "bound"),
+          Model.fieldTerm = (Typed.unTypedTerm bound)}]}))
+
+-- | DSL accessor for the bound field of hydra.java.syntax.TypeParameter
+typeParameterBound :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeBound)
+typeParameterBound x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+        Model.projectionFieldName = (Model.Name "bound")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.TypeParameter
+typeParameterIdentifier :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm Syntax.TypeIdentifier
+typeParameterIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for the hydra.java.syntax.TypeParameterModifier wrapper
+typeParameterModifier :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.TypeParameterModifier
+typeParameterModifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.TypeParameterModifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TypeParameterModifier
+typeParameterModifierTypeParameterModifier :: Typed.TypedName Syntax.TypeParameterModifier
+typeParameterModifierTypeParameterModifier = Typed.TypedName (Model.Name "hydra.java.syntax.TypeParameterModifier")
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.TypeParameter
+typeParameterModifiers :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm [Syntax.TypeParameterModifier]
+typeParameterModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TypeParameter
+typeParameterTypeParameter :: Typed.TypedName Syntax.TypeParameter
+typeParameterTypeParameter = Typed.TypedName (Model.Name "hydra.java.syntax.TypeParameter")
+
+-- | DSL updater for the bound field of hydra.java.syntax.TypeParameter
+typeParameterWithBound :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeBound) -> Typed.TypedTerm Syntax.TypeParameter
+typeParameterWithBound original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "bound"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.TypeParameter
+typeParameterWithIdentifier :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.TypeParameter
+typeParameterWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "bound"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "bound")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.TypeParameter
+typeParameterWithModifiers :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm [Syntax.TypeParameterModifier] -> Typed.TypedTerm Syntax.TypeParameter
+typeParameterWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "bound"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "bound")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.java.syntax.TypePattern wrapper
+typePattern :: Typed.TypedTerm Syntax.LocalVariableDeclaration -> Typed.TypedTerm Syntax.TypePattern
+typePattern x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.TypePattern"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TypePattern
+typePatternTypePattern :: Typed.TypedName Syntax.TypePattern
+typePatternTypePattern = Typed.TypedName (Model.Name "hydra.java.syntax.TypePattern")
+
+-- | DSL injection for the primitive variant of hydra.java.syntax.Type
+typePrimitive :: Typed.TypedTerm Syntax.PrimitiveTypeWithAnnotations -> Typed.TypedTerm Syntax.Type
+typePrimitive x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "primitive"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the reference variant of hydra.java.syntax.Type
+typeReference :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.Type
+typeReference x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "reference"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.Type
+typeType :: Typed.TypedName Syntax.Type
+typeType = Typed.TypedName (Model.Name "hydra.java.syntax.Type")
+
+-- | DSL constructor for hydra.java.syntax.TypeVariable
+typeVariable :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.TypeVariable
+typeVariable annotations identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeVariable"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.TypeVariable
+typeVariableAnnotations :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm [Syntax.Annotation]
+typeVariableAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeVariable"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.TypeVariable
+typeVariableIdentifier :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.TypeIdentifier
+typeVariableIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeVariable"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.TypeVariable
+typeVariableTypeVariable :: Typed.TypedName Syntax.TypeVariable
+typeVariableTypeVariable = Typed.TypedName (Model.Name "hydra.java.syntax.TypeVariable")
+
+-- | DSL updater for the annotations field of hydra.java.syntax.TypeVariable
+typeVariableWithAnnotations :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.TypeVariable
+typeVariableWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeVariable"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeVariable"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.TypeVariable
+typeVariableWithIdentifier :: Typed.TypedTerm Syntax.TypeVariable -> Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.TypeVariable
+typeVariableWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.TypeVariable"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.TypeVariable"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL accessor for the body of hydra.java.syntax.AdditionalBound
+unAdditionalBound :: Typed.TypedTerm Syntax.AdditionalBound -> Typed.TypedTerm Syntax.InterfaceType
+unAdditionalBound x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.AdditionalBound")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.AmbiguousName
+unAmbiguousName :: Typed.TypedTerm Syntax.AmbiguousName -> Typed.TypedTerm [Syntax.Identifier]
+unAmbiguousName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.AmbiguousName")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.AndExpression
+unAndExpression :: Typed.TypedTerm Syntax.AndExpression -> Typed.TypedTerm [Syntax.EqualityExpression]
+unAndExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.AndExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.AnnotationInterfaceBody
+unAnnotationInterfaceBody :: Typed.TypedTerm Syntax.AnnotationInterfaceBody -> Typed.TypedTerm [Syntax.AnnotationInterfaceMemberDeclaration]
+unAnnotationInterfaceBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.AnnotationInterfaceBody")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ArrayInitializer
+unArrayInitializer :: Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm [[Syntax.VariableInitializer]]
+unArrayInitializer x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ArrayInitializer")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.Block
+unBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm [Syntax.BlockStatement]
+unBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.Block")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.BreakStatement
+unBreakStatement :: Typed.TypedTerm Syntax.BreakStatement -> Typed.TypedTerm (Maybe Syntax.Identifier)
+unBreakStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.BreakStatement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.CaseConstant
+unCaseConstant :: Typed.TypedTerm Syntax.CaseConstant -> Typed.TypedTerm Syntax.ConditionalExpression
+unCaseConstant x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.CaseConstant")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.Catches
+unCatches :: Typed.TypedTerm Syntax.Catches -> Typed.TypedTerm [Syntax.CatchClause]
+unCatches x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.Catches")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ClassBody
+unClassBody :: Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm [Syntax.ClassBodyDeclarationWithComments]
+unClassBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ClassBody")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ConditionalAndExpression
+unConditionalAndExpression :: Typed.TypedTerm Syntax.ConditionalAndExpression -> Typed.TypedTerm [Syntax.InclusiveOrExpression]
+unConditionalAndExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ConditionalAndExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ConditionalOrExpression
+unConditionalOrExpression :: Typed.TypedTerm Syntax.ConditionalOrExpression -> Typed.TypedTerm [Syntax.ConditionalAndExpression]
+unConditionalOrExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ConditionalOrExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ConstantExpression
+unConstantExpression :: Typed.TypedTerm Syntax.ConstantExpression -> Typed.TypedTerm Syntax.Expression
+unConstantExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ConstantExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ContinueStatement
+unContinueStatement :: Typed.TypedTerm Syntax.ContinueStatement -> Typed.TypedTerm (Maybe Syntax.Identifier)
+unContinueStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ContinueStatement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.DefaultValue
+unDefaultValue :: Typed.TypedTerm Syntax.DefaultValue -> Typed.TypedTerm Syntax.ElementValue
+unDefaultValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.DefaultValue")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.Dims
+unDims :: Typed.TypedTerm Syntax.Dims -> Typed.TypedTerm [[Syntax.Annotation]]
+unDims x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.Dims")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ElementValueArrayInitializer
+unElementValueArrayInitializer :: Typed.TypedTerm Syntax.ElementValueArrayInitializer -> Typed.TypedTerm [Syntax.ElementValue]
+unElementValueArrayInitializer x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ElementValueArrayInitializer")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.EnumBody
+unEnumBody :: Typed.TypedTerm Syntax.EnumBody -> Typed.TypedTerm [Syntax.EnumBody_Element]
+unEnumBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.EnumBody")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.EnumConstantModifier
+unEnumConstantModifier :: Typed.TypedTerm Syntax.EnumConstantModifier -> Typed.TypedTerm Syntax.Annotation
+unEnumConstantModifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.EnumConstantModifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ExclusiveOrExpression
+unExclusiveOrExpression :: Typed.TypedTerm Syntax.ExclusiveOrExpression -> Typed.TypedTerm [Syntax.AndExpression]
+unExclusiveOrExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ExclusiveOrExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ExpressionStatement
+unExpressionStatement :: Typed.TypedTerm Syntax.ExpressionStatement -> Typed.TypedTerm Syntax.StatementExpression
+unExpressionStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ExpressionStatement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.Finally
+unFinally :: Typed.TypedTerm Syntax.Finally -> Typed.TypedTerm Syntax.Block
+unFinally x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.Finally")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.FloatingPointLiteral
+unFloatingPointLiteral :: Typed.TypedTerm Syntax.FloatingPointLiteral -> Typed.TypedTerm Double
+unFloatingPointLiteral x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.FloatingPointLiteral")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ForUpdate
+unForUpdate :: Typed.TypedTerm Syntax.ForUpdate -> Typed.TypedTerm [Syntax.StatementExpression]
+unForUpdate x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ForUpdate")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.Guard
+unGuard :: Typed.TypedTerm Syntax.Guard -> Typed.TypedTerm Syntax.Expression
+unGuard x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.Guard")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.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.java.syntax.Identifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.InclusiveOrExpression
+unInclusiveOrExpression :: Typed.TypedTerm Syntax.InclusiveOrExpression -> Typed.TypedTerm [Syntax.ExclusiveOrExpression]
+unInclusiveOrExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.InclusiveOrExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.InstanceInitializer
+unInstanceInitializer :: Typed.TypedTerm Syntax.InstanceInitializer -> Typed.TypedTerm Syntax.Block
+unInstanceInitializer x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.InstanceInitializer")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.IntegerLiteral
+unIntegerLiteral :: Typed.TypedTerm Syntax.IntegerLiteral -> Typed.TypedTerm Integer
+unIntegerLiteral x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.IntegerLiteral")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.InterfaceBody
+unInterfaceBody :: Typed.TypedTerm Syntax.InterfaceBody -> Typed.TypedTerm [Syntax.InterfaceMemberDeclarationWithComments]
+unInterfaceBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.InterfaceBody")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.InterfaceType
+unInterfaceType :: Typed.TypedTerm Syntax.InterfaceType -> Typed.TypedTerm Syntax.ClassType
+unInterfaceType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.InterfaceType")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.LocalVariableDeclarationStatement
+unLocalVariableDeclarationStatement :: Typed.TypedTerm Syntax.LocalVariableDeclarationStatement -> Typed.TypedTerm Syntax.LocalVariableDeclaration
+unLocalVariableDeclarationStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.LocalVariableDeclarationStatement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.MarkerAnnotation
+unMarkerAnnotation :: Typed.TypedTerm Syntax.MarkerAnnotation -> Typed.TypedTerm Syntax.TypeName
+unMarkerAnnotation x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.MarkerAnnotation")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.MethodName
+unMethodName :: Typed.TypedTerm Syntax.MethodName -> Typed.TypedTerm Syntax.Identifier
+unMethodName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.MethodName")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.MethodReference_Array
+unMethodReference_Array :: Typed.TypedTerm Syntax.MethodReference_Array -> Typed.TypedTerm Syntax.ArrayType
+unMethodReference_Array x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.MethodReference_Array")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.PackageModifier
+unPackageModifier :: Typed.TypedTerm Syntax.PackageModifier -> Typed.TypedTerm Syntax.Annotation
+unPackageModifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.PackageModifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.PackageName
+unPackageName :: Typed.TypedTerm Syntax.PackageName -> Typed.TypedTerm [Syntax.Identifier]
+unPackageName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.PackageName")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.PackageOrTypeName
+unPackageOrTypeName :: Typed.TypedTerm Syntax.PackageOrTypeName -> Typed.TypedTerm [Syntax.Identifier]
+unPackageOrTypeName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.PackageOrTypeName")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.PostDecrementExpression
+unPostDecrementExpression :: Typed.TypedTerm Syntax.PostDecrementExpression -> Typed.TypedTerm Syntax.PostfixExpression
+unPostDecrementExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.PostDecrementExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.PostIncrementExpression
+unPostIncrementExpression :: Typed.TypedTerm Syntax.PostIncrementExpression -> Typed.TypedTerm Syntax.PostfixExpression
+unPostIncrementExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.PostIncrementExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.PreDecrementExpression
+unPreDecrementExpression :: Typed.TypedTerm Syntax.PreDecrementExpression -> Typed.TypedTerm Syntax.UnaryExpression
+unPreDecrementExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.PreDecrementExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.PreIncrementExpression
+unPreIncrementExpression :: Typed.TypedTerm Syntax.PreIncrementExpression -> Typed.TypedTerm Syntax.UnaryExpression
+unPreIncrementExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.PreIncrementExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.RecordBody
+unRecordBody :: Typed.TypedTerm Syntax.RecordBody -> Typed.TypedTerm [Syntax.RecordBodyDeclaration]
+unRecordBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.RecordBody")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.RecordComponentModifier
+unRecordComponentModifier :: Typed.TypedTerm Syntax.RecordComponentModifier -> Typed.TypedTerm Syntax.Annotation
+unRecordComponentModifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.RecordComponentModifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.RecordHeader
+unRecordHeader :: Typed.TypedTerm Syntax.RecordHeader -> Typed.TypedTerm [Syntax.RecordComponent]
+unRecordHeader x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.RecordHeader")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ResourceSpecification
+unResourceSpecification :: Typed.TypedTerm Syntax.ResourceSpecification -> Typed.TypedTerm [Syntax.Resource]
+unResourceSpecification x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ResourceSpecification")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.ReturnStatement
+unReturnStatement :: Typed.TypedTerm Syntax.ReturnStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
+unReturnStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.ReturnStatement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.SimpleTypeName
+unSimpleTypeName :: Typed.TypedTerm Syntax.SimpleTypeName -> Typed.TypedTerm Syntax.TypeIdentifier
+unSimpleTypeName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.SimpleTypeName")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.SingleTypeImportDeclaration
+unSingleTypeImportDeclaration :: Typed.TypedTerm Syntax.SingleTypeImportDeclaration -> Typed.TypedTerm Syntax.TypeName
+unSingleTypeImportDeclaration x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.SingleTypeImportDeclaration")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.StaticImportOnDemandDeclaration
+unStaticImportOnDemandDeclaration :: Typed.TypedTerm Syntax.StaticImportOnDemandDeclaration -> Typed.TypedTerm Syntax.TypeName
+unStaticImportOnDemandDeclaration x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.StaticImportOnDemandDeclaration")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.StaticInitializer
+unStaticInitializer :: Typed.TypedTerm Syntax.StaticInitializer -> Typed.TypedTerm Syntax.Block
+unStaticInitializer x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.StaticInitializer")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.StringLiteral
+unStringLiteral :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm String
+unStringLiteral x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.StringLiteral")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.TextBlock
+unTextBlock :: Typed.TypedTerm Syntax.TextBlock -> Typed.TypedTerm String
+unTextBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.TextBlock")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.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.java.syntax.ThrowStatement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.Throws
+unThrows :: Typed.TypedTerm Syntax.Throws -> Typed.TypedTerm [Syntax.ExceptionType]
+unThrows x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.Throws")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.TypeIdentifier
+unTypeIdentifier :: Typed.TypedTerm Syntax.TypeIdentifier -> Typed.TypedTerm Syntax.Identifier
+unTypeIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.TypeIdentifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.TypeImportOnDemandDeclaration
+unTypeImportOnDemandDeclaration :: Typed.TypedTerm Syntax.TypeImportOnDemandDeclaration -> Typed.TypedTerm Syntax.PackageOrTypeName
+unTypeImportOnDemandDeclaration x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.TypeImportOnDemandDeclaration")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.TypeParameterModifier
+unTypeParameterModifier :: Typed.TypedTerm Syntax.TypeParameterModifier -> Typed.TypedTerm Syntax.Annotation
+unTypeParameterModifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.TypeParameterModifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.TypePattern
+unTypePattern :: Typed.TypedTerm Syntax.TypePattern -> Typed.TypedTerm Syntax.LocalVariableDeclaration
+unTypePattern x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.TypePattern")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.UnannClassType
+unUnannClassType :: Typed.TypedTerm Syntax.UnannClassType -> Typed.TypedTerm Syntax.ClassType
+unUnannClassType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.UnannClassType")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.UnannType
+unUnannType :: Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.Type
+unUnannType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.UnannType")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.java.syntax.YieldStatement
+unYieldStatement :: Typed.TypedTerm Syntax.YieldStatement -> Typed.TypedTerm Syntax.Expression
+unYieldStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.java.syntax.YieldStatement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for the hydra.java.syntax.UnannClassType wrapper
+unannClassType :: Typed.TypedTerm Syntax.ClassType -> Typed.TypedTerm Syntax.UnannClassType
+unannClassType x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.UnannClassType"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.UnannClassType
+unannClassTypeUnannClassType :: Typed.TypedName Syntax.UnannClassType
+unannClassTypeUnannClassType = Typed.TypedName (Model.Name "hydra.java.syntax.UnannClassType")
+
+-- | DSL constructor for the hydra.java.syntax.UnannType wrapper
+unannType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.UnannType
+unannType x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.UnannType"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.UnannType
+unannTypeUnannType :: Typed.TypedName Syntax.UnannType
+unannTypeUnannType = Typed.TypedName (Model.Name "hydra.java.syntax.UnannType")
+
+-- | DSL injection for the minus variant of hydra.java.syntax.UnaryExpression
+unaryExpressionMinus :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpressionMinus x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "minus"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the cast variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusCast :: Typed.TypedTerm Syntax.CastExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusCast x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "cast"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the not variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusNot :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusNot x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "not"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the postfix variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusPostfix :: Typed.TypedTerm Syntax.PostfixExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusPostfix x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "postfix"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the switchExpression variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusSwitchExpression :: Typed.TypedTerm Syntax.SwitchExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusSwitchExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "switchExpression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the tilde variant of hydra.java.syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusTilde :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusTilde x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "tilde"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusUnaryExpressionNotPlusMinus :: Typed.TypedName Syntax.UnaryExpressionNotPlusMinus
+unaryExpressionNotPlusMinusUnaryExpressionNotPlusMinus =
+    Typed.TypedName (Model.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus")
+
+-- | DSL injection for the other variant of hydra.java.syntax.UnaryExpression
+unaryExpressionOther :: Typed.TypedTerm Syntax.UnaryExpressionNotPlusMinus -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpressionOther x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "other"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the plus variant of hydra.java.syntax.UnaryExpression
+unaryExpressionPlus :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpressionPlus x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "plus"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the preDecrement variant of hydra.java.syntax.UnaryExpression
+unaryExpressionPreDecrement :: Typed.TypedTerm Syntax.PreDecrementExpression -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpressionPreDecrement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "preDecrement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the preIncrement variant of hydra.java.syntax.UnaryExpression
+unaryExpressionPreIncrement :: Typed.TypedTerm Syntax.PreIncrementExpression -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpressionPreIncrement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.UnaryExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "preIncrement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.UnaryExpression
+unaryExpressionUnaryExpression :: Typed.TypedName Syntax.UnaryExpression
+unaryExpressionUnaryExpression = Typed.TypedName (Model.Name "hydra.java.syntax.UnaryExpression")
+
+-- | DSL constructor for hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpression :: Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm (Maybe Syntax.ClassBody) -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpression typeArguments classOrInterface arguments body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm typeArguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "classOrInterface"),
+          Model.fieldTerm = (Typed.unTypedTerm classOrInterface)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm arguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the arguments field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionArguments :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm [Syntax.Expression]
+unqualifiedClassInstanceCreationExpressionArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+        Model.projectionFieldName = (Model.Name "arguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionBody :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm (Maybe Syntax.ClassBody)
+unqualifiedClassInstanceCreationExpressionBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the classOrInterface field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionClassOrInterface :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate
+unqualifiedClassInstanceCreationExpressionClassOrInterface x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+        Model.projectionFieldName = (Model.Name "classOrInterface")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeArguments field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionTypeArguments :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm [Syntax.TypeArgument]
+unqualifiedClassInstanceCreationExpressionTypeArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+        Model.projectionFieldName = (Model.Name "typeArguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionUnqualifiedClassInstanceCreationExpression :: Typed.TypedName Syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionUnqualifiedClassInstanceCreationExpression =
+    Typed.TypedName (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression")
+
+-- | DSL updater for the arguments field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionWithArguments :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionWithArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "classOrInterface"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "classOrInterface")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the body field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionWithBody :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm (Maybe Syntax.ClassBody) -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "classOrInterface"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "classOrInterface")})),
+            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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the classOrInterface field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionWithClassOrInterface :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm Syntax.ClassOrInterfaceTypeToInstantiate -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionWithClassOrInterface original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "typeArguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "classOrInterface"),
+          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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeArguments field of hydra.java.syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionWithTypeArguments :: Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression -> Typed.TypedTerm [Syntax.TypeArgument] -> Typed.TypedTerm Syntax.UnqualifiedClassInstanceCreationExpression
+unqualifiedClassInstanceCreationExpressionWithTypeArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeArguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "classOrInterface"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "classOrInterface")})),
+            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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            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.java.syntax.UnqualifiedClassInstanceCreationExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the expressionName variant of hydra.java.syntax.VariableAccess
+variableAccessExpressionName :: Typed.TypedTerm Syntax.ExpressionName -> Typed.TypedTerm Syntax.VariableAccess
+variableAccessExpressionName x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.VariableAccess"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expressionName"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the fieldAccess variant of hydra.java.syntax.VariableAccess
+variableAccessFieldAccess :: Typed.TypedTerm Syntax.FieldAccess -> Typed.TypedTerm Syntax.VariableAccess
+variableAccessFieldAccess x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.VariableAccess"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "fieldAccess"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.VariableAccess
+variableAccessVariableAccess :: Typed.TypedName Syntax.VariableAccess
+variableAccessVariableAccess = Typed.TypedName (Model.Name "hydra.java.syntax.VariableAccess")
+
+-- | DSL constructor for hydra.java.syntax.VariableArityParameter
+variableArityParameter :: Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableArityParameter
+variableArityParameter modifiers type_ annotations identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.VariableArityParameter
+variableArityParameterAnnotations :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm [Syntax.Annotation]
+variableArityParameterAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.VariableArityParameter
+variableArityParameterIdentifier :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.Identifier
+variableArityParameterIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.VariableArityParameter
+variableArityParameterModifiers :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm [Syntax.VariableModifier]
+variableArityParameterModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.VariableArityParameter
+variableArityParameterType :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.UnannType
+variableArityParameterType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.VariableArityParameter
+variableArityParameterVariableArityParameter :: Typed.TypedName Syntax.VariableArityParameter
+variableArityParameterVariableArityParameter = Typed.TypedName (Model.Name "hydra.java.syntax.VariableArityParameter")
+
+-- | DSL updater for the annotations field of hydra.java.syntax.VariableArityParameter
+variableArityParameterWithAnnotations :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.VariableArityParameter
+variableArityParameterWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.VariableArityParameter
+variableArityParameterWithIdentifier :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableArityParameter
+variableArityParameterWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.VariableArityParameter
+variableArityParameterWithModifiers :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm [Syntax.VariableModifier] -> Typed.TypedTerm Syntax.VariableArityParameter
+variableArityParameterWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.VariableArityParameter
+variableArityParameterWithType :: Typed.TypedTerm Syntax.VariableArityParameter -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.VariableArityParameter
+variableArityParameterWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityParameter"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponent :: Typed.TypedTerm [Syntax.RecordComponentModifier] -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableArityRecordComponent
+variableArityRecordComponent modifiers type_ annotations identifier =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm modifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentAnnotations :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm [Syntax.Annotation]
+variableArityRecordComponentAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentIdentifier :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.Identifier
+variableArityRecordComponentIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the modifiers field of hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentModifiers :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm [Syntax.RecordComponentModifier]
+variableArityRecordComponentModifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+        Model.projectionFieldName = (Model.Name "modifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentType :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.UnannType
+variableArityRecordComponentType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentVariableArityRecordComponent :: Typed.TypedName Syntax.VariableArityRecordComponent
+variableArityRecordComponentVariableArityRecordComponent =
+    Typed.TypedName (Model.Name "hydra.java.syntax.VariableArityRecordComponent")
+
+-- | DSL updater for the annotations field of hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentWithAnnotations :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.VariableArityRecordComponent
+variableArityRecordComponentWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentWithIdentifier :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableArityRecordComponent
+variableArityRecordComponentWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            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.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the modifiers field of hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentWithModifiers :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm [Syntax.RecordComponentModifier] -> Typed.TypedTerm Syntax.VariableArityRecordComponent
+variableArityRecordComponentWithModifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          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.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.java.syntax.VariableArityRecordComponent
+variableArityRecordComponentWithType :: Typed.TypedTerm Syntax.VariableArityRecordComponent -> Typed.TypedTerm Syntax.UnannType -> Typed.TypedTerm Syntax.VariableArityRecordComponent
+variableArityRecordComponentWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "modifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableArityRecordComponent"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.VariableDeclarator
+variableDeclarator :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm (Maybe Syntax.VariableInitializer) -> Typed.TypedTerm Syntax.VariableDeclarator
+variableDeclarator id initializer =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm id)},
+        Model.Field {
+          Model.fieldName = (Model.Name "initializer"),
+          Model.fieldTerm = (Typed.unTypedTerm initializer)}]}))
+
+-- | DSL accessor for the id field of hydra.java.syntax.VariableDeclarator
+variableDeclaratorId :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm Syntax.VariableDeclaratorId
+variableDeclaratorId x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableDeclarator"),
+        Model.projectionFieldName = (Model.Name "id")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for hydra.java.syntax.VariableDeclaratorId
+variableDeclaratorId2 :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.VariableDeclaratorId
+variableDeclaratorId2 identifier dims =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableDeclaratorId"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm identifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm dims)}]}))
+
+-- | DSL accessor for the dims field of hydra.java.syntax.VariableDeclaratorId
+variableDeclaratorIdDims :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm (Maybe Syntax.Dims)
+variableDeclaratorIdDims x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableDeclaratorId"),
+        Model.projectionFieldName = (Model.Name "dims")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the identifier field of hydra.java.syntax.VariableDeclaratorId
+variableDeclaratorIdIdentifier :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.Identifier
+variableDeclaratorIdIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableDeclaratorId"),
+        Model.projectionFieldName = (Model.Name "identifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.VariableDeclaratorId
+variableDeclaratorIdVariableDeclaratorId :: Typed.TypedName Syntax.VariableDeclaratorId
+variableDeclaratorIdVariableDeclaratorId = Typed.TypedName (Model.Name "hydra.java.syntax.VariableDeclaratorId")
+
+-- | DSL updater for the dims field of hydra.java.syntax.VariableDeclaratorId
+variableDeclaratorIdWithDims :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm (Maybe Syntax.Dims) -> Typed.TypedTerm Syntax.VariableDeclaratorId
+variableDeclaratorIdWithDims original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableDeclaratorId"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableDeclaratorId"),
+              Model.projectionFieldName = (Model.Name "identifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the identifier field of hydra.java.syntax.VariableDeclaratorId
+variableDeclaratorIdWithIdentifier :: Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.VariableDeclaratorId
+variableDeclaratorIdWithIdentifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableDeclaratorId"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "identifier"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "dims"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableDeclaratorId"),
+              Model.projectionFieldName = (Model.Name "dims")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL accessor for the initializer field of hydra.java.syntax.VariableDeclarator
+variableDeclaratorInitializer :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm (Maybe Syntax.VariableInitializer)
+variableDeclaratorInitializer x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableDeclarator"),
+        Model.projectionFieldName = (Model.Name "initializer")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.VariableDeclarator
+variableDeclaratorVariableDeclarator :: Typed.TypedName Syntax.VariableDeclarator
+variableDeclaratorVariableDeclarator = Typed.TypedName (Model.Name "hydra.java.syntax.VariableDeclarator")
+
+-- | DSL updater for the id field of hydra.java.syntax.VariableDeclarator
+variableDeclaratorWithId :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm Syntax.VariableDeclaratorId -> Typed.TypedTerm Syntax.VariableDeclarator
+variableDeclaratorWithId original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.VariableDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "initializer"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.VariableDeclarator"),
+              Model.projectionFieldName = (Model.Name "initializer")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the initializer field of hydra.java.syntax.VariableDeclarator
+variableDeclaratorWithInitializer :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm (Maybe Syntax.VariableInitializer) -> Typed.TypedTerm Syntax.VariableDeclarator
+variableDeclaratorWithInitializer original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.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.java.syntax.VariableDeclarator"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "initializer"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the arrayInitializer variant of hydra.java.syntax.VariableInitializer
+variableInitializerArrayInitializer :: Typed.TypedTerm Syntax.ArrayInitializer -> Typed.TypedTerm Syntax.VariableInitializer
+variableInitializerArrayInitializer x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.VariableInitializer"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "arrayInitializer"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the expression variant of hydra.java.syntax.VariableInitializer
+variableInitializerExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.VariableInitializer
+variableInitializerExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.VariableInitializer"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.VariableInitializer
+variableInitializerVariableInitializer :: Typed.TypedName Syntax.VariableInitializer
+variableInitializerVariableInitializer = Typed.TypedName (Model.Name "hydra.java.syntax.VariableInitializer")
+
+-- | DSL injection for the annotation variant of hydra.java.syntax.VariableModifier
+variableModifierAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.VariableModifier
+variableModifierAnnotation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.VariableModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "annotation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the final variant of hydra.java.syntax.VariableModifier
+variableModifierFinal :: Typed.TypedTerm Syntax.VariableModifier
+variableModifierFinal =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.VariableModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "final"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.java.syntax.VariableModifier
+variableModifierVariableModifier :: Typed.TypedName Syntax.VariableModifier
+variableModifierVariableModifier = Typed.TypedName (Model.Name "hydra.java.syntax.VariableModifier")
+
+-- | DSL constructor for hydra.java.syntax.WhileStatement
+whileStatement :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.WhileStatement
+whileStatement cond body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.WhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.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.java.syntax.WhileStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.WhileStatement
+whileStatementCond :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
+whileStatementCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.WhileStatement"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for hydra.java.syntax.WhileStatementNoShortIf
+whileStatementNoShortIf :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.WhileStatementNoShortIf
+whileStatementNoShortIf cond body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.WhileStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Typed.unTypedTerm cond)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.java.syntax.WhileStatementNoShortIf
+whileStatementNoShortIfBody :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf
+whileStatementNoShortIfBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.WhileStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the cond field of hydra.java.syntax.WhileStatementNoShortIf
+whileStatementNoShortIfCond :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm (Maybe Syntax.Expression)
+whileStatementNoShortIfCond x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.WhileStatementNoShortIf"),
+        Model.projectionFieldName = (Model.Name "cond")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.WhileStatementNoShortIf
+whileStatementNoShortIfWhileStatementNoShortIf :: Typed.TypedName Syntax.WhileStatementNoShortIf
+whileStatementNoShortIfWhileStatementNoShortIf = Typed.TypedName (Model.Name "hydra.java.syntax.WhileStatementNoShortIf")
+
+-- | DSL updater for the body field of hydra.java.syntax.WhileStatementNoShortIf
+whileStatementNoShortIfWithBody :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm Syntax.StatementNoShortIf -> Typed.TypedTerm Syntax.WhileStatementNoShortIf
+whileStatementNoShortIfWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.WhileStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.WhileStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.WhileStatementNoShortIf
+whileStatementNoShortIfWithCond :: Typed.TypedTerm Syntax.WhileStatementNoShortIf -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.WhileStatementNoShortIf
+whileStatementNoShortIfWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.WhileStatementNoShortIf"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          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.java.syntax.WhileStatementNoShortIf"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL name token for hydra.java.syntax.WhileStatement
+whileStatementWhileStatement :: Typed.TypedName Syntax.WhileStatement
+whileStatementWhileStatement = Typed.TypedName (Model.Name "hydra.java.syntax.WhileStatement")
+
+-- | DSL updater for the body field of hydra.java.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.java.syntax.WhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.WhileStatement"),
+              Model.projectionFieldName = (Model.Name "cond")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the cond field of hydra.java.syntax.WhileStatement
+whileStatementWithCond :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.WhileStatement
+whileStatementWithCond original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.WhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "cond"),
+          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.java.syntax.WhileStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.java.syntax.Wildcard
+wildcard :: Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm (Maybe Syntax.WildcardBounds) -> Typed.TypedTerm Syntax.Wildcard
+wildcard annotations wildcard =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Wildcard"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm annotations)},
+        Model.Field {
+          Model.fieldName = (Model.Name "wildcard"),
+          Model.fieldTerm = (Typed.unTypedTerm wildcard)}]}))
+
+-- | DSL accessor for the annotations field of hydra.java.syntax.Wildcard
+wildcardAnnotations :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm [Syntax.Annotation]
+wildcardAnnotations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Wildcard"),
+        Model.projectionFieldName = (Model.Name "annotations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL injection for the extends variant of hydra.java.syntax.WildcardBounds
+wildcardBoundsExtends :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.WildcardBounds
+wildcardBoundsExtends x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.WildcardBounds"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "extends"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the super variant of hydra.java.syntax.WildcardBounds
+wildcardBoundsSuper :: Typed.TypedTerm Syntax.ReferenceType -> Typed.TypedTerm Syntax.WildcardBounds
+wildcardBoundsSuper x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.java.syntax.WildcardBounds"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "super"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.java.syntax.WildcardBounds
+wildcardBoundsWildcardBounds :: Typed.TypedName Syntax.WildcardBounds
+wildcardBoundsWildcardBounds = Typed.TypedName (Model.Name "hydra.java.syntax.WildcardBounds")
+
+-- | DSL name token for hydra.java.syntax.Wildcard
+wildcardWildcard :: Typed.TypedName Syntax.Wildcard
+wildcardWildcard = Typed.TypedName (Model.Name "hydra.java.syntax.Wildcard")
+
+-- | DSL accessor for the wildcard field of hydra.java.syntax.Wildcard
+wildcardWildcard2 :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm (Maybe Syntax.WildcardBounds)
+wildcardWildcard2 x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.java.syntax.Wildcard"),
+        Model.projectionFieldName = (Model.Name "wildcard")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the annotations field of hydra.java.syntax.Wildcard
+wildcardWithAnnotations :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm [Syntax.Annotation] -> Typed.TypedTerm Syntax.Wildcard
+wildcardWithAnnotations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Wildcard"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "wildcard"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Wildcard"),
+              Model.projectionFieldName = (Model.Name "wildcard")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the wildcard field of hydra.java.syntax.Wildcard
+wildcardWithWildcard :: Typed.TypedTerm Syntax.Wildcard -> Typed.TypedTerm (Maybe Syntax.WildcardBounds) -> Typed.TypedTerm Syntax.Wildcard
+wildcardWithWildcard original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.java.syntax.Wildcard"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "annotations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.java.syntax.Wildcard"),
+              Model.projectionFieldName = (Model.Name "annotations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "wildcard"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for the hydra.java.syntax.YieldStatement wrapper
+yieldStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.YieldStatement
+yieldStatement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.java.syntax.YieldStatement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.java.syntax.YieldStatement
+yieldStatementYieldStatement :: Typed.TypedName Syntax.YieldStatement
+yieldStatementYieldStatement = Typed.TypedName (Model.Name "hydra.java.syntax.YieldStatement")
diff --git a/src/main/haskell/Hydra/Java/Environment.hs b/src/main/haskell/Hydra/Java/Environment.hs
--- a/src/main/haskell/Hydra/Java/Environment.hs
+++ b/src/main/haskell/Hydra/Java/Environment.hs
@@ -4,11 +4,11 @@
 
 module Hydra.Java.Environment where
 
-import qualified Hydra.Core as Core
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Typing as Typing
 import qualified Hydra.Java.Syntax as Syntax
-import qualified Hydra.Packaging as Packaging
-import qualified Hydra.Typing as Typing
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
 import qualified Data.Scientific as Sci
 import Data.Void
@@ -29,17 +29,17 @@
   JavaSymbolClassLocalVariable
   deriving (Eq, Ord, Read, Show)
 
-_JavaSymbolClass = Core.Name "hydra.java.environment.JavaSymbolClass"
+_JavaSymbolClass = Model.Name "hydra.java.environment.JavaSymbolClass"
 
-_JavaSymbolClass_constant = Core.Name "constant"
+_JavaSymbolClass_constant = Model.Name "constant"
 
-_JavaSymbolClass_nullaryFunction = Core.Name "nullaryFunction"
+_JavaSymbolClass_nullaryFunction = Model.Name "nullaryFunction"
 
-_JavaSymbolClass_hoistedLambda = Core.Name "hoistedLambda"
+_JavaSymbolClass_hoistedLambda = Model.Name "hoistedLambda"
 
-_JavaSymbolClass_unaryFunction = Core.Name "unaryFunction"
+_JavaSymbolClass_unaryFunction = Model.Name "unaryFunction"
 
-_JavaSymbolClass_localVariable = Core.Name "localVariable"
+_JavaSymbolClass_localVariable = Model.Name "localVariable"
 
 -- | Feature flags for the target Java version
 data JavaFeatures =
@@ -48,9 +48,9 @@
     javaFeaturesSupportsDiamondOperator :: Bool}
   deriving (Eq, Ord, Read, Show)
 
-_JavaFeatures = Core.Name "hydra.java.environment.JavaFeatures"
+_JavaFeatures = Model.Name "hydra.java.environment.JavaFeatures"
 
-_JavaFeatures_supportsDiamondOperator = Core.Name "supportsDiamondOperator"
+_JavaFeatures_supportsDiamondOperator = Model.Name "supportsDiamondOperator"
 
 -- | Aliases and context for Java code generation
 data Aliases =
@@ -60,56 +60,56 @@
     -- | Maps module names to Java package names
     aliasesPackages :: (M.Map Packaging.ModuleName Syntax.PackageName),
     -- | Variables bound in pattern matching branches
-    aliasesBranchVars :: (S.Set Core.Name),
+    aliasesBranchVars :: (S.Set Model.Name),
     -- | Variables that are self-recursive
-    aliasesRecursiveVars :: (S.Set Core.Name),
+    aliasesRecursiveVars :: (S.Set Model.Name),
     -- | Type parameters that are in scope (from method-level type parameters)
-    aliasesInScopeTypeParams :: (S.Set Core.Name),
+    aliasesInScopeTypeParams :: (S.Set Model.Name),
     -- | Local variables that have polymorphic types (declared with raw types)
-    aliasesPolymorphicLocals :: (S.Set Core.Name),
+    aliasesPolymorphicLocals :: (S.Set Model.Name),
     -- | All in-scope Java variable names (for avoiding lambda parameter shadowing)
-    aliasesInScopeJavaVars :: (S.Set Core.Name),
+    aliasesInScopeJavaVars :: (S.Set Model.Name),
     -- | Variable renames for avoiding shadowing (maps Hydra name to Java name)
-    aliasesVarRenames :: (M.Map Core.Name Core.Name),
+    aliasesVarRenames :: (M.Map Model.Name Model.Name),
     -- | Lambda-bound variables (including hoisted captures with qualified names)
-    aliasesLambdaVars :: (S.Set Core.Name),
+    aliasesLambdaVars :: (S.Set Model.Name),
     -- | Type variable substitution: maps fresh inference variable names to canonical scheme variable names
-    aliasesTypeVarSubst :: (M.Map Core.Name Core.Name),
+    aliasesTypeVarSubst :: (M.Map Model.Name Model.Name),
     -- | Type variables that actually appear in the method's formal parameter types
-    aliasesTrustedTypeVars :: (S.Set Core.Name),
+    aliasesTrustedTypeVars :: (S.Set Model.Name),
     -- | The enclosing method's codomain (return type), used for casting pair expressions
-    aliasesMethodCodomain :: (Maybe Core.Type),
+    aliasesMethodCodomain :: (Maybe Model.Type),
     -- | Variables that have been thunked (wrapped in Supplier) for lazy evaluation
-    aliasesThunkedVars :: (S.Set Core.Name)}
+    aliasesThunkedVars :: (S.Set Model.Name)}
   deriving (Eq, Ord, Read, Show)
 
-_Aliases = Core.Name "hydra.java.environment.Aliases"
+_Aliases = Model.Name "hydra.java.environment.Aliases"
 
-_Aliases_currentNamespace = Core.Name "currentNamespace"
+_Aliases_currentNamespace = Model.Name "currentNamespace"
 
-_Aliases_packages = Core.Name "packages"
+_Aliases_packages = Model.Name "packages"
 
-_Aliases_branchVars = Core.Name "branchVars"
+_Aliases_branchVars = Model.Name "branchVars"
 
-_Aliases_recursiveVars = Core.Name "recursiveVars"
+_Aliases_recursiveVars = Model.Name "recursiveVars"
 
-_Aliases_inScopeTypeParams = Core.Name "inScopeTypeParams"
+_Aliases_inScopeTypeParams = Model.Name "inScopeTypeParams"
 
-_Aliases_polymorphicLocals = Core.Name "polymorphicLocals"
+_Aliases_polymorphicLocals = Model.Name "polymorphicLocals"
 
-_Aliases_inScopeJavaVars = Core.Name "inScopeJavaVars"
+_Aliases_inScopeJavaVars = Model.Name "inScopeJavaVars"
 
-_Aliases_varRenames = Core.Name "varRenames"
+_Aliases_varRenames = Model.Name "varRenames"
 
-_Aliases_lambdaVars = Core.Name "lambdaVars"
+_Aliases_lambdaVars = Model.Name "lambdaVars"
 
-_Aliases_typeVarSubst = Core.Name "typeVarSubst"
+_Aliases_typeVarSubst = Model.Name "typeVarSubst"
 
-_Aliases_trustedTypeVars = Core.Name "trustedTypeVars"
+_Aliases_trustedTypeVars = Model.Name "trustedTypeVars"
 
-_Aliases_methodCodomain = Core.Name "methodCodomain"
+_Aliases_methodCodomain = Model.Name "methodCodomain"
 
-_Aliases_thunkedVars = Core.Name "thunkedVars"
+_Aliases_thunkedVars = Model.Name "thunkedVars"
 
 -- | Environment for Java code generation
 data JavaEnvironment =
@@ -119,8 +119,8 @@
     -- | Graph context for type inference
     javaEnvironmentGraph :: Graph.Graph}
 
-_JavaEnvironment = Core.Name "hydra.java.environment.JavaEnvironment"
+_JavaEnvironment = Model.Name "hydra.java.environment.JavaEnvironment"
 
-_JavaEnvironment_aliases = Core.Name "aliases"
+_JavaEnvironment_aliases = Model.Name "aliases"
 
-_JavaEnvironment_graph = Core.Name "graph"
+_JavaEnvironment_graph = Model.Name "graph"
diff --git a/src/main/haskell/Hydra/Java/Gradle.hs b/src/main/haskell/Hydra/Java/Gradle.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Java/Gradle.hs
@@ -0,0 +1,54 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | Build configuration for Gradle-built distribution packages.
+
+module Hydra.Java.Gradle where
+
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Packaging as Packaging
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
+import qualified Data.Scientific as Sci
+import Data.Void
+
+-- | Configuration for the Gradle antlr plugin's grammar generation (generateGrammarSource).
+data AntlrConfig =
+  AntlrConfig {
+    -- | Arguments passed to the ANTLR tool, e.g. ["-visitor"] or ["-visitor", "-listener"]. Faithful to ANTLR's command-line interface; covers all ANTLR flags without enumerating them.
+    antlrConfigArguments :: [String],
+    -- | Directory into which ANTLR emits generated lexer/parser sources, relative to the package root (e.g. "build/generated-src/antlr/main"). The host also folds this into the main source set.
+    antlrConfigOutputDirectory :: File.FilePath}
+  deriving (Eq, Ord, Read, Show)
+
+_AntlrConfig = Model.Name "hydra.java.gradle.AntlrConfig"
+
+_AntlrConfig_arguments = Model.Name "arguments"
+
+_AntlrConfig_outputDirectory = Model.Name "outputDirectory"
+
+-- | The build configuration for a single Gradle-built distribution package, beyond its generated sources.
+data GradleBuildConfiguration =
+  GradleBuildConfiguration {
+    -- | Third-party (non-project) dependencies required by the package. Inter-package dependencies within the project are derived separately and are not listed here. Each dependency's scope (api/runtime/test/tool) is significant; its name carries the Maven group and artifact separated by a colon.
+    gradleBuildConfigurationDependencies :: [Packaging.PackageDependency],
+    -- | Source paths or patterns to exclude from compilation, relative to the package root.
+    gradleBuildConfigurationExcludes :: [String],
+    -- | Additional source directories to fold into the package's main source set, beyond the generated and overlaid sources (e.g. a directory of build-tool-generated sources).
+    gradleBuildConfigurationExtraSourceDirs :: [File.FilePath],
+    -- | Gradle plugin identifiers to apply to the build, e.g. "antlr". Applied in the given order.
+    gradleBuildConfigurationPlugins :: [String],
+    -- | ANTLR grammar-generation configuration, present when the package uses the antlr plugin. When given, the host emits the generateGrammarSource configuration and the compileJava-depends-on-generateGrammarSource ordering. Modeled as structured vocabulary rather than a raw Groovy fragment.
+    gradleBuildConfigurationAntlr :: (Maybe AntlrConfig)}
+  deriving (Eq, Ord, Read, Show)
+
+_GradleBuildConfiguration = Model.Name "hydra.java.gradle.GradleBuildConfiguration"
+
+_GradleBuildConfiguration_dependencies = Model.Name "dependencies"
+
+_GradleBuildConfiguration_excludes = Model.Name "excludes"
+
+_GradleBuildConfiguration_extraSourceDirs = Model.Name "extraSourceDirs"
+
+_GradleBuildConfiguration_plugins = Model.Name "plugins"
+
+_GradleBuildConfiguration_antlr = Model.Name "antlr"
diff --git a/src/main/haskell/Hydra/Java/Language.hs b/src/main/haskell/Hydra/Java/Language.hs
--- a/src/main/haskell/Hydra/Java/Language.hs
+++ b/src/main/haskell/Hydra/Java/Language.hs
@@ -4,33 +4,33 @@
 
 module Hydra.Java.Language where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Classes as Classes
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.Packaging as ErrorPackaging
-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.Relational as Relational
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-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 qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Classes as Classes
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+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.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.Relational as Relational
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+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
@@ -73,16 +73,16 @@
           Variants.LiteralVariantString]
     floatTypes =
         Sets.fromList [
-          Core.FloatTypeFloat32,
-          Core.FloatTypeFloat64]
+          Model.FloatTypeFloat32,
+          Model.FloatTypeFloat64]
     integerTypes =
         Sets.fromList [
-          Core.IntegerTypeBigint,
-          Core.IntegerTypeInt8,
-          Core.IntegerTypeInt16,
-          Core.IntegerTypeInt32,
-          Core.IntegerTypeInt64,
-          Core.IntegerTypeUint16]
+          Model.IntegerTypeBigint,
+          Model.IntegerTypeInt8,
+          Model.IntegerTypeInt16,
+          Model.IntegerTypeInt32,
+          Model.IntegerTypeInt64,
+          Model.IntegerTypeUint16]
     termVariants =
         Sets.fromList [
           Variants.TermVariantApplication,
@@ -140,8 +140,11 @@
       keywords,
       literals])
   where
-    specialNames = [
-      "Elements"]
+    specialNames =
+        [
+          "Elements",
+          "PartialVisitor",
+          "Visitor"]
     classNames =
         [
           "AbstractMethodError",
diff --git a/src/main/haskell/Hydra/Java/Names.hs b/src/main/haskell/Hydra/Java/Names.hs
--- a/src/main/haskell/Hydra/Java/Names.hs
+++ b/src/main/haskell/Hydra/Java/Names.hs
@@ -4,31 +4,31 @@
 
 module Hydra.Java.Names where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Classes as Classes
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Errors as Errors
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Classes as Classes
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Overlay.Haskell.Lib.Lists as Lists
+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.Relational as Relational
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+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.Java.Syntax as Syntax
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
-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.Relational as Relational
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-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
@@ -51,7 +51,7 @@
 hashCodeMethodName :: String
 hashCodeMethodName = "hashCode"
 
--- | The hydra.core package name
+-- | The hydra.core.model package name
 hydraCorePackageName :: Maybe Syntax.PackageName
 hydraCorePackageName =
     Just (javaPackageName [
@@ -62,11 +62,12 @@
 hydraOrdinalMethodName :: String
 hydraOrdinalMethodName = "hydraOrdinal"
 
--- | The hydra.overlay.java.util package name
+-- | The hydra.core.overlay.java.util package name
 hydraUtilPackageName :: Maybe Syntax.PackageName
 hydraUtilPackageName =
     Just (javaPackageName [
       "hydra",
+      "core",
       "overlay",
       "java",
       "util"])
diff --git a/src/main/haskell/Hydra/Java/Serde.hs b/src/main/haskell/Hydra/Java/Serde.hs
--- a/src/main/haskell/Hydra/Java/Serde.hs
+++ b/src/main/haskell/Hydra/Java/Serde.hs
@@ -4,43 +4,43 @@
 
 module Hydra.Java.Serde where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Classes as Classes
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Constants as Constants
-import qualified Hydra.Core as Core
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Errors as Errors
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Classes as Classes
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Constants as Constants
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Errors as Errors
+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.Optionals as Optionals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Ordering as Ordering
+import qualified Hydra.Core.Overlay.Haskell.Lib.Strings as Strings
+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 Docs
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Serialization as Serialization
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+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.Java.Syntax as Syntax
-import qualified Hydra.Json.Model as Model
 import qualified Hydra.Jvm.Serde as Serde
-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.Optionals as Optionals
-import qualified Hydra.Overlay.Haskell.Lib.Ordering as Ordering
-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 Docs
-import qualified Hydra.Query as Query
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Serialization as Serialization
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-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
@@ -650,7 +650,7 @@
 interfaceTypeToExpr :: Syntax.InterfaceType -> Ast.Expr
 interfaceTypeToExpr it = classTypeToExpr (Syntax.unInterfaceType it)
 
--- | Render a hydra.packaging.EntityReference as Javadoc link syntax
+-- | Render a hydra.core.packaging.EntityReference as Javadoc link syntax
 javaDocEntityRef :: Packaging.EntityReference -> String
 javaDocEntityRef ref =
     case ref of
diff --git a/src/main/haskell/Hydra/Java/Syntax.hs b/src/main/haskell/Hydra/Java/Syntax.hs
--- a/src/main/haskell/Hydra/Java/Syntax.hs
+++ b/src/main/haskell/Hydra/Java/Syntax.hs
@@ -6,3575 +6,3575 @@
 
 module Hydra.Java.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
-
-newtype Identifier =
-  Identifier {
-    unIdentifier :: String}
-  deriving (Eq, Ord, Read, Show)
-
-_Identifier = Core.Name "hydra.java.syntax.Identifier"
-
-newtype TypeIdentifier =
-  TypeIdentifier {
-    unTypeIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeIdentifier = Core.Name "hydra.java.syntax.TypeIdentifier"
-
-data Literal =
-  LiteralNull |
-  LiteralInteger IntegerLiteral |
-  LiteralFloatingPoint FloatingPointLiteral |
-  LiteralBoolean Bool |
-  LiteralCharacter Int |
-  LiteralString StringLiteral |
-  LiteralTextBlock TextBlock
-  deriving (Eq, Ord, Read, Show)
-
-_Literal = Core.Name "hydra.java.syntax.Literal"
-
-_Literal_null = Core.Name "null"
-
-_Literal_integer = Core.Name "integer"
-
-_Literal_floatingPoint = Core.Name "floatingPoint"
-
-_Literal_boolean = Core.Name "boolean"
-
-_Literal_character = Core.Name "character"
-
-_Literal_string = Core.Name "string"
-
-_Literal_textBlock = Core.Name "textBlock"
-
--- | Note: this is an approximation which ignores encoding
-newtype IntegerLiteral =
-  IntegerLiteral {
-    unIntegerLiteral :: Integer}
-  deriving (Eq, Ord, Read, Show)
-
-_IntegerLiteral = Core.Name "hydra.java.syntax.IntegerLiteral"
-
--- | Note: this is an approximation which ignores encoding
-newtype FloatingPointLiteral =
-  FloatingPointLiteral {
-    unFloatingPointLiteral :: Double}
-  deriving (Eq, Ord, Read, Show)
-
-_FloatingPointLiteral = Core.Name "hydra.java.syntax.FloatingPointLiteral"
-
--- | Note: this is an approximation which ignores encoding
-newtype StringLiteral =
-  StringLiteral {
-    unStringLiteral :: String}
-  deriving (Eq, Ord, Read, Show)
-
-_StringLiteral = Core.Name "hydra.java.syntax.StringLiteral"
-
--- | Note: this is an approximation which ignores encoding and incidental whitespace stripping
-newtype TextBlock =
-  TextBlock {
-    unTextBlock :: String}
-  deriving (Eq, Ord, Read, Show)
-
-_TextBlock = Core.Name "hydra.java.syntax.TextBlock"
-
-data Type =
-  TypePrimitive PrimitiveTypeWithAnnotations |
-  TypeReference ReferenceType
-  deriving (Eq, Ord, Read, Show)
-
-_Type = Core.Name "hydra.java.syntax.Type"
-
-_Type_primitive = Core.Name "primitive"
-
-_Type_reference = Core.Name "reference"
-
-data PrimitiveTypeWithAnnotations =
-  PrimitiveTypeWithAnnotations {
-    primitiveTypeWithAnnotationsType :: PrimitiveType,
-    primitiveTypeWithAnnotationsAnnotations :: [Annotation]}
-  deriving (Eq, Ord, Read, Show)
-
-_PrimitiveTypeWithAnnotations = Core.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"
-
-_PrimitiveTypeWithAnnotations_type = Core.Name "type"
-
-_PrimitiveTypeWithAnnotations_annotations = Core.Name "annotations"
-
-data PrimitiveType =
-  PrimitiveTypeNumeric NumericType |
-  PrimitiveTypeBoolean
-  deriving (Eq, Ord, Read, Show)
-
-_PrimitiveType = Core.Name "hydra.java.syntax.PrimitiveType"
-
-_PrimitiveType_numeric = Core.Name "numeric"
-
-_PrimitiveType_boolean = Core.Name "boolean"
-
-data NumericType =
-  NumericTypeIntegral IntegralType |
-  NumericTypeFloatingPoint FloatingPointType
-  deriving (Eq, Ord, Read, Show)
-
-_NumericType = Core.Name "hydra.java.syntax.NumericType"
-
-_NumericType_integral = Core.Name "integral"
-
-_NumericType_floatingPoint = Core.Name "floatingPoint"
-
-data IntegralType =
-  IntegralTypeByte |
-  IntegralTypeShort |
-  IntegralTypeInt |
-  IntegralTypeLong |
-  IntegralTypeChar
-  deriving (Eq, Ord, Read, Show)
-
-_IntegralType = Core.Name "hydra.java.syntax.IntegralType"
-
-_IntegralType_byte = Core.Name "byte"
-
-_IntegralType_short = Core.Name "short"
-
-_IntegralType_int = Core.Name "int"
-
-_IntegralType_long = Core.Name "long"
-
-_IntegralType_char = Core.Name "char"
-
-data FloatingPointType =
-  FloatingPointTypeFloat |
-  FloatingPointTypeDouble
-  deriving (Eq, Ord, Read, Show)
-
-_FloatingPointType = Core.Name "hydra.java.syntax.FloatingPointType"
-
-_FloatingPointType_float = Core.Name "float"
-
-_FloatingPointType_double = Core.Name "double"
-
-data ReferenceType =
-  ReferenceTypeClassOrInterface ClassOrInterfaceType |
-  ReferenceTypeVariable TypeVariable |
-  ReferenceTypeArray ArrayType
-  deriving (Eq, Ord, Read, Show)
-
-_ReferenceType = Core.Name "hydra.java.syntax.ReferenceType"
-
-_ReferenceType_classOrInterface = Core.Name "classOrInterface"
-
-_ReferenceType_variable = Core.Name "variable"
-
-_ReferenceType_array = Core.Name "array"
-
-data ClassOrInterfaceType =
-  ClassOrInterfaceTypeClass ClassType |
-  ClassOrInterfaceTypeInterface InterfaceType
-  deriving (Eq, Ord, Read, Show)
-
-_ClassOrInterfaceType = Core.Name "hydra.java.syntax.ClassOrInterfaceType"
-
-_ClassOrInterfaceType_class = Core.Name "class"
-
-_ClassOrInterfaceType_interface = Core.Name "interface"
-
-data ClassType =
-  ClassType {
-    classTypeAnnotations :: [Annotation],
-    classTypeQualifier :: ClassTypeQualifier,
-    classTypeIdentifier :: TypeIdentifier,
-    classTypeArguments :: [TypeArgument]}
-  deriving (Eq, Ord, Read, Show)
-
-_ClassType = Core.Name "hydra.java.syntax.ClassType"
-
-_ClassType_annotations = Core.Name "annotations"
-
-_ClassType_qualifier = Core.Name "qualifier"
-
-_ClassType_identifier = Core.Name "identifier"
-
-_ClassType_arguments = Core.Name "arguments"
-
-data ClassTypeQualifier =
-  ClassTypeQualifierNone |
-  ClassTypeQualifierPackage PackageName |
-  ClassTypeQualifierParent ClassOrInterfaceType
-  deriving (Eq, Ord, Read, Show)
-
-_ClassTypeQualifier = Core.Name "hydra.java.syntax.ClassTypeQualifier"
-
-_ClassTypeQualifier_none = Core.Name "none"
-
-_ClassTypeQualifier_package = Core.Name "package"
-
-_ClassTypeQualifier_parent = Core.Name "parent"
-
-newtype InterfaceType =
-  InterfaceType {
-    unInterfaceType :: ClassType}
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceType = Core.Name "hydra.java.syntax.InterfaceType"
-
-data TypeVariable =
-  TypeVariable {
-    typeVariableAnnotations :: [Annotation],
-    typeVariableIdentifier :: TypeIdentifier}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeVariable = Core.Name "hydra.java.syntax.TypeVariable"
-
-_TypeVariable_annotations = Core.Name "annotations"
-
-_TypeVariable_identifier = Core.Name "identifier"
-
-data ArrayType =
-  ArrayType {
-    arrayTypeDims :: Dims,
-    arrayTypeVariant :: ArrayType_Variant}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayType = Core.Name "hydra.java.syntax.ArrayType"
-
-_ArrayType_dims = Core.Name "dims"
-
-_ArrayType_variant = Core.Name "variant"
-
-data ArrayType_Variant =
-  ArrayType_VariantPrimitive PrimitiveTypeWithAnnotations |
-  ArrayType_VariantClassOrInterface ClassOrInterfaceType |
-  ArrayType_VariantVariable TypeVariable
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayType_Variant = Core.Name "hydra.java.syntax.ArrayType_Variant"
-
-_ArrayType_Variant_primitive = Core.Name "primitive"
-
-_ArrayType_Variant_classOrInterface = Core.Name "classOrInterface"
-
-_ArrayType_Variant_variable = Core.Name "variable"
-
-newtype Dims =
-  Dims {
-    unDims :: [[Annotation]]}
-  deriving (Eq, Ord, Read, Show)
-
-_Dims = Core.Name "hydra.java.syntax.Dims"
-
-data TypeParameter =
-  TypeParameter {
-    typeParameterModifiers :: [TypeParameterModifier],
-    typeParameterIdentifier :: TypeIdentifier,
-    typeParameterBound :: (Maybe TypeBound)}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeParameter = Core.Name "hydra.java.syntax.TypeParameter"
-
-_TypeParameter_modifiers = Core.Name "modifiers"
-
-_TypeParameter_identifier = Core.Name "identifier"
-
-_TypeParameter_bound = Core.Name "bound"
-
-newtype TypeParameterModifier =
-  TypeParameterModifier {
-    unTypeParameterModifier :: Annotation}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeParameterModifier = Core.Name "hydra.java.syntax.TypeParameterModifier"
-
-data TypeBound =
-  TypeBoundVariable TypeVariable |
-  TypeBoundClassOrInterface TypeBound_ClassOrInterface
-  deriving (Eq, Ord, Read, Show)
-
-_TypeBound = Core.Name "hydra.java.syntax.TypeBound"
-
-_TypeBound_variable = Core.Name "variable"
-
-_TypeBound_classOrInterface = Core.Name "classOrInterface"
-
-data TypeBound_ClassOrInterface =
-  TypeBound_ClassOrInterface {
-    typeBound_ClassOrInterfaceType :: ClassOrInterfaceType,
-    typeBound_ClassOrInterfaceAdditional :: [AdditionalBound]}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeBound_ClassOrInterface = Core.Name "hydra.java.syntax.TypeBound_ClassOrInterface"
-
-_TypeBound_ClassOrInterface_type = Core.Name "type"
-
-_TypeBound_ClassOrInterface_additional = Core.Name "additional"
-
-newtype AdditionalBound =
-  AdditionalBound {
-    unAdditionalBound :: InterfaceType}
-  deriving (Eq, Ord, Read, Show)
-
-_AdditionalBound = Core.Name "hydra.java.syntax.AdditionalBound"
-
-data TypeArgument =
-  TypeArgumentReference ReferenceType |
-  TypeArgumentWildcard Wildcard
-  deriving (Eq, Ord, Read, Show)
-
-_TypeArgument = Core.Name "hydra.java.syntax.TypeArgument"
-
-_TypeArgument_reference = Core.Name "reference"
-
-_TypeArgument_wildcard = Core.Name "wildcard"
-
-data Wildcard =
-  Wildcard {
-    wildcardAnnotations :: [Annotation],
-    wildcardWildcard :: (Maybe WildcardBounds)}
-  deriving (Eq, Ord, Read, Show)
-
-_Wildcard = Core.Name "hydra.java.syntax.Wildcard"
-
-_Wildcard_annotations = Core.Name "annotations"
-
-_Wildcard_wildcard = Core.Name "wildcard"
-
-data WildcardBounds =
-  WildcardBoundsExtends ReferenceType |
-  WildcardBoundsSuper ReferenceType
-  deriving (Eq, Ord, Read, Show)
-
-_WildcardBounds = Core.Name "hydra.java.syntax.WildcardBounds"
-
-_WildcardBounds_extends = Core.Name "extends"
-
-_WildcardBounds_super = Core.Name "super"
-
-data ModuleName =
-  ModuleName {
-    moduleNameIdentifier :: Identifier,
-    moduleNameName :: (Maybe ModuleName)}
-  deriving (Eq, Ord, Read, Show)
-
-_ModuleName = Core.Name "hydra.java.syntax.ModuleName"
-
-_ModuleName_identifier = Core.Name "identifier"
-
-_ModuleName_name = Core.Name "name"
-
-newtype PackageName =
-  PackageName {
-    unPackageName :: [Identifier]}
-  deriving (Eq, Ord, Read, Show)
-
-_PackageName = Core.Name "hydra.java.syntax.PackageName"
-
-data TypeName =
-  TypeName {
-    typeNameIdentifier :: TypeIdentifier,
-    typeNameQualifier :: (Maybe PackageOrTypeName)}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeName = Core.Name "hydra.java.syntax.TypeName"
-
-_TypeName_identifier = Core.Name "identifier"
-
-_TypeName_qualifier = Core.Name "qualifier"
-
-data ExpressionName =
-  ExpressionName {
-    expressionNameQualifier :: (Maybe AmbiguousName),
-    expressionNameIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_ExpressionName = Core.Name "hydra.java.syntax.ExpressionName"
-
-_ExpressionName_qualifier = Core.Name "qualifier"
-
-_ExpressionName_identifier = Core.Name "identifier"
-
-newtype MethodName =
-  MethodName {
-    unMethodName :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodName = Core.Name "hydra.java.syntax.MethodName"
-
-newtype PackageOrTypeName =
-  PackageOrTypeName {
-    unPackageOrTypeName :: [Identifier]}
-  deriving (Eq, Ord, Read, Show)
-
-_PackageOrTypeName = Core.Name "hydra.java.syntax.PackageOrTypeName"
-
-newtype AmbiguousName =
-  AmbiguousName {
-    unAmbiguousName :: [Identifier]}
-  deriving (Eq, Ord, Read, Show)
-
-_AmbiguousName = Core.Name "hydra.java.syntax.AmbiguousName"
-
-data CompilationUnit =
-  CompilationUnitOrdinary OrdinaryCompilationUnit |
-  CompilationUnitModular ModularCompilationUnit
-  deriving (Eq, Ord, Read, Show)
-
-_CompilationUnit = Core.Name "hydra.java.syntax.CompilationUnit"
-
-_CompilationUnit_ordinary = Core.Name "ordinary"
-
-_CompilationUnit_modular = Core.Name "modular"
-
-data OrdinaryCompilationUnit =
-  OrdinaryCompilationUnit {
-    ordinaryCompilationUnitPackage :: (Maybe PackageDeclaration),
-    ordinaryCompilationUnitImports :: [ImportDeclaration],
-    ordinaryCompilationUnitTypes :: [TopLevelClassOrInterfaceDeclarationWithComments]}
-  deriving (Eq, Ord, Read, Show)
-
-_OrdinaryCompilationUnit = Core.Name "hydra.java.syntax.OrdinaryCompilationUnit"
-
-_OrdinaryCompilationUnit_package = Core.Name "package"
-
-_OrdinaryCompilationUnit_imports = Core.Name "imports"
-
-_OrdinaryCompilationUnit_types = Core.Name "types"
-
-data ModularCompilationUnit =
-  ModularCompilationUnit {
-    modularCompilationUnitImports :: [ImportDeclaration],
-    modularCompilationUnitModule :: ModuleDeclaration}
-  deriving (Eq, Ord, Read, Show)
-
-_ModularCompilationUnit = Core.Name "hydra.java.syntax.ModularCompilationUnit"
-
-_ModularCompilationUnit_imports = Core.Name "imports"
-
-_ModularCompilationUnit_module = Core.Name "module"
-
-data PackageDeclaration =
-  PackageDeclaration {
-    packageDeclarationModifiers :: [PackageModifier],
-    packageDeclarationIdentifiers :: [Identifier]}
-  deriving (Eq, Ord, Read, Show)
-
-_PackageDeclaration = Core.Name "hydra.java.syntax.PackageDeclaration"
-
-_PackageDeclaration_modifiers = Core.Name "modifiers"
-
-_PackageDeclaration_identifiers = Core.Name "identifiers"
-
-newtype PackageModifier =
-  PackageModifier {
-    unPackageModifier :: Annotation}
-  deriving (Eq, Ord, Read, Show)
-
-_PackageModifier = Core.Name "hydra.java.syntax.PackageModifier"
-
-data ImportDeclaration =
-  ImportDeclarationSingleType SingleTypeImportDeclaration |
-  ImportDeclarationTypeImportOnDemand TypeImportOnDemandDeclaration |
-  ImportDeclarationSingleStaticImport SingleStaticImportDeclaration |
-  ImportDeclarationStaticImportOnDemand StaticImportOnDemandDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_ImportDeclaration = Core.Name "hydra.java.syntax.ImportDeclaration"
-
-_ImportDeclaration_singleType = Core.Name "singleType"
-
-_ImportDeclaration_typeImportOnDemand = Core.Name "typeImportOnDemand"
-
-_ImportDeclaration_singleStaticImport = Core.Name "singleStaticImport"
-
-_ImportDeclaration_staticImportOnDemand = Core.Name "staticImportOnDemand"
-
-newtype SingleTypeImportDeclaration =
-  SingleTypeImportDeclaration {
-    unSingleTypeImportDeclaration :: TypeName}
-  deriving (Eq, Ord, Read, Show)
-
-_SingleTypeImportDeclaration = Core.Name "hydra.java.syntax.SingleTypeImportDeclaration"
-
-newtype TypeImportOnDemandDeclaration =
-  TypeImportOnDemandDeclaration {
-    unTypeImportOnDemandDeclaration :: PackageOrTypeName}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeImportOnDemandDeclaration = Core.Name "hydra.java.syntax.TypeImportOnDemandDeclaration"
-
-data SingleStaticImportDeclaration =
-  SingleStaticImportDeclaration {
-    singleStaticImportDeclarationTypeName :: TypeName,
-    singleStaticImportDeclarationIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_SingleStaticImportDeclaration = Core.Name "hydra.java.syntax.SingleStaticImportDeclaration"
-
-_SingleStaticImportDeclaration_typeName = Core.Name "typeName"
-
-_SingleStaticImportDeclaration_identifier = Core.Name "identifier"
-
-newtype StaticImportOnDemandDeclaration =
-  StaticImportOnDemandDeclaration {
-    unStaticImportOnDemandDeclaration :: TypeName}
-  deriving (Eq, Ord, Read, Show)
-
-_StaticImportOnDemandDeclaration = Core.Name "hydra.java.syntax.StaticImportOnDemandDeclaration"
-
-data TopLevelClassOrInterfaceDeclaration =
-  TopLevelClassOrInterfaceDeclarationClass ClassDeclaration |
-  TopLevelClassOrInterfaceDeclarationInterface InterfaceDeclaration |
-  TopLevelClassOrInterfaceDeclarationNone
-  deriving (Eq, Ord, Read, Show)
-
-_TopLevelClassOrInterfaceDeclaration = Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration"
-
-_TopLevelClassOrInterfaceDeclaration_class = Core.Name "class"
-
-_TopLevelClassOrInterfaceDeclaration_interface = Core.Name "interface"
-
-_TopLevelClassOrInterfaceDeclaration_none = Core.Name "none"
-
-data TopLevelClassOrInterfaceDeclarationWithComments =
-  TopLevelClassOrInterfaceDeclarationWithComments {
-    topLevelClassOrInterfaceDeclarationWithCommentsValue :: TopLevelClassOrInterfaceDeclaration,
-    topLevelClassOrInterfaceDeclarationWithCommentsComments :: (Maybe String)}
-  deriving (Eq, Ord, Read, Show)
-
-_TopLevelClassOrInterfaceDeclarationWithComments =
-    Core.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"
-
-_TopLevelClassOrInterfaceDeclarationWithComments_value = Core.Name "value"
-
-_TopLevelClassOrInterfaceDeclarationWithComments_comments = Core.Name "comments"
-
-data ModuleDeclaration =
-  ModuleDeclaration {
-    moduleDeclarationAnnotations :: [Annotation],
-    moduleDeclarationOpen :: Bool,
-    moduleDeclarationIdentifiers :: [Identifier],
-    moduleDeclarationDirectives :: [ModuleDirective]}
-  deriving (Eq, Ord, Read, Show)
-
-_ModuleDeclaration = Core.Name "hydra.java.syntax.ModuleDeclaration"
-
-_ModuleDeclaration_annotations = Core.Name "annotations"
-
-_ModuleDeclaration_open = Core.Name "open"
-
-_ModuleDeclaration_identifiers = Core.Name "identifiers"
-
-_ModuleDeclaration_directives = Core.Name "directives"
-
-data ModuleDirective =
-  ModuleDirectiveRequires ModuleDirective_Requires |
-  ModuleDirectiveExports ModuleDirective_ExportsOrOpens |
-  ModuleDirectiveOpens ModuleDirective_ExportsOrOpens |
-  ModuleDirectiveUses TypeName |
-  ModuleDirectiveProvides ModuleDirective_Provides
-  deriving (Eq, Ord, Read, Show)
-
-_ModuleDirective = Core.Name "hydra.java.syntax.ModuleDirective"
-
-_ModuleDirective_requires = Core.Name "requires"
-
-_ModuleDirective_exports = Core.Name "exports"
-
-_ModuleDirective_opens = Core.Name "opens"
-
-_ModuleDirective_uses = Core.Name "uses"
-
-_ModuleDirective_provides = Core.Name "provides"
-
-data ModuleDirective_Requires =
-  ModuleDirective_Requires {
-    moduleDirective_RequiresModifiers :: [RequiresModifier],
-    moduleDirective_RequiresModule :: ModuleName}
-  deriving (Eq, Ord, Read, Show)
-
-_ModuleDirective_Requires = Core.Name "hydra.java.syntax.ModuleDirective_Requires"
-
-_ModuleDirective_Requires_modifiers = Core.Name "modifiers"
-
-_ModuleDirective_Requires_module = Core.Name "module"
-
-data ModuleDirective_ExportsOrOpens =
-  ModuleDirective_ExportsOrOpens {
-    moduleDirective_ExportsOrOpensPackage :: PackageName,
-    -- | At least one module
-    moduleDirective_ExportsOrOpensModules :: [ModuleName]}
-  deriving (Eq, Ord, Read, Show)
-
-_ModuleDirective_ExportsOrOpens = Core.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"
-
-_ModuleDirective_ExportsOrOpens_package = Core.Name "package"
-
-_ModuleDirective_ExportsOrOpens_modules = Core.Name "modules"
-
-data ModuleDirective_Provides =
-  ModuleDirective_Provides {
-    moduleDirective_ProvidesTo :: TypeName,
-    -- | At least one type
-    moduleDirective_ProvidesWith :: [TypeName]}
-  deriving (Eq, Ord, Read, Show)
-
-_ModuleDirective_Provides = Core.Name "hydra.java.syntax.ModuleDirective_Provides"
-
-_ModuleDirective_Provides_to = Core.Name "to"
-
-_ModuleDirective_Provides_with = Core.Name "with"
-
-data RequiresModifier =
-  RequiresModifierTransitive |
-  RequiresModifierStatic
-  deriving (Eq, Ord, Read, Show)
-
-_RequiresModifier = Core.Name "hydra.java.syntax.RequiresModifier"
-
-_RequiresModifier_transitive = Core.Name "transitive"
-
-_RequiresModifier_static = Core.Name "static"
-
-data ClassDeclaration =
-  ClassDeclarationNormal NormalClassDeclaration |
-  ClassDeclarationEnum EnumDeclaration |
-  ClassDeclarationRecord RecordDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_ClassDeclaration = Core.Name "hydra.java.syntax.ClassDeclaration"
-
-_ClassDeclaration_normal = Core.Name "normal"
-
-_ClassDeclaration_enum = Core.Name "enum"
-
-_ClassDeclaration_record = Core.Name "record"
-
-data NormalClassDeclaration =
-  NormalClassDeclaration {
-    normalClassDeclarationModifiers :: [ClassModifier],
-    normalClassDeclarationIdentifier :: TypeIdentifier,
-    normalClassDeclarationParameters :: [TypeParameter],
-    normalClassDeclarationExtends :: (Maybe ClassType),
-    normalClassDeclarationImplements :: [InterfaceType],
-    normalClassDeclarationPermits :: [TypeName],
-    normalClassDeclarationBody :: ClassBody}
-  deriving (Eq, Ord, Read, Show)
-
-_NormalClassDeclaration = Core.Name "hydra.java.syntax.NormalClassDeclaration"
-
-_NormalClassDeclaration_modifiers = Core.Name "modifiers"
-
-_NormalClassDeclaration_identifier = Core.Name "identifier"
-
-_NormalClassDeclaration_parameters = Core.Name "parameters"
-
-_NormalClassDeclaration_extends = Core.Name "extends"
-
-_NormalClassDeclaration_implements = Core.Name "implements"
-
-_NormalClassDeclaration_permits = Core.Name "permits"
-
-_NormalClassDeclaration_body = Core.Name "body"
-
-data ClassModifier =
-  ClassModifierAnnotation Annotation |
-  ClassModifierPublic |
-  ClassModifierProtected |
-  ClassModifierPrivate |
-  ClassModifierAbstract |
-  ClassModifierStatic |
-  ClassModifierFinal |
-  ClassModifierSealed |
-  ClassModifierNonSealed |
-  ClassModifierStrictfp
-  deriving (Eq, Ord, Read, Show)
-
-_ClassModifier = Core.Name "hydra.java.syntax.ClassModifier"
-
-_ClassModifier_annotation = Core.Name "annotation"
-
-_ClassModifier_public = Core.Name "public"
-
-_ClassModifier_protected = Core.Name "protected"
-
-_ClassModifier_private = Core.Name "private"
-
-_ClassModifier_abstract = Core.Name "abstract"
-
-_ClassModifier_static = Core.Name "static"
-
-_ClassModifier_final = Core.Name "final"
-
-_ClassModifier_sealed = Core.Name "sealed"
-
-_ClassModifier_nonSealed = Core.Name "nonSealed"
-
-_ClassModifier_strictfp = Core.Name "strictfp"
-
-newtype ClassBody =
-  ClassBody {
-    unClassBody :: [ClassBodyDeclarationWithComments]}
-  deriving (Eq, Ord, Read, Show)
-
-_ClassBody = Core.Name "hydra.java.syntax.ClassBody"
-
-data ClassBodyDeclaration =
-  ClassBodyDeclarationClassMember ClassMemberDeclaration |
-  ClassBodyDeclarationInstanceInitializer InstanceInitializer |
-  ClassBodyDeclarationStaticInitializer StaticInitializer |
-  ClassBodyDeclarationConstructorDeclaration ConstructorDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_ClassBodyDeclaration = Core.Name "hydra.java.syntax.ClassBodyDeclaration"
-
-_ClassBodyDeclaration_classMember = Core.Name "classMember"
-
-_ClassBodyDeclaration_instanceInitializer = Core.Name "instanceInitializer"
-
-_ClassBodyDeclaration_staticInitializer = Core.Name "staticInitializer"
-
-_ClassBodyDeclaration_constructorDeclaration = Core.Name "constructorDeclaration"
-
-data ClassBodyDeclarationWithComments =
-  ClassBodyDeclarationWithComments {
-    classBodyDeclarationWithCommentsValue :: ClassBodyDeclaration,
-    classBodyDeclarationWithCommentsComments :: (Maybe String)}
-  deriving (Eq, Ord, Read, Show)
-
-_ClassBodyDeclarationWithComments = Core.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"
-
-_ClassBodyDeclarationWithComments_value = Core.Name "value"
-
-_ClassBodyDeclarationWithComments_comments = Core.Name "comments"
-
-data ClassMemberDeclaration =
-  ClassMemberDeclarationField FieldDeclaration |
-  ClassMemberDeclarationMethod MethodDeclaration |
-  ClassMemberDeclarationClass ClassDeclaration |
-  ClassMemberDeclarationInterface InterfaceDeclaration |
-  ClassMemberDeclarationNone
-  deriving (Eq, Ord, Read, Show)
-
-_ClassMemberDeclaration = Core.Name "hydra.java.syntax.ClassMemberDeclaration"
-
-_ClassMemberDeclaration_field = Core.Name "field"
-
-_ClassMemberDeclaration_method = Core.Name "method"
-
-_ClassMemberDeclaration_class = Core.Name "class"
-
-_ClassMemberDeclaration_interface = Core.Name "interface"
-
-_ClassMemberDeclaration_none = Core.Name "none"
-
-data FieldDeclaration =
-  FieldDeclaration {
-    fieldDeclarationModifiers :: [FieldModifier],
-    fieldDeclarationUnannType :: UnannType,
-    fieldDeclarationVariableDeclarators :: [VariableDeclarator]}
-  deriving (Eq, Ord, Read, Show)
-
-_FieldDeclaration = Core.Name "hydra.java.syntax.FieldDeclaration"
-
-_FieldDeclaration_modifiers = Core.Name "modifiers"
-
-_FieldDeclaration_unannType = Core.Name "unannType"
-
-_FieldDeclaration_variableDeclarators = Core.Name "variableDeclarators"
-
-data FieldModifier =
-  FieldModifierAnnotation Annotation |
-  FieldModifierPublic |
-  FieldModifierProtected |
-  FieldModifierPrivate |
-  FieldModifierStatic |
-  FieldModifierFinal |
-  FieldModifierTransient |
-  FieldModifierVolatile
-  deriving (Eq, Ord, Read, Show)
-
-_FieldModifier = Core.Name "hydra.java.syntax.FieldModifier"
-
-_FieldModifier_annotation = Core.Name "annotation"
-
-_FieldModifier_public = Core.Name "public"
-
-_FieldModifier_protected = Core.Name "protected"
-
-_FieldModifier_private = Core.Name "private"
-
-_FieldModifier_static = Core.Name "static"
-
-_FieldModifier_final = Core.Name "final"
-
-_FieldModifier_transient = Core.Name "transient"
-
-_FieldModifier_volatile = Core.Name "volatile"
-
-data VariableDeclarator =
-  VariableDeclarator {
-    variableDeclaratorId :: VariableDeclaratorId,
-    variableDeclaratorInitializer :: (Maybe VariableInitializer)}
-  deriving (Eq, Ord, Read, Show)
-
-_VariableDeclarator = Core.Name "hydra.java.syntax.VariableDeclarator"
-
-_VariableDeclarator_id = Core.Name "id"
-
-_VariableDeclarator_initializer = Core.Name "initializer"
-
-data VariableDeclaratorId =
-  VariableDeclaratorId {
-    variableDeclaratorIdIdentifier :: Identifier,
-    variableDeclaratorIdDims :: (Maybe Dims)}
-  deriving (Eq, Ord, Read, Show)
-
-_VariableDeclaratorId = Core.Name "hydra.java.syntax.VariableDeclaratorId"
-
-_VariableDeclaratorId_identifier = Core.Name "identifier"
-
-_VariableDeclaratorId_dims = Core.Name "dims"
-
-data VariableInitializer =
-  VariableInitializerExpression Expression |
-  VariableInitializerArrayInitializer ArrayInitializer
-  deriving (Eq, Ord, Read, Show)
-
-_VariableInitializer = Core.Name "hydra.java.syntax.VariableInitializer"
-
-_VariableInitializer_expression = Core.Name "expression"
-
-_VariableInitializer_arrayInitializer = Core.Name "arrayInitializer"
-
--- | A Type which does not allow annotations
-newtype UnannType =
-  UnannType {
-    unUnannType :: Type}
-  deriving (Eq, Ord, Read, Show)
-
-_UnannType = Core.Name "hydra.java.syntax.UnannType"
-
--- | A ClassType which does not allow annotations
-newtype UnannClassType =
-  UnannClassType {
-    unUnannClassType :: ClassType}
-  deriving (Eq, Ord, Read, Show)
-
-_UnannClassType = Core.Name "hydra.java.syntax.UnannClassType"
-
-data MethodDeclaration =
-  MethodDeclaration {
-    -- | Note: simple methods cannot have annotations
-    methodDeclarationAnnotations :: [Annotation],
-    methodDeclarationModifiers :: [MethodModifier],
-    methodDeclarationHeader :: MethodHeader,
-    methodDeclarationBody :: MethodBody}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodDeclaration = Core.Name "hydra.java.syntax.MethodDeclaration"
-
-_MethodDeclaration_annotations = Core.Name "annotations"
-
-_MethodDeclaration_modifiers = Core.Name "modifiers"
-
-_MethodDeclaration_header = Core.Name "header"
-
-_MethodDeclaration_body = Core.Name "body"
-
-data MethodModifier =
-  MethodModifierAnnotation Annotation |
-  MethodModifierPublic |
-  MethodModifierProtected |
-  MethodModifierPrivate |
-  MethodModifierAbstract |
-  MethodModifierStatic |
-  MethodModifierFinal |
-  MethodModifierSynchronized |
-  MethodModifierNative |
-  MethodModifierStrictfp
-  deriving (Eq, Ord, Read, Show)
-
-_MethodModifier = Core.Name "hydra.java.syntax.MethodModifier"
-
-_MethodModifier_annotation = Core.Name "annotation"
-
-_MethodModifier_public = Core.Name "public"
-
-_MethodModifier_protected = Core.Name "protected"
-
-_MethodModifier_private = Core.Name "private"
-
-_MethodModifier_abstract = Core.Name "abstract"
-
-_MethodModifier_static = Core.Name "static"
-
-_MethodModifier_final = Core.Name "final"
-
-_MethodModifier_synchronized = Core.Name "synchronized"
-
-_MethodModifier_native = Core.Name "native"
-
-_MethodModifier_strictfp = Core.Name "strictfp"
-
-data MethodHeader =
-  MethodHeader {
-    methodHeaderParameters :: [TypeParameter],
-    methodHeaderResult :: Result,
-    methodHeaderDeclarator :: MethodDeclarator,
-    methodHeaderThrows :: (Maybe Throws)}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodHeader = Core.Name "hydra.java.syntax.MethodHeader"
-
-_MethodHeader_parameters = Core.Name "parameters"
-
-_MethodHeader_result = Core.Name "result"
-
-_MethodHeader_declarator = Core.Name "declarator"
-
-_MethodHeader_throws = Core.Name "throws"
-
-data Result =
-  ResultType UnannType |
-  ResultVoid
-  deriving (Eq, Ord, Read, Show)
-
-_Result = Core.Name "hydra.java.syntax.Result"
-
-_Result_type = Core.Name "type"
-
-_Result_void = Core.Name "void"
-
-data MethodDeclarator =
-  MethodDeclarator {
-    methodDeclaratorIdentifier :: Identifier,
-    methodDeclaratorReceiverParameter :: (Maybe ReceiverParameter),
-    methodDeclaratorFormalParameters :: [FormalParameter]}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodDeclarator = Core.Name "hydra.java.syntax.MethodDeclarator"
-
-_MethodDeclarator_identifier = Core.Name "identifier"
-
-_MethodDeclarator_receiverParameter = Core.Name "receiverParameter"
-
-_MethodDeclarator_formalParameters = Core.Name "formalParameters"
-
-data ReceiverParameter =
-  ReceiverParameter {
-    receiverParameterAnnotations :: [Annotation],
-    receiverParameterUnannType :: UnannType,
-    receiverParameterIdentifier :: (Maybe Identifier)}
-  deriving (Eq, Ord, Read, Show)
-
-_ReceiverParameter = Core.Name "hydra.java.syntax.ReceiverParameter"
-
-_ReceiverParameter_annotations = Core.Name "annotations"
-
-_ReceiverParameter_unannType = Core.Name "unannType"
-
-_ReceiverParameter_identifier = Core.Name "identifier"
-
-data FormalParameter =
-  FormalParameterSimple FormalParameter_Simple |
-  FormalParameterVariableArity VariableArityParameter
-  deriving (Eq, Ord, Read, Show)
-
-_FormalParameter = Core.Name "hydra.java.syntax.FormalParameter"
-
-_FormalParameter_simple = Core.Name "simple"
-
-_FormalParameter_variableArity = Core.Name "variableArity"
-
-data FormalParameter_Simple =
-  FormalParameter_Simple {
-    formalParameter_SimpleModifiers :: [VariableModifier],
-    formalParameter_SimpleType :: UnannType,
-    formalParameter_SimpleId :: VariableDeclaratorId}
-  deriving (Eq, Ord, Read, Show)
-
-_FormalParameter_Simple = Core.Name "hydra.java.syntax.FormalParameter_Simple"
-
-_FormalParameter_Simple_modifiers = Core.Name "modifiers"
-
-_FormalParameter_Simple_type = Core.Name "type"
-
-_FormalParameter_Simple_id = Core.Name "id"
-
-data VariableArityParameter =
-  VariableArityParameter {
-    variableArityParameterModifiers :: [VariableModifier],
-    variableArityParameterType :: UnannType,
-    variableArityParameterAnnotations :: [Annotation],
-    variableArityParameterIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_VariableArityParameter = Core.Name "hydra.java.syntax.VariableArityParameter"
-
-_VariableArityParameter_modifiers = Core.Name "modifiers"
-
-_VariableArityParameter_type = Core.Name "type"
-
-_VariableArityParameter_annotations = Core.Name "annotations"
-
-_VariableArityParameter_identifier = Core.Name "identifier"
-
-data VariableModifier =
-  VariableModifierAnnotation Annotation |
-  VariableModifierFinal
-  deriving (Eq, Ord, Read, Show)
-
-_VariableModifier = Core.Name "hydra.java.syntax.VariableModifier"
-
-_VariableModifier_annotation = Core.Name "annotation"
-
-_VariableModifier_final = Core.Name "final"
-
-newtype Throws =
-  Throws {
-    unThrows :: [ExceptionType]}
-  deriving (Eq, Ord, Read, Show)
-
-_Throws = Core.Name "hydra.java.syntax.Throws"
-
-data ExceptionType =
-  ExceptionTypeClass ClassType |
-  ExceptionTypeVariable TypeVariable
-  deriving (Eq, Ord, Read, Show)
-
-_ExceptionType = Core.Name "hydra.java.syntax.ExceptionType"
-
-_ExceptionType_class = Core.Name "class"
-
-_ExceptionType_variable = Core.Name "variable"
-
-data MethodBody =
-  MethodBodyBlock Block |
-  MethodBodyNone
-  deriving (Eq, Ord, Read, Show)
-
-_MethodBody = Core.Name "hydra.java.syntax.MethodBody"
-
-_MethodBody_block = Core.Name "block"
-
-_MethodBody_none = Core.Name "none"
-
-newtype InstanceInitializer =
-  InstanceInitializer {
-    unInstanceInitializer :: Block}
-  deriving (Eq, Ord, Read, Show)
-
-_InstanceInitializer = Core.Name "hydra.java.syntax.InstanceInitializer"
-
-newtype StaticInitializer =
-  StaticInitializer {
-    unStaticInitializer :: Block}
-  deriving (Eq, Ord, Read, Show)
-
-_StaticInitializer = Core.Name "hydra.java.syntax.StaticInitializer"
-
-data ConstructorDeclaration =
-  ConstructorDeclaration {
-    constructorDeclarationModifiers :: [ConstructorModifier],
-    constructorDeclarationConstructor :: ConstructorDeclarator,
-    constructorDeclarationThrows :: (Maybe Throws),
-    constructorDeclarationBody :: ConstructorBody}
-  deriving (Eq, Ord, Read, Show)
-
-_ConstructorDeclaration = Core.Name "hydra.java.syntax.ConstructorDeclaration"
-
-_ConstructorDeclaration_modifiers = Core.Name "modifiers"
-
-_ConstructorDeclaration_constructor = Core.Name "constructor"
-
-_ConstructorDeclaration_throws = Core.Name "throws"
-
-_ConstructorDeclaration_body = Core.Name "body"
-
-data ConstructorModifier =
-  ConstructorModifierAnnotation Annotation |
-  ConstructorModifierPublic |
-  ConstructorModifierProtected |
-  ConstructorModifierPrivate
-  deriving (Eq, Ord, Read, Show)
-
-_ConstructorModifier = Core.Name "hydra.java.syntax.ConstructorModifier"
-
-_ConstructorModifier_annotation = Core.Name "annotation"
-
-_ConstructorModifier_public = Core.Name "public"
-
-_ConstructorModifier_protected = Core.Name "protected"
-
-_ConstructorModifier_private = Core.Name "private"
-
-data ConstructorDeclarator =
-  ConstructorDeclarator {
-    constructorDeclaratorParameters :: [TypeParameter],
-    constructorDeclaratorName :: SimpleTypeName,
-    constructorDeclaratorReceiverParameter :: (Maybe ReceiverParameter),
-    constructorDeclaratorFormalParameters :: [FormalParameter]}
-  deriving (Eq, Ord, Read, Show)
-
-_ConstructorDeclarator = Core.Name "hydra.java.syntax.ConstructorDeclarator"
-
-_ConstructorDeclarator_parameters = Core.Name "parameters"
-
-_ConstructorDeclarator_name = Core.Name "name"
-
-_ConstructorDeclarator_receiverParameter = Core.Name "receiverParameter"
-
-_ConstructorDeclarator_formalParameters = Core.Name "formalParameters"
-
-newtype SimpleTypeName =
-  SimpleTypeName {
-    unSimpleTypeName :: TypeIdentifier}
-  deriving (Eq, Ord, Read, Show)
-
-_SimpleTypeName = Core.Name "hydra.java.syntax.SimpleTypeName"
-
-data ConstructorBody =
-  ConstructorBody {
-    constructorBodyInvocation :: (Maybe ExplicitConstructorInvocation),
-    constructorBodyStatements :: [BlockStatement]}
-  deriving (Eq, Ord, Read, Show)
-
-_ConstructorBody = Core.Name "hydra.java.syntax.ConstructorBody"
-
-_ConstructorBody_invocation = Core.Name "invocation"
-
-_ConstructorBody_statements = Core.Name "statements"
-
-data ExplicitConstructorInvocation =
-  ExplicitConstructorInvocation {
-    explicitConstructorInvocationTypeArguments :: [TypeArgument],
-    explicitConstructorInvocationArguments :: [Expression],
-    explicitConstructorInvocationVariant :: ExplicitConstructorInvocation_Variant}
-  deriving (Eq, Ord, Read, Show)
-
-_ExplicitConstructorInvocation = Core.Name "hydra.java.syntax.ExplicitConstructorInvocation"
-
-_ExplicitConstructorInvocation_typeArguments = Core.Name "typeArguments"
-
-_ExplicitConstructorInvocation_arguments = Core.Name "arguments"
-
-_ExplicitConstructorInvocation_variant = Core.Name "variant"
-
-data ExplicitConstructorInvocation_Variant =
-  ExplicitConstructorInvocation_VariantThis |
-  ExplicitConstructorInvocation_VariantSuper (Maybe ExpressionName) |
-  ExplicitConstructorInvocation_VariantPrimary Primary
-  deriving (Eq, Ord, Read, Show)
-
-_ExplicitConstructorInvocation_Variant = Core.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant"
-
-_ExplicitConstructorInvocation_Variant_this = Core.Name "this"
-
-_ExplicitConstructorInvocation_Variant_super = Core.Name "super"
-
-_ExplicitConstructorInvocation_Variant_primary = Core.Name "primary"
-
-data EnumDeclaration =
-  EnumDeclaration {
-    enumDeclarationModifiers :: [ClassModifier],
-    enumDeclarationIdentifier :: TypeIdentifier,
-    enumDeclarationImplements :: [InterfaceType],
-    enumDeclarationBody :: EnumBody}
-  deriving (Eq, Ord, Read, Show)
-
-_EnumDeclaration = Core.Name "hydra.java.syntax.EnumDeclaration"
-
-_EnumDeclaration_modifiers = Core.Name "modifiers"
-
-_EnumDeclaration_identifier = Core.Name "identifier"
-
-_EnumDeclaration_implements = Core.Name "implements"
-
-_EnumDeclaration_body = Core.Name "body"
-
-newtype EnumBody =
-  EnumBody {
-    unEnumBody :: [EnumBody_Element]}
-  deriving (Eq, Ord, Read, Show)
-
-_EnumBody = Core.Name "hydra.java.syntax.EnumBody"
-
-data EnumBody_Element =
-  EnumBody_Element {
-    enumBody_ElementConstants :: [EnumConstant],
-    enumBody_ElementBodyDeclarations :: [ClassBodyDeclaration]}
-  deriving (Eq, Ord, Read, Show)
-
-_EnumBody_Element = Core.Name "hydra.java.syntax.EnumBody_Element"
-
-_EnumBody_Element_constants = Core.Name "constants"
-
-_EnumBody_Element_bodyDeclarations = Core.Name "bodyDeclarations"
-
-data EnumConstant =
-  EnumConstant {
-    enumConstantModifiers :: [EnumConstantModifier],
-    enumConstantIdentifier :: Identifier,
-    enumConstantArguments :: (Maybe [Expression]),
-    enumConstantBody :: (Maybe ClassBody)}
-  deriving (Eq, Ord, Read, Show)
-
-_EnumConstant = Core.Name "hydra.java.syntax.EnumConstant"
-
-_EnumConstant_modifiers = Core.Name "modifiers"
-
-_EnumConstant_identifier = Core.Name "identifier"
-
-_EnumConstant_arguments = Core.Name "arguments"
-
-_EnumConstant_body = Core.Name "body"
-
-newtype EnumConstantModifier =
-  EnumConstantModifier {
-    unEnumConstantModifier :: Annotation}
-  deriving (Eq, Ord, Read, Show)
-
-_EnumConstantModifier = Core.Name "hydra.java.syntax.EnumConstantModifier"
-
-data RecordDeclaration =
-  RecordDeclaration {
-    recordDeclarationModifiers :: [ClassModifier],
-    recordDeclarationIdentifier :: TypeIdentifier,
-    recordDeclarationParameters :: [TypeParameter],
-    recordDeclarationHeader :: RecordHeader,
-    recordDeclarationImplements :: [InterfaceType],
-    recordDeclarationBody :: RecordBody}
-  deriving (Eq, Ord, Read, Show)
-
-_RecordDeclaration = Core.Name "hydra.java.syntax.RecordDeclaration"
-
-_RecordDeclaration_modifiers = Core.Name "modifiers"
-
-_RecordDeclaration_identifier = Core.Name "identifier"
-
-_RecordDeclaration_parameters = Core.Name "parameters"
-
-_RecordDeclaration_header = Core.Name "header"
-
-_RecordDeclaration_implements = Core.Name "implements"
-
-_RecordDeclaration_body = Core.Name "body"
-
-newtype RecordHeader =
-  RecordHeader {
-    unRecordHeader :: [RecordComponent]}
-  deriving (Eq, Ord, Read, Show)
-
-_RecordHeader = Core.Name "hydra.java.syntax.RecordHeader"
-
-data RecordComponent =
-  RecordComponentSimple RecordComponent_Simple |
-  RecordComponentVariableArity VariableArityRecordComponent
-  deriving (Eq, Ord, Read, Show)
-
-_RecordComponent = Core.Name "hydra.java.syntax.RecordComponent"
-
-_RecordComponent_simple = Core.Name "simple"
-
-_RecordComponent_variableArity = Core.Name "variableArity"
-
-data RecordComponent_Simple =
-  RecordComponent_Simple {
-    recordComponent_SimpleModifiers :: [RecordComponentModifier],
-    recordComponent_SimpleType :: UnannType,
-    recordComponent_SimpleIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_RecordComponent_Simple = Core.Name "hydra.java.syntax.RecordComponent_Simple"
-
-_RecordComponent_Simple_modifiers = Core.Name "modifiers"
-
-_RecordComponent_Simple_type = Core.Name "type"
-
-_RecordComponent_Simple_identifier = Core.Name "identifier"
-
-data VariableArityRecordComponent =
-  VariableArityRecordComponent {
-    variableArityRecordComponentModifiers :: [RecordComponentModifier],
-    variableArityRecordComponentType :: UnannType,
-    variableArityRecordComponentAnnotations :: [Annotation],
-    variableArityRecordComponentIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_VariableArityRecordComponent = Core.Name "hydra.java.syntax.VariableArityRecordComponent"
-
-_VariableArityRecordComponent_modifiers = Core.Name "modifiers"
-
-_VariableArityRecordComponent_type = Core.Name "type"
-
-_VariableArityRecordComponent_annotations = Core.Name "annotations"
-
-_VariableArityRecordComponent_identifier = Core.Name "identifier"
-
-newtype RecordComponentModifier =
-  RecordComponentModifier {
-    unRecordComponentModifier :: Annotation}
-  deriving (Eq, Ord, Read, Show)
-
-_RecordComponentModifier = Core.Name "hydra.java.syntax.RecordComponentModifier"
-
-newtype RecordBody =
-  RecordBody {
-    unRecordBody :: [RecordBodyDeclaration]}
-  deriving (Eq, Ord, Read, Show)
-
-_RecordBody = Core.Name "hydra.java.syntax.RecordBody"
-
-data RecordBodyDeclaration =
-  RecordBodyDeclarationClassBody ClassBodyDeclaration |
-  RecordBodyDeclarationCompactConstructor CompactConstructorDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_RecordBodyDeclaration = Core.Name "hydra.java.syntax.RecordBodyDeclaration"
-
-_RecordBodyDeclaration_classBody = Core.Name "classBody"
-
-_RecordBodyDeclaration_compactConstructor = Core.Name "compactConstructor"
-
-data CompactConstructorDeclaration =
-  CompactConstructorDeclaration {
-    compactConstructorDeclarationModifiers :: [ConstructorModifier],
-    compactConstructorDeclarationName :: SimpleTypeName,
-    compactConstructorDeclarationBody :: ConstructorBody}
-  deriving (Eq, Ord, Read, Show)
-
-_CompactConstructorDeclaration = Core.Name "hydra.java.syntax.CompactConstructorDeclaration"
-
-_CompactConstructorDeclaration_modifiers = Core.Name "modifiers"
-
-_CompactConstructorDeclaration_name = Core.Name "name"
-
-_CompactConstructorDeclaration_body = Core.Name "body"
-
-data InterfaceDeclaration =
-  InterfaceDeclarationNormalInterface NormalInterfaceDeclaration |
-  InterfaceDeclarationAnnotationInterface AnnotationInterfaceDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceDeclaration = Core.Name "hydra.java.syntax.InterfaceDeclaration"
-
-_InterfaceDeclaration_normalInterface = Core.Name "normalInterface"
-
-_InterfaceDeclaration_annotationInterface = Core.Name "annotationInterface"
-
-data NormalInterfaceDeclaration =
-  NormalInterfaceDeclaration {
-    normalInterfaceDeclarationModifiers :: [InterfaceModifier],
-    normalInterfaceDeclarationIdentifier :: TypeIdentifier,
-    normalInterfaceDeclarationParameters :: [TypeParameter],
-    normalInterfaceDeclarationExtends :: [InterfaceType],
-    normalInterfaceDeclarationPermits :: [TypeName],
-    normalInterfaceDeclarationBody :: InterfaceBody}
-  deriving (Eq, Ord, Read, Show)
-
-_NormalInterfaceDeclaration = Core.Name "hydra.java.syntax.NormalInterfaceDeclaration"
-
-_NormalInterfaceDeclaration_modifiers = Core.Name "modifiers"
-
-_NormalInterfaceDeclaration_identifier = Core.Name "identifier"
-
-_NormalInterfaceDeclaration_parameters = Core.Name "parameters"
-
-_NormalInterfaceDeclaration_extends = Core.Name "extends"
-
-_NormalInterfaceDeclaration_permits = Core.Name "permits"
-
-_NormalInterfaceDeclaration_body = Core.Name "body"
-
-data InterfaceModifier =
-  InterfaceModifierAnnotation Annotation |
-  InterfaceModifierPublic |
-  InterfaceModifierProtected |
-  InterfaceModifierPrivate |
-  InterfaceModifierAbstract |
-  InterfaceModifierStatic |
-  InterfaceModifierSealed |
-  InterfaceModifierNonSealed |
-  InterfaceModifierStrictfp
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceModifier = Core.Name "hydra.java.syntax.InterfaceModifier"
-
-_InterfaceModifier_annotation = Core.Name "annotation"
-
-_InterfaceModifier_public = Core.Name "public"
-
-_InterfaceModifier_protected = Core.Name "protected"
-
-_InterfaceModifier_private = Core.Name "private"
-
-_InterfaceModifier_abstract = Core.Name "abstract"
-
-_InterfaceModifier_static = Core.Name "static"
-
-_InterfaceModifier_sealed = Core.Name "sealed"
-
-_InterfaceModifier_nonSealed = Core.Name "nonSealed"
-
-_InterfaceModifier_strictfp = Core.Name "strictfp"
-
-newtype InterfaceBody =
-  InterfaceBody {
-    unInterfaceBody :: [InterfaceMemberDeclarationWithComments]}
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceBody = Core.Name "hydra.java.syntax.InterfaceBody"
-
-data InterfaceMemberDeclaration =
-  InterfaceMemberDeclarationConstant ConstantDeclaration |
-  InterfaceMemberDeclarationInterfaceMethod InterfaceMethodDeclaration |
-  InterfaceMemberDeclarationClass ClassDeclaration |
-  InterfaceMemberDeclarationInterface InterfaceDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceMemberDeclaration = Core.Name "hydra.java.syntax.InterfaceMemberDeclaration"
-
-_InterfaceMemberDeclaration_constant = Core.Name "constant"
-
-_InterfaceMemberDeclaration_interfaceMethod = Core.Name "interfaceMethod"
-
-_InterfaceMemberDeclaration_class = Core.Name "class"
-
-_InterfaceMemberDeclaration_interface = Core.Name "interface"
-
-data InterfaceMemberDeclarationWithComments =
-  InterfaceMemberDeclarationWithComments {
-    interfaceMemberDeclarationWithCommentsValue :: InterfaceMemberDeclaration,
-    interfaceMemberDeclarationWithCommentsComments :: (Maybe String)}
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceMemberDeclarationWithComments = Core.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"
-
-_InterfaceMemberDeclarationWithComments_value = Core.Name "value"
-
-_InterfaceMemberDeclarationWithComments_comments = Core.Name "comments"
-
-data ConstantDeclaration =
-  ConstantDeclaration {
-    constantDeclarationModifiers :: [ConstantModifier],
-    constantDeclarationType :: UnannType,
-    constantDeclarationVariables :: [VariableDeclarator]}
-  deriving (Eq, Ord, Read, Show)
-
-_ConstantDeclaration = Core.Name "hydra.java.syntax.ConstantDeclaration"
-
-_ConstantDeclaration_modifiers = Core.Name "modifiers"
-
-_ConstantDeclaration_type = Core.Name "type"
-
-_ConstantDeclaration_variables = Core.Name "variables"
-
-data ConstantModifier =
-  ConstantModifierAnnotation Annotation |
-  ConstantModifierPublic |
-  ConstantModifierStatic |
-  ConstantModifierFinal
-  deriving (Eq, Ord, Read, Show)
-
-_ConstantModifier = Core.Name "hydra.java.syntax.ConstantModifier"
-
-_ConstantModifier_annotation = Core.Name "annotation"
-
-_ConstantModifier_public = Core.Name "public"
-
-_ConstantModifier_static = Core.Name "static"
-
-_ConstantModifier_final = Core.Name "final"
-
-data InterfaceMethodDeclaration =
-  InterfaceMethodDeclaration {
-    interfaceMethodDeclarationModifiers :: [InterfaceMethodModifier],
-    interfaceMethodDeclarationHeader :: MethodHeader,
-    interfaceMethodDeclarationBody :: MethodBody}
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceMethodDeclaration = Core.Name "hydra.java.syntax.InterfaceMethodDeclaration"
-
-_InterfaceMethodDeclaration_modifiers = Core.Name "modifiers"
-
-_InterfaceMethodDeclaration_header = Core.Name "header"
-
-_InterfaceMethodDeclaration_body = Core.Name "body"
-
-data InterfaceMethodModifier =
-  InterfaceMethodModifierAnnotation Annotation |
-  InterfaceMethodModifierPublic |
-  InterfaceMethodModifierPrivate |
-  InterfaceMethodModifierAbstract |
-  InterfaceMethodModifierDefault |
-  InterfaceMethodModifierStatic |
-  InterfaceMethodModifierStrictfp
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceMethodModifier = Core.Name "hydra.java.syntax.InterfaceMethodModifier"
-
-_InterfaceMethodModifier_annotation = Core.Name "annotation"
-
-_InterfaceMethodModifier_public = Core.Name "public"
-
-_InterfaceMethodModifier_private = Core.Name "private"
-
-_InterfaceMethodModifier_abstract = Core.Name "abstract"
-
-_InterfaceMethodModifier_default = Core.Name "default"
-
-_InterfaceMethodModifier_static = Core.Name "static"
-
-_InterfaceMethodModifier_strictfp = Core.Name "strictfp"
-
-data AnnotationInterfaceDeclaration =
-  AnnotationInterfaceDeclaration {
-    annotationInterfaceDeclarationModifiers :: [InterfaceModifier],
-    annotationInterfaceDeclarationIdentifier :: TypeIdentifier,
-    annotationInterfaceDeclarationBody :: AnnotationInterfaceBody}
-  deriving (Eq, Ord, Read, Show)
-
-_AnnotationInterfaceDeclaration = Core.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"
-
-_AnnotationInterfaceDeclaration_modifiers = Core.Name "modifiers"
-
-_AnnotationInterfaceDeclaration_identifier = Core.Name "identifier"
-
-_AnnotationInterfaceDeclaration_body = Core.Name "body"
-
-newtype AnnotationInterfaceBody =
-  AnnotationInterfaceBody {
-    unAnnotationInterfaceBody :: [AnnotationInterfaceMemberDeclaration]}
-  deriving (Eq, Ord, Read, Show)
-
-_AnnotationInterfaceBody = Core.Name "hydra.java.syntax.AnnotationInterfaceBody"
-
-data AnnotationInterfaceMemberDeclaration =
-  AnnotationInterfaceMemberDeclarationAnnotationInterface AnnotationInterfaceElementDeclaration |
-  AnnotationInterfaceMemberDeclarationConstant ConstantDeclaration |
-  AnnotationInterfaceMemberDeclarationClass ClassDeclaration |
-  AnnotationInterfaceMemberDeclarationInterface InterfaceDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_AnnotationInterfaceMemberDeclaration = Core.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"
-
-_AnnotationInterfaceMemberDeclaration_annotationInterface = Core.Name "annotationInterface"
-
-_AnnotationInterfaceMemberDeclaration_constant = Core.Name "constant"
-
-_AnnotationInterfaceMemberDeclaration_class = Core.Name "class"
-
-_AnnotationInterfaceMemberDeclaration_interface = Core.Name "interface"
-
-data AnnotationInterfaceElementDeclaration =
-  AnnotationInterfaceElementDeclaration {
-    annotationInterfaceElementDeclarationModifiers :: [AnnotationInterfaceElementModifier],
-    annotationInterfaceElementDeclarationType :: UnannType,
-    annotationInterfaceElementDeclarationIdentifier :: Identifier,
-    annotationInterfaceElementDeclarationDims :: (Maybe Dims),
-    annotationInterfaceElementDeclarationDefault :: (Maybe DefaultValue)}
-  deriving (Eq, Ord, Read, Show)
-
-_AnnotationInterfaceElementDeclaration = Core.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"
-
-_AnnotationInterfaceElementDeclaration_modifiers = Core.Name "modifiers"
-
-_AnnotationInterfaceElementDeclaration_type = Core.Name "type"
-
-_AnnotationInterfaceElementDeclaration_identifier = Core.Name "identifier"
-
-_AnnotationInterfaceElementDeclaration_dims = Core.Name "dims"
-
-_AnnotationInterfaceElementDeclaration_default = Core.Name "default"
-
-data AnnotationInterfaceElementModifier =
-  AnnotationInterfaceElementModifierAnnotation Annotation |
-  AnnotationInterfaceElementModifierPublic |
-  AnnotationInterfaceElementModifierAbstract
-  deriving (Eq, Ord, Read, Show)
-
-_AnnotationInterfaceElementModifier = Core.Name "hydra.java.syntax.AnnotationInterfaceElementModifier"
-
-_AnnotationInterfaceElementModifier_annotation = Core.Name "annotation"
-
-_AnnotationInterfaceElementModifier_public = Core.Name "public"
-
-_AnnotationInterfaceElementModifier_abstract = Core.Name "abstract"
-
-newtype DefaultValue =
-  DefaultValue {
-    unDefaultValue :: ElementValue}
-  deriving (Eq, Ord, Read, Show)
-
-_DefaultValue = Core.Name "hydra.java.syntax.DefaultValue"
-
-data Annotation =
-  AnnotationNormal NormalAnnotation |
-  AnnotationMarker MarkerAnnotation |
-  AnnotationSingleElement SingleElementAnnotation
-  deriving (Eq, Ord, Read, Show)
-
-_Annotation = Core.Name "hydra.java.syntax.Annotation"
-
-_Annotation_normal = Core.Name "normal"
-
-_Annotation_marker = Core.Name "marker"
-
-_Annotation_singleElement = Core.Name "singleElement"
-
-data NormalAnnotation =
-  NormalAnnotation {
-    normalAnnotationTypeName :: TypeName,
-    normalAnnotationPairs :: [ElementValuePair]}
-  deriving (Eq, Ord, Read, Show)
-
-_NormalAnnotation = Core.Name "hydra.java.syntax.NormalAnnotation"
-
-_NormalAnnotation_typeName = Core.Name "typeName"
-
-_NormalAnnotation_pairs = Core.Name "pairs"
-
-data ElementValuePair =
-  ElementValuePair {
-    elementValuePairKey :: Identifier,
-    elementValuePairValue :: ElementValue}
-  deriving (Eq, Ord, Read, Show)
-
-_ElementValuePair = Core.Name "hydra.java.syntax.ElementValuePair"
-
-_ElementValuePair_key = Core.Name "key"
-
-_ElementValuePair_value = Core.Name "value"
-
-data ElementValue =
-  ElementValueConditionalExpression ConditionalExpression |
-  ElementValueElementValueArrayInitializer ElementValueArrayInitializer |
-  ElementValueAnnotation Annotation
-  deriving (Eq, Ord, Read, Show)
-
-_ElementValue = Core.Name "hydra.java.syntax.ElementValue"
-
-_ElementValue_conditionalExpression = Core.Name "conditionalExpression"
-
-_ElementValue_elementValueArrayInitializer = Core.Name "elementValueArrayInitializer"
-
-_ElementValue_annotation = Core.Name "annotation"
-
-newtype ElementValueArrayInitializer =
-  ElementValueArrayInitializer {
-    unElementValueArrayInitializer :: [ElementValue]}
-  deriving (Eq, Ord, Read, Show)
-
-_ElementValueArrayInitializer = Core.Name "hydra.java.syntax.ElementValueArrayInitializer"
-
-newtype MarkerAnnotation =
-  MarkerAnnotation {
-    unMarkerAnnotation :: TypeName}
-  deriving (Eq, Ord, Read, Show)
-
-_MarkerAnnotation = Core.Name "hydra.java.syntax.MarkerAnnotation"
-
-data SingleElementAnnotation =
-  SingleElementAnnotation {
-    singleElementAnnotationName :: TypeName,
-    singleElementAnnotationValue :: (Maybe ElementValue)}
-  deriving (Eq, Ord, Read, Show)
-
-_SingleElementAnnotation = Core.Name "hydra.java.syntax.SingleElementAnnotation"
-
-_SingleElementAnnotation_name = Core.Name "name"
-
-_SingleElementAnnotation_value = Core.Name "value"
-
-newtype ArrayInitializer =
-  ArrayInitializer {
-    unArrayInitializer :: [[VariableInitializer]]}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayInitializer = Core.Name "hydra.java.syntax.ArrayInitializer"
-
-newtype Block =
-  Block {
-    unBlock :: [BlockStatement]}
-  deriving (Eq, Ord, Read, Show)
-
-_Block = Core.Name "hydra.java.syntax.Block"
-
-data BlockStatement =
-  BlockStatementLocalVariableDeclaration LocalVariableDeclarationStatement |
-  BlockStatementLocalClassOrInterface LocalClassOrInterfaceDeclaration |
-  BlockStatementStatement Statement
-  deriving (Eq, Ord, Read, Show)
-
-_BlockStatement = Core.Name "hydra.java.syntax.BlockStatement"
-
-_BlockStatement_localVariableDeclaration = Core.Name "localVariableDeclaration"
-
-_BlockStatement_localClassOrInterface = Core.Name "localClassOrInterface"
-
-_BlockStatement_statement = Core.Name "statement"
-
-data LocalClassOrInterfaceDeclaration =
-  LocalClassOrInterfaceDeclarationClass ClassDeclaration |
-  LocalClassOrInterfaceDeclarationNormalInterface NormalInterfaceDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_LocalClassOrInterfaceDeclaration = Core.Name "hydra.java.syntax.LocalClassOrInterfaceDeclaration"
-
-_LocalClassOrInterfaceDeclaration_class = Core.Name "class"
-
-_LocalClassOrInterfaceDeclaration_normalInterface = Core.Name "normalInterface"
-
-newtype LocalVariableDeclarationStatement =
-  LocalVariableDeclarationStatement {
-    unLocalVariableDeclarationStatement :: LocalVariableDeclaration}
-  deriving (Eq, Ord, Read, Show)
-
-_LocalVariableDeclarationStatement = Core.Name "hydra.java.syntax.LocalVariableDeclarationStatement"
-
-data LocalVariableDeclaration =
-  LocalVariableDeclaration {
-    localVariableDeclarationModifiers :: [VariableModifier],
-    localVariableDeclarationType :: LocalVariableType,
-    localVariableDeclarationDeclarators :: [VariableDeclarator]}
-  deriving (Eq, Ord, Read, Show)
-
-_LocalVariableDeclaration = Core.Name "hydra.java.syntax.LocalVariableDeclaration"
-
-_LocalVariableDeclaration_modifiers = Core.Name "modifiers"
-
-_LocalVariableDeclaration_type = Core.Name "type"
-
-_LocalVariableDeclaration_declarators = Core.Name "declarators"
-
-data LocalVariableType =
-  LocalVariableTypeType UnannType |
-  LocalVariableTypeVar
-  deriving (Eq, Ord, Read, Show)
-
-_LocalVariableType = Core.Name "hydra.java.syntax.LocalVariableType"
-
-_LocalVariableType_type = Core.Name "type"
-
-_LocalVariableType_var = Core.Name "var"
-
-data Statement =
-  StatementWithoutTrailing StatementWithoutTrailingSubstatement |
-  StatementLabeled LabeledStatement |
-  StatementIfThen IfThenStatement |
-  StatementIfThenElse IfThenElseStatement |
-  StatementWhile WhileStatement |
-  StatementFor ForStatement
-  deriving (Eq, Ord, Read, Show)
-
-_Statement = Core.Name "hydra.java.syntax.Statement"
-
-_Statement_withoutTrailing = Core.Name "withoutTrailing"
-
-_Statement_labeled = Core.Name "labeled"
-
-_Statement_ifThen = Core.Name "ifThen"
-
-_Statement_ifThenElse = Core.Name "ifThenElse"
-
-_Statement_while = Core.Name "while"
-
-_Statement_for = Core.Name "for"
-
-data StatementNoShortIf =
-  StatementNoShortIfWithoutTrailing StatementWithoutTrailingSubstatement |
-  StatementNoShortIfLabeled LabeledStatementNoShortIf |
-  StatementNoShortIfIfThenElse IfThenElseStatementNoShortIf |
-  StatementNoShortIfWhile WhileStatementNoShortIf |
-  StatementNoShortIfFor ForStatementNoShortIf
-  deriving (Eq, Ord, Read, Show)
-
-_StatementNoShortIf = Core.Name "hydra.java.syntax.StatementNoShortIf"
-
-_StatementNoShortIf_withoutTrailing = Core.Name "withoutTrailing"
-
-_StatementNoShortIf_labeled = Core.Name "labeled"
-
-_StatementNoShortIf_ifThenElse = Core.Name "ifThenElse"
-
-_StatementNoShortIf_while = Core.Name "while"
-
-_StatementNoShortIf_for = Core.Name "for"
-
-data StatementWithoutTrailingSubstatement =
-  StatementWithoutTrailingSubstatementBlock Block |
-  StatementWithoutTrailingSubstatementEmpty |
-  StatementWithoutTrailingSubstatementExpression ExpressionStatement |
-  StatementWithoutTrailingSubstatementAssert AssertStatement |
-  StatementWithoutTrailingSubstatementSwitch SwitchStatement |
-  StatementWithoutTrailingSubstatementDo DoStatement |
-  StatementWithoutTrailingSubstatementBreak BreakStatement |
-  StatementWithoutTrailingSubstatementContinue ContinueStatement |
-  StatementWithoutTrailingSubstatementReturn ReturnStatement |
-  StatementWithoutTrailingSubstatementSynchronized SynchronizedStatement |
-  StatementWithoutTrailingSubstatementThrow ThrowStatement |
-  StatementWithoutTrailingSubstatementTry TryStatement |
-  StatementWithoutTrailingSubstatementYield YieldStatement
-  deriving (Eq, Ord, Read, Show)
-
-_StatementWithoutTrailingSubstatement = Core.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"
-
-_StatementWithoutTrailingSubstatement_block = Core.Name "block"
-
-_StatementWithoutTrailingSubstatement_empty = Core.Name "empty"
-
-_StatementWithoutTrailingSubstatement_expression = Core.Name "expression"
-
-_StatementWithoutTrailingSubstatement_assert = Core.Name "assert"
-
-_StatementWithoutTrailingSubstatement_switch = Core.Name "switch"
-
-_StatementWithoutTrailingSubstatement_do = Core.Name "do"
-
-_StatementWithoutTrailingSubstatement_break = Core.Name "break"
-
-_StatementWithoutTrailingSubstatement_continue = Core.Name "continue"
-
-_StatementWithoutTrailingSubstatement_return = Core.Name "return"
-
-_StatementWithoutTrailingSubstatement_synchronized = Core.Name "synchronized"
-
-_StatementWithoutTrailingSubstatement_throw = Core.Name "throw"
-
-_StatementWithoutTrailingSubstatement_try = Core.Name "try"
-
-_StatementWithoutTrailingSubstatement_yield = Core.Name "yield"
-
-data LabeledStatement =
-  LabeledStatement {
-    labeledStatementIdentifier :: Identifier,
-    labeledStatementStatement :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_LabeledStatement = Core.Name "hydra.java.syntax.LabeledStatement"
-
-_LabeledStatement_identifier = Core.Name "identifier"
-
-_LabeledStatement_statement = Core.Name "statement"
-
-data LabeledStatementNoShortIf =
-  LabeledStatementNoShortIf {
-    labeledStatementNoShortIfIdentifier :: Identifier,
-    labeledStatementNoShortIfStatement :: StatementNoShortIf}
-  deriving (Eq, Ord, Read, Show)
-
-_LabeledStatementNoShortIf = Core.Name "hydra.java.syntax.LabeledStatementNoShortIf"
-
-_LabeledStatementNoShortIf_identifier = Core.Name "identifier"
-
-_LabeledStatementNoShortIf_statement = Core.Name "statement"
-
-newtype ExpressionStatement =
-  ExpressionStatement {
-    unExpressionStatement :: StatementExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_ExpressionStatement = Core.Name "hydra.java.syntax.ExpressionStatement"
-
-data StatementExpression =
-  StatementExpressionAssignment Assignment |
-  StatementExpressionPreIncrement PreIncrementExpression |
-  StatementExpressionPreDecrement PreDecrementExpression |
-  StatementExpressionPostIncrement PostIncrementExpression |
-  StatementExpressionPostDecrement PostDecrementExpression |
-  StatementExpressionMethodInvocation MethodInvocation |
-  StatementExpressionClassInstanceCreation ClassInstanceCreationExpression
-  deriving (Eq, Ord, Read, Show)
-
-_StatementExpression = Core.Name "hydra.java.syntax.StatementExpression"
-
-_StatementExpression_assignment = Core.Name "assignment"
-
-_StatementExpression_preIncrement = Core.Name "preIncrement"
-
-_StatementExpression_preDecrement = Core.Name "preDecrement"
-
-_StatementExpression_postIncrement = Core.Name "postIncrement"
-
-_StatementExpression_postDecrement = Core.Name "postDecrement"
-
-_StatementExpression_methodInvocation = Core.Name "methodInvocation"
-
-_StatementExpression_classInstanceCreation = Core.Name "classInstanceCreation"
-
-data IfThenStatement =
-  IfThenStatement {
-    ifThenStatementExpression :: Expression,
-    ifThenStatementStatement :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_IfThenStatement = Core.Name "hydra.java.syntax.IfThenStatement"
-
-_IfThenStatement_expression = Core.Name "expression"
-
-_IfThenStatement_statement = Core.Name "statement"
-
-data IfThenElseStatement =
-  IfThenElseStatement {
-    ifThenElseStatementCond :: (Maybe Expression),
-    ifThenElseStatementThen :: StatementNoShortIf,
-    ifThenElseStatementElse :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_IfThenElseStatement = Core.Name "hydra.java.syntax.IfThenElseStatement"
-
-_IfThenElseStatement_cond = Core.Name "cond"
-
-_IfThenElseStatement_then = Core.Name "then"
-
-_IfThenElseStatement_else = Core.Name "else"
-
-data IfThenElseStatementNoShortIf =
-  IfThenElseStatementNoShortIf {
-    ifThenElseStatementNoShortIfCond :: (Maybe Expression),
-    ifThenElseStatementNoShortIfThen :: StatementNoShortIf,
-    ifThenElseStatementNoShortIfElse :: StatementNoShortIf}
-  deriving (Eq, Ord, Read, Show)
-
-_IfThenElseStatementNoShortIf = Core.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"
-
-_IfThenElseStatementNoShortIf_cond = Core.Name "cond"
-
-_IfThenElseStatementNoShortIf_then = Core.Name "then"
-
-_IfThenElseStatementNoShortIf_else = Core.Name "else"
-
-data AssertStatement =
-  AssertStatementSingle Expression |
-  AssertStatementPair AssertStatement_Pair
-  deriving (Eq, Ord, Read, Show)
-
-_AssertStatement = Core.Name "hydra.java.syntax.AssertStatement"
-
-_AssertStatement_single = Core.Name "single"
-
-_AssertStatement_pair = Core.Name "pair"
-
-data AssertStatement_Pair =
-  AssertStatement_Pair {
-    assertStatement_PairFirst :: Expression,
-    assertStatement_PairSecond :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_AssertStatement_Pair = Core.Name "hydra.java.syntax.AssertStatement_Pair"
-
-_AssertStatement_Pair_first = Core.Name "first"
-
-_AssertStatement_Pair_second = Core.Name "second"
-
-data SwitchStatement =
-  SwitchStatement {
-    switchStatementCond :: Expression,
-    switchStatementBlock :: SwitchBlock}
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchStatement = Core.Name "hydra.java.syntax.SwitchStatement"
-
-_SwitchStatement_cond = Core.Name "cond"
-
-_SwitchStatement_block = Core.Name "block"
-
-data SwitchBlock =
-  SwitchBlockRules [SwitchRule] |
-  SwitchBlockLegacy SwitchBlock_Legacy
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchBlock = Core.Name "hydra.java.syntax.SwitchBlock"
-
-_SwitchBlock_rules = Core.Name "rules"
-
-_SwitchBlock_legacy = Core.Name "legacy"
-
-data SwitchBlock_Legacy =
-  SwitchBlock_Legacy {
-    switchBlock_LegacyGroups :: [SwitchBlockStatementGroup],
-    switchBlock_LegacyTrailingLabels :: [SwitchLabel]}
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchBlock_Legacy = Core.Name "hydra.java.syntax.SwitchBlock_Legacy"
-
-_SwitchBlock_Legacy_groups = Core.Name "groups"
-
-_SwitchBlock_Legacy_trailingLabels = Core.Name "trailingLabels"
-
-data SwitchRule =
-  SwitchRule {
-    switchRuleLabel :: SwitchLabel,
-    switchRuleBody :: SwitchRule_Body}
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchRule = Core.Name "hydra.java.syntax.SwitchRule"
-
-_SwitchRule_label = Core.Name "label"
-
-_SwitchRule_body = Core.Name "body"
-
-data SwitchRule_Body =
-  SwitchRule_BodyExpression Expression |
-  SwitchRule_BodyBlock Block |
-  SwitchRule_BodyThrow ThrowStatement
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchRule_Body = Core.Name "hydra.java.syntax.SwitchRule_Body"
-
-_SwitchRule_Body_expression = Core.Name "expression"
-
-_SwitchRule_Body_block = Core.Name "block"
-
-_SwitchRule_Body_throw = Core.Name "throw"
-
-data SwitchBlockStatementGroup =
-  SwitchBlockStatementGroup {
-    switchBlockStatementGroupLabels :: [SwitchLabel],
-    switchBlockStatementGroupStatements :: [BlockStatement]}
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchBlockStatementGroup = Core.Name "hydra.java.syntax.SwitchBlockStatementGroup"
-
-_SwitchBlockStatementGroup_labels = Core.Name "labels"
-
-_SwitchBlockStatementGroup_statements = Core.Name "statements"
-
-data SwitchLabel =
-  SwitchLabelCase [CaseConstant] |
-  SwitchLabelNull Bool |
-  SwitchLabelCasePattern CasePattern |
-  SwitchLabelDefault
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchLabel = Core.Name "hydra.java.syntax.SwitchLabel"
-
-_SwitchLabel_case = Core.Name "case"
-
-_SwitchLabel_null = Core.Name "null"
-
-_SwitchLabel_casePattern = Core.Name "casePattern"
-
-_SwitchLabel_default = Core.Name "default"
-
-newtype CaseConstant =
-  CaseConstant {
-    unCaseConstant :: ConditionalExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_CaseConstant = Core.Name "hydra.java.syntax.CaseConstant"
-
-data CasePattern =
-  CasePattern {
-    casePatternPattern :: Pattern,
-    casePatternGuard :: (Maybe Guard)}
-  deriving (Eq, Ord, Read, Show)
-
-_CasePattern = Core.Name "hydra.java.syntax.CasePattern"
-
-_CasePattern_pattern = Core.Name "pattern"
-
-_CasePattern_guard = Core.Name "guard"
-
-newtype Guard =
-  Guard {
-    unGuard :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_Guard = Core.Name "hydra.java.syntax.Guard"
-
-data Pattern =
-  PatternType TypePattern |
-  PatternRecord RecordPattern
-  deriving (Eq, Ord, Read, Show)
-
-_Pattern = Core.Name "hydra.java.syntax.Pattern"
-
-_Pattern_type = Core.Name "type"
-
-_Pattern_record = Core.Name "record"
-
-newtype TypePattern =
-  TypePattern {
-    unTypePattern :: LocalVariableDeclaration}
-  deriving (Eq, Ord, Read, Show)
-
-_TypePattern = Core.Name "hydra.java.syntax.TypePattern"
-
-data RecordPattern =
-  RecordPattern {
-    recordPatternType :: ReferenceType,
-    recordPatternPatterns :: [Pattern]}
-  deriving (Eq, Ord, Read, Show)
-
-_RecordPattern = Core.Name "hydra.java.syntax.RecordPattern"
-
-_RecordPattern_type = Core.Name "type"
-
-_RecordPattern_patterns = Core.Name "patterns"
-
-data WhileStatement =
-  WhileStatement {
-    whileStatementCond :: (Maybe Expression),
-    whileStatementBody :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_WhileStatement = Core.Name "hydra.java.syntax.WhileStatement"
-
-_WhileStatement_cond = Core.Name "cond"
-
-_WhileStatement_body = Core.Name "body"
-
-data WhileStatementNoShortIf =
-  WhileStatementNoShortIf {
-    whileStatementNoShortIfCond :: (Maybe Expression),
-    whileStatementNoShortIfBody :: StatementNoShortIf}
-  deriving (Eq, Ord, Read, Show)
-
-_WhileStatementNoShortIf = Core.Name "hydra.java.syntax.WhileStatementNoShortIf"
-
-_WhileStatementNoShortIf_cond = Core.Name "cond"
-
-_WhileStatementNoShortIf_body = Core.Name "body"
-
-data DoStatement =
-  DoStatement {
-    doStatementBody :: Statement,
-    doStatementCond :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_DoStatement = Core.Name "hydra.java.syntax.DoStatement"
-
-_DoStatement_body = Core.Name "body"
-
-_DoStatement_cond = Core.Name "cond"
-
-data ForStatement =
-  ForStatementBasic BasicForStatement |
-  ForStatementEnhanced EnhancedForStatement
-  deriving (Eq, Ord, Read, Show)
-
-_ForStatement = Core.Name "hydra.java.syntax.ForStatement"
-
-_ForStatement_basic = Core.Name "basic"
-
-_ForStatement_enhanced = Core.Name "enhanced"
-
-data ForStatementNoShortIf =
-  ForStatementNoShortIfBasic BasicForStatementNoShortIf |
-  ForStatementNoShortIfEnhanced EnhancedForStatementNoShortIf
-  deriving (Eq, Ord, Read, Show)
-
-_ForStatementNoShortIf = Core.Name "hydra.java.syntax.ForStatementNoShortIf"
-
-_ForStatementNoShortIf_basic = Core.Name "basic"
-
-_ForStatementNoShortIf_enhanced = Core.Name "enhanced"
-
-data BasicForStatement =
-  BasicForStatement {
-    basicForStatementCond :: ForCond,
-    basicForStatementBody :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_BasicForStatement = Core.Name "hydra.java.syntax.BasicForStatement"
-
-_BasicForStatement_cond = Core.Name "cond"
-
-_BasicForStatement_body = Core.Name "body"
-
-data ForCond =
-  ForCond {
-    forCondInit :: (Maybe ForInit),
-    forCondCond :: (Maybe Expression),
-    forCondUpdate :: (Maybe ForUpdate)}
-  deriving (Eq, Ord, Read, Show)
-
-_ForCond = Core.Name "hydra.java.syntax.ForCond"
-
-_ForCond_init = Core.Name "init"
-
-_ForCond_cond = Core.Name "cond"
-
-_ForCond_update = Core.Name "update"
-
-data BasicForStatementNoShortIf =
-  BasicForStatementNoShortIf {
-    basicForStatementNoShortIfCond :: ForCond,
-    basicForStatementNoShortIfBody :: StatementNoShortIf}
-  deriving (Eq, Ord, Read, Show)
-
-_BasicForStatementNoShortIf = Core.Name "hydra.java.syntax.BasicForStatementNoShortIf"
-
-_BasicForStatementNoShortIf_cond = Core.Name "cond"
-
-_BasicForStatementNoShortIf_body = Core.Name "body"
-
-data ForInit =
-  ForInitStatements [StatementExpression] |
-  ForInitLocalVariable LocalVariableDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_ForInit = Core.Name "hydra.java.syntax.ForInit"
-
-_ForInit_statements = Core.Name "statements"
-
-_ForInit_localVariable = Core.Name "localVariable"
-
-newtype ForUpdate =
-  ForUpdate {
-    unForUpdate :: [StatementExpression]}
-  deriving (Eq, Ord, Read, Show)
-
-_ForUpdate = Core.Name "hydra.java.syntax.ForUpdate"
-
-data EnhancedForStatement =
-  EnhancedForStatement {
-    enhancedForStatementCond :: EnhancedForCond,
-    enhancedForStatementBody :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_EnhancedForStatement = Core.Name "hydra.java.syntax.EnhancedForStatement"
-
-_EnhancedForStatement_cond = Core.Name "cond"
-
-_EnhancedForStatement_body = Core.Name "body"
-
-data EnhancedForCond =
-  EnhancedForCond {
-    enhancedForCondDeclaration :: LocalVariableDeclaration,
-    enhancedForCondExpression :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_EnhancedForCond = Core.Name "hydra.java.syntax.EnhancedForCond"
-
-_EnhancedForCond_declaration = Core.Name "declaration"
-
-_EnhancedForCond_expression = Core.Name "expression"
-
-data EnhancedForStatementNoShortIf =
-  EnhancedForStatementNoShortIf {
-    enhancedForStatementNoShortIfCond :: EnhancedForCond,
-    enhancedForStatementNoShortIfBody :: StatementNoShortIf}
-  deriving (Eq, Ord, Read, Show)
-
-_EnhancedForStatementNoShortIf = Core.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"
-
-_EnhancedForStatementNoShortIf_cond = Core.Name "cond"
-
-_EnhancedForStatementNoShortIf_body = Core.Name "body"
-
-newtype BreakStatement =
-  BreakStatement {
-    unBreakStatement :: (Maybe Identifier)}
-  deriving (Eq, Ord, Read, Show)
-
-_BreakStatement = Core.Name "hydra.java.syntax.BreakStatement"
-
-newtype YieldStatement =
-  YieldStatement {
-    unYieldStatement :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_YieldStatement = Core.Name "hydra.java.syntax.YieldStatement"
-
-newtype ContinueStatement =
-  ContinueStatement {
-    unContinueStatement :: (Maybe Identifier)}
-  deriving (Eq, Ord, Read, Show)
-
-_ContinueStatement = Core.Name "hydra.java.syntax.ContinueStatement"
-
-newtype ReturnStatement =
-  ReturnStatement {
-    unReturnStatement :: (Maybe Expression)}
-  deriving (Eq, Ord, Read, Show)
-
-_ReturnStatement = Core.Name "hydra.java.syntax.ReturnStatement"
-
-newtype ThrowStatement =
-  ThrowStatement {
-    unThrowStatement :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_ThrowStatement = Core.Name "hydra.java.syntax.ThrowStatement"
-
-data SynchronizedStatement =
-  SynchronizedStatement {
-    synchronizedStatementExpression :: Expression,
-    synchronizedStatementBlock :: Block}
-  deriving (Eq, Ord, Read, Show)
-
-_SynchronizedStatement = Core.Name "hydra.java.syntax.SynchronizedStatement"
-
-_SynchronizedStatement_expression = Core.Name "expression"
-
-_SynchronizedStatement_block = Core.Name "block"
-
-data TryStatement =
-  TryStatementSimple TryStatement_Simple |
-  TryStatementWithFinally TryStatement_WithFinally |
-  TryStatementWithResources TryWithResourcesStatement
-  deriving (Eq, Ord, Read, Show)
-
-_TryStatement = Core.Name "hydra.java.syntax.TryStatement"
-
-_TryStatement_simple = Core.Name "simple"
-
-_TryStatement_withFinally = Core.Name "withFinally"
-
-_TryStatement_withResources = Core.Name "withResources"
-
-data TryStatement_Simple =
-  TryStatement_Simple {
-    tryStatement_SimpleBlock :: Block,
-    tryStatement_SimpleCatches :: Catches}
-  deriving (Eq, Ord, Read, Show)
-
-_TryStatement_Simple = Core.Name "hydra.java.syntax.TryStatement_Simple"
-
-_TryStatement_Simple_block = Core.Name "block"
-
-_TryStatement_Simple_catches = Core.Name "catches"
-
-data TryStatement_WithFinally =
-  TryStatement_WithFinally {
-    tryStatement_WithFinallyBlock :: Block,
-    tryStatement_WithFinallyCatches :: (Maybe Catches),
-    tryStatement_WithFinallyFinally :: Finally}
-  deriving (Eq, Ord, Read, Show)
-
-_TryStatement_WithFinally = Core.Name "hydra.java.syntax.TryStatement_WithFinally"
-
-_TryStatement_WithFinally_block = Core.Name "block"
-
-_TryStatement_WithFinally_catches = Core.Name "catches"
-
-_TryStatement_WithFinally_finally = Core.Name "finally"
-
-newtype Catches =
-  Catches {
-    unCatches :: [CatchClause]}
-  deriving (Eq, Ord, Read, Show)
-
-_Catches = Core.Name "hydra.java.syntax.Catches"
-
-data CatchClause =
-  CatchClause {
-    catchClauseParameter :: (Maybe CatchFormalParameter),
-    catchClauseBlock :: Block}
-  deriving (Eq, Ord, Read, Show)
-
-_CatchClause = Core.Name "hydra.java.syntax.CatchClause"
-
-_CatchClause_parameter = Core.Name "parameter"
-
-_CatchClause_block = Core.Name "block"
-
-data CatchFormalParameter =
-  CatchFormalParameter {
-    catchFormalParameterModifiers :: [VariableModifier],
-    catchFormalParameterType :: CatchType,
-    catchFormalParameterId :: VariableDeclaratorId}
-  deriving (Eq, Ord, Read, Show)
-
-_CatchFormalParameter = Core.Name "hydra.java.syntax.CatchFormalParameter"
-
-_CatchFormalParameter_modifiers = Core.Name "modifiers"
-
-_CatchFormalParameter_type = Core.Name "type"
-
-_CatchFormalParameter_id = Core.Name "id"
-
-data CatchType =
-  CatchType {
-    catchTypeType :: UnannClassType,
-    catchTypeTypes :: [ClassType]}
-  deriving (Eq, Ord, Read, Show)
-
-_CatchType = Core.Name "hydra.java.syntax.CatchType"
-
-_CatchType_type = Core.Name "type"
-
-_CatchType_types = Core.Name "types"
-
-newtype Finally =
-  Finally {
-    unFinally :: Block}
-  deriving (Eq, Ord, Read, Show)
-
-_Finally = Core.Name "hydra.java.syntax.Finally"
-
-data TryWithResourcesStatement =
-  TryWithResourcesStatement {
-    tryWithResourcesStatementResourceSpecification :: ResourceSpecification,
-    tryWithResourcesStatementBlock :: Block,
-    tryWithResourcesStatementCatches :: (Maybe Catches),
-    tryWithResourcesStatementFinally :: (Maybe Finally)}
-  deriving (Eq, Ord, Read, Show)
-
-_TryWithResourcesStatement = Core.Name "hydra.java.syntax.TryWithResourcesStatement"
-
-_TryWithResourcesStatement_resourceSpecification = Core.Name "resourceSpecification"
-
-_TryWithResourcesStatement_block = Core.Name "block"
-
-_TryWithResourcesStatement_catches = Core.Name "catches"
-
-_TryWithResourcesStatement_finally = Core.Name "finally"
-
-newtype ResourceSpecification =
-  ResourceSpecification {
-    unResourceSpecification :: [Resource]}
-  deriving (Eq, Ord, Read, Show)
-
-_ResourceSpecification = Core.Name "hydra.java.syntax.ResourceSpecification"
-
-data Resource =
-  ResourceLocal Resource_Local |
-  ResourceVariable VariableAccess
-  deriving (Eq, Ord, Read, Show)
-
-_Resource = Core.Name "hydra.java.syntax.Resource"
-
-_Resource_local = Core.Name "local"
-
-_Resource_variable = Core.Name "variable"
-
-data Resource_Local =
-  Resource_Local {
-    resource_LocalModifiers :: [VariableModifier],
-    resource_LocalType :: LocalVariableType,
-    resource_LocalIdentifier :: Identifier,
-    resource_LocalExpression :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_Resource_Local = Core.Name "hydra.java.syntax.Resource_Local"
-
-_Resource_Local_modifiers = Core.Name "modifiers"
-
-_Resource_Local_type = Core.Name "type"
-
-_Resource_Local_identifier = Core.Name "identifier"
-
-_Resource_Local_expression = Core.Name "expression"
-
-data VariableAccess =
-  VariableAccessExpressionName ExpressionName |
-  VariableAccessFieldAccess FieldAccess
-  deriving (Eq, Ord, Read, Show)
-
-_VariableAccess = Core.Name "hydra.java.syntax.VariableAccess"
-
-_VariableAccess_expressionName = Core.Name "expressionName"
-
-_VariableAccess_fieldAccess = Core.Name "fieldAccess"
-
-data Primary =
-  PrimaryNoNewArray PrimaryNoNewArrayExpression |
-  PrimaryArrayCreation ArrayCreationExpression
-  deriving (Eq, Ord, Read, Show)
-
-_Primary = Core.Name "hydra.java.syntax.Primary"
-
-_Primary_noNewArray = Core.Name "noNewArray"
-
-_Primary_arrayCreation = Core.Name "arrayCreation"
-
-data PrimaryNoNewArrayExpression =
-  PrimaryNoNewArrayExpressionLiteral Literal |
-  PrimaryNoNewArrayExpressionClassLiteral ClassLiteral |
-  PrimaryNoNewArrayExpressionThis |
-  PrimaryNoNewArrayExpressionDotThis TypeName |
-  PrimaryNoNewArrayExpressionParens Expression |
-  PrimaryNoNewArrayExpressionClassInstance ClassInstanceCreationExpression |
-  PrimaryNoNewArrayExpressionFieldAccess FieldAccess |
-  PrimaryNoNewArrayExpressionArrayAccess ArrayAccess |
-  PrimaryNoNewArrayExpressionMethodInvocation MethodInvocation |
-  PrimaryNoNewArrayExpressionMethodReference MethodReference
-  deriving (Eq, Ord, Read, Show)
-
-_PrimaryNoNewArrayExpression = Core.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"
-
-_PrimaryNoNewArrayExpression_literal = Core.Name "literal"
-
-_PrimaryNoNewArrayExpression_classLiteral = Core.Name "classLiteral"
-
-_PrimaryNoNewArrayExpression_this = Core.Name "this"
-
-_PrimaryNoNewArrayExpression_dotThis = Core.Name "dotThis"
-
-_PrimaryNoNewArrayExpression_parens = Core.Name "parens"
-
-_PrimaryNoNewArrayExpression_classInstance = Core.Name "classInstance"
-
-_PrimaryNoNewArrayExpression_fieldAccess = Core.Name "fieldAccess"
-
-_PrimaryNoNewArrayExpression_arrayAccess = Core.Name "arrayAccess"
-
-_PrimaryNoNewArrayExpression_methodInvocation = Core.Name "methodInvocation"
-
-_PrimaryNoNewArrayExpression_methodReference = Core.Name "methodReference"
-
-data ClassLiteral =
-  ClassLiteralType TypeNameArray |
-  ClassLiteralNumericType NumericTypeArray |
-  ClassLiteralBoolean BooleanArray |
-  ClassLiteralVoid
-  deriving (Eq, Ord, Read, Show)
-
-_ClassLiteral = Core.Name "hydra.java.syntax.ClassLiteral"
-
-_ClassLiteral_type = Core.Name "type"
-
-_ClassLiteral_numericType = Core.Name "numericType"
-
-_ClassLiteral_boolean = Core.Name "boolean"
-
-_ClassLiteral_void = Core.Name "void"
-
-data TypeNameArray =
-  TypeNameArraySimple TypeName |
-  TypeNameArrayArray TypeNameArray
-  deriving (Eq, Ord, Read, Show)
-
-_TypeNameArray = Core.Name "hydra.java.syntax.TypeNameArray"
-
-_TypeNameArray_simple = Core.Name "simple"
-
-_TypeNameArray_array = Core.Name "array"
-
-data NumericTypeArray =
-  NumericTypeArraySimple NumericType |
-  NumericTypeArrayArray NumericTypeArray
-  deriving (Eq, Ord, Read, Show)
-
-_NumericTypeArray = Core.Name "hydra.java.syntax.NumericTypeArray"
-
-_NumericTypeArray_simple = Core.Name "simple"
-
-_NumericTypeArray_array = Core.Name "array"
-
-data BooleanArray =
-  BooleanArraySimple |
-  BooleanArrayArray BooleanArray
-  deriving (Eq, Ord, Read, Show)
-
-_BooleanArray = Core.Name "hydra.java.syntax.BooleanArray"
-
-_BooleanArray_simple = Core.Name "simple"
-
-_BooleanArray_array = Core.Name "array"
-
-data ClassInstanceCreationExpression =
-  ClassInstanceCreationExpression {
-    classInstanceCreationExpressionQualifier :: (Maybe ClassInstanceCreationExpression_Qualifier),
-    classInstanceCreationExpressionExpression :: UnqualifiedClassInstanceCreationExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_ClassInstanceCreationExpression = Core.Name "hydra.java.syntax.ClassInstanceCreationExpression"
-
-_ClassInstanceCreationExpression_qualifier = Core.Name "qualifier"
-
-_ClassInstanceCreationExpression_expression = Core.Name "expression"
-
-data ClassInstanceCreationExpression_Qualifier =
-  ClassInstanceCreationExpression_QualifierExpression ExpressionName |
-  ClassInstanceCreationExpression_QualifierPrimary Primary
-  deriving (Eq, Ord, Read, Show)
-
-_ClassInstanceCreationExpression_Qualifier = Core.Name "hydra.java.syntax.ClassInstanceCreationExpression_Qualifier"
-
-_ClassInstanceCreationExpression_Qualifier_expression = Core.Name "expression"
-
-_ClassInstanceCreationExpression_Qualifier_primary = Core.Name "primary"
-
-data UnqualifiedClassInstanceCreationExpression =
-  UnqualifiedClassInstanceCreationExpression {
-    unqualifiedClassInstanceCreationExpressionTypeArguments :: [TypeArgument],
-    unqualifiedClassInstanceCreationExpressionClassOrInterface :: ClassOrInterfaceTypeToInstantiate,
-    unqualifiedClassInstanceCreationExpressionArguments :: [Expression],
-    unqualifiedClassInstanceCreationExpressionBody :: (Maybe ClassBody)}
-  deriving (Eq, Ord, Read, Show)
-
-_UnqualifiedClassInstanceCreationExpression = Core.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"
-
-_UnqualifiedClassInstanceCreationExpression_typeArguments = Core.Name "typeArguments"
-
-_UnqualifiedClassInstanceCreationExpression_classOrInterface = Core.Name "classOrInterface"
-
-_UnqualifiedClassInstanceCreationExpression_arguments = Core.Name "arguments"
-
-_UnqualifiedClassInstanceCreationExpression_body = Core.Name "body"
-
-data ClassOrInterfaceTypeToInstantiate =
-  ClassOrInterfaceTypeToInstantiate {
-    classOrInterfaceTypeToInstantiateIdentifiers :: [AnnotatedIdentifier],
-    classOrInterfaceTypeToInstantiateTypeArguments :: (Maybe TypeArgumentsOrDiamond)}
-  deriving (Eq, Ord, Read, Show)
-
-_ClassOrInterfaceTypeToInstantiate = Core.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"
-
-_ClassOrInterfaceTypeToInstantiate_identifiers = Core.Name "identifiers"
-
-_ClassOrInterfaceTypeToInstantiate_typeArguments = Core.Name "typeArguments"
-
-data AnnotatedIdentifier =
-  AnnotatedIdentifier {
-    annotatedIdentifierAnnotations :: [Annotation],
-    annotatedIdentifierIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_AnnotatedIdentifier = Core.Name "hydra.java.syntax.AnnotatedIdentifier"
-
-_AnnotatedIdentifier_annotations = Core.Name "annotations"
-
-_AnnotatedIdentifier_identifier = Core.Name "identifier"
-
-data TypeArgumentsOrDiamond =
-  TypeArgumentsOrDiamondArguments [TypeArgument] |
-  TypeArgumentsOrDiamondDiamond
-  deriving (Eq, Ord, Read, Show)
-
-_TypeArgumentsOrDiamond = Core.Name "hydra.java.syntax.TypeArgumentsOrDiamond"
-
-_TypeArgumentsOrDiamond_arguments = Core.Name "arguments"
-
-_TypeArgumentsOrDiamond_diamond = Core.Name "diamond"
-
-data FieldAccess =
-  FieldAccess {
-    fieldAccessQualifier :: FieldAccess_Qualifier,
-    fieldAccessIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_FieldAccess = Core.Name "hydra.java.syntax.FieldAccess"
-
-_FieldAccess_qualifier = Core.Name "qualifier"
-
-_FieldAccess_identifier = Core.Name "identifier"
-
-data FieldAccess_Qualifier =
-  FieldAccess_QualifierPrimary Primary |
-  FieldAccess_QualifierSuper |
-  FieldAccess_QualifierTyped TypeName
-  deriving (Eq, Ord, Read, Show)
-
-_FieldAccess_Qualifier = Core.Name "hydra.java.syntax.FieldAccess_Qualifier"
-
-_FieldAccess_Qualifier_primary = Core.Name "primary"
-
-_FieldAccess_Qualifier_super = Core.Name "super"
-
-_FieldAccess_Qualifier_typed = Core.Name "typed"
-
-data ArrayAccess =
-  ArrayAccess {
-    arrayAccessExpression :: (Maybe Expression),
-    arrayAccessVariant :: ArrayAccess_Variant}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayAccess = Core.Name "hydra.java.syntax.ArrayAccess"
-
-_ArrayAccess_expression = Core.Name "expression"
-
-_ArrayAccess_variant = Core.Name "variant"
-
-data ArrayAccess_Variant =
-  ArrayAccess_VariantName ExpressionName |
-  ArrayAccess_VariantPrimary PrimaryNoNewArrayExpression |
-  ArrayAccess_VariantArrayCreationWithInitializer ArrayCreationExpressionWithInitializer
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayAccess_Variant = Core.Name "hydra.java.syntax.ArrayAccess_Variant"
-
-_ArrayAccess_Variant_name = Core.Name "name"
-
-_ArrayAccess_Variant_primary = Core.Name "primary"
-
-_ArrayAccess_Variant_arrayCreationWithInitializer = Core.Name "arrayCreationWithInitializer"
-
-data MethodInvocation =
-  MethodInvocation {
-    methodInvocationHeader :: MethodInvocation_Header,
-    methodInvocationArguments :: [Expression]}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodInvocation = Core.Name "hydra.java.syntax.MethodInvocation"
-
-_MethodInvocation_header = Core.Name "header"
-
-_MethodInvocation_arguments = Core.Name "arguments"
-
-data MethodInvocation_Header =
-  MethodInvocation_HeaderSimple MethodName |
-  MethodInvocation_HeaderComplex MethodInvocation_Complex
-  deriving (Eq, Ord, Read, Show)
-
-_MethodInvocation_Header = Core.Name "hydra.java.syntax.MethodInvocation_Header"
-
-_MethodInvocation_Header_simple = Core.Name "simple"
-
-_MethodInvocation_Header_complex = Core.Name "complex"
-
-data MethodInvocation_Complex =
-  MethodInvocation_Complex {
-    methodInvocation_ComplexVariant :: MethodInvocation_Variant,
-    methodInvocation_ComplexTypeArguments :: [TypeArgument],
-    methodInvocation_ComplexIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodInvocation_Complex = Core.Name "hydra.java.syntax.MethodInvocation_Complex"
-
-_MethodInvocation_Complex_variant = Core.Name "variant"
-
-_MethodInvocation_Complex_typeArguments = Core.Name "typeArguments"
-
-_MethodInvocation_Complex_identifier = Core.Name "identifier"
-
-data MethodInvocation_Variant =
-  MethodInvocation_VariantType TypeName |
-  MethodInvocation_VariantExpression ExpressionName |
-  MethodInvocation_VariantPrimary Primary |
-  MethodInvocation_VariantSuper |
-  MethodInvocation_VariantTypeSuper TypeName
-  deriving (Eq, Ord, Read, Show)
-
-_MethodInvocation_Variant = Core.Name "hydra.java.syntax.MethodInvocation_Variant"
-
-_MethodInvocation_Variant_type = Core.Name "type"
-
-_MethodInvocation_Variant_expression = Core.Name "expression"
-
-_MethodInvocation_Variant_primary = Core.Name "primary"
-
-_MethodInvocation_Variant_super = Core.Name "super"
-
-_MethodInvocation_Variant_typeSuper = Core.Name "typeSuper"
-
-data MethodReference =
-  MethodReferenceExpression MethodReference_Expression |
-  MethodReferencePrimary MethodReference_Primary |
-  MethodReferenceReferenceType MethodReference_ReferenceType |
-  MethodReferenceSuper MethodReference_Super |
-  MethodReferenceNew MethodReference_New |
-  MethodReferenceArray MethodReference_Array
-  deriving (Eq, Ord, Read, Show)
-
-_MethodReference = Core.Name "hydra.java.syntax.MethodReference"
-
-_MethodReference_expression = Core.Name "expression"
-
-_MethodReference_primary = Core.Name "primary"
-
-_MethodReference_referenceType = Core.Name "referenceType"
-
-_MethodReference_super = Core.Name "super"
-
-_MethodReference_new = Core.Name "new"
-
-_MethodReference_array = Core.Name "array"
-
-data MethodReference_Expression =
-  MethodReference_Expression {
-    methodReference_ExpressionName :: ExpressionName,
-    methodReference_ExpressionTypeArguments :: [TypeArgument],
-    methodReference_ExpressionIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodReference_Expression = Core.Name "hydra.java.syntax.MethodReference_Expression"
-
-_MethodReference_Expression_name = Core.Name "name"
-
-_MethodReference_Expression_typeArguments = Core.Name "typeArguments"
-
-_MethodReference_Expression_identifier = Core.Name "identifier"
-
-data MethodReference_Primary =
-  MethodReference_Primary {
-    methodReference_PrimaryPrimary :: Primary,
-    methodReference_PrimaryTypeArguments :: [TypeArgument],
-    methodReference_PrimaryIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodReference_Primary = Core.Name "hydra.java.syntax.MethodReference_Primary"
-
-_MethodReference_Primary_primary = Core.Name "primary"
-
-_MethodReference_Primary_typeArguments = Core.Name "typeArguments"
-
-_MethodReference_Primary_identifier = Core.Name "identifier"
-
-data MethodReference_ReferenceType =
-  MethodReference_ReferenceType {
-    methodReference_ReferenceTypeReferenceType :: ReferenceType,
-    methodReference_ReferenceTypeTypeArguments :: [TypeArgument],
-    methodReference_ReferenceTypeIdentifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodReference_ReferenceType = Core.Name "hydra.java.syntax.MethodReference_ReferenceType"
-
-_MethodReference_ReferenceType_referenceType = Core.Name "referenceType"
-
-_MethodReference_ReferenceType_typeArguments = Core.Name "typeArguments"
-
-_MethodReference_ReferenceType_identifier = Core.Name "identifier"
-
-data MethodReference_Super =
-  MethodReference_Super {
-    methodReference_SuperTypeArguments :: [TypeArgument],
-    methodReference_SuperIdentifier :: Identifier,
-    methodReference_SuperSuper :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodReference_Super = Core.Name "hydra.java.syntax.MethodReference_Super"
-
-_MethodReference_Super_typeArguments = Core.Name "typeArguments"
-
-_MethodReference_Super_identifier = Core.Name "identifier"
-
-_MethodReference_Super_super = Core.Name "super"
-
-data MethodReference_New =
-  MethodReference_New {
-    methodReference_NewClassType :: ClassType,
-    methodReference_NewTypeArguments :: [TypeArgument]}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodReference_New = Core.Name "hydra.java.syntax.MethodReference_New"
-
-_MethodReference_New_classType = Core.Name "classType"
-
-_MethodReference_New_typeArguments = Core.Name "typeArguments"
-
-newtype MethodReference_Array =
-  MethodReference_Array {
-    unMethodReference_Array :: ArrayType}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodReference_Array = Core.Name "hydra.java.syntax.MethodReference_Array"
-
-data ArrayCreationExpression =
-  ArrayCreationExpressionNoInit ArrayCreationExpressionWithoutInitializer |
-  ArrayCreationExpressionWithInit ArrayCreationExpressionWithInitializer
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayCreationExpression = Core.Name "hydra.java.syntax.ArrayCreationExpression"
-
-_ArrayCreationExpression_noInit = Core.Name "noInit"
-
-_ArrayCreationExpression_withInit = Core.Name "withInit"
-
-data ArrayCreationExpressionWithoutInitializer =
-  ArrayCreationExpressionWithoutInitializerPrimitive ArrayCreationExpressionWithoutInitializer_Primitive |
-  ArrayCreationExpressionWithoutInitializerClassOrInterface ArrayCreationExpressionWithoutInitializer_ClassOrInterface
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayCreationExpressionWithoutInitializer = Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer"
-
-_ArrayCreationExpressionWithoutInitializer_primitive = Core.Name "primitive"
-
-_ArrayCreationExpressionWithoutInitializer_classOrInterface = Core.Name "classOrInterface"
-
-data ArrayCreationExpressionWithoutInitializer_Primitive =
-  ArrayCreationExpressionWithoutInitializer_Primitive {
-    arrayCreationExpressionWithoutInitializer_PrimitiveType :: PrimitiveTypeWithAnnotations,
-    arrayCreationExpressionWithoutInitializer_PrimitiveDimExprs :: [DimExpr],
-    arrayCreationExpressionWithoutInitializer_PrimitiveDims :: (Maybe Dims)}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayCreationExpressionWithoutInitializer_Primitive =
-    Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"
-
-_ArrayCreationExpressionWithoutInitializer_Primitive_type = Core.Name "type"
-
-_ArrayCreationExpressionWithoutInitializer_Primitive_dimExprs = Core.Name "dimExprs"
-
-_ArrayCreationExpressionWithoutInitializer_Primitive_dims = Core.Name "dims"
-
-data ArrayCreationExpressionWithoutInitializer_ClassOrInterface =
-  ArrayCreationExpressionWithoutInitializer_ClassOrInterface {
-    arrayCreationExpressionWithoutInitializer_ClassOrInterfaceType :: ClassOrInterfaceType,
-    arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDimExprs :: [DimExpr],
-    arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDims :: (Maybe Dims)}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayCreationExpressionWithoutInitializer_ClassOrInterface =
-    Core.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"
-
-_ArrayCreationExpressionWithoutInitializer_ClassOrInterface_type = Core.Name "type"
-
-_ArrayCreationExpressionWithoutInitializer_ClassOrInterface_dimExprs = Core.Name "dimExprs"
-
-_ArrayCreationExpressionWithoutInitializer_ClassOrInterface_dims = Core.Name "dims"
-
-data ArrayCreationExpressionWithInitializer =
-  ArrayCreationExpressionWithInitializerPrimitive ArrayCreationExpressionWithInitializer_Primitive |
-  ArrayCreationExpressionWithInitializerClassOrInterface ArrayCreationExpressionWithInitializer_ClassOrInterface
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayCreationExpressionWithInitializer = Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer"
-
-_ArrayCreationExpressionWithInitializer_primitive = Core.Name "primitive"
-
-_ArrayCreationExpressionWithInitializer_classOrInterface = Core.Name "classOrInterface"
-
-data ArrayCreationExpressionWithInitializer_Primitive =
-  ArrayCreationExpressionWithInitializer_Primitive {
-    arrayCreationExpressionWithInitializer_PrimitiveType :: PrimitiveTypeWithAnnotations,
-    arrayCreationExpressionWithInitializer_PrimitiveDims :: [Dims],
-    arrayCreationExpressionWithInitializer_PrimitiveArray :: ArrayInitializer}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayCreationExpressionWithInitializer_Primitive =
-    Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"
-
-_ArrayCreationExpressionWithInitializer_Primitive_type = Core.Name "type"
-
-_ArrayCreationExpressionWithInitializer_Primitive_dims = Core.Name "dims"
-
-_ArrayCreationExpressionWithInitializer_Primitive_array = Core.Name "array"
-
-data ArrayCreationExpressionWithInitializer_ClassOrInterface =
-  ArrayCreationExpressionWithInitializer_ClassOrInterface {
-    arrayCreationExpressionWithInitializer_ClassOrInterfaceType :: ClassOrInterfaceType,
-    arrayCreationExpressionWithInitializer_ClassOrInterfaceDims :: [Dims],
-    arrayCreationExpressionWithInitializer_ClassOrInterfaceArray :: ArrayInitializer}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayCreationExpressionWithInitializer_ClassOrInterface =
-    Core.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"
-
-_ArrayCreationExpressionWithInitializer_ClassOrInterface_type = Core.Name "type"
-
-_ArrayCreationExpressionWithInitializer_ClassOrInterface_dims = Core.Name "dims"
-
-_ArrayCreationExpressionWithInitializer_ClassOrInterface_array = Core.Name "array"
-
-data DimExpr =
-  DimExpr {
-    dimExprAnnotations :: [Annotation],
-    dimExprExpression :: (Maybe Expression)}
-  deriving (Eq, Ord, Read, Show)
-
-_DimExpr = Core.Name "hydra.java.syntax.DimExpr"
-
-_DimExpr_annotations = Core.Name "annotations"
-
-_DimExpr_expression = Core.Name "expression"
-
-data Expression =
-  ExpressionLambda LambdaExpression |
-  ExpressionAssignment AssignmentExpression
-  deriving (Eq, Ord, Read, Show)
-
-_Expression = Core.Name "hydra.java.syntax.Expression"
-
-_Expression_lambda = Core.Name "lambda"
-
-_Expression_assignment = Core.Name "assignment"
-
-data LambdaExpression =
-  LambdaExpression {
-    lambdaExpressionParameters :: LambdaParameters,
-    lambdaExpressionBody :: LambdaBody}
-  deriving (Eq, Ord, Read, Show)
-
-_LambdaExpression = Core.Name "hydra.java.syntax.LambdaExpression"
-
-_LambdaExpression_parameters = Core.Name "parameters"
-
-_LambdaExpression_body = Core.Name "body"
-
-data LambdaParameters =
-  LambdaParametersTuple [LambdaParameters] |
-  LambdaParametersSingle Identifier
-  deriving (Eq, Ord, Read, Show)
-
-_LambdaParameters = Core.Name "hydra.java.syntax.LambdaParameters"
-
-_LambdaParameters_tuple = Core.Name "tuple"
-
-_LambdaParameters_single = Core.Name "single"
-
-data LambdaParameter =
-  LambdaParameterNormal LambdaParameter_Normal |
-  LambdaParameterVariableArity VariableArityParameter
-  deriving (Eq, Ord, Read, Show)
-
-_LambdaParameter = Core.Name "hydra.java.syntax.LambdaParameter"
-
-_LambdaParameter_normal = Core.Name "normal"
-
-_LambdaParameter_variableArity = Core.Name "variableArity"
-
-data LambdaParameter_Normal =
-  LambdaParameter_Normal {
-    lambdaParameter_NormalModifiers :: [VariableModifier],
-    lambdaParameter_NormalType :: LambdaParameterType,
-    lambdaParameter_NormalId :: VariableDeclaratorId}
-  deriving (Eq, Ord, Read, Show)
-
-_LambdaParameter_Normal = Core.Name "hydra.java.syntax.LambdaParameter_Normal"
-
-_LambdaParameter_Normal_modifiers = Core.Name "modifiers"
-
-_LambdaParameter_Normal_type = Core.Name "type"
-
-_LambdaParameter_Normal_id = Core.Name "id"
-
-data LambdaParameterType =
-  LambdaParameterTypeType UnannType |
-  LambdaParameterTypeVar
-  deriving (Eq, Ord, Read, Show)
-
-_LambdaParameterType = Core.Name "hydra.java.syntax.LambdaParameterType"
-
-_LambdaParameterType_type = Core.Name "type"
-
-_LambdaParameterType_var = Core.Name "var"
-
-data LambdaBody =
-  LambdaBodyExpression Expression |
-  LambdaBodyBlock Block
-  deriving (Eq, Ord, Read, Show)
-
-_LambdaBody = Core.Name "hydra.java.syntax.LambdaBody"
-
-_LambdaBody_expression = Core.Name "expression"
-
-_LambdaBody_block = Core.Name "block"
-
-data AssignmentExpression =
-  AssignmentExpressionConditional ConditionalExpression |
-  AssignmentExpressionAssignment Assignment
-  deriving (Eq, Ord, Read, Show)
-
-_AssignmentExpression = Core.Name "hydra.java.syntax.AssignmentExpression"
-
-_AssignmentExpression_conditional = Core.Name "conditional"
-
-_AssignmentExpression_assignment = Core.Name "assignment"
-
-data Assignment =
-  Assignment {
-    assignmentLhs :: LeftHandSide,
-    assignmentOp :: AssignmentOperator,
-    assignmentExpression :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_Assignment = Core.Name "hydra.java.syntax.Assignment"
-
-_Assignment_lhs = Core.Name "lhs"
-
-_Assignment_op = Core.Name "op"
-
-_Assignment_expression = Core.Name "expression"
-
-data LeftHandSide =
-  LeftHandSideExpressionName ExpressionName |
-  LeftHandSideFieldAccess FieldAccess |
-  LeftHandSideArrayAccess ArrayAccess
-  deriving (Eq, Ord, Read, Show)
-
-_LeftHandSide = Core.Name "hydra.java.syntax.LeftHandSide"
-
-_LeftHandSide_expressionName = Core.Name "expressionName"
-
-_LeftHandSide_fieldAccess = Core.Name "fieldAccess"
-
-_LeftHandSide_arrayAccess = Core.Name "arrayAccess"
-
-data AssignmentOperator =
-  AssignmentOperatorSimple |
-  AssignmentOperatorTimes |
-  AssignmentOperatorDiv |
-  AssignmentOperatorMod |
-  AssignmentOperatorPlus |
-  AssignmentOperatorMinus |
-  AssignmentOperatorShiftLeft |
-  AssignmentOperatorShiftRight |
-  AssignmentOperatorShiftRightZeroFill |
-  AssignmentOperatorAnd |
-  AssignmentOperatorXor |
-  AssignmentOperatorOr
-  deriving (Eq, Ord, Read, Show)
-
-_AssignmentOperator = Core.Name "hydra.java.syntax.AssignmentOperator"
-
-_AssignmentOperator_simple = Core.Name "simple"
-
-_AssignmentOperator_times = Core.Name "times"
-
-_AssignmentOperator_div = Core.Name "div"
-
-_AssignmentOperator_mod = Core.Name "mod"
-
-_AssignmentOperator_plus = Core.Name "plus"
-
-_AssignmentOperator_minus = Core.Name "minus"
-
-_AssignmentOperator_shiftLeft = Core.Name "shiftLeft"
-
-_AssignmentOperator_shiftRight = Core.Name "shiftRight"
-
-_AssignmentOperator_shiftRightZeroFill = Core.Name "shiftRightZeroFill"
-
-_AssignmentOperator_and = Core.Name "and"
-
-_AssignmentOperator_xor = Core.Name "xor"
-
-_AssignmentOperator_or = Core.Name "or"
-
-data ConditionalExpression =
-  ConditionalExpressionSimple ConditionalOrExpression |
-  ConditionalExpressionTernaryCond ConditionalExpression_TernaryCond |
-  ConditionalExpressionTernaryLambda ConditionalExpression_TernaryLambda
-  deriving (Eq, Ord, Read, Show)
-
-_ConditionalExpression = Core.Name "hydra.java.syntax.ConditionalExpression"
-
-_ConditionalExpression_simple = Core.Name "simple"
-
-_ConditionalExpression_ternaryCond = Core.Name "ternaryCond"
-
-_ConditionalExpression_ternaryLambda = Core.Name "ternaryLambda"
-
-data ConditionalExpression_TernaryCond =
-  ConditionalExpression_TernaryCond {
-    conditionalExpression_TernaryCondCond :: ConditionalOrExpression,
-    conditionalExpression_TernaryCondIfTrue :: Expression,
-    conditionalExpression_TernaryCondIfFalse :: ConditionalExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_ConditionalExpression_TernaryCond = Core.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"
-
-_ConditionalExpression_TernaryCond_cond = Core.Name "cond"
-
-_ConditionalExpression_TernaryCond_ifTrue = Core.Name "ifTrue"
-
-_ConditionalExpression_TernaryCond_ifFalse = Core.Name "ifFalse"
-
-data ConditionalExpression_TernaryLambda =
-  ConditionalExpression_TernaryLambda {
-    conditionalExpression_TernaryLambdaCond :: ConditionalOrExpression,
-    conditionalExpression_TernaryLambdaIfTrue :: Expression,
-    conditionalExpression_TernaryLambdaIfFalse :: LambdaExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_ConditionalExpression_TernaryLambda = Core.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"
-
-_ConditionalExpression_TernaryLambda_cond = Core.Name "cond"
-
-_ConditionalExpression_TernaryLambda_ifTrue = Core.Name "ifTrue"
-
-_ConditionalExpression_TernaryLambda_ifFalse = Core.Name "ifFalse"
-
-newtype ConditionalOrExpression =
-  ConditionalOrExpression {
-    unConditionalOrExpression :: [ConditionalAndExpression]}
-  deriving (Eq, Ord, Read, Show)
-
-_ConditionalOrExpression = Core.Name "hydra.java.syntax.ConditionalOrExpression"
-
-newtype ConditionalAndExpression =
-  ConditionalAndExpression {
-    unConditionalAndExpression :: [InclusiveOrExpression]}
-  deriving (Eq, Ord, Read, Show)
-
-_ConditionalAndExpression = Core.Name "hydra.java.syntax.ConditionalAndExpression"
-
-newtype InclusiveOrExpression =
-  InclusiveOrExpression {
-    unInclusiveOrExpression :: [ExclusiveOrExpression]}
-  deriving (Eq, Ord, Read, Show)
-
-_InclusiveOrExpression = Core.Name "hydra.java.syntax.InclusiveOrExpression"
-
-newtype ExclusiveOrExpression =
-  ExclusiveOrExpression {
-    unExclusiveOrExpression :: [AndExpression]}
-  deriving (Eq, Ord, Read, Show)
-
-_ExclusiveOrExpression = Core.Name "hydra.java.syntax.ExclusiveOrExpression"
-
-newtype AndExpression =
-  AndExpression {
-    unAndExpression :: [EqualityExpression]}
-  deriving (Eq, Ord, Read, Show)
-
-_AndExpression = Core.Name "hydra.java.syntax.AndExpression"
-
-data EqualityExpression =
-  EqualityExpressionUnary RelationalExpression |
-  EqualityExpressionEqual EqualityExpression_Binary |
-  EqualityExpressionNotEqual EqualityExpression_Binary
-  deriving (Eq, Ord, Read, Show)
-
-_EqualityExpression = Core.Name "hydra.java.syntax.EqualityExpression"
-
-_EqualityExpression_unary = Core.Name "unary"
-
-_EqualityExpression_equal = Core.Name "equal"
-
-_EqualityExpression_notEqual = Core.Name "notEqual"
-
-data EqualityExpression_Binary =
-  EqualityExpression_Binary {
-    equalityExpression_BinaryLhs :: EqualityExpression,
-    equalityExpression_BinaryRhs :: RelationalExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_EqualityExpression_Binary = Core.Name "hydra.java.syntax.EqualityExpression_Binary"
-
-_EqualityExpression_Binary_lhs = Core.Name "lhs"
-
-_EqualityExpression_Binary_rhs = Core.Name "rhs"
-
-data RelationalExpression =
-  RelationalExpressionSimple ShiftExpression |
-  RelationalExpressionLessThan RelationalExpression_LessThan |
-  RelationalExpressionGreaterThan RelationalExpression_GreaterThan |
-  RelationalExpressionLessThanEqual RelationalExpression_LessThanEqual |
-  RelationalExpressionGreaterThanEqual RelationalExpression_GreaterThanEqual |
-  RelationalExpressionInstanceofExpression InstanceofExpression
-  deriving (Eq, Ord, Read, Show)
-
-_RelationalExpression = Core.Name "hydra.java.syntax.RelationalExpression"
-
-_RelationalExpression_simple = Core.Name "simple"
-
-_RelationalExpression_lessThan = Core.Name "lessThan"
-
-_RelationalExpression_greaterThan = Core.Name "greaterThan"
-
-_RelationalExpression_lessThanEqual = Core.Name "lessThanEqual"
-
-_RelationalExpression_greaterThanEqual = Core.Name "greaterThanEqual"
-
-_RelationalExpression_instanceofExpression = Core.Name "instanceofExpression"
-
-data RelationalExpression_LessThan =
-  RelationalExpression_LessThan {
-    relationalExpression_LessThanLhs :: RelationalExpression,
-    relationalExpression_LessThanRhs :: ShiftExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_RelationalExpression_LessThan = Core.Name "hydra.java.syntax.RelationalExpression_LessThan"
-
-_RelationalExpression_LessThan_lhs = Core.Name "lhs"
-
-_RelationalExpression_LessThan_rhs = Core.Name "rhs"
-
-data RelationalExpression_GreaterThan =
-  RelationalExpression_GreaterThan {
-    relationalExpression_GreaterThanLhs :: RelationalExpression,
-    relationalExpression_GreaterThanRhs :: ShiftExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_RelationalExpression_GreaterThan = Core.Name "hydra.java.syntax.RelationalExpression_GreaterThan"
-
-_RelationalExpression_GreaterThan_lhs = Core.Name "lhs"
-
-_RelationalExpression_GreaterThan_rhs = Core.Name "rhs"
-
-data RelationalExpression_LessThanEqual =
-  RelationalExpression_LessThanEqual {
-    relationalExpression_LessThanEqualLhs :: RelationalExpression,
-    relationalExpression_LessThanEqualRhs :: ShiftExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_RelationalExpression_LessThanEqual = Core.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"
-
-_RelationalExpression_LessThanEqual_lhs = Core.Name "lhs"
-
-_RelationalExpression_LessThanEqual_rhs = Core.Name "rhs"
-
-data RelationalExpression_GreaterThanEqual =
-  RelationalExpression_GreaterThanEqual {
-    relationalExpression_GreaterThanEqualLhs :: RelationalExpression,
-    relationalExpression_GreaterThanEqualRhs :: ShiftExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_RelationalExpression_GreaterThanEqual = Core.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"
-
-_RelationalExpression_GreaterThanEqual_lhs = Core.Name "lhs"
-
-_RelationalExpression_GreaterThanEqual_rhs = Core.Name "rhs"
-
-data InstanceofExpression =
-  InstanceofExpression {
-    instanceofExpressionLhs :: RelationalExpression,
-    instanceofExpressionRhs :: InstanceofExpression_Rhs}
-  deriving (Eq, Ord, Read, Show)
-
-_InstanceofExpression = Core.Name "hydra.java.syntax.InstanceofExpression"
-
-_InstanceofExpression_lhs = Core.Name "lhs"
-
-_InstanceofExpression_rhs = Core.Name "rhs"
-
-data InstanceofExpression_Rhs =
-  InstanceofExpression_RhsReferenceType ReferenceType |
-  InstanceofExpression_RhsPattern Pattern
-  deriving (Eq, Ord, Read, Show)
-
-_InstanceofExpression_Rhs = Core.Name "hydra.java.syntax.InstanceofExpression_Rhs"
-
-_InstanceofExpression_Rhs_referenceType = Core.Name "referenceType"
-
-_InstanceofExpression_Rhs_pattern = Core.Name "pattern"
-
-data ShiftExpression =
-  ShiftExpressionUnary AdditiveExpression |
-  ShiftExpressionShiftLeft ShiftExpression_Binary |
-  ShiftExpressionShiftRight ShiftExpression_Binary |
-  ShiftExpressionShiftRightZeroFill ShiftExpression_Binary
-  deriving (Eq, Ord, Read, Show)
-
-_ShiftExpression = Core.Name "hydra.java.syntax.ShiftExpression"
-
-_ShiftExpression_unary = Core.Name "unary"
-
-_ShiftExpression_shiftLeft = Core.Name "shiftLeft"
-
-_ShiftExpression_shiftRight = Core.Name "shiftRight"
-
-_ShiftExpression_shiftRightZeroFill = Core.Name "shiftRightZeroFill"
-
-data ShiftExpression_Binary =
-  ShiftExpression_Binary {
-    shiftExpression_BinaryLhs :: ShiftExpression,
-    shiftExpression_BinaryRhs :: AdditiveExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_ShiftExpression_Binary = Core.Name "hydra.java.syntax.ShiftExpression_Binary"
-
-_ShiftExpression_Binary_lhs = Core.Name "lhs"
-
-_ShiftExpression_Binary_rhs = Core.Name "rhs"
-
-data AdditiveExpression =
-  AdditiveExpressionUnary MultiplicativeExpression |
-  AdditiveExpressionPlus AdditiveExpression_Binary |
-  AdditiveExpressionMinus AdditiveExpression_Binary
-  deriving (Eq, Ord, Read, Show)
-
-_AdditiveExpression = Core.Name "hydra.java.syntax.AdditiveExpression"
-
-_AdditiveExpression_unary = Core.Name "unary"
-
-_AdditiveExpression_plus = Core.Name "plus"
-
-_AdditiveExpression_minus = Core.Name "minus"
-
-data AdditiveExpression_Binary =
-  AdditiveExpression_Binary {
-    additiveExpression_BinaryLhs :: AdditiveExpression,
-    additiveExpression_BinaryRhs :: MultiplicativeExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_AdditiveExpression_Binary = Core.Name "hydra.java.syntax.AdditiveExpression_Binary"
-
-_AdditiveExpression_Binary_lhs = Core.Name "lhs"
-
-_AdditiveExpression_Binary_rhs = Core.Name "rhs"
-
-data MultiplicativeExpression =
-  MultiplicativeExpressionUnary UnaryExpression |
-  MultiplicativeExpressionTimes MultiplicativeExpression_Binary |
-  MultiplicativeExpressionDivide MultiplicativeExpression_Binary |
-  MultiplicativeExpressionMod MultiplicativeExpression_Binary
-  deriving (Eq, Ord, Read, Show)
-
-_MultiplicativeExpression = Core.Name "hydra.java.syntax.MultiplicativeExpression"
-
-_MultiplicativeExpression_unary = Core.Name "unary"
-
-_MultiplicativeExpression_times = Core.Name "times"
-
-_MultiplicativeExpression_divide = Core.Name "divide"
-
-_MultiplicativeExpression_mod = Core.Name "mod"
-
-data MultiplicativeExpression_Binary =
-  MultiplicativeExpression_Binary {
-    multiplicativeExpression_BinaryLhs :: MultiplicativeExpression,
-    multiplicativeExpression_BinaryRhs :: UnaryExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_MultiplicativeExpression_Binary = Core.Name "hydra.java.syntax.MultiplicativeExpression_Binary"
-
-_MultiplicativeExpression_Binary_lhs = Core.Name "lhs"
-
-_MultiplicativeExpression_Binary_rhs = Core.Name "rhs"
-
-data UnaryExpression =
-  UnaryExpressionPreIncrement PreIncrementExpression |
-  UnaryExpressionPreDecrement PreDecrementExpression |
-  UnaryExpressionPlus UnaryExpression |
-  UnaryExpressionMinus UnaryExpression |
-  UnaryExpressionOther UnaryExpressionNotPlusMinus
-  deriving (Eq, Ord, Read, Show)
-
-_UnaryExpression = Core.Name "hydra.java.syntax.UnaryExpression"
-
-_UnaryExpression_preIncrement = Core.Name "preIncrement"
-
-_UnaryExpression_preDecrement = Core.Name "preDecrement"
-
-_UnaryExpression_plus = Core.Name "plus"
-
-_UnaryExpression_minus = Core.Name "minus"
-
-_UnaryExpression_other = Core.Name "other"
-
-newtype PreIncrementExpression =
-  PreIncrementExpression {
-    unPreIncrementExpression :: UnaryExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_PreIncrementExpression = Core.Name "hydra.java.syntax.PreIncrementExpression"
-
-newtype PreDecrementExpression =
-  PreDecrementExpression {
-    unPreDecrementExpression :: UnaryExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_PreDecrementExpression = Core.Name "hydra.java.syntax.PreDecrementExpression"
-
-data UnaryExpressionNotPlusMinus =
-  UnaryExpressionNotPlusMinusPostfix PostfixExpression |
-  UnaryExpressionNotPlusMinusTilde UnaryExpression |
-  UnaryExpressionNotPlusMinusNot UnaryExpression |
-  UnaryExpressionNotPlusMinusCast CastExpression |
-  UnaryExpressionNotPlusMinusSwitchExpression SwitchExpression
-  deriving (Eq, Ord, Read, Show)
-
-_UnaryExpressionNotPlusMinus = Core.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"
-
-_UnaryExpressionNotPlusMinus_postfix = Core.Name "postfix"
-
-_UnaryExpressionNotPlusMinus_tilde = Core.Name "tilde"
-
-_UnaryExpressionNotPlusMinus_not = Core.Name "not"
-
-_UnaryExpressionNotPlusMinus_cast = Core.Name "cast"
-
-_UnaryExpressionNotPlusMinus_switchExpression = Core.Name "switchExpression"
-
-data PostfixExpression =
-  PostfixExpressionPrimary Primary |
-  PostfixExpressionName ExpressionName |
-  PostfixExpressionPostIncrement PostIncrementExpression |
-  PostfixExpressionPostDecrement PostDecrementExpression
-  deriving (Eq, Ord, Read, Show)
-
-_PostfixExpression = Core.Name "hydra.java.syntax.PostfixExpression"
-
-_PostfixExpression_primary = Core.Name "primary"
-
-_PostfixExpression_name = Core.Name "name"
-
-_PostfixExpression_postIncrement = Core.Name "postIncrement"
-
-_PostfixExpression_postDecrement = Core.Name "postDecrement"
-
-newtype PostIncrementExpression =
-  PostIncrementExpression {
-    unPostIncrementExpression :: PostfixExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_PostIncrementExpression = Core.Name "hydra.java.syntax.PostIncrementExpression"
-
-newtype PostDecrementExpression =
-  PostDecrementExpression {
-    unPostDecrementExpression :: PostfixExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_PostDecrementExpression = Core.Name "hydra.java.syntax.PostDecrementExpression"
-
-data CastExpression =
-  CastExpressionPrimitive CastExpression_Primitive |
-  CastExpressionNotPlusMinus CastExpression_NotPlusMinus |
-  CastExpressionLambda CastExpression_Lambda
-  deriving (Eq, Ord, Read, Show)
-
-_CastExpression = Core.Name "hydra.java.syntax.CastExpression"
-
-_CastExpression_primitive = Core.Name "primitive"
-
-_CastExpression_notPlusMinus = Core.Name "notPlusMinus"
-
-_CastExpression_lambda = Core.Name "lambda"
-
-data CastExpression_Primitive =
-  CastExpression_Primitive {
-    castExpression_PrimitiveType :: PrimitiveTypeWithAnnotations,
-    castExpression_PrimitiveExpression :: UnaryExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_CastExpression_Primitive = Core.Name "hydra.java.syntax.CastExpression_Primitive"
-
-_CastExpression_Primitive_type = Core.Name "type"
-
-_CastExpression_Primitive_expression = Core.Name "expression"
-
-data CastExpression_NotPlusMinus =
-  CastExpression_NotPlusMinus {
-    castExpression_NotPlusMinusRefAndBounds :: CastExpression_RefAndBounds,
-    castExpression_NotPlusMinusExpression :: UnaryExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_CastExpression_NotPlusMinus = Core.Name "hydra.java.syntax.CastExpression_NotPlusMinus"
-
-_CastExpression_NotPlusMinus_refAndBounds = Core.Name "refAndBounds"
-
-_CastExpression_NotPlusMinus_expression = Core.Name "expression"
-
-data CastExpression_Lambda =
-  CastExpression_Lambda {
-    castExpression_LambdaRefAndBounds :: CastExpression_RefAndBounds,
-    castExpression_LambdaExpression :: LambdaExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_CastExpression_Lambda = Core.Name "hydra.java.syntax.CastExpression_Lambda"
-
-_CastExpression_Lambda_refAndBounds = Core.Name "refAndBounds"
-
-_CastExpression_Lambda_expression = Core.Name "expression"
-
-data CastExpression_RefAndBounds =
-  CastExpression_RefAndBounds {
-    castExpression_RefAndBoundsType :: ReferenceType,
-    castExpression_RefAndBoundsBounds :: [AdditionalBound]}
-  deriving (Eq, Ord, Read, Show)
-
-_CastExpression_RefAndBounds = Core.Name "hydra.java.syntax.CastExpression_RefAndBounds"
-
-_CastExpression_RefAndBounds_type = Core.Name "type"
-
-_CastExpression_RefAndBounds_bounds = Core.Name "bounds"
-
-data SwitchExpression =
-  SwitchExpression {
-    switchExpressionCond :: Expression,
-    switchExpressionBlock :: SwitchBlock}
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchExpression = Core.Name "hydra.java.syntax.SwitchExpression"
-
-_SwitchExpression_cond = Core.Name "cond"
-
-_SwitchExpression_block = Core.Name "block"
-
-newtype ConstantExpression =
-  ConstantExpression {
-    unConstantExpression :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_ConstantExpression = Core.Name "hydra.java.syntax.ConstantExpression"
+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
+
+newtype Identifier =
+  Identifier {
+    unIdentifier :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_Identifier = Model.Name "hydra.java.syntax.Identifier"
+
+newtype TypeIdentifier =
+  TypeIdentifier {
+    unTypeIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeIdentifier = Model.Name "hydra.java.syntax.TypeIdentifier"
+
+data Literal =
+  LiteralNull |
+  LiteralInteger IntegerLiteral |
+  LiteralFloatingPoint FloatingPointLiteral |
+  LiteralBoolean Bool |
+  LiteralCharacter Int |
+  LiteralString StringLiteral |
+  LiteralTextBlock TextBlock
+  deriving (Eq, Ord, Read, Show)
+
+_Literal = Model.Name "hydra.java.syntax.Literal"
+
+_Literal_null = Model.Name "null"
+
+_Literal_integer = Model.Name "integer"
+
+_Literal_floatingPoint = Model.Name "floatingPoint"
+
+_Literal_boolean = Model.Name "boolean"
+
+_Literal_character = Model.Name "character"
+
+_Literal_string = Model.Name "string"
+
+_Literal_textBlock = Model.Name "textBlock"
+
+-- | Note: this is an approximation which ignores encoding
+newtype IntegerLiteral =
+  IntegerLiteral {
+    unIntegerLiteral :: Integer}
+  deriving (Eq, Ord, Read, Show)
+
+_IntegerLiteral = Model.Name "hydra.java.syntax.IntegerLiteral"
+
+-- | Note: this is an approximation which ignores encoding
+newtype FloatingPointLiteral =
+  FloatingPointLiteral {
+    unFloatingPointLiteral :: Double}
+  deriving (Eq, Ord, Read, Show)
+
+_FloatingPointLiteral = Model.Name "hydra.java.syntax.FloatingPointLiteral"
+
+-- | Note: this is an approximation which ignores encoding
+newtype StringLiteral =
+  StringLiteral {
+    unStringLiteral :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_StringLiteral = Model.Name "hydra.java.syntax.StringLiteral"
+
+-- | Note: this is an approximation which ignores encoding and incidental whitespace stripping
+newtype TextBlock =
+  TextBlock {
+    unTextBlock :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_TextBlock = Model.Name "hydra.java.syntax.TextBlock"
+
+data Type =
+  TypePrimitive PrimitiveTypeWithAnnotations |
+  TypeReference ReferenceType
+  deriving (Eq, Ord, Read, Show)
+
+_Type = Model.Name "hydra.java.syntax.Type"
+
+_Type_primitive = Model.Name "primitive"
+
+_Type_reference = Model.Name "reference"
+
+data PrimitiveTypeWithAnnotations =
+  PrimitiveTypeWithAnnotations {
+    primitiveTypeWithAnnotationsType :: PrimitiveType,
+    primitiveTypeWithAnnotationsAnnotations :: [Annotation]}
+  deriving (Eq, Ord, Read, Show)
+
+_PrimitiveTypeWithAnnotations = Model.Name "hydra.java.syntax.PrimitiveTypeWithAnnotations"
+
+_PrimitiveTypeWithAnnotations_type = Model.Name "type"
+
+_PrimitiveTypeWithAnnotations_annotations = Model.Name "annotations"
+
+data PrimitiveType =
+  PrimitiveTypeNumeric NumericType |
+  PrimitiveTypeBoolean
+  deriving (Eq, Ord, Read, Show)
+
+_PrimitiveType = Model.Name "hydra.java.syntax.PrimitiveType"
+
+_PrimitiveType_numeric = Model.Name "numeric"
+
+_PrimitiveType_boolean = Model.Name "boolean"
+
+data NumericType =
+  NumericTypeIntegral IntegralType |
+  NumericTypeFloatingPoint FloatingPointType
+  deriving (Eq, Ord, Read, Show)
+
+_NumericType = Model.Name "hydra.java.syntax.NumericType"
+
+_NumericType_integral = Model.Name "integral"
+
+_NumericType_floatingPoint = Model.Name "floatingPoint"
+
+data IntegralType =
+  IntegralTypeByte |
+  IntegralTypeShort |
+  IntegralTypeInt |
+  IntegralTypeLong |
+  IntegralTypeChar
+  deriving (Eq, Ord, Read, Show)
+
+_IntegralType = Model.Name "hydra.java.syntax.IntegralType"
+
+_IntegralType_byte = Model.Name "byte"
+
+_IntegralType_short = Model.Name "short"
+
+_IntegralType_int = Model.Name "int"
+
+_IntegralType_long = Model.Name "long"
+
+_IntegralType_char = Model.Name "char"
+
+data FloatingPointType =
+  FloatingPointTypeFloat |
+  FloatingPointTypeDouble
+  deriving (Eq, Ord, Read, Show)
+
+_FloatingPointType = Model.Name "hydra.java.syntax.FloatingPointType"
+
+_FloatingPointType_float = Model.Name "float"
+
+_FloatingPointType_double = Model.Name "double"
+
+data ReferenceType =
+  ReferenceTypeClassOrInterface ClassOrInterfaceType |
+  ReferenceTypeVariable TypeVariable |
+  ReferenceTypeArray ArrayType
+  deriving (Eq, Ord, Read, Show)
+
+_ReferenceType = Model.Name "hydra.java.syntax.ReferenceType"
+
+_ReferenceType_classOrInterface = Model.Name "classOrInterface"
+
+_ReferenceType_variable = Model.Name "variable"
+
+_ReferenceType_array = Model.Name "array"
+
+data ClassOrInterfaceType =
+  ClassOrInterfaceTypeClass ClassType |
+  ClassOrInterfaceTypeInterface InterfaceType
+  deriving (Eq, Ord, Read, Show)
+
+_ClassOrInterfaceType = Model.Name "hydra.java.syntax.ClassOrInterfaceType"
+
+_ClassOrInterfaceType_class = Model.Name "class"
+
+_ClassOrInterfaceType_interface = Model.Name "interface"
+
+data ClassType =
+  ClassType {
+    classTypeAnnotations :: [Annotation],
+    classTypeQualifier :: ClassTypeQualifier,
+    classTypeIdentifier :: TypeIdentifier,
+    classTypeArguments :: [TypeArgument]}
+  deriving (Eq, Ord, Read, Show)
+
+_ClassType = Model.Name "hydra.java.syntax.ClassType"
+
+_ClassType_annotations = Model.Name "annotations"
+
+_ClassType_qualifier = Model.Name "qualifier"
+
+_ClassType_identifier = Model.Name "identifier"
+
+_ClassType_arguments = Model.Name "arguments"
+
+data ClassTypeQualifier =
+  ClassTypeQualifierNone |
+  ClassTypeQualifierPackage PackageName |
+  ClassTypeQualifierParent ClassOrInterfaceType
+  deriving (Eq, Ord, Read, Show)
+
+_ClassTypeQualifier = Model.Name "hydra.java.syntax.ClassTypeQualifier"
+
+_ClassTypeQualifier_none = Model.Name "none"
+
+_ClassTypeQualifier_package = Model.Name "package"
+
+_ClassTypeQualifier_parent = Model.Name "parent"
+
+newtype InterfaceType =
+  InterfaceType {
+    unInterfaceType :: ClassType}
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceType = Model.Name "hydra.java.syntax.InterfaceType"
+
+data TypeVariable =
+  TypeVariable {
+    typeVariableAnnotations :: [Annotation],
+    typeVariableIdentifier :: TypeIdentifier}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeVariable = Model.Name "hydra.java.syntax.TypeVariable"
+
+_TypeVariable_annotations = Model.Name "annotations"
+
+_TypeVariable_identifier = Model.Name "identifier"
+
+data ArrayType =
+  ArrayType {
+    arrayTypeDims :: Dims,
+    arrayTypeVariant :: ArrayType_Variant}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayType = Model.Name "hydra.java.syntax.ArrayType"
+
+_ArrayType_dims = Model.Name "dims"
+
+_ArrayType_variant = Model.Name "variant"
+
+data ArrayType_Variant =
+  ArrayType_VariantPrimitive PrimitiveTypeWithAnnotations |
+  ArrayType_VariantClassOrInterface ClassOrInterfaceType |
+  ArrayType_VariantVariable TypeVariable
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayType_Variant = Model.Name "hydra.java.syntax.ArrayType_Variant"
+
+_ArrayType_Variant_primitive = Model.Name "primitive"
+
+_ArrayType_Variant_classOrInterface = Model.Name "classOrInterface"
+
+_ArrayType_Variant_variable = Model.Name "variable"
+
+newtype Dims =
+  Dims {
+    unDims :: [[Annotation]]}
+  deriving (Eq, Ord, Read, Show)
+
+_Dims = Model.Name "hydra.java.syntax.Dims"
+
+data TypeParameter =
+  TypeParameter {
+    typeParameterModifiers :: [TypeParameterModifier],
+    typeParameterIdentifier :: TypeIdentifier,
+    typeParameterBound :: (Maybe TypeBound)}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeParameter = Model.Name "hydra.java.syntax.TypeParameter"
+
+_TypeParameter_modifiers = Model.Name "modifiers"
+
+_TypeParameter_identifier = Model.Name "identifier"
+
+_TypeParameter_bound = Model.Name "bound"
+
+newtype TypeParameterModifier =
+  TypeParameterModifier {
+    unTypeParameterModifier :: Annotation}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeParameterModifier = Model.Name "hydra.java.syntax.TypeParameterModifier"
+
+data TypeBound =
+  TypeBoundVariable TypeVariable |
+  TypeBoundClassOrInterface TypeBound_ClassOrInterface
+  deriving (Eq, Ord, Read, Show)
+
+_TypeBound = Model.Name "hydra.java.syntax.TypeBound"
+
+_TypeBound_variable = Model.Name "variable"
+
+_TypeBound_classOrInterface = Model.Name "classOrInterface"
+
+data TypeBound_ClassOrInterface =
+  TypeBound_ClassOrInterface {
+    typeBound_ClassOrInterfaceType :: ClassOrInterfaceType,
+    typeBound_ClassOrInterfaceAdditional :: [AdditionalBound]}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeBound_ClassOrInterface = Model.Name "hydra.java.syntax.TypeBound_ClassOrInterface"
+
+_TypeBound_ClassOrInterface_type = Model.Name "type"
+
+_TypeBound_ClassOrInterface_additional = Model.Name "additional"
+
+newtype AdditionalBound =
+  AdditionalBound {
+    unAdditionalBound :: InterfaceType}
+  deriving (Eq, Ord, Read, Show)
+
+_AdditionalBound = Model.Name "hydra.java.syntax.AdditionalBound"
+
+data TypeArgument =
+  TypeArgumentReference ReferenceType |
+  TypeArgumentWildcard Wildcard
+  deriving (Eq, Ord, Read, Show)
+
+_TypeArgument = Model.Name "hydra.java.syntax.TypeArgument"
+
+_TypeArgument_reference = Model.Name "reference"
+
+_TypeArgument_wildcard = Model.Name "wildcard"
+
+data Wildcard =
+  Wildcard {
+    wildcardAnnotations :: [Annotation],
+    wildcardWildcard :: (Maybe WildcardBounds)}
+  deriving (Eq, Ord, Read, Show)
+
+_Wildcard = Model.Name "hydra.java.syntax.Wildcard"
+
+_Wildcard_annotations = Model.Name "annotations"
+
+_Wildcard_wildcard = Model.Name "wildcard"
+
+data WildcardBounds =
+  WildcardBoundsExtends ReferenceType |
+  WildcardBoundsSuper ReferenceType
+  deriving (Eq, Ord, Read, Show)
+
+_WildcardBounds = Model.Name "hydra.java.syntax.WildcardBounds"
+
+_WildcardBounds_extends = Model.Name "extends"
+
+_WildcardBounds_super = Model.Name "super"
+
+data ModuleName =
+  ModuleName {
+    moduleNameIdentifier :: Identifier,
+    moduleNameName :: (Maybe ModuleName)}
+  deriving (Eq, Ord, Read, Show)
+
+_ModuleName = Model.Name "hydra.java.syntax.ModuleName"
+
+_ModuleName_identifier = Model.Name "identifier"
+
+_ModuleName_name = Model.Name "name"
+
+newtype PackageName =
+  PackageName {
+    unPackageName :: [Identifier]}
+  deriving (Eq, Ord, Read, Show)
+
+_PackageName = Model.Name "hydra.java.syntax.PackageName"
+
+data TypeName =
+  TypeName {
+    typeNameIdentifier :: TypeIdentifier,
+    typeNameQualifier :: (Maybe PackageOrTypeName)}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeName = Model.Name "hydra.java.syntax.TypeName"
+
+_TypeName_identifier = Model.Name "identifier"
+
+_TypeName_qualifier = Model.Name "qualifier"
+
+data ExpressionName =
+  ExpressionName {
+    expressionNameQualifier :: (Maybe AmbiguousName),
+    expressionNameIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_ExpressionName = Model.Name "hydra.java.syntax.ExpressionName"
+
+_ExpressionName_qualifier = Model.Name "qualifier"
+
+_ExpressionName_identifier = Model.Name "identifier"
+
+newtype MethodName =
+  MethodName {
+    unMethodName :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodName = Model.Name "hydra.java.syntax.MethodName"
+
+newtype PackageOrTypeName =
+  PackageOrTypeName {
+    unPackageOrTypeName :: [Identifier]}
+  deriving (Eq, Ord, Read, Show)
+
+_PackageOrTypeName = Model.Name "hydra.java.syntax.PackageOrTypeName"
+
+newtype AmbiguousName =
+  AmbiguousName {
+    unAmbiguousName :: [Identifier]}
+  deriving (Eq, Ord, Read, Show)
+
+_AmbiguousName = Model.Name "hydra.java.syntax.AmbiguousName"
+
+data CompilationUnit =
+  CompilationUnitOrdinary OrdinaryCompilationUnit |
+  CompilationUnitModular ModularCompilationUnit
+  deriving (Eq, Ord, Read, Show)
+
+_CompilationUnit = Model.Name "hydra.java.syntax.CompilationUnit"
+
+_CompilationUnit_ordinary = Model.Name "ordinary"
+
+_CompilationUnit_modular = Model.Name "modular"
+
+data OrdinaryCompilationUnit =
+  OrdinaryCompilationUnit {
+    ordinaryCompilationUnitPackage :: (Maybe PackageDeclaration),
+    ordinaryCompilationUnitImports :: [ImportDeclaration],
+    ordinaryCompilationUnitTypes :: [TopLevelClassOrInterfaceDeclarationWithComments]}
+  deriving (Eq, Ord, Read, Show)
+
+_OrdinaryCompilationUnit = Model.Name "hydra.java.syntax.OrdinaryCompilationUnit"
+
+_OrdinaryCompilationUnit_package = Model.Name "package"
+
+_OrdinaryCompilationUnit_imports = Model.Name "imports"
+
+_OrdinaryCompilationUnit_types = Model.Name "types"
+
+data ModularCompilationUnit =
+  ModularCompilationUnit {
+    modularCompilationUnitImports :: [ImportDeclaration],
+    modularCompilationUnitModule :: ModuleDeclaration}
+  deriving (Eq, Ord, Read, Show)
+
+_ModularCompilationUnit = Model.Name "hydra.java.syntax.ModularCompilationUnit"
+
+_ModularCompilationUnit_imports = Model.Name "imports"
+
+_ModularCompilationUnit_module = Model.Name "module"
+
+data PackageDeclaration =
+  PackageDeclaration {
+    packageDeclarationModifiers :: [PackageModifier],
+    packageDeclarationIdentifiers :: [Identifier]}
+  deriving (Eq, Ord, Read, Show)
+
+_PackageDeclaration = Model.Name "hydra.java.syntax.PackageDeclaration"
+
+_PackageDeclaration_modifiers = Model.Name "modifiers"
+
+_PackageDeclaration_identifiers = Model.Name "identifiers"
+
+newtype PackageModifier =
+  PackageModifier {
+    unPackageModifier :: Annotation}
+  deriving (Eq, Ord, Read, Show)
+
+_PackageModifier = Model.Name "hydra.java.syntax.PackageModifier"
+
+data ImportDeclaration =
+  ImportDeclarationSingleType SingleTypeImportDeclaration |
+  ImportDeclarationTypeImportOnDemand TypeImportOnDemandDeclaration |
+  ImportDeclarationSingleStaticImport SingleStaticImportDeclaration |
+  ImportDeclarationStaticImportOnDemand StaticImportOnDemandDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_ImportDeclaration = Model.Name "hydra.java.syntax.ImportDeclaration"
+
+_ImportDeclaration_singleType = Model.Name "singleType"
+
+_ImportDeclaration_typeImportOnDemand = Model.Name "typeImportOnDemand"
+
+_ImportDeclaration_singleStaticImport = Model.Name "singleStaticImport"
+
+_ImportDeclaration_staticImportOnDemand = Model.Name "staticImportOnDemand"
+
+newtype SingleTypeImportDeclaration =
+  SingleTypeImportDeclaration {
+    unSingleTypeImportDeclaration :: TypeName}
+  deriving (Eq, Ord, Read, Show)
+
+_SingleTypeImportDeclaration = Model.Name "hydra.java.syntax.SingleTypeImportDeclaration"
+
+newtype TypeImportOnDemandDeclaration =
+  TypeImportOnDemandDeclaration {
+    unTypeImportOnDemandDeclaration :: PackageOrTypeName}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeImportOnDemandDeclaration = Model.Name "hydra.java.syntax.TypeImportOnDemandDeclaration"
+
+data SingleStaticImportDeclaration =
+  SingleStaticImportDeclaration {
+    singleStaticImportDeclarationTypeName :: TypeName,
+    singleStaticImportDeclarationIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_SingleStaticImportDeclaration = Model.Name "hydra.java.syntax.SingleStaticImportDeclaration"
+
+_SingleStaticImportDeclaration_typeName = Model.Name "typeName"
+
+_SingleStaticImportDeclaration_identifier = Model.Name "identifier"
+
+newtype StaticImportOnDemandDeclaration =
+  StaticImportOnDemandDeclaration {
+    unStaticImportOnDemandDeclaration :: TypeName}
+  deriving (Eq, Ord, Read, Show)
+
+_StaticImportOnDemandDeclaration = Model.Name "hydra.java.syntax.StaticImportOnDemandDeclaration"
+
+data TopLevelClassOrInterfaceDeclaration =
+  TopLevelClassOrInterfaceDeclarationClass ClassDeclaration |
+  TopLevelClassOrInterfaceDeclarationInterface InterfaceDeclaration |
+  TopLevelClassOrInterfaceDeclarationNone
+  deriving (Eq, Ord, Read, Show)
+
+_TopLevelClassOrInterfaceDeclaration = Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclaration"
+
+_TopLevelClassOrInterfaceDeclaration_class = Model.Name "class"
+
+_TopLevelClassOrInterfaceDeclaration_interface = Model.Name "interface"
+
+_TopLevelClassOrInterfaceDeclaration_none = Model.Name "none"
+
+data TopLevelClassOrInterfaceDeclarationWithComments =
+  TopLevelClassOrInterfaceDeclarationWithComments {
+    topLevelClassOrInterfaceDeclarationWithCommentsValue :: TopLevelClassOrInterfaceDeclaration,
+    topLevelClassOrInterfaceDeclarationWithCommentsComments :: (Maybe String)}
+  deriving (Eq, Ord, Read, Show)
+
+_TopLevelClassOrInterfaceDeclarationWithComments =
+    Model.Name "hydra.java.syntax.TopLevelClassOrInterfaceDeclarationWithComments"
+
+_TopLevelClassOrInterfaceDeclarationWithComments_value = Model.Name "value"
+
+_TopLevelClassOrInterfaceDeclarationWithComments_comments = Model.Name "comments"
+
+data ModuleDeclaration =
+  ModuleDeclaration {
+    moduleDeclarationAnnotations :: [Annotation],
+    moduleDeclarationOpen :: Bool,
+    moduleDeclarationIdentifiers :: [Identifier],
+    moduleDeclarationDirectives :: [ModuleDirective]}
+  deriving (Eq, Ord, Read, Show)
+
+_ModuleDeclaration = Model.Name "hydra.java.syntax.ModuleDeclaration"
+
+_ModuleDeclaration_annotations = Model.Name "annotations"
+
+_ModuleDeclaration_open = Model.Name "open"
+
+_ModuleDeclaration_identifiers = Model.Name "identifiers"
+
+_ModuleDeclaration_directives = Model.Name "directives"
+
+data ModuleDirective =
+  ModuleDirectiveRequires ModuleDirective_Requires |
+  ModuleDirectiveExports ModuleDirective_ExportsOrOpens |
+  ModuleDirectiveOpens ModuleDirective_ExportsOrOpens |
+  ModuleDirectiveUses TypeName |
+  ModuleDirectiveProvides ModuleDirective_Provides
+  deriving (Eq, Ord, Read, Show)
+
+_ModuleDirective = Model.Name "hydra.java.syntax.ModuleDirective"
+
+_ModuleDirective_requires = Model.Name "requires"
+
+_ModuleDirective_exports = Model.Name "exports"
+
+_ModuleDirective_opens = Model.Name "opens"
+
+_ModuleDirective_uses = Model.Name "uses"
+
+_ModuleDirective_provides = Model.Name "provides"
+
+data ModuleDirective_Requires =
+  ModuleDirective_Requires {
+    moduleDirective_RequiresModifiers :: [RequiresModifier],
+    moduleDirective_RequiresModule :: ModuleName}
+  deriving (Eq, Ord, Read, Show)
+
+_ModuleDirective_Requires = Model.Name "hydra.java.syntax.ModuleDirective_Requires"
+
+_ModuleDirective_Requires_modifiers = Model.Name "modifiers"
+
+_ModuleDirective_Requires_module = Model.Name "module"
+
+data ModuleDirective_ExportsOrOpens =
+  ModuleDirective_ExportsOrOpens {
+    moduleDirective_ExportsOrOpensPackage :: PackageName,
+    -- | At least one module
+    moduleDirective_ExportsOrOpensModules :: [ModuleName]}
+  deriving (Eq, Ord, Read, Show)
+
+_ModuleDirective_ExportsOrOpens = Model.Name "hydra.java.syntax.ModuleDirective_ExportsOrOpens"
+
+_ModuleDirective_ExportsOrOpens_package = Model.Name "package"
+
+_ModuleDirective_ExportsOrOpens_modules = Model.Name "modules"
+
+data ModuleDirective_Provides =
+  ModuleDirective_Provides {
+    moduleDirective_ProvidesTo :: TypeName,
+    -- | At least one type
+    moduleDirective_ProvidesWith :: [TypeName]}
+  deriving (Eq, Ord, Read, Show)
+
+_ModuleDirective_Provides = Model.Name "hydra.java.syntax.ModuleDirective_Provides"
+
+_ModuleDirective_Provides_to = Model.Name "to"
+
+_ModuleDirective_Provides_with = Model.Name "with"
+
+data RequiresModifier =
+  RequiresModifierTransitive |
+  RequiresModifierStatic
+  deriving (Eq, Ord, Read, Show)
+
+_RequiresModifier = Model.Name "hydra.java.syntax.RequiresModifier"
+
+_RequiresModifier_transitive = Model.Name "transitive"
+
+_RequiresModifier_static = Model.Name "static"
+
+data ClassDeclaration =
+  ClassDeclarationNormal NormalClassDeclaration |
+  ClassDeclarationEnum EnumDeclaration |
+  ClassDeclarationRecord RecordDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_ClassDeclaration = Model.Name "hydra.java.syntax.ClassDeclaration"
+
+_ClassDeclaration_normal = Model.Name "normal"
+
+_ClassDeclaration_enum = Model.Name "enum"
+
+_ClassDeclaration_record = Model.Name "record"
+
+data NormalClassDeclaration =
+  NormalClassDeclaration {
+    normalClassDeclarationModifiers :: [ClassModifier],
+    normalClassDeclarationIdentifier :: TypeIdentifier,
+    normalClassDeclarationParameters :: [TypeParameter],
+    normalClassDeclarationExtends :: (Maybe ClassType),
+    normalClassDeclarationImplements :: [InterfaceType],
+    normalClassDeclarationPermits :: [TypeName],
+    normalClassDeclarationBody :: ClassBody}
+  deriving (Eq, Ord, Read, Show)
+
+_NormalClassDeclaration = Model.Name "hydra.java.syntax.NormalClassDeclaration"
+
+_NormalClassDeclaration_modifiers = Model.Name "modifiers"
+
+_NormalClassDeclaration_identifier = Model.Name "identifier"
+
+_NormalClassDeclaration_parameters = Model.Name "parameters"
+
+_NormalClassDeclaration_extends = Model.Name "extends"
+
+_NormalClassDeclaration_implements = Model.Name "implements"
+
+_NormalClassDeclaration_permits = Model.Name "permits"
+
+_NormalClassDeclaration_body = Model.Name "body"
+
+data ClassModifier =
+  ClassModifierAnnotation Annotation |
+  ClassModifierPublic |
+  ClassModifierProtected |
+  ClassModifierPrivate |
+  ClassModifierAbstract |
+  ClassModifierStatic |
+  ClassModifierFinal |
+  ClassModifierSealed |
+  ClassModifierNonSealed |
+  ClassModifierStrictfp
+  deriving (Eq, Ord, Read, Show)
+
+_ClassModifier = Model.Name "hydra.java.syntax.ClassModifier"
+
+_ClassModifier_annotation = Model.Name "annotation"
+
+_ClassModifier_public = Model.Name "public"
+
+_ClassModifier_protected = Model.Name "protected"
+
+_ClassModifier_private = Model.Name "private"
+
+_ClassModifier_abstract = Model.Name "abstract"
+
+_ClassModifier_static = Model.Name "static"
+
+_ClassModifier_final = Model.Name "final"
+
+_ClassModifier_sealed = Model.Name "sealed"
+
+_ClassModifier_nonSealed = Model.Name "nonSealed"
+
+_ClassModifier_strictfp = Model.Name "strictfp"
+
+newtype ClassBody =
+  ClassBody {
+    unClassBody :: [ClassBodyDeclarationWithComments]}
+  deriving (Eq, Ord, Read, Show)
+
+_ClassBody = Model.Name "hydra.java.syntax.ClassBody"
+
+data ClassBodyDeclaration =
+  ClassBodyDeclarationClassMember ClassMemberDeclaration |
+  ClassBodyDeclarationInstanceInitializer InstanceInitializer |
+  ClassBodyDeclarationStaticInitializer StaticInitializer |
+  ClassBodyDeclarationConstructorDeclaration ConstructorDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_ClassBodyDeclaration = Model.Name "hydra.java.syntax.ClassBodyDeclaration"
+
+_ClassBodyDeclaration_classMember = Model.Name "classMember"
+
+_ClassBodyDeclaration_instanceInitializer = Model.Name "instanceInitializer"
+
+_ClassBodyDeclaration_staticInitializer = Model.Name "staticInitializer"
+
+_ClassBodyDeclaration_constructorDeclaration = Model.Name "constructorDeclaration"
+
+data ClassBodyDeclarationWithComments =
+  ClassBodyDeclarationWithComments {
+    classBodyDeclarationWithCommentsValue :: ClassBodyDeclaration,
+    classBodyDeclarationWithCommentsComments :: (Maybe String)}
+  deriving (Eq, Ord, Read, Show)
+
+_ClassBodyDeclarationWithComments = Model.Name "hydra.java.syntax.ClassBodyDeclarationWithComments"
+
+_ClassBodyDeclarationWithComments_value = Model.Name "value"
+
+_ClassBodyDeclarationWithComments_comments = Model.Name "comments"
+
+data ClassMemberDeclaration =
+  ClassMemberDeclarationField FieldDeclaration |
+  ClassMemberDeclarationMethod MethodDeclaration |
+  ClassMemberDeclarationClass ClassDeclaration |
+  ClassMemberDeclarationInterface InterfaceDeclaration |
+  ClassMemberDeclarationNone
+  deriving (Eq, Ord, Read, Show)
+
+_ClassMemberDeclaration = Model.Name "hydra.java.syntax.ClassMemberDeclaration"
+
+_ClassMemberDeclaration_field = Model.Name "field"
+
+_ClassMemberDeclaration_method = Model.Name "method"
+
+_ClassMemberDeclaration_class = Model.Name "class"
+
+_ClassMemberDeclaration_interface = Model.Name "interface"
+
+_ClassMemberDeclaration_none = Model.Name "none"
+
+data FieldDeclaration =
+  FieldDeclaration {
+    fieldDeclarationModifiers :: [FieldModifier],
+    fieldDeclarationUnannType :: UnannType,
+    fieldDeclarationVariableDeclarators :: [VariableDeclarator]}
+  deriving (Eq, Ord, Read, Show)
+
+_FieldDeclaration = Model.Name "hydra.java.syntax.FieldDeclaration"
+
+_FieldDeclaration_modifiers = Model.Name "modifiers"
+
+_FieldDeclaration_unannType = Model.Name "unannType"
+
+_FieldDeclaration_variableDeclarators = Model.Name "variableDeclarators"
+
+data FieldModifier =
+  FieldModifierAnnotation Annotation |
+  FieldModifierPublic |
+  FieldModifierProtected |
+  FieldModifierPrivate |
+  FieldModifierStatic |
+  FieldModifierFinal |
+  FieldModifierTransient |
+  FieldModifierVolatile
+  deriving (Eq, Ord, Read, Show)
+
+_FieldModifier = Model.Name "hydra.java.syntax.FieldModifier"
+
+_FieldModifier_annotation = Model.Name "annotation"
+
+_FieldModifier_public = Model.Name "public"
+
+_FieldModifier_protected = Model.Name "protected"
+
+_FieldModifier_private = Model.Name "private"
+
+_FieldModifier_static = Model.Name "static"
+
+_FieldModifier_final = Model.Name "final"
+
+_FieldModifier_transient = Model.Name "transient"
+
+_FieldModifier_volatile = Model.Name "volatile"
+
+data VariableDeclarator =
+  VariableDeclarator {
+    variableDeclaratorId :: VariableDeclaratorId,
+    variableDeclaratorInitializer :: (Maybe VariableInitializer)}
+  deriving (Eq, Ord, Read, Show)
+
+_VariableDeclarator = Model.Name "hydra.java.syntax.VariableDeclarator"
+
+_VariableDeclarator_id = Model.Name "id"
+
+_VariableDeclarator_initializer = Model.Name "initializer"
+
+data VariableDeclaratorId =
+  VariableDeclaratorId {
+    variableDeclaratorIdIdentifier :: Identifier,
+    variableDeclaratorIdDims :: (Maybe Dims)}
+  deriving (Eq, Ord, Read, Show)
+
+_VariableDeclaratorId = Model.Name "hydra.java.syntax.VariableDeclaratorId"
+
+_VariableDeclaratorId_identifier = Model.Name "identifier"
+
+_VariableDeclaratorId_dims = Model.Name "dims"
+
+data VariableInitializer =
+  VariableInitializerExpression Expression |
+  VariableInitializerArrayInitializer ArrayInitializer
+  deriving (Eq, Ord, Read, Show)
+
+_VariableInitializer = Model.Name "hydra.java.syntax.VariableInitializer"
+
+_VariableInitializer_expression = Model.Name "expression"
+
+_VariableInitializer_arrayInitializer = Model.Name "arrayInitializer"
+
+-- | A Type which does not allow annotations
+newtype UnannType =
+  UnannType {
+    unUnannType :: Type}
+  deriving (Eq, Ord, Read, Show)
+
+_UnannType = Model.Name "hydra.java.syntax.UnannType"
+
+-- | A ClassType which does not allow annotations
+newtype UnannClassType =
+  UnannClassType {
+    unUnannClassType :: ClassType}
+  deriving (Eq, Ord, Read, Show)
+
+_UnannClassType = Model.Name "hydra.java.syntax.UnannClassType"
+
+data MethodDeclaration =
+  MethodDeclaration {
+    -- | Note: simple methods cannot have annotations
+    methodDeclarationAnnotations :: [Annotation],
+    methodDeclarationModifiers :: [MethodModifier],
+    methodDeclarationHeader :: MethodHeader,
+    methodDeclarationBody :: MethodBody}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodDeclaration = Model.Name "hydra.java.syntax.MethodDeclaration"
+
+_MethodDeclaration_annotations = Model.Name "annotations"
+
+_MethodDeclaration_modifiers = Model.Name "modifiers"
+
+_MethodDeclaration_header = Model.Name "header"
+
+_MethodDeclaration_body = Model.Name "body"
+
+data MethodModifier =
+  MethodModifierAnnotation Annotation |
+  MethodModifierPublic |
+  MethodModifierProtected |
+  MethodModifierPrivate |
+  MethodModifierAbstract |
+  MethodModifierStatic |
+  MethodModifierFinal |
+  MethodModifierSynchronized |
+  MethodModifierNative |
+  MethodModifierStrictfp
+  deriving (Eq, Ord, Read, Show)
+
+_MethodModifier = Model.Name "hydra.java.syntax.MethodModifier"
+
+_MethodModifier_annotation = Model.Name "annotation"
+
+_MethodModifier_public = Model.Name "public"
+
+_MethodModifier_protected = Model.Name "protected"
+
+_MethodModifier_private = Model.Name "private"
+
+_MethodModifier_abstract = Model.Name "abstract"
+
+_MethodModifier_static = Model.Name "static"
+
+_MethodModifier_final = Model.Name "final"
+
+_MethodModifier_synchronized = Model.Name "synchronized"
+
+_MethodModifier_native = Model.Name "native"
+
+_MethodModifier_strictfp = Model.Name "strictfp"
+
+data MethodHeader =
+  MethodHeader {
+    methodHeaderParameters :: [TypeParameter],
+    methodHeaderResult :: Result,
+    methodHeaderDeclarator :: MethodDeclarator,
+    methodHeaderThrows :: (Maybe Throws)}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodHeader = Model.Name "hydra.java.syntax.MethodHeader"
+
+_MethodHeader_parameters = Model.Name "parameters"
+
+_MethodHeader_result = Model.Name "result"
+
+_MethodHeader_declarator = Model.Name "declarator"
+
+_MethodHeader_throws = Model.Name "throws"
+
+data Result =
+  ResultType UnannType |
+  ResultVoid
+  deriving (Eq, Ord, Read, Show)
+
+_Result = Model.Name "hydra.java.syntax.Result"
+
+_Result_type = Model.Name "type"
+
+_Result_void = Model.Name "void"
+
+data MethodDeclarator =
+  MethodDeclarator {
+    methodDeclaratorIdentifier :: Identifier,
+    methodDeclaratorReceiverParameter :: (Maybe ReceiverParameter),
+    methodDeclaratorFormalParameters :: [FormalParameter]}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodDeclarator = Model.Name "hydra.java.syntax.MethodDeclarator"
+
+_MethodDeclarator_identifier = Model.Name "identifier"
+
+_MethodDeclarator_receiverParameter = Model.Name "receiverParameter"
+
+_MethodDeclarator_formalParameters = Model.Name "formalParameters"
+
+data ReceiverParameter =
+  ReceiverParameter {
+    receiverParameterAnnotations :: [Annotation],
+    receiverParameterUnannType :: UnannType,
+    receiverParameterIdentifier :: (Maybe Identifier)}
+  deriving (Eq, Ord, Read, Show)
+
+_ReceiverParameter = Model.Name "hydra.java.syntax.ReceiverParameter"
+
+_ReceiverParameter_annotations = Model.Name "annotations"
+
+_ReceiverParameter_unannType = Model.Name "unannType"
+
+_ReceiverParameter_identifier = Model.Name "identifier"
+
+data FormalParameter =
+  FormalParameterSimple FormalParameter_Simple |
+  FormalParameterVariableArity VariableArityParameter
+  deriving (Eq, Ord, Read, Show)
+
+_FormalParameter = Model.Name "hydra.java.syntax.FormalParameter"
+
+_FormalParameter_simple = Model.Name "simple"
+
+_FormalParameter_variableArity = Model.Name "variableArity"
+
+data FormalParameter_Simple =
+  FormalParameter_Simple {
+    formalParameter_SimpleModifiers :: [VariableModifier],
+    formalParameter_SimpleType :: UnannType,
+    formalParameter_SimpleId :: VariableDeclaratorId}
+  deriving (Eq, Ord, Read, Show)
+
+_FormalParameter_Simple = Model.Name "hydra.java.syntax.FormalParameter_Simple"
+
+_FormalParameter_Simple_modifiers = Model.Name "modifiers"
+
+_FormalParameter_Simple_type = Model.Name "type"
+
+_FormalParameter_Simple_id = Model.Name "id"
+
+data VariableArityParameter =
+  VariableArityParameter {
+    variableArityParameterModifiers :: [VariableModifier],
+    variableArityParameterType :: UnannType,
+    variableArityParameterAnnotations :: [Annotation],
+    variableArityParameterIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_VariableArityParameter = Model.Name "hydra.java.syntax.VariableArityParameter"
+
+_VariableArityParameter_modifiers = Model.Name "modifiers"
+
+_VariableArityParameter_type = Model.Name "type"
+
+_VariableArityParameter_annotations = Model.Name "annotations"
+
+_VariableArityParameter_identifier = Model.Name "identifier"
+
+data VariableModifier =
+  VariableModifierAnnotation Annotation |
+  VariableModifierFinal
+  deriving (Eq, Ord, Read, Show)
+
+_VariableModifier = Model.Name "hydra.java.syntax.VariableModifier"
+
+_VariableModifier_annotation = Model.Name "annotation"
+
+_VariableModifier_final = Model.Name "final"
+
+newtype Throws =
+  Throws {
+    unThrows :: [ExceptionType]}
+  deriving (Eq, Ord, Read, Show)
+
+_Throws = Model.Name "hydra.java.syntax.Throws"
+
+data ExceptionType =
+  ExceptionTypeClass ClassType |
+  ExceptionTypeVariable TypeVariable
+  deriving (Eq, Ord, Read, Show)
+
+_ExceptionType = Model.Name "hydra.java.syntax.ExceptionType"
+
+_ExceptionType_class = Model.Name "class"
+
+_ExceptionType_variable = Model.Name "variable"
+
+data MethodBody =
+  MethodBodyBlock Block |
+  MethodBodyNone
+  deriving (Eq, Ord, Read, Show)
+
+_MethodBody = Model.Name "hydra.java.syntax.MethodBody"
+
+_MethodBody_block = Model.Name "block"
+
+_MethodBody_none = Model.Name "none"
+
+newtype InstanceInitializer =
+  InstanceInitializer {
+    unInstanceInitializer :: Block}
+  deriving (Eq, Ord, Read, Show)
+
+_InstanceInitializer = Model.Name "hydra.java.syntax.InstanceInitializer"
+
+newtype StaticInitializer =
+  StaticInitializer {
+    unStaticInitializer :: Block}
+  deriving (Eq, Ord, Read, Show)
+
+_StaticInitializer = Model.Name "hydra.java.syntax.StaticInitializer"
+
+data ConstructorDeclaration =
+  ConstructorDeclaration {
+    constructorDeclarationModifiers :: [ConstructorModifier],
+    constructorDeclarationConstructor :: ConstructorDeclarator,
+    constructorDeclarationThrows :: (Maybe Throws),
+    constructorDeclarationBody :: ConstructorBody}
+  deriving (Eq, Ord, Read, Show)
+
+_ConstructorDeclaration = Model.Name "hydra.java.syntax.ConstructorDeclaration"
+
+_ConstructorDeclaration_modifiers = Model.Name "modifiers"
+
+_ConstructorDeclaration_constructor = Model.Name "constructor"
+
+_ConstructorDeclaration_throws = Model.Name "throws"
+
+_ConstructorDeclaration_body = Model.Name "body"
+
+data ConstructorModifier =
+  ConstructorModifierAnnotation Annotation |
+  ConstructorModifierPublic |
+  ConstructorModifierProtected |
+  ConstructorModifierPrivate
+  deriving (Eq, Ord, Read, Show)
+
+_ConstructorModifier = Model.Name "hydra.java.syntax.ConstructorModifier"
+
+_ConstructorModifier_annotation = Model.Name "annotation"
+
+_ConstructorModifier_public = Model.Name "public"
+
+_ConstructorModifier_protected = Model.Name "protected"
+
+_ConstructorModifier_private = Model.Name "private"
+
+data ConstructorDeclarator =
+  ConstructorDeclarator {
+    constructorDeclaratorParameters :: [TypeParameter],
+    constructorDeclaratorName :: SimpleTypeName,
+    constructorDeclaratorReceiverParameter :: (Maybe ReceiverParameter),
+    constructorDeclaratorFormalParameters :: [FormalParameter]}
+  deriving (Eq, Ord, Read, Show)
+
+_ConstructorDeclarator = Model.Name "hydra.java.syntax.ConstructorDeclarator"
+
+_ConstructorDeclarator_parameters = Model.Name "parameters"
+
+_ConstructorDeclarator_name = Model.Name "name"
+
+_ConstructorDeclarator_receiverParameter = Model.Name "receiverParameter"
+
+_ConstructorDeclarator_formalParameters = Model.Name "formalParameters"
+
+newtype SimpleTypeName =
+  SimpleTypeName {
+    unSimpleTypeName :: TypeIdentifier}
+  deriving (Eq, Ord, Read, Show)
+
+_SimpleTypeName = Model.Name "hydra.java.syntax.SimpleTypeName"
+
+data ConstructorBody =
+  ConstructorBody {
+    constructorBodyInvocation :: (Maybe ExplicitConstructorInvocation),
+    constructorBodyStatements :: [BlockStatement]}
+  deriving (Eq, Ord, Read, Show)
+
+_ConstructorBody = Model.Name "hydra.java.syntax.ConstructorBody"
+
+_ConstructorBody_invocation = Model.Name "invocation"
+
+_ConstructorBody_statements = Model.Name "statements"
+
+data ExplicitConstructorInvocation =
+  ExplicitConstructorInvocation {
+    explicitConstructorInvocationTypeArguments :: [TypeArgument],
+    explicitConstructorInvocationArguments :: [Expression],
+    explicitConstructorInvocationVariant :: ExplicitConstructorInvocation_Variant}
+  deriving (Eq, Ord, Read, Show)
+
+_ExplicitConstructorInvocation = Model.Name "hydra.java.syntax.ExplicitConstructorInvocation"
+
+_ExplicitConstructorInvocation_typeArguments = Model.Name "typeArguments"
+
+_ExplicitConstructorInvocation_arguments = Model.Name "arguments"
+
+_ExplicitConstructorInvocation_variant = Model.Name "variant"
+
+data ExplicitConstructorInvocation_Variant =
+  ExplicitConstructorInvocation_VariantThis |
+  ExplicitConstructorInvocation_VariantSuper (Maybe ExpressionName) |
+  ExplicitConstructorInvocation_VariantPrimary Primary
+  deriving (Eq, Ord, Read, Show)
+
+_ExplicitConstructorInvocation_Variant = Model.Name "hydra.java.syntax.ExplicitConstructorInvocation_Variant"
+
+_ExplicitConstructorInvocation_Variant_this = Model.Name "this"
+
+_ExplicitConstructorInvocation_Variant_super = Model.Name "super"
+
+_ExplicitConstructorInvocation_Variant_primary = Model.Name "primary"
+
+data EnumDeclaration =
+  EnumDeclaration {
+    enumDeclarationModifiers :: [ClassModifier],
+    enumDeclarationIdentifier :: TypeIdentifier,
+    enumDeclarationImplements :: [InterfaceType],
+    enumDeclarationBody :: EnumBody}
+  deriving (Eq, Ord, Read, Show)
+
+_EnumDeclaration = Model.Name "hydra.java.syntax.EnumDeclaration"
+
+_EnumDeclaration_modifiers = Model.Name "modifiers"
+
+_EnumDeclaration_identifier = Model.Name "identifier"
+
+_EnumDeclaration_implements = Model.Name "implements"
+
+_EnumDeclaration_body = Model.Name "body"
+
+newtype EnumBody =
+  EnumBody {
+    unEnumBody :: [EnumBody_Element]}
+  deriving (Eq, Ord, Read, Show)
+
+_EnumBody = Model.Name "hydra.java.syntax.EnumBody"
+
+data EnumBody_Element =
+  EnumBody_Element {
+    enumBody_ElementConstants :: [EnumConstant],
+    enumBody_ElementBodyDeclarations :: [ClassBodyDeclaration]}
+  deriving (Eq, Ord, Read, Show)
+
+_EnumBody_Element = Model.Name "hydra.java.syntax.EnumBody_Element"
+
+_EnumBody_Element_constants = Model.Name "constants"
+
+_EnumBody_Element_bodyDeclarations = Model.Name "bodyDeclarations"
+
+data EnumConstant =
+  EnumConstant {
+    enumConstantModifiers :: [EnumConstantModifier],
+    enumConstantIdentifier :: Identifier,
+    enumConstantArguments :: (Maybe [Expression]),
+    enumConstantBody :: (Maybe ClassBody)}
+  deriving (Eq, Ord, Read, Show)
+
+_EnumConstant = Model.Name "hydra.java.syntax.EnumConstant"
+
+_EnumConstant_modifiers = Model.Name "modifiers"
+
+_EnumConstant_identifier = Model.Name "identifier"
+
+_EnumConstant_arguments = Model.Name "arguments"
+
+_EnumConstant_body = Model.Name "body"
+
+newtype EnumConstantModifier =
+  EnumConstantModifier {
+    unEnumConstantModifier :: Annotation}
+  deriving (Eq, Ord, Read, Show)
+
+_EnumConstantModifier = Model.Name "hydra.java.syntax.EnumConstantModifier"
+
+data RecordDeclaration =
+  RecordDeclaration {
+    recordDeclarationModifiers :: [ClassModifier],
+    recordDeclarationIdentifier :: TypeIdentifier,
+    recordDeclarationParameters :: [TypeParameter],
+    recordDeclarationHeader :: RecordHeader,
+    recordDeclarationImplements :: [InterfaceType],
+    recordDeclarationBody :: RecordBody}
+  deriving (Eq, Ord, Read, Show)
+
+_RecordDeclaration = Model.Name "hydra.java.syntax.RecordDeclaration"
+
+_RecordDeclaration_modifiers = Model.Name "modifiers"
+
+_RecordDeclaration_identifier = Model.Name "identifier"
+
+_RecordDeclaration_parameters = Model.Name "parameters"
+
+_RecordDeclaration_header = Model.Name "header"
+
+_RecordDeclaration_implements = Model.Name "implements"
+
+_RecordDeclaration_body = Model.Name "body"
+
+newtype RecordHeader =
+  RecordHeader {
+    unRecordHeader :: [RecordComponent]}
+  deriving (Eq, Ord, Read, Show)
+
+_RecordHeader = Model.Name "hydra.java.syntax.RecordHeader"
+
+data RecordComponent =
+  RecordComponentSimple RecordComponent_Simple |
+  RecordComponentVariableArity VariableArityRecordComponent
+  deriving (Eq, Ord, Read, Show)
+
+_RecordComponent = Model.Name "hydra.java.syntax.RecordComponent"
+
+_RecordComponent_simple = Model.Name "simple"
+
+_RecordComponent_variableArity = Model.Name "variableArity"
+
+data RecordComponent_Simple =
+  RecordComponent_Simple {
+    recordComponent_SimpleModifiers :: [RecordComponentModifier],
+    recordComponent_SimpleType :: UnannType,
+    recordComponent_SimpleIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_RecordComponent_Simple = Model.Name "hydra.java.syntax.RecordComponent_Simple"
+
+_RecordComponent_Simple_modifiers = Model.Name "modifiers"
+
+_RecordComponent_Simple_type = Model.Name "type"
+
+_RecordComponent_Simple_identifier = Model.Name "identifier"
+
+data VariableArityRecordComponent =
+  VariableArityRecordComponent {
+    variableArityRecordComponentModifiers :: [RecordComponentModifier],
+    variableArityRecordComponentType :: UnannType,
+    variableArityRecordComponentAnnotations :: [Annotation],
+    variableArityRecordComponentIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_VariableArityRecordComponent = Model.Name "hydra.java.syntax.VariableArityRecordComponent"
+
+_VariableArityRecordComponent_modifiers = Model.Name "modifiers"
+
+_VariableArityRecordComponent_type = Model.Name "type"
+
+_VariableArityRecordComponent_annotations = Model.Name "annotations"
+
+_VariableArityRecordComponent_identifier = Model.Name "identifier"
+
+newtype RecordComponentModifier =
+  RecordComponentModifier {
+    unRecordComponentModifier :: Annotation}
+  deriving (Eq, Ord, Read, Show)
+
+_RecordComponentModifier = Model.Name "hydra.java.syntax.RecordComponentModifier"
+
+newtype RecordBody =
+  RecordBody {
+    unRecordBody :: [RecordBodyDeclaration]}
+  deriving (Eq, Ord, Read, Show)
+
+_RecordBody = Model.Name "hydra.java.syntax.RecordBody"
+
+data RecordBodyDeclaration =
+  RecordBodyDeclarationClassBody ClassBodyDeclaration |
+  RecordBodyDeclarationCompactConstructor CompactConstructorDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_RecordBodyDeclaration = Model.Name "hydra.java.syntax.RecordBodyDeclaration"
+
+_RecordBodyDeclaration_classBody = Model.Name "classBody"
+
+_RecordBodyDeclaration_compactConstructor = Model.Name "compactConstructor"
+
+data CompactConstructorDeclaration =
+  CompactConstructorDeclaration {
+    compactConstructorDeclarationModifiers :: [ConstructorModifier],
+    compactConstructorDeclarationName :: SimpleTypeName,
+    compactConstructorDeclarationBody :: ConstructorBody}
+  deriving (Eq, Ord, Read, Show)
+
+_CompactConstructorDeclaration = Model.Name "hydra.java.syntax.CompactConstructorDeclaration"
+
+_CompactConstructorDeclaration_modifiers = Model.Name "modifiers"
+
+_CompactConstructorDeclaration_name = Model.Name "name"
+
+_CompactConstructorDeclaration_body = Model.Name "body"
+
+data InterfaceDeclaration =
+  InterfaceDeclarationNormalInterface NormalInterfaceDeclaration |
+  InterfaceDeclarationAnnotationInterface AnnotationInterfaceDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceDeclaration = Model.Name "hydra.java.syntax.InterfaceDeclaration"
+
+_InterfaceDeclaration_normalInterface = Model.Name "normalInterface"
+
+_InterfaceDeclaration_annotationInterface = Model.Name "annotationInterface"
+
+data NormalInterfaceDeclaration =
+  NormalInterfaceDeclaration {
+    normalInterfaceDeclarationModifiers :: [InterfaceModifier],
+    normalInterfaceDeclarationIdentifier :: TypeIdentifier,
+    normalInterfaceDeclarationParameters :: [TypeParameter],
+    normalInterfaceDeclarationExtends :: [InterfaceType],
+    normalInterfaceDeclarationPermits :: [TypeName],
+    normalInterfaceDeclarationBody :: InterfaceBody}
+  deriving (Eq, Ord, Read, Show)
+
+_NormalInterfaceDeclaration = Model.Name "hydra.java.syntax.NormalInterfaceDeclaration"
+
+_NormalInterfaceDeclaration_modifiers = Model.Name "modifiers"
+
+_NormalInterfaceDeclaration_identifier = Model.Name "identifier"
+
+_NormalInterfaceDeclaration_parameters = Model.Name "parameters"
+
+_NormalInterfaceDeclaration_extends = Model.Name "extends"
+
+_NormalInterfaceDeclaration_permits = Model.Name "permits"
+
+_NormalInterfaceDeclaration_body = Model.Name "body"
+
+data InterfaceModifier =
+  InterfaceModifierAnnotation Annotation |
+  InterfaceModifierPublic |
+  InterfaceModifierProtected |
+  InterfaceModifierPrivate |
+  InterfaceModifierAbstract |
+  InterfaceModifierStatic |
+  InterfaceModifierSealed |
+  InterfaceModifierNonSealed |
+  InterfaceModifierStrictfp
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceModifier = Model.Name "hydra.java.syntax.InterfaceModifier"
+
+_InterfaceModifier_annotation = Model.Name "annotation"
+
+_InterfaceModifier_public = Model.Name "public"
+
+_InterfaceModifier_protected = Model.Name "protected"
+
+_InterfaceModifier_private = Model.Name "private"
+
+_InterfaceModifier_abstract = Model.Name "abstract"
+
+_InterfaceModifier_static = Model.Name "static"
+
+_InterfaceModifier_sealed = Model.Name "sealed"
+
+_InterfaceModifier_nonSealed = Model.Name "nonSealed"
+
+_InterfaceModifier_strictfp = Model.Name "strictfp"
+
+newtype InterfaceBody =
+  InterfaceBody {
+    unInterfaceBody :: [InterfaceMemberDeclarationWithComments]}
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceBody = Model.Name "hydra.java.syntax.InterfaceBody"
+
+data InterfaceMemberDeclaration =
+  InterfaceMemberDeclarationConstant ConstantDeclaration |
+  InterfaceMemberDeclarationInterfaceMethod InterfaceMethodDeclaration |
+  InterfaceMemberDeclarationClass ClassDeclaration |
+  InterfaceMemberDeclarationInterface InterfaceDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceMemberDeclaration = Model.Name "hydra.java.syntax.InterfaceMemberDeclaration"
+
+_InterfaceMemberDeclaration_constant = Model.Name "constant"
+
+_InterfaceMemberDeclaration_interfaceMethod = Model.Name "interfaceMethod"
+
+_InterfaceMemberDeclaration_class = Model.Name "class"
+
+_InterfaceMemberDeclaration_interface = Model.Name "interface"
+
+data InterfaceMemberDeclarationWithComments =
+  InterfaceMemberDeclarationWithComments {
+    interfaceMemberDeclarationWithCommentsValue :: InterfaceMemberDeclaration,
+    interfaceMemberDeclarationWithCommentsComments :: (Maybe String)}
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceMemberDeclarationWithComments = Model.Name "hydra.java.syntax.InterfaceMemberDeclarationWithComments"
+
+_InterfaceMemberDeclarationWithComments_value = Model.Name "value"
+
+_InterfaceMemberDeclarationWithComments_comments = Model.Name "comments"
+
+data ConstantDeclaration =
+  ConstantDeclaration {
+    constantDeclarationModifiers :: [ConstantModifier],
+    constantDeclarationType :: UnannType,
+    constantDeclarationVariables :: [VariableDeclarator]}
+  deriving (Eq, Ord, Read, Show)
+
+_ConstantDeclaration = Model.Name "hydra.java.syntax.ConstantDeclaration"
+
+_ConstantDeclaration_modifiers = Model.Name "modifiers"
+
+_ConstantDeclaration_type = Model.Name "type"
+
+_ConstantDeclaration_variables = Model.Name "variables"
+
+data ConstantModifier =
+  ConstantModifierAnnotation Annotation |
+  ConstantModifierPublic |
+  ConstantModifierStatic |
+  ConstantModifierFinal
+  deriving (Eq, Ord, Read, Show)
+
+_ConstantModifier = Model.Name "hydra.java.syntax.ConstantModifier"
+
+_ConstantModifier_annotation = Model.Name "annotation"
+
+_ConstantModifier_public = Model.Name "public"
+
+_ConstantModifier_static = Model.Name "static"
+
+_ConstantModifier_final = Model.Name "final"
+
+data InterfaceMethodDeclaration =
+  InterfaceMethodDeclaration {
+    interfaceMethodDeclarationModifiers :: [InterfaceMethodModifier],
+    interfaceMethodDeclarationHeader :: MethodHeader,
+    interfaceMethodDeclarationBody :: MethodBody}
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceMethodDeclaration = Model.Name "hydra.java.syntax.InterfaceMethodDeclaration"
+
+_InterfaceMethodDeclaration_modifiers = Model.Name "modifiers"
+
+_InterfaceMethodDeclaration_header = Model.Name "header"
+
+_InterfaceMethodDeclaration_body = Model.Name "body"
+
+data InterfaceMethodModifier =
+  InterfaceMethodModifierAnnotation Annotation |
+  InterfaceMethodModifierPublic |
+  InterfaceMethodModifierPrivate |
+  InterfaceMethodModifierAbstract |
+  InterfaceMethodModifierDefault |
+  InterfaceMethodModifierStatic |
+  InterfaceMethodModifierStrictfp
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceMethodModifier = Model.Name "hydra.java.syntax.InterfaceMethodModifier"
+
+_InterfaceMethodModifier_annotation = Model.Name "annotation"
+
+_InterfaceMethodModifier_public = Model.Name "public"
+
+_InterfaceMethodModifier_private = Model.Name "private"
+
+_InterfaceMethodModifier_abstract = Model.Name "abstract"
+
+_InterfaceMethodModifier_default = Model.Name "default"
+
+_InterfaceMethodModifier_static = Model.Name "static"
+
+_InterfaceMethodModifier_strictfp = Model.Name "strictfp"
+
+data AnnotationInterfaceDeclaration =
+  AnnotationInterfaceDeclaration {
+    annotationInterfaceDeclarationModifiers :: [InterfaceModifier],
+    annotationInterfaceDeclarationIdentifier :: TypeIdentifier,
+    annotationInterfaceDeclarationBody :: AnnotationInterfaceBody}
+  deriving (Eq, Ord, Read, Show)
+
+_AnnotationInterfaceDeclaration = Model.Name "hydra.java.syntax.AnnotationInterfaceDeclaration"
+
+_AnnotationInterfaceDeclaration_modifiers = Model.Name "modifiers"
+
+_AnnotationInterfaceDeclaration_identifier = Model.Name "identifier"
+
+_AnnotationInterfaceDeclaration_body = Model.Name "body"
+
+newtype AnnotationInterfaceBody =
+  AnnotationInterfaceBody {
+    unAnnotationInterfaceBody :: [AnnotationInterfaceMemberDeclaration]}
+  deriving (Eq, Ord, Read, Show)
+
+_AnnotationInterfaceBody = Model.Name "hydra.java.syntax.AnnotationInterfaceBody"
+
+data AnnotationInterfaceMemberDeclaration =
+  AnnotationInterfaceMemberDeclarationAnnotationInterface AnnotationInterfaceElementDeclaration |
+  AnnotationInterfaceMemberDeclarationConstant ConstantDeclaration |
+  AnnotationInterfaceMemberDeclarationClass ClassDeclaration |
+  AnnotationInterfaceMemberDeclarationInterface InterfaceDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_AnnotationInterfaceMemberDeclaration = Model.Name "hydra.java.syntax.AnnotationInterfaceMemberDeclaration"
+
+_AnnotationInterfaceMemberDeclaration_annotationInterface = Model.Name "annotationInterface"
+
+_AnnotationInterfaceMemberDeclaration_constant = Model.Name "constant"
+
+_AnnotationInterfaceMemberDeclaration_class = Model.Name "class"
+
+_AnnotationInterfaceMemberDeclaration_interface = Model.Name "interface"
+
+data AnnotationInterfaceElementDeclaration =
+  AnnotationInterfaceElementDeclaration {
+    annotationInterfaceElementDeclarationModifiers :: [AnnotationInterfaceElementModifier],
+    annotationInterfaceElementDeclarationType :: UnannType,
+    annotationInterfaceElementDeclarationIdentifier :: Identifier,
+    annotationInterfaceElementDeclarationDims :: (Maybe Dims),
+    annotationInterfaceElementDeclarationDefault :: (Maybe DefaultValue)}
+  deriving (Eq, Ord, Read, Show)
+
+_AnnotationInterfaceElementDeclaration = Model.Name "hydra.java.syntax.AnnotationInterfaceElementDeclaration"
+
+_AnnotationInterfaceElementDeclaration_modifiers = Model.Name "modifiers"
+
+_AnnotationInterfaceElementDeclaration_type = Model.Name "type"
+
+_AnnotationInterfaceElementDeclaration_identifier = Model.Name "identifier"
+
+_AnnotationInterfaceElementDeclaration_dims = Model.Name "dims"
+
+_AnnotationInterfaceElementDeclaration_default = Model.Name "default"
+
+data AnnotationInterfaceElementModifier =
+  AnnotationInterfaceElementModifierAnnotation Annotation |
+  AnnotationInterfaceElementModifierPublic |
+  AnnotationInterfaceElementModifierAbstract
+  deriving (Eq, Ord, Read, Show)
+
+_AnnotationInterfaceElementModifier = Model.Name "hydra.java.syntax.AnnotationInterfaceElementModifier"
+
+_AnnotationInterfaceElementModifier_annotation = Model.Name "annotation"
+
+_AnnotationInterfaceElementModifier_public = Model.Name "public"
+
+_AnnotationInterfaceElementModifier_abstract = Model.Name "abstract"
+
+newtype DefaultValue =
+  DefaultValue {
+    unDefaultValue :: ElementValue}
+  deriving (Eq, Ord, Read, Show)
+
+_DefaultValue = Model.Name "hydra.java.syntax.DefaultValue"
+
+data Annotation =
+  AnnotationNormal NormalAnnotation |
+  AnnotationMarker MarkerAnnotation |
+  AnnotationSingleElement SingleElementAnnotation
+  deriving (Eq, Ord, Read, Show)
+
+_Annotation = Model.Name "hydra.java.syntax.Annotation"
+
+_Annotation_normal = Model.Name "normal"
+
+_Annotation_marker = Model.Name "marker"
+
+_Annotation_singleElement = Model.Name "singleElement"
+
+data NormalAnnotation =
+  NormalAnnotation {
+    normalAnnotationTypeName :: TypeName,
+    normalAnnotationPairs :: [ElementValuePair]}
+  deriving (Eq, Ord, Read, Show)
+
+_NormalAnnotation = Model.Name "hydra.java.syntax.NormalAnnotation"
+
+_NormalAnnotation_typeName = Model.Name "typeName"
+
+_NormalAnnotation_pairs = Model.Name "pairs"
+
+data ElementValuePair =
+  ElementValuePair {
+    elementValuePairKey :: Identifier,
+    elementValuePairValue :: ElementValue}
+  deriving (Eq, Ord, Read, Show)
+
+_ElementValuePair = Model.Name "hydra.java.syntax.ElementValuePair"
+
+_ElementValuePair_key = Model.Name "key"
+
+_ElementValuePair_value = Model.Name "value"
+
+data ElementValue =
+  ElementValueConditionalExpression ConditionalExpression |
+  ElementValueElementValueArrayInitializer ElementValueArrayInitializer |
+  ElementValueAnnotation Annotation
+  deriving (Eq, Ord, Read, Show)
+
+_ElementValue = Model.Name "hydra.java.syntax.ElementValue"
+
+_ElementValue_conditionalExpression = Model.Name "conditionalExpression"
+
+_ElementValue_elementValueArrayInitializer = Model.Name "elementValueArrayInitializer"
+
+_ElementValue_annotation = Model.Name "annotation"
+
+newtype ElementValueArrayInitializer =
+  ElementValueArrayInitializer {
+    unElementValueArrayInitializer :: [ElementValue]}
+  deriving (Eq, Ord, Read, Show)
+
+_ElementValueArrayInitializer = Model.Name "hydra.java.syntax.ElementValueArrayInitializer"
+
+newtype MarkerAnnotation =
+  MarkerAnnotation {
+    unMarkerAnnotation :: TypeName}
+  deriving (Eq, Ord, Read, Show)
+
+_MarkerAnnotation = Model.Name "hydra.java.syntax.MarkerAnnotation"
+
+data SingleElementAnnotation =
+  SingleElementAnnotation {
+    singleElementAnnotationName :: TypeName,
+    singleElementAnnotationValue :: (Maybe ElementValue)}
+  deriving (Eq, Ord, Read, Show)
+
+_SingleElementAnnotation = Model.Name "hydra.java.syntax.SingleElementAnnotation"
+
+_SingleElementAnnotation_name = Model.Name "name"
+
+_SingleElementAnnotation_value = Model.Name "value"
+
+newtype ArrayInitializer =
+  ArrayInitializer {
+    unArrayInitializer :: [[VariableInitializer]]}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayInitializer = Model.Name "hydra.java.syntax.ArrayInitializer"
+
+newtype Block =
+  Block {
+    unBlock :: [BlockStatement]}
+  deriving (Eq, Ord, Read, Show)
+
+_Block = Model.Name "hydra.java.syntax.Block"
+
+data BlockStatement =
+  BlockStatementLocalVariableDeclaration LocalVariableDeclarationStatement |
+  BlockStatementLocalClassOrInterface LocalClassOrInterfaceDeclaration |
+  BlockStatementStatement Statement
+  deriving (Eq, Ord, Read, Show)
+
+_BlockStatement = Model.Name "hydra.java.syntax.BlockStatement"
+
+_BlockStatement_localVariableDeclaration = Model.Name "localVariableDeclaration"
+
+_BlockStatement_localClassOrInterface = Model.Name "localClassOrInterface"
+
+_BlockStatement_statement = Model.Name "statement"
+
+data LocalClassOrInterfaceDeclaration =
+  LocalClassOrInterfaceDeclarationClass ClassDeclaration |
+  LocalClassOrInterfaceDeclarationNormalInterface NormalInterfaceDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_LocalClassOrInterfaceDeclaration = Model.Name "hydra.java.syntax.LocalClassOrInterfaceDeclaration"
+
+_LocalClassOrInterfaceDeclaration_class = Model.Name "class"
+
+_LocalClassOrInterfaceDeclaration_normalInterface = Model.Name "normalInterface"
+
+newtype LocalVariableDeclarationStatement =
+  LocalVariableDeclarationStatement {
+    unLocalVariableDeclarationStatement :: LocalVariableDeclaration}
+  deriving (Eq, Ord, Read, Show)
+
+_LocalVariableDeclarationStatement = Model.Name "hydra.java.syntax.LocalVariableDeclarationStatement"
+
+data LocalVariableDeclaration =
+  LocalVariableDeclaration {
+    localVariableDeclarationModifiers :: [VariableModifier],
+    localVariableDeclarationType :: LocalVariableType,
+    localVariableDeclarationDeclarators :: [VariableDeclarator]}
+  deriving (Eq, Ord, Read, Show)
+
+_LocalVariableDeclaration = Model.Name "hydra.java.syntax.LocalVariableDeclaration"
+
+_LocalVariableDeclaration_modifiers = Model.Name "modifiers"
+
+_LocalVariableDeclaration_type = Model.Name "type"
+
+_LocalVariableDeclaration_declarators = Model.Name "declarators"
+
+data LocalVariableType =
+  LocalVariableTypeType UnannType |
+  LocalVariableTypeVar
+  deriving (Eq, Ord, Read, Show)
+
+_LocalVariableType = Model.Name "hydra.java.syntax.LocalVariableType"
+
+_LocalVariableType_type = Model.Name "type"
+
+_LocalVariableType_var = Model.Name "var"
+
+data Statement =
+  StatementWithoutTrailing StatementWithoutTrailingSubstatement |
+  StatementLabeled LabeledStatement |
+  StatementIfThen IfThenStatement |
+  StatementIfThenElse IfThenElseStatement |
+  StatementWhile WhileStatement |
+  StatementFor ForStatement
+  deriving (Eq, Ord, Read, Show)
+
+_Statement = Model.Name "hydra.java.syntax.Statement"
+
+_Statement_withoutTrailing = Model.Name "withoutTrailing"
+
+_Statement_labeled = Model.Name "labeled"
+
+_Statement_ifThen = Model.Name "ifThen"
+
+_Statement_ifThenElse = Model.Name "ifThenElse"
+
+_Statement_while = Model.Name "while"
+
+_Statement_for = Model.Name "for"
+
+data StatementNoShortIf =
+  StatementNoShortIfWithoutTrailing StatementWithoutTrailingSubstatement |
+  StatementNoShortIfLabeled LabeledStatementNoShortIf |
+  StatementNoShortIfIfThenElse IfThenElseStatementNoShortIf |
+  StatementNoShortIfWhile WhileStatementNoShortIf |
+  StatementNoShortIfFor ForStatementNoShortIf
+  deriving (Eq, Ord, Read, Show)
+
+_StatementNoShortIf = Model.Name "hydra.java.syntax.StatementNoShortIf"
+
+_StatementNoShortIf_withoutTrailing = Model.Name "withoutTrailing"
+
+_StatementNoShortIf_labeled = Model.Name "labeled"
+
+_StatementNoShortIf_ifThenElse = Model.Name "ifThenElse"
+
+_StatementNoShortIf_while = Model.Name "while"
+
+_StatementNoShortIf_for = Model.Name "for"
+
+data StatementWithoutTrailingSubstatement =
+  StatementWithoutTrailingSubstatementBlock Block |
+  StatementWithoutTrailingSubstatementEmpty |
+  StatementWithoutTrailingSubstatementExpression ExpressionStatement |
+  StatementWithoutTrailingSubstatementAssert AssertStatement |
+  StatementWithoutTrailingSubstatementSwitch SwitchStatement |
+  StatementWithoutTrailingSubstatementDo DoStatement |
+  StatementWithoutTrailingSubstatementBreak BreakStatement |
+  StatementWithoutTrailingSubstatementContinue ContinueStatement |
+  StatementWithoutTrailingSubstatementReturn ReturnStatement |
+  StatementWithoutTrailingSubstatementSynchronized SynchronizedStatement |
+  StatementWithoutTrailingSubstatementThrow ThrowStatement |
+  StatementWithoutTrailingSubstatementTry TryStatement |
+  StatementWithoutTrailingSubstatementYield YieldStatement
+  deriving (Eq, Ord, Read, Show)
+
+_StatementWithoutTrailingSubstatement = Model.Name "hydra.java.syntax.StatementWithoutTrailingSubstatement"
+
+_StatementWithoutTrailingSubstatement_block = Model.Name "block"
+
+_StatementWithoutTrailingSubstatement_empty = Model.Name "empty"
+
+_StatementWithoutTrailingSubstatement_expression = Model.Name "expression"
+
+_StatementWithoutTrailingSubstatement_assert = Model.Name "assert"
+
+_StatementWithoutTrailingSubstatement_switch = Model.Name "switch"
+
+_StatementWithoutTrailingSubstatement_do = Model.Name "do"
+
+_StatementWithoutTrailingSubstatement_break = Model.Name "break"
+
+_StatementWithoutTrailingSubstatement_continue = Model.Name "continue"
+
+_StatementWithoutTrailingSubstatement_return = Model.Name "return"
+
+_StatementWithoutTrailingSubstatement_synchronized = Model.Name "synchronized"
+
+_StatementWithoutTrailingSubstatement_throw = Model.Name "throw"
+
+_StatementWithoutTrailingSubstatement_try = Model.Name "try"
+
+_StatementWithoutTrailingSubstatement_yield = Model.Name "yield"
+
+data LabeledStatement =
+  LabeledStatement {
+    labeledStatementIdentifier :: Identifier,
+    labeledStatementStatement :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_LabeledStatement = Model.Name "hydra.java.syntax.LabeledStatement"
+
+_LabeledStatement_identifier = Model.Name "identifier"
+
+_LabeledStatement_statement = Model.Name "statement"
+
+data LabeledStatementNoShortIf =
+  LabeledStatementNoShortIf {
+    labeledStatementNoShortIfIdentifier :: Identifier,
+    labeledStatementNoShortIfStatement :: StatementNoShortIf}
+  deriving (Eq, Ord, Read, Show)
+
+_LabeledStatementNoShortIf = Model.Name "hydra.java.syntax.LabeledStatementNoShortIf"
+
+_LabeledStatementNoShortIf_identifier = Model.Name "identifier"
+
+_LabeledStatementNoShortIf_statement = Model.Name "statement"
+
+newtype ExpressionStatement =
+  ExpressionStatement {
+    unExpressionStatement :: StatementExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ExpressionStatement = Model.Name "hydra.java.syntax.ExpressionStatement"
+
+data StatementExpression =
+  StatementExpressionAssignment Assignment |
+  StatementExpressionPreIncrement PreIncrementExpression |
+  StatementExpressionPreDecrement PreDecrementExpression |
+  StatementExpressionPostIncrement PostIncrementExpression |
+  StatementExpressionPostDecrement PostDecrementExpression |
+  StatementExpressionMethodInvocation MethodInvocation |
+  StatementExpressionClassInstanceCreation ClassInstanceCreationExpression
+  deriving (Eq, Ord, Read, Show)
+
+_StatementExpression = Model.Name "hydra.java.syntax.StatementExpression"
+
+_StatementExpression_assignment = Model.Name "assignment"
+
+_StatementExpression_preIncrement = Model.Name "preIncrement"
+
+_StatementExpression_preDecrement = Model.Name "preDecrement"
+
+_StatementExpression_postIncrement = Model.Name "postIncrement"
+
+_StatementExpression_postDecrement = Model.Name "postDecrement"
+
+_StatementExpression_methodInvocation = Model.Name "methodInvocation"
+
+_StatementExpression_classInstanceCreation = Model.Name "classInstanceCreation"
+
+data IfThenStatement =
+  IfThenStatement {
+    ifThenStatementExpression :: Expression,
+    ifThenStatementStatement :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_IfThenStatement = Model.Name "hydra.java.syntax.IfThenStatement"
+
+_IfThenStatement_expression = Model.Name "expression"
+
+_IfThenStatement_statement = Model.Name "statement"
+
+data IfThenElseStatement =
+  IfThenElseStatement {
+    ifThenElseStatementCond :: (Maybe Expression),
+    ifThenElseStatementThen :: StatementNoShortIf,
+    ifThenElseStatementElse :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_IfThenElseStatement = Model.Name "hydra.java.syntax.IfThenElseStatement"
+
+_IfThenElseStatement_cond = Model.Name "cond"
+
+_IfThenElseStatement_then = Model.Name "then"
+
+_IfThenElseStatement_else = Model.Name "else"
+
+data IfThenElseStatementNoShortIf =
+  IfThenElseStatementNoShortIf {
+    ifThenElseStatementNoShortIfCond :: (Maybe Expression),
+    ifThenElseStatementNoShortIfThen :: StatementNoShortIf,
+    ifThenElseStatementNoShortIfElse :: StatementNoShortIf}
+  deriving (Eq, Ord, Read, Show)
+
+_IfThenElseStatementNoShortIf = Model.Name "hydra.java.syntax.IfThenElseStatementNoShortIf"
+
+_IfThenElseStatementNoShortIf_cond = Model.Name "cond"
+
+_IfThenElseStatementNoShortIf_then = Model.Name "then"
+
+_IfThenElseStatementNoShortIf_else = Model.Name "else"
+
+data AssertStatement =
+  AssertStatementSingle Expression |
+  AssertStatementPair AssertStatement_Pair
+  deriving (Eq, Ord, Read, Show)
+
+_AssertStatement = Model.Name "hydra.java.syntax.AssertStatement"
+
+_AssertStatement_single = Model.Name "single"
+
+_AssertStatement_pair = Model.Name "pair"
+
+data AssertStatement_Pair =
+  AssertStatement_Pair {
+    assertStatement_PairFirst :: Expression,
+    assertStatement_PairSecond :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_AssertStatement_Pair = Model.Name "hydra.java.syntax.AssertStatement_Pair"
+
+_AssertStatement_Pair_first = Model.Name "first"
+
+_AssertStatement_Pair_second = Model.Name "second"
+
+data SwitchStatement =
+  SwitchStatement {
+    switchStatementCond :: Expression,
+    switchStatementBlock :: SwitchBlock}
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchStatement = Model.Name "hydra.java.syntax.SwitchStatement"
+
+_SwitchStatement_cond = Model.Name "cond"
+
+_SwitchStatement_block = Model.Name "block"
+
+data SwitchBlock =
+  SwitchBlockRules [SwitchRule] |
+  SwitchBlockLegacy SwitchBlock_Legacy
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchBlock = Model.Name "hydra.java.syntax.SwitchBlock"
+
+_SwitchBlock_rules = Model.Name "rules"
+
+_SwitchBlock_legacy = Model.Name "legacy"
+
+data SwitchBlock_Legacy =
+  SwitchBlock_Legacy {
+    switchBlock_LegacyGroups :: [SwitchBlockStatementGroup],
+    switchBlock_LegacyTrailingLabels :: [SwitchLabel]}
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchBlock_Legacy = Model.Name "hydra.java.syntax.SwitchBlock_Legacy"
+
+_SwitchBlock_Legacy_groups = Model.Name "groups"
+
+_SwitchBlock_Legacy_trailingLabels = Model.Name "trailingLabels"
+
+data SwitchRule =
+  SwitchRule {
+    switchRuleLabel :: SwitchLabel,
+    switchRuleBody :: SwitchRule_Body}
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchRule = Model.Name "hydra.java.syntax.SwitchRule"
+
+_SwitchRule_label = Model.Name "label"
+
+_SwitchRule_body = Model.Name "body"
+
+data SwitchRule_Body =
+  SwitchRule_BodyExpression Expression |
+  SwitchRule_BodyBlock Block |
+  SwitchRule_BodyThrow ThrowStatement
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchRule_Body = Model.Name "hydra.java.syntax.SwitchRule_Body"
+
+_SwitchRule_Body_expression = Model.Name "expression"
+
+_SwitchRule_Body_block = Model.Name "block"
+
+_SwitchRule_Body_throw = Model.Name "throw"
+
+data SwitchBlockStatementGroup =
+  SwitchBlockStatementGroup {
+    switchBlockStatementGroupLabels :: [SwitchLabel],
+    switchBlockStatementGroupStatements :: [BlockStatement]}
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchBlockStatementGroup = Model.Name "hydra.java.syntax.SwitchBlockStatementGroup"
+
+_SwitchBlockStatementGroup_labels = Model.Name "labels"
+
+_SwitchBlockStatementGroup_statements = Model.Name "statements"
+
+data SwitchLabel =
+  SwitchLabelCase [CaseConstant] |
+  SwitchLabelNull Bool |
+  SwitchLabelCasePattern CasePattern |
+  SwitchLabelDefault
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchLabel = Model.Name "hydra.java.syntax.SwitchLabel"
+
+_SwitchLabel_case = Model.Name "case"
+
+_SwitchLabel_null = Model.Name "null"
+
+_SwitchLabel_casePattern = Model.Name "casePattern"
+
+_SwitchLabel_default = Model.Name "default"
+
+newtype CaseConstant =
+  CaseConstant {
+    unCaseConstant :: ConditionalExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_CaseConstant = Model.Name "hydra.java.syntax.CaseConstant"
+
+data CasePattern =
+  CasePattern {
+    casePatternPattern :: Pattern,
+    casePatternGuard :: (Maybe Guard)}
+  deriving (Eq, Ord, Read, Show)
+
+_CasePattern = Model.Name "hydra.java.syntax.CasePattern"
+
+_CasePattern_pattern = Model.Name "pattern"
+
+_CasePattern_guard = Model.Name "guard"
+
+newtype Guard =
+  Guard {
+    unGuard :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_Guard = Model.Name "hydra.java.syntax.Guard"
+
+data Pattern =
+  PatternType TypePattern |
+  PatternRecord RecordPattern
+  deriving (Eq, Ord, Read, Show)
+
+_Pattern = Model.Name "hydra.java.syntax.Pattern"
+
+_Pattern_type = Model.Name "type"
+
+_Pattern_record = Model.Name "record"
+
+newtype TypePattern =
+  TypePattern {
+    unTypePattern :: LocalVariableDeclaration}
+  deriving (Eq, Ord, Read, Show)
+
+_TypePattern = Model.Name "hydra.java.syntax.TypePattern"
+
+data RecordPattern =
+  RecordPattern {
+    recordPatternType :: ReferenceType,
+    recordPatternPatterns :: [Pattern]}
+  deriving (Eq, Ord, Read, Show)
+
+_RecordPattern = Model.Name "hydra.java.syntax.RecordPattern"
+
+_RecordPattern_type = Model.Name "type"
+
+_RecordPattern_patterns = Model.Name "patterns"
+
+data WhileStatement =
+  WhileStatement {
+    whileStatementCond :: (Maybe Expression),
+    whileStatementBody :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_WhileStatement = Model.Name "hydra.java.syntax.WhileStatement"
+
+_WhileStatement_cond = Model.Name "cond"
+
+_WhileStatement_body = Model.Name "body"
+
+data WhileStatementNoShortIf =
+  WhileStatementNoShortIf {
+    whileStatementNoShortIfCond :: (Maybe Expression),
+    whileStatementNoShortIfBody :: StatementNoShortIf}
+  deriving (Eq, Ord, Read, Show)
+
+_WhileStatementNoShortIf = Model.Name "hydra.java.syntax.WhileStatementNoShortIf"
+
+_WhileStatementNoShortIf_cond = Model.Name "cond"
+
+_WhileStatementNoShortIf_body = Model.Name "body"
+
+data DoStatement =
+  DoStatement {
+    doStatementBody :: Statement,
+    doStatementCond :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_DoStatement = Model.Name "hydra.java.syntax.DoStatement"
+
+_DoStatement_body = Model.Name "body"
+
+_DoStatement_cond = Model.Name "cond"
+
+data ForStatement =
+  ForStatementBasic BasicForStatement |
+  ForStatementEnhanced EnhancedForStatement
+  deriving (Eq, Ord, Read, Show)
+
+_ForStatement = Model.Name "hydra.java.syntax.ForStatement"
+
+_ForStatement_basic = Model.Name "basic"
+
+_ForStatement_enhanced = Model.Name "enhanced"
+
+data ForStatementNoShortIf =
+  ForStatementNoShortIfBasic BasicForStatementNoShortIf |
+  ForStatementNoShortIfEnhanced EnhancedForStatementNoShortIf
+  deriving (Eq, Ord, Read, Show)
+
+_ForStatementNoShortIf = Model.Name "hydra.java.syntax.ForStatementNoShortIf"
+
+_ForStatementNoShortIf_basic = Model.Name "basic"
+
+_ForStatementNoShortIf_enhanced = Model.Name "enhanced"
+
+data BasicForStatement =
+  BasicForStatement {
+    basicForStatementCond :: ForCond,
+    basicForStatementBody :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_BasicForStatement = Model.Name "hydra.java.syntax.BasicForStatement"
+
+_BasicForStatement_cond = Model.Name "cond"
+
+_BasicForStatement_body = Model.Name "body"
+
+data ForCond =
+  ForCond {
+    forCondInit :: (Maybe ForInit),
+    forCondCond :: (Maybe Expression),
+    forCondUpdate :: (Maybe ForUpdate)}
+  deriving (Eq, Ord, Read, Show)
+
+_ForCond = Model.Name "hydra.java.syntax.ForCond"
+
+_ForCond_init = Model.Name "init"
+
+_ForCond_cond = Model.Name "cond"
+
+_ForCond_update = Model.Name "update"
+
+data BasicForStatementNoShortIf =
+  BasicForStatementNoShortIf {
+    basicForStatementNoShortIfCond :: ForCond,
+    basicForStatementNoShortIfBody :: StatementNoShortIf}
+  deriving (Eq, Ord, Read, Show)
+
+_BasicForStatementNoShortIf = Model.Name "hydra.java.syntax.BasicForStatementNoShortIf"
+
+_BasicForStatementNoShortIf_cond = Model.Name "cond"
+
+_BasicForStatementNoShortIf_body = Model.Name "body"
+
+data ForInit =
+  ForInitStatements [StatementExpression] |
+  ForInitLocalVariable LocalVariableDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_ForInit = Model.Name "hydra.java.syntax.ForInit"
+
+_ForInit_statements = Model.Name "statements"
+
+_ForInit_localVariable = Model.Name "localVariable"
+
+newtype ForUpdate =
+  ForUpdate {
+    unForUpdate :: [StatementExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_ForUpdate = Model.Name "hydra.java.syntax.ForUpdate"
+
+data EnhancedForStatement =
+  EnhancedForStatement {
+    enhancedForStatementCond :: EnhancedForCond,
+    enhancedForStatementBody :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_EnhancedForStatement = Model.Name "hydra.java.syntax.EnhancedForStatement"
+
+_EnhancedForStatement_cond = Model.Name "cond"
+
+_EnhancedForStatement_body = Model.Name "body"
+
+data EnhancedForCond =
+  EnhancedForCond {
+    enhancedForCondDeclaration :: LocalVariableDeclaration,
+    enhancedForCondExpression :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_EnhancedForCond = Model.Name "hydra.java.syntax.EnhancedForCond"
+
+_EnhancedForCond_declaration = Model.Name "declaration"
+
+_EnhancedForCond_expression = Model.Name "expression"
+
+data EnhancedForStatementNoShortIf =
+  EnhancedForStatementNoShortIf {
+    enhancedForStatementNoShortIfCond :: EnhancedForCond,
+    enhancedForStatementNoShortIfBody :: StatementNoShortIf}
+  deriving (Eq, Ord, Read, Show)
+
+_EnhancedForStatementNoShortIf = Model.Name "hydra.java.syntax.EnhancedForStatementNoShortIf"
+
+_EnhancedForStatementNoShortIf_cond = Model.Name "cond"
+
+_EnhancedForStatementNoShortIf_body = Model.Name "body"
+
+newtype BreakStatement =
+  BreakStatement {
+    unBreakStatement :: (Maybe Identifier)}
+  deriving (Eq, Ord, Read, Show)
+
+_BreakStatement = Model.Name "hydra.java.syntax.BreakStatement"
+
+newtype YieldStatement =
+  YieldStatement {
+    unYieldStatement :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_YieldStatement = Model.Name "hydra.java.syntax.YieldStatement"
+
+newtype ContinueStatement =
+  ContinueStatement {
+    unContinueStatement :: (Maybe Identifier)}
+  deriving (Eq, Ord, Read, Show)
+
+_ContinueStatement = Model.Name "hydra.java.syntax.ContinueStatement"
+
+newtype ReturnStatement =
+  ReturnStatement {
+    unReturnStatement :: (Maybe Expression)}
+  deriving (Eq, Ord, Read, Show)
+
+_ReturnStatement = Model.Name "hydra.java.syntax.ReturnStatement"
+
+newtype ThrowStatement =
+  ThrowStatement {
+    unThrowStatement :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_ThrowStatement = Model.Name "hydra.java.syntax.ThrowStatement"
+
+data SynchronizedStatement =
+  SynchronizedStatement {
+    synchronizedStatementExpression :: Expression,
+    synchronizedStatementBlock :: Block}
+  deriving (Eq, Ord, Read, Show)
+
+_SynchronizedStatement = Model.Name "hydra.java.syntax.SynchronizedStatement"
+
+_SynchronizedStatement_expression = Model.Name "expression"
+
+_SynchronizedStatement_block = Model.Name "block"
+
+data TryStatement =
+  TryStatementSimple TryStatement_Simple |
+  TryStatementWithFinally TryStatement_WithFinally |
+  TryStatementWithResources TryWithResourcesStatement
+  deriving (Eq, Ord, Read, Show)
+
+_TryStatement = Model.Name "hydra.java.syntax.TryStatement"
+
+_TryStatement_simple = Model.Name "simple"
+
+_TryStatement_withFinally = Model.Name "withFinally"
+
+_TryStatement_withResources = Model.Name "withResources"
+
+data TryStatement_Simple =
+  TryStatement_Simple {
+    tryStatement_SimpleBlock :: Block,
+    tryStatement_SimpleCatches :: Catches}
+  deriving (Eq, Ord, Read, Show)
+
+_TryStatement_Simple = Model.Name "hydra.java.syntax.TryStatement_Simple"
+
+_TryStatement_Simple_block = Model.Name "block"
+
+_TryStatement_Simple_catches = Model.Name "catches"
+
+data TryStatement_WithFinally =
+  TryStatement_WithFinally {
+    tryStatement_WithFinallyBlock :: Block,
+    tryStatement_WithFinallyCatches :: (Maybe Catches),
+    tryStatement_WithFinallyFinally :: Finally}
+  deriving (Eq, Ord, Read, Show)
+
+_TryStatement_WithFinally = Model.Name "hydra.java.syntax.TryStatement_WithFinally"
+
+_TryStatement_WithFinally_block = Model.Name "block"
+
+_TryStatement_WithFinally_catches = Model.Name "catches"
+
+_TryStatement_WithFinally_finally = Model.Name "finally"
+
+newtype Catches =
+  Catches {
+    unCatches :: [CatchClause]}
+  deriving (Eq, Ord, Read, Show)
+
+_Catches = Model.Name "hydra.java.syntax.Catches"
+
+data CatchClause =
+  CatchClause {
+    catchClauseParameter :: (Maybe CatchFormalParameter),
+    catchClauseBlock :: Block}
+  deriving (Eq, Ord, Read, Show)
+
+_CatchClause = Model.Name "hydra.java.syntax.CatchClause"
+
+_CatchClause_parameter = Model.Name "parameter"
+
+_CatchClause_block = Model.Name "block"
+
+data CatchFormalParameter =
+  CatchFormalParameter {
+    catchFormalParameterModifiers :: [VariableModifier],
+    catchFormalParameterType :: CatchType,
+    catchFormalParameterId :: VariableDeclaratorId}
+  deriving (Eq, Ord, Read, Show)
+
+_CatchFormalParameter = Model.Name "hydra.java.syntax.CatchFormalParameter"
+
+_CatchFormalParameter_modifiers = Model.Name "modifiers"
+
+_CatchFormalParameter_type = Model.Name "type"
+
+_CatchFormalParameter_id = Model.Name "id"
+
+data CatchType =
+  CatchType {
+    catchTypeType :: UnannClassType,
+    catchTypeTypes :: [ClassType]}
+  deriving (Eq, Ord, Read, Show)
+
+_CatchType = Model.Name "hydra.java.syntax.CatchType"
+
+_CatchType_type = Model.Name "type"
+
+_CatchType_types = Model.Name "types"
+
+newtype Finally =
+  Finally {
+    unFinally :: Block}
+  deriving (Eq, Ord, Read, Show)
+
+_Finally = Model.Name "hydra.java.syntax.Finally"
+
+data TryWithResourcesStatement =
+  TryWithResourcesStatement {
+    tryWithResourcesStatementResourceSpecification :: ResourceSpecification,
+    tryWithResourcesStatementBlock :: Block,
+    tryWithResourcesStatementCatches :: (Maybe Catches),
+    tryWithResourcesStatementFinally :: (Maybe Finally)}
+  deriving (Eq, Ord, Read, Show)
+
+_TryWithResourcesStatement = Model.Name "hydra.java.syntax.TryWithResourcesStatement"
+
+_TryWithResourcesStatement_resourceSpecification = Model.Name "resourceSpecification"
+
+_TryWithResourcesStatement_block = Model.Name "block"
+
+_TryWithResourcesStatement_catches = Model.Name "catches"
+
+_TryWithResourcesStatement_finally = Model.Name "finally"
+
+newtype ResourceSpecification =
+  ResourceSpecification {
+    unResourceSpecification :: [Resource]}
+  deriving (Eq, Ord, Read, Show)
+
+_ResourceSpecification = Model.Name "hydra.java.syntax.ResourceSpecification"
+
+data Resource =
+  ResourceLocal Resource_Local |
+  ResourceVariable VariableAccess
+  deriving (Eq, Ord, Read, Show)
+
+_Resource = Model.Name "hydra.java.syntax.Resource"
+
+_Resource_local = Model.Name "local"
+
+_Resource_variable = Model.Name "variable"
+
+data Resource_Local =
+  Resource_Local {
+    resource_LocalModifiers :: [VariableModifier],
+    resource_LocalType :: LocalVariableType,
+    resource_LocalIdentifier :: Identifier,
+    resource_LocalExpression :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_Resource_Local = Model.Name "hydra.java.syntax.Resource_Local"
+
+_Resource_Local_modifiers = Model.Name "modifiers"
+
+_Resource_Local_type = Model.Name "type"
+
+_Resource_Local_identifier = Model.Name "identifier"
+
+_Resource_Local_expression = Model.Name "expression"
+
+data VariableAccess =
+  VariableAccessExpressionName ExpressionName |
+  VariableAccessFieldAccess FieldAccess
+  deriving (Eq, Ord, Read, Show)
+
+_VariableAccess = Model.Name "hydra.java.syntax.VariableAccess"
+
+_VariableAccess_expressionName = Model.Name "expressionName"
+
+_VariableAccess_fieldAccess = Model.Name "fieldAccess"
+
+data Primary =
+  PrimaryNoNewArray PrimaryNoNewArrayExpression |
+  PrimaryArrayCreation ArrayCreationExpression
+  deriving (Eq, Ord, Read, Show)
+
+_Primary = Model.Name "hydra.java.syntax.Primary"
+
+_Primary_noNewArray = Model.Name "noNewArray"
+
+_Primary_arrayCreation = Model.Name "arrayCreation"
+
+data PrimaryNoNewArrayExpression =
+  PrimaryNoNewArrayExpressionLiteral Literal |
+  PrimaryNoNewArrayExpressionClassLiteral ClassLiteral |
+  PrimaryNoNewArrayExpressionThis |
+  PrimaryNoNewArrayExpressionDotThis TypeName |
+  PrimaryNoNewArrayExpressionParens Expression |
+  PrimaryNoNewArrayExpressionClassInstance ClassInstanceCreationExpression |
+  PrimaryNoNewArrayExpressionFieldAccess FieldAccess |
+  PrimaryNoNewArrayExpressionArrayAccess ArrayAccess |
+  PrimaryNoNewArrayExpressionMethodInvocation MethodInvocation |
+  PrimaryNoNewArrayExpressionMethodReference MethodReference
+  deriving (Eq, Ord, Read, Show)
+
+_PrimaryNoNewArrayExpression = Model.Name "hydra.java.syntax.PrimaryNoNewArrayExpression"
+
+_PrimaryNoNewArrayExpression_literal = Model.Name "literal"
+
+_PrimaryNoNewArrayExpression_classLiteral = Model.Name "classLiteral"
+
+_PrimaryNoNewArrayExpression_this = Model.Name "this"
+
+_PrimaryNoNewArrayExpression_dotThis = Model.Name "dotThis"
+
+_PrimaryNoNewArrayExpression_parens = Model.Name "parens"
+
+_PrimaryNoNewArrayExpression_classInstance = Model.Name "classInstance"
+
+_PrimaryNoNewArrayExpression_fieldAccess = Model.Name "fieldAccess"
+
+_PrimaryNoNewArrayExpression_arrayAccess = Model.Name "arrayAccess"
+
+_PrimaryNoNewArrayExpression_methodInvocation = Model.Name "methodInvocation"
+
+_PrimaryNoNewArrayExpression_methodReference = Model.Name "methodReference"
+
+data ClassLiteral =
+  ClassLiteralType TypeNameArray |
+  ClassLiteralNumericType NumericTypeArray |
+  ClassLiteralBoolean BooleanArray |
+  ClassLiteralVoid
+  deriving (Eq, Ord, Read, Show)
+
+_ClassLiteral = Model.Name "hydra.java.syntax.ClassLiteral"
+
+_ClassLiteral_type = Model.Name "type"
+
+_ClassLiteral_numericType = Model.Name "numericType"
+
+_ClassLiteral_boolean = Model.Name "boolean"
+
+_ClassLiteral_void = Model.Name "void"
+
+data TypeNameArray =
+  TypeNameArraySimple TypeName |
+  TypeNameArrayArray TypeNameArray
+  deriving (Eq, Ord, Read, Show)
+
+_TypeNameArray = Model.Name "hydra.java.syntax.TypeNameArray"
+
+_TypeNameArray_simple = Model.Name "simple"
+
+_TypeNameArray_array = Model.Name "array"
+
+data NumericTypeArray =
+  NumericTypeArraySimple NumericType |
+  NumericTypeArrayArray NumericTypeArray
+  deriving (Eq, Ord, Read, Show)
+
+_NumericTypeArray = Model.Name "hydra.java.syntax.NumericTypeArray"
+
+_NumericTypeArray_simple = Model.Name "simple"
+
+_NumericTypeArray_array = Model.Name "array"
+
+data BooleanArray =
+  BooleanArraySimple |
+  BooleanArrayArray BooleanArray
+  deriving (Eq, Ord, Read, Show)
+
+_BooleanArray = Model.Name "hydra.java.syntax.BooleanArray"
+
+_BooleanArray_simple = Model.Name "simple"
+
+_BooleanArray_array = Model.Name "array"
+
+data ClassInstanceCreationExpression =
+  ClassInstanceCreationExpression {
+    classInstanceCreationExpressionQualifier :: (Maybe ClassInstanceCreationExpression_Qualifier),
+    classInstanceCreationExpressionExpression :: UnqualifiedClassInstanceCreationExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ClassInstanceCreationExpression = Model.Name "hydra.java.syntax.ClassInstanceCreationExpression"
+
+_ClassInstanceCreationExpression_qualifier = Model.Name "qualifier"
+
+_ClassInstanceCreationExpression_expression = Model.Name "expression"
+
+data ClassInstanceCreationExpression_Qualifier =
+  ClassInstanceCreationExpression_QualifierExpression ExpressionName |
+  ClassInstanceCreationExpression_QualifierPrimary Primary
+  deriving (Eq, Ord, Read, Show)
+
+_ClassInstanceCreationExpression_Qualifier = Model.Name "hydra.java.syntax.ClassInstanceCreationExpression_Qualifier"
+
+_ClassInstanceCreationExpression_Qualifier_expression = Model.Name "expression"
+
+_ClassInstanceCreationExpression_Qualifier_primary = Model.Name "primary"
+
+data UnqualifiedClassInstanceCreationExpression =
+  UnqualifiedClassInstanceCreationExpression {
+    unqualifiedClassInstanceCreationExpressionTypeArguments :: [TypeArgument],
+    unqualifiedClassInstanceCreationExpressionClassOrInterface :: ClassOrInterfaceTypeToInstantiate,
+    unqualifiedClassInstanceCreationExpressionArguments :: [Expression],
+    unqualifiedClassInstanceCreationExpressionBody :: (Maybe ClassBody)}
+  deriving (Eq, Ord, Read, Show)
+
+_UnqualifiedClassInstanceCreationExpression = Model.Name "hydra.java.syntax.UnqualifiedClassInstanceCreationExpression"
+
+_UnqualifiedClassInstanceCreationExpression_typeArguments = Model.Name "typeArguments"
+
+_UnqualifiedClassInstanceCreationExpression_classOrInterface = Model.Name "classOrInterface"
+
+_UnqualifiedClassInstanceCreationExpression_arguments = Model.Name "arguments"
+
+_UnqualifiedClassInstanceCreationExpression_body = Model.Name "body"
+
+data ClassOrInterfaceTypeToInstantiate =
+  ClassOrInterfaceTypeToInstantiate {
+    classOrInterfaceTypeToInstantiateIdentifiers :: [AnnotatedIdentifier],
+    classOrInterfaceTypeToInstantiateTypeArguments :: (Maybe TypeArgumentsOrDiamond)}
+  deriving (Eq, Ord, Read, Show)
+
+_ClassOrInterfaceTypeToInstantiate = Model.Name "hydra.java.syntax.ClassOrInterfaceTypeToInstantiate"
+
+_ClassOrInterfaceTypeToInstantiate_identifiers = Model.Name "identifiers"
+
+_ClassOrInterfaceTypeToInstantiate_typeArguments = Model.Name "typeArguments"
+
+data AnnotatedIdentifier =
+  AnnotatedIdentifier {
+    annotatedIdentifierAnnotations :: [Annotation],
+    annotatedIdentifierIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_AnnotatedIdentifier = Model.Name "hydra.java.syntax.AnnotatedIdentifier"
+
+_AnnotatedIdentifier_annotations = Model.Name "annotations"
+
+_AnnotatedIdentifier_identifier = Model.Name "identifier"
+
+data TypeArgumentsOrDiamond =
+  TypeArgumentsOrDiamondArguments [TypeArgument] |
+  TypeArgumentsOrDiamondDiamond
+  deriving (Eq, Ord, Read, Show)
+
+_TypeArgumentsOrDiamond = Model.Name "hydra.java.syntax.TypeArgumentsOrDiamond"
+
+_TypeArgumentsOrDiamond_arguments = Model.Name "arguments"
+
+_TypeArgumentsOrDiamond_diamond = Model.Name "diamond"
+
+data FieldAccess =
+  FieldAccess {
+    fieldAccessQualifier :: FieldAccess_Qualifier,
+    fieldAccessIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_FieldAccess = Model.Name "hydra.java.syntax.FieldAccess"
+
+_FieldAccess_qualifier = Model.Name "qualifier"
+
+_FieldAccess_identifier = Model.Name "identifier"
+
+data FieldAccess_Qualifier =
+  FieldAccess_QualifierPrimary Primary |
+  FieldAccess_QualifierSuper |
+  FieldAccess_QualifierTyped TypeName
+  deriving (Eq, Ord, Read, Show)
+
+_FieldAccess_Qualifier = Model.Name "hydra.java.syntax.FieldAccess_Qualifier"
+
+_FieldAccess_Qualifier_primary = Model.Name "primary"
+
+_FieldAccess_Qualifier_super = Model.Name "super"
+
+_FieldAccess_Qualifier_typed = Model.Name "typed"
+
+data ArrayAccess =
+  ArrayAccess {
+    arrayAccessExpression :: (Maybe Expression),
+    arrayAccessVariant :: ArrayAccess_Variant}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayAccess = Model.Name "hydra.java.syntax.ArrayAccess"
+
+_ArrayAccess_expression = Model.Name "expression"
+
+_ArrayAccess_variant = Model.Name "variant"
+
+data ArrayAccess_Variant =
+  ArrayAccess_VariantName ExpressionName |
+  ArrayAccess_VariantPrimary PrimaryNoNewArrayExpression |
+  ArrayAccess_VariantArrayCreationWithInitializer ArrayCreationExpressionWithInitializer
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayAccess_Variant = Model.Name "hydra.java.syntax.ArrayAccess_Variant"
+
+_ArrayAccess_Variant_name = Model.Name "name"
+
+_ArrayAccess_Variant_primary = Model.Name "primary"
+
+_ArrayAccess_Variant_arrayCreationWithInitializer = Model.Name "arrayCreationWithInitializer"
+
+data MethodInvocation =
+  MethodInvocation {
+    methodInvocationHeader :: MethodInvocation_Header,
+    methodInvocationArguments :: [Expression]}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodInvocation = Model.Name "hydra.java.syntax.MethodInvocation"
+
+_MethodInvocation_header = Model.Name "header"
+
+_MethodInvocation_arguments = Model.Name "arguments"
+
+data MethodInvocation_Header =
+  MethodInvocation_HeaderSimple MethodName |
+  MethodInvocation_HeaderComplex MethodInvocation_Complex
+  deriving (Eq, Ord, Read, Show)
+
+_MethodInvocation_Header = Model.Name "hydra.java.syntax.MethodInvocation_Header"
+
+_MethodInvocation_Header_simple = Model.Name "simple"
+
+_MethodInvocation_Header_complex = Model.Name "complex"
+
+data MethodInvocation_Complex =
+  MethodInvocation_Complex {
+    methodInvocation_ComplexVariant :: MethodInvocation_Variant,
+    methodInvocation_ComplexTypeArguments :: [TypeArgument],
+    methodInvocation_ComplexIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodInvocation_Complex = Model.Name "hydra.java.syntax.MethodInvocation_Complex"
+
+_MethodInvocation_Complex_variant = Model.Name "variant"
+
+_MethodInvocation_Complex_typeArguments = Model.Name "typeArguments"
+
+_MethodInvocation_Complex_identifier = Model.Name "identifier"
+
+data MethodInvocation_Variant =
+  MethodInvocation_VariantType TypeName |
+  MethodInvocation_VariantExpression ExpressionName |
+  MethodInvocation_VariantPrimary Primary |
+  MethodInvocation_VariantSuper |
+  MethodInvocation_VariantTypeSuper TypeName
+  deriving (Eq, Ord, Read, Show)
+
+_MethodInvocation_Variant = Model.Name "hydra.java.syntax.MethodInvocation_Variant"
+
+_MethodInvocation_Variant_type = Model.Name "type"
+
+_MethodInvocation_Variant_expression = Model.Name "expression"
+
+_MethodInvocation_Variant_primary = Model.Name "primary"
+
+_MethodInvocation_Variant_super = Model.Name "super"
+
+_MethodInvocation_Variant_typeSuper = Model.Name "typeSuper"
+
+data MethodReference =
+  MethodReferenceExpression MethodReference_Expression |
+  MethodReferencePrimary MethodReference_Primary |
+  MethodReferenceReferenceType MethodReference_ReferenceType |
+  MethodReferenceSuper MethodReference_Super |
+  MethodReferenceNew MethodReference_New |
+  MethodReferenceArray MethodReference_Array
+  deriving (Eq, Ord, Read, Show)
+
+_MethodReference = Model.Name "hydra.java.syntax.MethodReference"
+
+_MethodReference_expression = Model.Name "expression"
+
+_MethodReference_primary = Model.Name "primary"
+
+_MethodReference_referenceType = Model.Name "referenceType"
+
+_MethodReference_super = Model.Name "super"
+
+_MethodReference_new = Model.Name "new"
+
+_MethodReference_array = Model.Name "array"
+
+data MethodReference_Expression =
+  MethodReference_Expression {
+    methodReference_ExpressionName :: ExpressionName,
+    methodReference_ExpressionTypeArguments :: [TypeArgument],
+    methodReference_ExpressionIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodReference_Expression = Model.Name "hydra.java.syntax.MethodReference_Expression"
+
+_MethodReference_Expression_name = Model.Name "name"
+
+_MethodReference_Expression_typeArguments = Model.Name "typeArguments"
+
+_MethodReference_Expression_identifier = Model.Name "identifier"
+
+data MethodReference_Primary =
+  MethodReference_Primary {
+    methodReference_PrimaryPrimary :: Primary,
+    methodReference_PrimaryTypeArguments :: [TypeArgument],
+    methodReference_PrimaryIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodReference_Primary = Model.Name "hydra.java.syntax.MethodReference_Primary"
+
+_MethodReference_Primary_primary = Model.Name "primary"
+
+_MethodReference_Primary_typeArguments = Model.Name "typeArguments"
+
+_MethodReference_Primary_identifier = Model.Name "identifier"
+
+data MethodReference_ReferenceType =
+  MethodReference_ReferenceType {
+    methodReference_ReferenceTypeReferenceType :: ReferenceType,
+    methodReference_ReferenceTypeTypeArguments :: [TypeArgument],
+    methodReference_ReferenceTypeIdentifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodReference_ReferenceType = Model.Name "hydra.java.syntax.MethodReference_ReferenceType"
+
+_MethodReference_ReferenceType_referenceType = Model.Name "referenceType"
+
+_MethodReference_ReferenceType_typeArguments = Model.Name "typeArguments"
+
+_MethodReference_ReferenceType_identifier = Model.Name "identifier"
+
+data MethodReference_Super =
+  MethodReference_Super {
+    methodReference_SuperTypeArguments :: [TypeArgument],
+    methodReference_SuperIdentifier :: Identifier,
+    methodReference_SuperSuper :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodReference_Super = Model.Name "hydra.java.syntax.MethodReference_Super"
+
+_MethodReference_Super_typeArguments = Model.Name "typeArguments"
+
+_MethodReference_Super_identifier = Model.Name "identifier"
+
+_MethodReference_Super_super = Model.Name "super"
+
+data MethodReference_New =
+  MethodReference_New {
+    methodReference_NewClassType :: ClassType,
+    methodReference_NewTypeArguments :: [TypeArgument]}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodReference_New = Model.Name "hydra.java.syntax.MethodReference_New"
+
+_MethodReference_New_classType = Model.Name "classType"
+
+_MethodReference_New_typeArguments = Model.Name "typeArguments"
+
+newtype MethodReference_Array =
+  MethodReference_Array {
+    unMethodReference_Array :: ArrayType}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodReference_Array = Model.Name "hydra.java.syntax.MethodReference_Array"
+
+data ArrayCreationExpression =
+  ArrayCreationExpressionNoInit ArrayCreationExpressionWithoutInitializer |
+  ArrayCreationExpressionWithInit ArrayCreationExpressionWithInitializer
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayCreationExpression = Model.Name "hydra.java.syntax.ArrayCreationExpression"
+
+_ArrayCreationExpression_noInit = Model.Name "noInit"
+
+_ArrayCreationExpression_withInit = Model.Name "withInit"
+
+data ArrayCreationExpressionWithoutInitializer =
+  ArrayCreationExpressionWithoutInitializerPrimitive ArrayCreationExpressionWithoutInitializer_Primitive |
+  ArrayCreationExpressionWithoutInitializerClassOrInterface ArrayCreationExpressionWithoutInitializer_ClassOrInterface
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayCreationExpressionWithoutInitializer = Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer"
+
+_ArrayCreationExpressionWithoutInitializer_primitive = Model.Name "primitive"
+
+_ArrayCreationExpressionWithoutInitializer_classOrInterface = Model.Name "classOrInterface"
+
+data ArrayCreationExpressionWithoutInitializer_Primitive =
+  ArrayCreationExpressionWithoutInitializer_Primitive {
+    arrayCreationExpressionWithoutInitializer_PrimitiveType :: PrimitiveTypeWithAnnotations,
+    arrayCreationExpressionWithoutInitializer_PrimitiveDimExprs :: [DimExpr],
+    arrayCreationExpressionWithoutInitializer_PrimitiveDims :: (Maybe Dims)}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayCreationExpressionWithoutInitializer_Primitive =
+    Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_Primitive"
+
+_ArrayCreationExpressionWithoutInitializer_Primitive_type = Model.Name "type"
+
+_ArrayCreationExpressionWithoutInitializer_Primitive_dimExprs = Model.Name "dimExprs"
+
+_ArrayCreationExpressionWithoutInitializer_Primitive_dims = Model.Name "dims"
+
+data ArrayCreationExpressionWithoutInitializer_ClassOrInterface =
+  ArrayCreationExpressionWithoutInitializer_ClassOrInterface {
+    arrayCreationExpressionWithoutInitializer_ClassOrInterfaceType :: ClassOrInterfaceType,
+    arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDimExprs :: [DimExpr],
+    arrayCreationExpressionWithoutInitializer_ClassOrInterfaceDims :: (Maybe Dims)}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayCreationExpressionWithoutInitializer_ClassOrInterface =
+    Model.Name "hydra.java.syntax.ArrayCreationExpressionWithoutInitializer_ClassOrInterface"
+
+_ArrayCreationExpressionWithoutInitializer_ClassOrInterface_type = Model.Name "type"
+
+_ArrayCreationExpressionWithoutInitializer_ClassOrInterface_dimExprs = Model.Name "dimExprs"
+
+_ArrayCreationExpressionWithoutInitializer_ClassOrInterface_dims = Model.Name "dims"
+
+data ArrayCreationExpressionWithInitializer =
+  ArrayCreationExpressionWithInitializerPrimitive ArrayCreationExpressionWithInitializer_Primitive |
+  ArrayCreationExpressionWithInitializerClassOrInterface ArrayCreationExpressionWithInitializer_ClassOrInterface
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayCreationExpressionWithInitializer = Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer"
+
+_ArrayCreationExpressionWithInitializer_primitive = Model.Name "primitive"
+
+_ArrayCreationExpressionWithInitializer_classOrInterface = Model.Name "classOrInterface"
+
+data ArrayCreationExpressionWithInitializer_Primitive =
+  ArrayCreationExpressionWithInitializer_Primitive {
+    arrayCreationExpressionWithInitializer_PrimitiveType :: PrimitiveTypeWithAnnotations,
+    arrayCreationExpressionWithInitializer_PrimitiveDims :: [Dims],
+    arrayCreationExpressionWithInitializer_PrimitiveArray :: ArrayInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayCreationExpressionWithInitializer_Primitive =
+    Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_Primitive"
+
+_ArrayCreationExpressionWithInitializer_Primitive_type = Model.Name "type"
+
+_ArrayCreationExpressionWithInitializer_Primitive_dims = Model.Name "dims"
+
+_ArrayCreationExpressionWithInitializer_Primitive_array = Model.Name "array"
+
+data ArrayCreationExpressionWithInitializer_ClassOrInterface =
+  ArrayCreationExpressionWithInitializer_ClassOrInterface {
+    arrayCreationExpressionWithInitializer_ClassOrInterfaceType :: ClassOrInterfaceType,
+    arrayCreationExpressionWithInitializer_ClassOrInterfaceDims :: [Dims],
+    arrayCreationExpressionWithInitializer_ClassOrInterfaceArray :: ArrayInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayCreationExpressionWithInitializer_ClassOrInterface =
+    Model.Name "hydra.java.syntax.ArrayCreationExpressionWithInitializer_ClassOrInterface"
+
+_ArrayCreationExpressionWithInitializer_ClassOrInterface_type = Model.Name "type"
+
+_ArrayCreationExpressionWithInitializer_ClassOrInterface_dims = Model.Name "dims"
+
+_ArrayCreationExpressionWithInitializer_ClassOrInterface_array = Model.Name "array"
+
+data DimExpr =
+  DimExpr {
+    dimExprAnnotations :: [Annotation],
+    dimExprExpression :: (Maybe Expression)}
+  deriving (Eq, Ord, Read, Show)
+
+_DimExpr = Model.Name "hydra.java.syntax.DimExpr"
+
+_DimExpr_annotations = Model.Name "annotations"
+
+_DimExpr_expression = Model.Name "expression"
+
+data Expression =
+  ExpressionLambda LambdaExpression |
+  ExpressionAssignment AssignmentExpression
+  deriving (Eq, Ord, Read, Show)
+
+_Expression = Model.Name "hydra.java.syntax.Expression"
+
+_Expression_lambda = Model.Name "lambda"
+
+_Expression_assignment = Model.Name "assignment"
+
+data LambdaExpression =
+  LambdaExpression {
+    lambdaExpressionParameters :: LambdaParameters,
+    lambdaExpressionBody :: LambdaBody}
+  deriving (Eq, Ord, Read, Show)
+
+_LambdaExpression = Model.Name "hydra.java.syntax.LambdaExpression"
+
+_LambdaExpression_parameters = Model.Name "parameters"
+
+_LambdaExpression_body = Model.Name "body"
+
+data LambdaParameters =
+  LambdaParametersTuple [LambdaParameters] |
+  LambdaParametersSingle Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_LambdaParameters = Model.Name "hydra.java.syntax.LambdaParameters"
+
+_LambdaParameters_tuple = Model.Name "tuple"
+
+_LambdaParameters_single = Model.Name "single"
+
+data LambdaParameter =
+  LambdaParameterNormal LambdaParameter_Normal |
+  LambdaParameterVariableArity VariableArityParameter
+  deriving (Eq, Ord, Read, Show)
+
+_LambdaParameter = Model.Name "hydra.java.syntax.LambdaParameter"
+
+_LambdaParameter_normal = Model.Name "normal"
+
+_LambdaParameter_variableArity = Model.Name "variableArity"
+
+data LambdaParameter_Normal =
+  LambdaParameter_Normal {
+    lambdaParameter_NormalModifiers :: [VariableModifier],
+    lambdaParameter_NormalType :: LambdaParameterType,
+    lambdaParameter_NormalId :: VariableDeclaratorId}
+  deriving (Eq, Ord, Read, Show)
+
+_LambdaParameter_Normal = Model.Name "hydra.java.syntax.LambdaParameter_Normal"
+
+_LambdaParameter_Normal_modifiers = Model.Name "modifiers"
+
+_LambdaParameter_Normal_type = Model.Name "type"
+
+_LambdaParameter_Normal_id = Model.Name "id"
+
+data LambdaParameterType =
+  LambdaParameterTypeType UnannType |
+  LambdaParameterTypeVar
+  deriving (Eq, Ord, Read, Show)
+
+_LambdaParameterType = Model.Name "hydra.java.syntax.LambdaParameterType"
+
+_LambdaParameterType_type = Model.Name "type"
+
+_LambdaParameterType_var = Model.Name "var"
+
+data LambdaBody =
+  LambdaBodyExpression Expression |
+  LambdaBodyBlock Block
+  deriving (Eq, Ord, Read, Show)
+
+_LambdaBody = Model.Name "hydra.java.syntax.LambdaBody"
+
+_LambdaBody_expression = Model.Name "expression"
+
+_LambdaBody_block = Model.Name "block"
+
+data AssignmentExpression =
+  AssignmentExpressionConditional ConditionalExpression |
+  AssignmentExpressionAssignment Assignment
+  deriving (Eq, Ord, Read, Show)
+
+_AssignmentExpression = Model.Name "hydra.java.syntax.AssignmentExpression"
+
+_AssignmentExpression_conditional = Model.Name "conditional"
+
+_AssignmentExpression_assignment = Model.Name "assignment"
+
+data Assignment =
+  Assignment {
+    assignmentLhs :: LeftHandSide,
+    assignmentOp :: AssignmentOperator,
+    assignmentExpression :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_Assignment = Model.Name "hydra.java.syntax.Assignment"
+
+_Assignment_lhs = Model.Name "lhs"
+
+_Assignment_op = Model.Name "op"
+
+_Assignment_expression = Model.Name "expression"
+
+data LeftHandSide =
+  LeftHandSideExpressionName ExpressionName |
+  LeftHandSideFieldAccess FieldAccess |
+  LeftHandSideArrayAccess ArrayAccess
+  deriving (Eq, Ord, Read, Show)
+
+_LeftHandSide = Model.Name "hydra.java.syntax.LeftHandSide"
+
+_LeftHandSide_expressionName = Model.Name "expressionName"
+
+_LeftHandSide_fieldAccess = Model.Name "fieldAccess"
+
+_LeftHandSide_arrayAccess = Model.Name "arrayAccess"
+
+data AssignmentOperator =
+  AssignmentOperatorSimple |
+  AssignmentOperatorTimes |
+  AssignmentOperatorDiv |
+  AssignmentOperatorMod |
+  AssignmentOperatorPlus |
+  AssignmentOperatorMinus |
+  AssignmentOperatorShiftLeft |
+  AssignmentOperatorShiftRight |
+  AssignmentOperatorShiftRightZeroFill |
+  AssignmentOperatorAnd |
+  AssignmentOperatorXor |
+  AssignmentOperatorOr
+  deriving (Eq, Ord, Read, Show)
+
+_AssignmentOperator = Model.Name "hydra.java.syntax.AssignmentOperator"
+
+_AssignmentOperator_simple = Model.Name "simple"
+
+_AssignmentOperator_times = Model.Name "times"
+
+_AssignmentOperator_div = Model.Name "div"
+
+_AssignmentOperator_mod = Model.Name "mod"
+
+_AssignmentOperator_plus = Model.Name "plus"
+
+_AssignmentOperator_minus = Model.Name "minus"
+
+_AssignmentOperator_shiftLeft = Model.Name "shiftLeft"
+
+_AssignmentOperator_shiftRight = Model.Name "shiftRight"
+
+_AssignmentOperator_shiftRightZeroFill = Model.Name "shiftRightZeroFill"
+
+_AssignmentOperator_and = Model.Name "and"
+
+_AssignmentOperator_xor = Model.Name "xor"
+
+_AssignmentOperator_or = Model.Name "or"
+
+data ConditionalExpression =
+  ConditionalExpressionSimple ConditionalOrExpression |
+  ConditionalExpressionTernaryCond ConditionalExpression_TernaryCond |
+  ConditionalExpressionTernaryLambda ConditionalExpression_TernaryLambda
+  deriving (Eq, Ord, Read, Show)
+
+_ConditionalExpression = Model.Name "hydra.java.syntax.ConditionalExpression"
+
+_ConditionalExpression_simple = Model.Name "simple"
+
+_ConditionalExpression_ternaryCond = Model.Name "ternaryCond"
+
+_ConditionalExpression_ternaryLambda = Model.Name "ternaryLambda"
+
+data ConditionalExpression_TernaryCond =
+  ConditionalExpression_TernaryCond {
+    conditionalExpression_TernaryCondCond :: ConditionalOrExpression,
+    conditionalExpression_TernaryCondIfTrue :: Expression,
+    conditionalExpression_TernaryCondIfFalse :: ConditionalExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ConditionalExpression_TernaryCond = Model.Name "hydra.java.syntax.ConditionalExpression_TernaryCond"
+
+_ConditionalExpression_TernaryCond_cond = Model.Name "cond"
+
+_ConditionalExpression_TernaryCond_ifTrue = Model.Name "ifTrue"
+
+_ConditionalExpression_TernaryCond_ifFalse = Model.Name "ifFalse"
+
+data ConditionalExpression_TernaryLambda =
+  ConditionalExpression_TernaryLambda {
+    conditionalExpression_TernaryLambdaCond :: ConditionalOrExpression,
+    conditionalExpression_TernaryLambdaIfTrue :: Expression,
+    conditionalExpression_TernaryLambdaIfFalse :: LambdaExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ConditionalExpression_TernaryLambda = Model.Name "hydra.java.syntax.ConditionalExpression_TernaryLambda"
+
+_ConditionalExpression_TernaryLambda_cond = Model.Name "cond"
+
+_ConditionalExpression_TernaryLambda_ifTrue = Model.Name "ifTrue"
+
+_ConditionalExpression_TernaryLambda_ifFalse = Model.Name "ifFalse"
+
+newtype ConditionalOrExpression =
+  ConditionalOrExpression {
+    unConditionalOrExpression :: [ConditionalAndExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_ConditionalOrExpression = Model.Name "hydra.java.syntax.ConditionalOrExpression"
+
+newtype ConditionalAndExpression =
+  ConditionalAndExpression {
+    unConditionalAndExpression :: [InclusiveOrExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_ConditionalAndExpression = Model.Name "hydra.java.syntax.ConditionalAndExpression"
+
+newtype InclusiveOrExpression =
+  InclusiveOrExpression {
+    unInclusiveOrExpression :: [ExclusiveOrExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_InclusiveOrExpression = Model.Name "hydra.java.syntax.InclusiveOrExpression"
+
+newtype ExclusiveOrExpression =
+  ExclusiveOrExpression {
+    unExclusiveOrExpression :: [AndExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_ExclusiveOrExpression = Model.Name "hydra.java.syntax.ExclusiveOrExpression"
+
+newtype AndExpression =
+  AndExpression {
+    unAndExpression :: [EqualityExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_AndExpression = Model.Name "hydra.java.syntax.AndExpression"
+
+data EqualityExpression =
+  EqualityExpressionUnary RelationalExpression |
+  EqualityExpressionEqual EqualityExpression_Binary |
+  EqualityExpressionNotEqual EqualityExpression_Binary
+  deriving (Eq, Ord, Read, Show)
+
+_EqualityExpression = Model.Name "hydra.java.syntax.EqualityExpression"
+
+_EqualityExpression_unary = Model.Name "unary"
+
+_EqualityExpression_equal = Model.Name "equal"
+
+_EqualityExpression_notEqual = Model.Name "notEqual"
+
+data EqualityExpression_Binary =
+  EqualityExpression_Binary {
+    equalityExpression_BinaryLhs :: EqualityExpression,
+    equalityExpression_BinaryRhs :: RelationalExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_EqualityExpression_Binary = Model.Name "hydra.java.syntax.EqualityExpression_Binary"
+
+_EqualityExpression_Binary_lhs = Model.Name "lhs"
+
+_EqualityExpression_Binary_rhs = Model.Name "rhs"
+
+data RelationalExpression =
+  RelationalExpressionSimple ShiftExpression |
+  RelationalExpressionLessThan RelationalExpression_LessThan |
+  RelationalExpressionGreaterThan RelationalExpression_GreaterThan |
+  RelationalExpressionLessThanEqual RelationalExpression_LessThanEqual |
+  RelationalExpressionGreaterThanEqual RelationalExpression_GreaterThanEqual |
+  RelationalExpressionInstanceofExpression InstanceofExpression
+  deriving (Eq, Ord, Read, Show)
+
+_RelationalExpression = Model.Name "hydra.java.syntax.RelationalExpression"
+
+_RelationalExpression_simple = Model.Name "simple"
+
+_RelationalExpression_lessThan = Model.Name "lessThan"
+
+_RelationalExpression_greaterThan = Model.Name "greaterThan"
+
+_RelationalExpression_lessThanEqual = Model.Name "lessThanEqual"
+
+_RelationalExpression_greaterThanEqual = Model.Name "greaterThanEqual"
+
+_RelationalExpression_instanceofExpression = Model.Name "instanceofExpression"
+
+data RelationalExpression_LessThan =
+  RelationalExpression_LessThan {
+    relationalExpression_LessThanLhs :: RelationalExpression,
+    relationalExpression_LessThanRhs :: ShiftExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationalExpression_LessThan = Model.Name "hydra.java.syntax.RelationalExpression_LessThan"
+
+_RelationalExpression_LessThan_lhs = Model.Name "lhs"
+
+_RelationalExpression_LessThan_rhs = Model.Name "rhs"
+
+data RelationalExpression_GreaterThan =
+  RelationalExpression_GreaterThan {
+    relationalExpression_GreaterThanLhs :: RelationalExpression,
+    relationalExpression_GreaterThanRhs :: ShiftExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationalExpression_GreaterThan = Model.Name "hydra.java.syntax.RelationalExpression_GreaterThan"
+
+_RelationalExpression_GreaterThan_lhs = Model.Name "lhs"
+
+_RelationalExpression_GreaterThan_rhs = Model.Name "rhs"
+
+data RelationalExpression_LessThanEqual =
+  RelationalExpression_LessThanEqual {
+    relationalExpression_LessThanEqualLhs :: RelationalExpression,
+    relationalExpression_LessThanEqualRhs :: ShiftExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationalExpression_LessThanEqual = Model.Name "hydra.java.syntax.RelationalExpression_LessThanEqual"
+
+_RelationalExpression_LessThanEqual_lhs = Model.Name "lhs"
+
+_RelationalExpression_LessThanEqual_rhs = Model.Name "rhs"
+
+data RelationalExpression_GreaterThanEqual =
+  RelationalExpression_GreaterThanEqual {
+    relationalExpression_GreaterThanEqualLhs :: RelationalExpression,
+    relationalExpression_GreaterThanEqualRhs :: ShiftExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationalExpression_GreaterThanEqual = Model.Name "hydra.java.syntax.RelationalExpression_GreaterThanEqual"
+
+_RelationalExpression_GreaterThanEqual_lhs = Model.Name "lhs"
+
+_RelationalExpression_GreaterThanEqual_rhs = Model.Name "rhs"
+
+data InstanceofExpression =
+  InstanceofExpression {
+    instanceofExpressionLhs :: RelationalExpression,
+    instanceofExpressionRhs :: InstanceofExpression_Rhs}
+  deriving (Eq, Ord, Read, Show)
+
+_InstanceofExpression = Model.Name "hydra.java.syntax.InstanceofExpression"
+
+_InstanceofExpression_lhs = Model.Name "lhs"
+
+_InstanceofExpression_rhs = Model.Name "rhs"
+
+data InstanceofExpression_Rhs =
+  InstanceofExpression_RhsReferenceType ReferenceType |
+  InstanceofExpression_RhsPattern Pattern
+  deriving (Eq, Ord, Read, Show)
+
+_InstanceofExpression_Rhs = Model.Name "hydra.java.syntax.InstanceofExpression_Rhs"
+
+_InstanceofExpression_Rhs_referenceType = Model.Name "referenceType"
+
+_InstanceofExpression_Rhs_pattern = Model.Name "pattern"
+
+data ShiftExpression =
+  ShiftExpressionUnary AdditiveExpression |
+  ShiftExpressionShiftLeft ShiftExpression_Binary |
+  ShiftExpressionShiftRight ShiftExpression_Binary |
+  ShiftExpressionShiftRightZeroFill ShiftExpression_Binary
+  deriving (Eq, Ord, Read, Show)
+
+_ShiftExpression = Model.Name "hydra.java.syntax.ShiftExpression"
+
+_ShiftExpression_unary = Model.Name "unary"
+
+_ShiftExpression_shiftLeft = Model.Name "shiftLeft"
+
+_ShiftExpression_shiftRight = Model.Name "shiftRight"
+
+_ShiftExpression_shiftRightZeroFill = Model.Name "shiftRightZeroFill"
+
+data ShiftExpression_Binary =
+  ShiftExpression_Binary {
+    shiftExpression_BinaryLhs :: ShiftExpression,
+    shiftExpression_BinaryRhs :: AdditiveExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ShiftExpression_Binary = Model.Name "hydra.java.syntax.ShiftExpression_Binary"
+
+_ShiftExpression_Binary_lhs = Model.Name "lhs"
+
+_ShiftExpression_Binary_rhs = Model.Name "rhs"
+
+data AdditiveExpression =
+  AdditiveExpressionUnary MultiplicativeExpression |
+  AdditiveExpressionPlus AdditiveExpression_Binary |
+  AdditiveExpressionMinus AdditiveExpression_Binary
+  deriving (Eq, Ord, Read, Show)
+
+_AdditiveExpression = Model.Name "hydra.java.syntax.AdditiveExpression"
+
+_AdditiveExpression_unary = Model.Name "unary"
+
+_AdditiveExpression_plus = Model.Name "plus"
+
+_AdditiveExpression_minus = Model.Name "minus"
+
+data AdditiveExpression_Binary =
+  AdditiveExpression_Binary {
+    additiveExpression_BinaryLhs :: AdditiveExpression,
+    additiveExpression_BinaryRhs :: MultiplicativeExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_AdditiveExpression_Binary = Model.Name "hydra.java.syntax.AdditiveExpression_Binary"
+
+_AdditiveExpression_Binary_lhs = Model.Name "lhs"
+
+_AdditiveExpression_Binary_rhs = Model.Name "rhs"
+
+data MultiplicativeExpression =
+  MultiplicativeExpressionUnary UnaryExpression |
+  MultiplicativeExpressionTimes MultiplicativeExpression_Binary |
+  MultiplicativeExpressionDivide MultiplicativeExpression_Binary |
+  MultiplicativeExpressionMod MultiplicativeExpression_Binary
+  deriving (Eq, Ord, Read, Show)
+
+_MultiplicativeExpression = Model.Name "hydra.java.syntax.MultiplicativeExpression"
+
+_MultiplicativeExpression_unary = Model.Name "unary"
+
+_MultiplicativeExpression_times = Model.Name "times"
+
+_MultiplicativeExpression_divide = Model.Name "divide"
+
+_MultiplicativeExpression_mod = Model.Name "mod"
+
+data MultiplicativeExpression_Binary =
+  MultiplicativeExpression_Binary {
+    multiplicativeExpression_BinaryLhs :: MultiplicativeExpression,
+    multiplicativeExpression_BinaryRhs :: UnaryExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_MultiplicativeExpression_Binary = Model.Name "hydra.java.syntax.MultiplicativeExpression_Binary"
+
+_MultiplicativeExpression_Binary_lhs = Model.Name "lhs"
+
+_MultiplicativeExpression_Binary_rhs = Model.Name "rhs"
+
+data UnaryExpression =
+  UnaryExpressionPreIncrement PreIncrementExpression |
+  UnaryExpressionPreDecrement PreDecrementExpression |
+  UnaryExpressionPlus UnaryExpression |
+  UnaryExpressionMinus UnaryExpression |
+  UnaryExpressionOther UnaryExpressionNotPlusMinus
+  deriving (Eq, Ord, Read, Show)
+
+_UnaryExpression = Model.Name "hydra.java.syntax.UnaryExpression"
+
+_UnaryExpression_preIncrement = Model.Name "preIncrement"
+
+_UnaryExpression_preDecrement = Model.Name "preDecrement"
+
+_UnaryExpression_plus = Model.Name "plus"
+
+_UnaryExpression_minus = Model.Name "minus"
+
+_UnaryExpression_other = Model.Name "other"
+
+newtype PreIncrementExpression =
+  PreIncrementExpression {
+    unPreIncrementExpression :: UnaryExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_PreIncrementExpression = Model.Name "hydra.java.syntax.PreIncrementExpression"
+
+newtype PreDecrementExpression =
+  PreDecrementExpression {
+    unPreDecrementExpression :: UnaryExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_PreDecrementExpression = Model.Name "hydra.java.syntax.PreDecrementExpression"
+
+data UnaryExpressionNotPlusMinus =
+  UnaryExpressionNotPlusMinusPostfix PostfixExpression |
+  UnaryExpressionNotPlusMinusTilde UnaryExpression |
+  UnaryExpressionNotPlusMinusNot UnaryExpression |
+  UnaryExpressionNotPlusMinusCast CastExpression |
+  UnaryExpressionNotPlusMinusSwitchExpression SwitchExpression
+  deriving (Eq, Ord, Read, Show)
+
+_UnaryExpressionNotPlusMinus = Model.Name "hydra.java.syntax.UnaryExpressionNotPlusMinus"
+
+_UnaryExpressionNotPlusMinus_postfix = Model.Name "postfix"
+
+_UnaryExpressionNotPlusMinus_tilde = Model.Name "tilde"
+
+_UnaryExpressionNotPlusMinus_not = Model.Name "not"
+
+_UnaryExpressionNotPlusMinus_cast = Model.Name "cast"
+
+_UnaryExpressionNotPlusMinus_switchExpression = Model.Name "switchExpression"
+
+data PostfixExpression =
+  PostfixExpressionPrimary Primary |
+  PostfixExpressionName ExpressionName |
+  PostfixExpressionPostIncrement PostIncrementExpression |
+  PostfixExpressionPostDecrement PostDecrementExpression
+  deriving (Eq, Ord, Read, Show)
+
+_PostfixExpression = Model.Name "hydra.java.syntax.PostfixExpression"
+
+_PostfixExpression_primary = Model.Name "primary"
+
+_PostfixExpression_name = Model.Name "name"
+
+_PostfixExpression_postIncrement = Model.Name "postIncrement"
+
+_PostfixExpression_postDecrement = Model.Name "postDecrement"
+
+newtype PostIncrementExpression =
+  PostIncrementExpression {
+    unPostIncrementExpression :: PostfixExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_PostIncrementExpression = Model.Name "hydra.java.syntax.PostIncrementExpression"
+
+newtype PostDecrementExpression =
+  PostDecrementExpression {
+    unPostDecrementExpression :: PostfixExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_PostDecrementExpression = Model.Name "hydra.java.syntax.PostDecrementExpression"
+
+data CastExpression =
+  CastExpressionPrimitive CastExpression_Primitive |
+  CastExpressionNotPlusMinus CastExpression_NotPlusMinus |
+  CastExpressionLambda CastExpression_Lambda
+  deriving (Eq, Ord, Read, Show)
+
+_CastExpression = Model.Name "hydra.java.syntax.CastExpression"
+
+_CastExpression_primitive = Model.Name "primitive"
+
+_CastExpression_notPlusMinus = Model.Name "notPlusMinus"
+
+_CastExpression_lambda = Model.Name "lambda"
+
+data CastExpression_Primitive =
+  CastExpression_Primitive {
+    castExpression_PrimitiveType :: PrimitiveTypeWithAnnotations,
+    castExpression_PrimitiveExpression :: UnaryExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_CastExpression_Primitive = Model.Name "hydra.java.syntax.CastExpression_Primitive"
+
+_CastExpression_Primitive_type = Model.Name "type"
+
+_CastExpression_Primitive_expression = Model.Name "expression"
+
+data CastExpression_NotPlusMinus =
+  CastExpression_NotPlusMinus {
+    castExpression_NotPlusMinusRefAndBounds :: CastExpression_RefAndBounds,
+    castExpression_NotPlusMinusExpression :: UnaryExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_CastExpression_NotPlusMinus = Model.Name "hydra.java.syntax.CastExpression_NotPlusMinus"
+
+_CastExpression_NotPlusMinus_refAndBounds = Model.Name "refAndBounds"
+
+_CastExpression_NotPlusMinus_expression = Model.Name "expression"
+
+data CastExpression_Lambda =
+  CastExpression_Lambda {
+    castExpression_LambdaRefAndBounds :: CastExpression_RefAndBounds,
+    castExpression_LambdaExpression :: LambdaExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_CastExpression_Lambda = Model.Name "hydra.java.syntax.CastExpression_Lambda"
+
+_CastExpression_Lambda_refAndBounds = Model.Name "refAndBounds"
+
+_CastExpression_Lambda_expression = Model.Name "expression"
+
+data CastExpression_RefAndBounds =
+  CastExpression_RefAndBounds {
+    castExpression_RefAndBoundsType :: ReferenceType,
+    castExpression_RefAndBoundsBounds :: [AdditionalBound]}
+  deriving (Eq, Ord, Read, Show)
+
+_CastExpression_RefAndBounds = Model.Name "hydra.java.syntax.CastExpression_RefAndBounds"
+
+_CastExpression_RefAndBounds_type = Model.Name "type"
+
+_CastExpression_RefAndBounds_bounds = Model.Name "bounds"
+
+data SwitchExpression =
+  SwitchExpression {
+    switchExpressionCond :: Expression,
+    switchExpressionBlock :: SwitchBlock}
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchExpression = Model.Name "hydra.java.syntax.SwitchExpression"
+
+_SwitchExpression_cond = Model.Name "cond"
+
+_SwitchExpression_block = Model.Name "block"
+
+newtype ConstantExpression =
+  ConstantExpression {
+    unConstantExpression :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_ConstantExpression = Model.Name "hydra.java.syntax.ConstantExpression"
diff --git a/src/main/haskell/Hydra/Java/Testing.hs b/src/main/haskell/Hydra/Java/Testing.hs
--- a/src/main/haskell/Hydra/Java/Testing.hs
+++ b/src/main/haskell/Hydra/Java/Testing.hs
@@ -4,41 +4,41 @@
 
 module Hydra.Java.Testing where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Classes as Classes
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Constants as Constants
-import qualified Hydra.Core as Core
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Errors as Errors
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Classes as Classes
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Constants as Constants
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Errors as Errors
+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.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.Logic as Logic
+import qualified Hydra.Core.Overlay.Haskell.Lib.Optionals as Optionals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Strings as Strings
+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.Query as Query
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Serialization as Serialization
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Test.Utils as Utils
+import qualified Hydra.Core.Testing as Testing
+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.Java.Syntax as Syntax
-import qualified Hydra.Json.Model as Model
-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.Logic as Logic
-import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals
-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.Query as Query
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Serialization as Serialization
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Test.Utils as Utils
-import qualified Hydra.Testing as Testing
-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
@@ -57,7 +57,7 @@
                     "import org.junit.jupiter.api.Test;",
                     "import static org.junit.jupiter.api.Assertions.*;",
                     "import java.util.*;",
-                    "import hydra.overlay.java.util.*;"]
+                    "import hydra.core.overlay.java.util.*;"]
           header =
                   Strings.concat [
                     Strings.concat2 "// " Constants.warningAutoGeneratedFile,
diff --git a/src/main/haskell/Hydra/Java/Utils.hs b/src/main/haskell/Hydra/Java/Utils.hs
--- a/src/main/haskell/Hydra/Java/Utils.hs
+++ b/src/main/haskell/Hydra/Java/Utils.hs
@@ -4,48 +4,48 @@
 
 module Hydra.Java.Utils where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Classes as Classes
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Errors as Errors
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Classes as Classes
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Errors as Errors
+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.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.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.Model as Model
+import qualified Hydra.Core.Names as CoreNames
+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.Relational as Relational
+import qualified Hydra.Core.Serialization as Serialization
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+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.Java.Environment as Environment
 import qualified Hydra.Java.Language as Language
 import qualified Hydra.Java.Names as JavaNames
 import qualified Hydra.Java.Serde as Serde
 import qualified Hydra.Java.Syntax as Syntax
-import qualified Hydra.Json.Model as Model
-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.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.Query as Query
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Serialization as Serialization
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-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
@@ -61,7 +61,7 @@
         Syntax.additiveExpression_BinaryLhs = ae,
         Syntax.additiveExpression_BinaryRhs = me})) (Syntax.AdditiveExpressionUnary (Optionals.withDefault dummyMult (Lists.head exprs))) (Lists.drop 1 exprs))
 
-addInScopeVar :: Core.Name -> Environment.Aliases -> Environment.Aliases
+addInScopeVar :: Model.Name -> Environment.Aliases -> Environment.Aliases
 addInScopeVar name aliases =
     Environment.Aliases {
       Environment.aliasesCurrentNamespace = (Environment.aliasesCurrentNamespace aliases),
@@ -78,7 +78,7 @@
       Environment.aliasesMethodCodomain = (Environment.aliasesMethodCodomain aliases),
       Environment.aliasesThunkedVars = (Environment.aliasesThunkedVars aliases)}
 
-addInScopeVars :: [Core.Name] -> Environment.Aliases -> Environment.Aliases
+addInScopeVars :: [Model.Name] -> Environment.Aliases -> Environment.Aliases
 addInScopeVars names aliases = Lists.foldl (\a -> \n -> addInScopeVar n a) aliases names
 
 addJavaTypeParameter :: Syntax.ReferenceType -> Syntax.Type -> t0 -> Either Errors.Error Syntax.Type
@@ -102,7 +102,7 @@
         Syntax.ReferenceTypeArray _ -> Left (Errors.ErrorOther (Errors.OtherError "expected a Java class or interface type, or a variable"))
       Syntax.TypePrimitive _ -> Left (Errors.ErrorOther (Errors.OtherError "expected a reference type"))
 
-addVarRename :: Core.Name -> Core.Name -> Environment.Aliases -> Environment.Aliases
+addVarRename :: Model.Name -> Model.Name -> Environment.Aliases -> Environment.Aliases
 addVarRename original renamed aliases =
     Environment.Aliases {
       Environment.aliasesCurrentNamespace = (Environment.aliasesCurrentNamespace aliases),
@@ -126,7 +126,7 @@
         varId])),
       Syntax.expressionNameIdentifier = fieldId}
 
-fieldNameToJavaExpression :: Core.Name -> Syntax.Expression
+fieldNameToJavaExpression :: Model.Name -> Syntax.Expression
 fieldNameToJavaExpression fname =
     Syntax.ExpressionAssignment (Syntax.AssignmentExpressionConditional (Syntax.ConditionalExpressionSimple (Syntax.ConditionalOrExpression [
       Syntax.ConditionalAndExpression [
@@ -135,14 +135,14 @@
             Syntax.AndExpression [
               Syntax.EqualityExpressionUnary (Syntax.RelationalExpressionSimple (Syntax.ShiftExpressionUnary (Syntax.AdditiveExpressionUnary (Syntax.MultiplicativeExpressionUnary (Syntax.UnaryExpressionOther (Syntax.UnaryExpressionNotPlusMinusPostfix (Syntax.PostfixExpressionName (javaIdentifierToJavaExpressionName (fieldNameToJavaIdentifier fname)))))))))]]]]])))
 
-fieldNameToJavaIdentifier :: Core.Name -> Syntax.Identifier
-fieldNameToJavaIdentifier fname = javaIdentifier (Core.unName fname)
+fieldNameToJavaIdentifier :: Model.Name -> Syntax.Identifier
+fieldNameToJavaIdentifier fname = javaIdentifier (Model.unName fname)
 
-fieldNameToJavaVariableDeclarator :: Core.Name -> Syntax.VariableDeclarator
-fieldNameToJavaVariableDeclarator fname = javaVariableDeclarator (javaIdentifier (Core.unName fname)) Nothing
+fieldNameToJavaVariableDeclarator :: Model.Name -> Syntax.VariableDeclarator
+fieldNameToJavaVariableDeclarator fname = javaVariableDeclarator (javaIdentifier (Model.unName fname)) Nothing
 
-fieldNameToJavaVariableDeclaratorId :: Core.Name -> Syntax.VariableDeclaratorId
-fieldNameToJavaVariableDeclaratorId fname = javaVariableDeclaratorId (javaIdentifier (Core.unName fname))
+fieldNameToJavaVariableDeclaratorId :: Model.Name -> Syntax.VariableDeclaratorId
+fieldNameToJavaVariableDeclaratorId fname = javaVariableDeclaratorId (javaIdentifier (Model.unName fname))
 
 finalVarDeclarationStatement :: Syntax.Identifier -> Syntax.Expression -> Syntax.BlockStatement
 finalVarDeclarationStatement id rhs =
@@ -249,7 +249,7 @@
         Syntax.primitiveTypeWithAnnotationsAnnotations = []},
       Syntax.castExpression_PrimitiveExpression = expr})
 
-javaClassDeclaration :: Environment.Aliases -> [Syntax.TypeParameter] -> Core.Name -> [Syntax.ClassModifier] -> Maybe Core.Name -> [Syntax.InterfaceType] -> [Syntax.ClassBodyDeclarationWithComments] -> Syntax.ClassDeclaration
+javaClassDeclaration :: Environment.Aliases -> [Syntax.TypeParameter] -> Model.Name -> [Syntax.ClassModifier] -> Maybe Model.Name -> [Syntax.InterfaceType] -> [Syntax.ClassBodyDeclarationWithComments] -> Syntax.ClassDeclaration
 javaClassDeclaration aliases tparams elName mods supname impls bodyDecls =
 
       let extends_ = Optionals.map (\n -> nameToJavaClassType aliases True [] n Nothing) supname
@@ -306,7 +306,7 @@
           Syntax.annotatedIdentifierIdentifier = id}],
       Syntax.classOrInterfaceTypeToInstantiateTypeArguments = targs}
 
-javaDeclName :: Core.Name -> Syntax.TypeIdentifier
+javaDeclName :: Model.Name -> Syntax.TypeIdentifier
 javaDeclName name = Syntax.TypeIdentifier (javaVariableName name)
 
 javaDoubleCastExpression :: Syntax.ReferenceType -> Syntax.ReferenceType -> Syntax.UnaryExpression -> Syntax.CastExpression
@@ -459,13 +459,13 @@
 javaInterfaceDeclarationToJavaClassBodyDeclaration nid =
     Syntax.ClassBodyDeclarationClassMember (Syntax.ClassMemberDeclarationInterface (Syntax.InterfaceDeclarationNormalInterface nid))
 
-javaLambda :: Core.Name -> Syntax.Expression -> Syntax.Expression
+javaLambda :: Model.Name -> Syntax.Expression -> Syntax.Expression
 javaLambda v body =
     Syntax.ExpressionLambda (Syntax.LambdaExpression {
       Syntax.lambdaExpressionParameters = (Syntax.LambdaParametersSingle (variableToJavaIdentifier v)),
       Syntax.lambdaExpressionBody = (Syntax.LambdaBodyExpression body)})
 
-javaLambdaFromBlock :: Core.Name -> Syntax.Block -> Syntax.Expression
+javaLambdaFromBlock :: Model.Name -> Syntax.Block -> Syntax.Expression
 javaLambdaFromBlock v block =
     Syntax.ExpressionLambda (Syntax.LambdaExpression {
       Syntax.lambdaExpressionParameters = (Syntax.LambdaParametersSingle (variableToJavaIdentifier v)),
@@ -672,7 +672,7 @@
 javaThrowStatement e =
     Syntax.StatementWithoutTrailing (Syntax.StatementWithoutTrailingSubstatementThrow (Syntax.ThrowStatement e))
 
-javaTypeFromTypeName :: Environment.Aliases -> Core.Name -> Syntax.Type
+javaTypeFromTypeName :: Environment.Aliases -> Model.Name -> Syntax.Type
 javaTypeFromTypeName aliases elName =
     javaTypeVariableToType (Syntax.TypeVariable {
       Syntax.typeVariableAnnotations = [],
@@ -700,7 +700,7 @@
       Syntax.typeParameterIdentifier = (javaTypeIdentifier v),
       Syntax.typeParameterBound = Nothing}
 
-javaTypeToJavaFormalParameter :: Syntax.Type -> Core.Name -> Syntax.FormalParameter
+javaTypeToJavaFormalParameter :: Syntax.Type -> Model.Name -> Syntax.FormalParameter
 javaTypeToJavaFormalParameter jt fname =
     Syntax.FormalParameterSimple (Syntax.FormalParameter_Simple {
       Syntax.formalParameter_SimpleModifiers = [],
@@ -758,14 +758,14 @@
       Syntax.variableDeclaratorIdIdentifier = id,
       Syntax.variableDeclaratorIdDims = Nothing}
 
-javaVariableName :: Core.Name -> Syntax.Identifier
-javaVariableName name = javaIdentifier (Names.localNameOf name)
+javaVariableName :: Model.Name -> Syntax.Identifier
+javaVariableName name = javaIdentifier (CoreNames.localNameOf name)
 
-lookupJavaVarName :: Environment.Aliases -> Core.Name -> Core.Name
+lookupJavaVarName :: Environment.Aliases -> Model.Name -> Model.Name
 lookupJavaVarName aliases name =
     Optionals.match (Maps.lookup name (Environment.aliasesVarRenames aliases)) name (\renamed -> renamed)
 
-makeConstructor :: Environment.Aliases -> Core.Name -> Bool -> [Syntax.FormalParameter] -> [Syntax.BlockStatement] -> Syntax.ClassBodyDeclaration
+makeConstructor :: Environment.Aliases -> Model.Name -> Bool -> [Syntax.FormalParameter] -> [Syntax.BlockStatement] -> Syntax.ClassBodyDeclaration
 makeConstructor aliases elName private params stmts =
 
       let nm = Syntax.SimpleTypeName (nameToJavaTypeIdentifier aliases False elName)
@@ -823,7 +823,7 @@
         Syntax.methodInvocationHeader = header,
         Syntax.methodInvocationArguments = args})
 
-nameToJavaClassType :: Environment.Aliases -> Bool -> [Syntax.TypeArgument] -> Core.Name -> Maybe String -> Syntax.ClassType
+nameToJavaClassType :: Environment.Aliases -> Bool -> [Syntax.TypeArgument] -> Model.Name -> Maybe String -> Syntax.ClassType
 nameToJavaClassType aliases qualify args name mlocal =
 
       let result = nameToQualifiedJavaName aliases qualify name mlocal
@@ -835,30 +835,30 @@
         Syntax.classTypeIdentifier = id,
         Syntax.classTypeArguments = args}
 
-nameToJavaName :: Environment.Aliases -> Core.Name -> Syntax.Identifier
+nameToJavaName :: Environment.Aliases -> Model.Name -> Syntax.Identifier
 nameToJavaName aliases name =
 
-      let qn = Names.qualifyName name
+      let qn = CoreNames.qualifyName name
           ns_ = Util.qualifiedNameModuleName qn
           local = Util.qualifiedNameLocal qn
-      in (Logic.ifElse (isEscaped (Core.unName name)) (Syntax.Identifier (sanitizeJavaName local)) (Optionals.match ns_ (Syntax.Identifier local) (\gname ->
+      in (Logic.ifElse (isEscaped (Model.unName name)) (Syntax.Identifier (sanitizeJavaName local)) (Optionals.match ns_ (Syntax.Identifier local) (\gname ->
         let parts =
                 Optionals.match (Maps.lookup gname (Environment.aliasesPackages aliases)) (Strings.splitOn "." (Packaging.unModuleName gname)) (\pkgName -> Lists.map (\i -> Syntax.unIdentifier i) (Syntax.unPackageName pkgName))
             allParts = Lists.concat2 parts [
                   sanitizeJavaName local]
         in (Syntax.Identifier (Strings.join "." allParts)))))
 
-nameToJavaReferenceType :: Environment.Aliases -> Bool -> [Syntax.TypeArgument] -> Core.Name -> Maybe String -> Syntax.ReferenceType
+nameToJavaReferenceType :: Environment.Aliases -> Bool -> [Syntax.TypeArgument] -> Model.Name -> Maybe String -> Syntax.ReferenceType
 nameToJavaReferenceType aliases qualify args name mlocal =
     Syntax.ReferenceTypeClassOrInterface (Syntax.ClassOrInterfaceTypeClass (nameToJavaClassType aliases qualify args name mlocal))
 
-nameToJavaTypeIdentifier :: Environment.Aliases -> Bool -> Core.Name -> Syntax.TypeIdentifier
+nameToJavaTypeIdentifier :: Environment.Aliases -> Bool -> Model.Name -> Syntax.TypeIdentifier
 nameToJavaTypeIdentifier aliases qualify name = Pairs.first (nameToQualifiedJavaName aliases qualify name Nothing)
 
-nameToQualifiedJavaName :: Environment.Aliases -> Bool -> Core.Name -> Maybe String -> (Syntax.TypeIdentifier, Syntax.ClassTypeQualifier)
+nameToQualifiedJavaName :: Environment.Aliases -> Bool -> Model.Name -> Maybe String -> (Syntax.TypeIdentifier, Syntax.ClassTypeQualifier)
 nameToQualifiedJavaName aliases qualify name mlocal =
 
-      let qn = Names.qualifyName name
+      let qn = CoreNames.qualifyName name
           ns_ = Util.qualifiedNameModuleName qn
           local = Util.qualifiedNameLocal qn
           alias =
@@ -896,9 +896,10 @@
 overlayLibPairFor :: String -> (Packaging.ModuleName, Syntax.PackageName)
 overlayLibPairFor sub =
     (
-      Packaging.ModuleName (Strings.concat2 "hydra.lib." sub),
+      Packaging.ModuleName (Strings.concat2 "hydra.core.lib." sub),
       (JavaNames.javaPackageName (Lists.concat2 [
         "hydra",
+        "core",
         "overlay",
         "java",
         "lib"] [
@@ -942,7 +943,7 @@
                     Syntax.classTypeIdentifier = (javaTypeIdentifier JavaNames.visitorName),
                     Syntax.classTypeArguments = (Lists.concat2 typeArgs [
                       Syntax.TypeArgumentReference visitorTypeVariable])})
-          param = javaTypeToJavaFormalParameter ref (Core.Name "visitor")
+          param = javaTypeToJavaFormalParameter ref (Model.Name "visitor")
           result = javaTypeToJavaResult (Syntax.TypeReference visitorTypeVariable)
           returnExpr =
                   javaMethodInvocationToJavaExpression (methodInvocationStatic (Syntax.Identifier "visitor") (Syntax.Identifier JavaNames.visitMethodName) [
@@ -952,7 +953,7 @@
       in (methodDeclaration mods tparams anns JavaNames.acceptMethodName [
         param] result body)
 
-toAssignStmt :: Core.Name -> Syntax.Statement
+toAssignStmt :: Model.Name -> Syntax.Statement
 toAssignStmt fname =
 
       let id = fieldNameToJavaIdentifier fname
@@ -995,14 +996,14 @@
 unescape :: String -> String
 unescape s = Strings.fromList (Lists.drop 1 (Strings.toList s))
 
-uniqueVarName :: Environment.Aliases -> Core.Name -> Core.Name
+uniqueVarName :: Environment.Aliases -> Model.Name -> Model.Name
 uniqueVarName aliases name =
-    Logic.ifElse (Sets.member name (Environment.aliasesInScopeJavaVars aliases)) (uniqueVarName_go aliases (Core.unName name) 2) name
+    Logic.ifElse (Sets.member name (Environment.aliasesInScopeJavaVars aliases)) (uniqueVarName_go aliases (Model.unName name) 2) name
 
-uniqueVarName_go :: Environment.Aliases -> String -> Int -> Core.Name
+uniqueVarName_go :: Environment.Aliases -> String -> Int -> Model.Name
 uniqueVarName_go aliases base n =
 
-      let candidate = Core.Name (Strings.concat2 base (Literals.printInt32 n))
+      let candidate = Model.Name (Strings.concat2 base (Literals.printInt32 n))
       in (Logic.ifElse (Sets.member candidate (Environment.aliasesInScopeJavaVars aliases)) (uniqueVarName_go aliases base (Math.add n 1)) candidate)
 
 varDeclarationStatement :: Syntax.Identifier -> Syntax.Expression -> Syntax.BlockStatement
@@ -1024,22 +1025,22 @@
         Syntax.localVariableDeclarationDeclarators = [
           vdec]})))
 
-variableToJavaIdentifier :: Core.Name -> Syntax.Identifier
+variableToJavaIdentifier :: Model.Name -> Syntax.Identifier
 variableToJavaIdentifier name =
 
-      let v = Core.unName name
+      let v = Model.unName name
       in (Logic.ifElse (Equality.equal v "_") (Syntax.Identifier "ignored") (Syntax.Identifier (sanitizeJavaName v)))
 
-variantClassName :: Bool -> Core.Name -> Core.Name -> Core.Name
+variantClassName :: Bool -> Model.Name -> Model.Name -> Model.Name
 variantClassName qualify elName fname =
 
-      let qn = Names.qualifyName elName
+      let qn = CoreNames.qualifyName elName
           ns_ = Util.qualifiedNameModuleName qn
           local = Util.qualifiedNameLocal qn
-          flocal = Formatting.capitalize (Core.unName fname)
+          flocal = Formatting.capitalize (Model.unName fname)
           local1 =
                   Logic.ifElse qualify (Strings.concat2 (Strings.concat2 local ".") flocal) (Logic.ifElse (Equality.equal flocal local) (Strings.concat2 flocal "_") flocal)
-      in (Names.unqualifyName (Util.QualifiedName {
+      in (CoreNames.unqualifyName (Util.QualifiedName {
         Util.qualifiedNameModuleName = ns_,
         Util.qualifiedNameLocal = local1}))
 
