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-haskell.cabal b/hydra-haskell.cabal
--- a/hydra-haskell.cabal
+++ b/hydra-haskell.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hydra-haskell
-version:        0.17.7
+version:        0.18.0
 synopsis:       Hydra's Haskell coder: emit Haskell 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". This package is Hydra's Haskell coder: it translates Hydra modules into Haskell source. The top-level entry point is moduleToHaskell (and moduleToHaskellModule for the structured AST). It builds on hydra-kernel.
 category:       Data
@@ -27,9 +27,9 @@
 
 library
   exposed-modules:
-      Hydra.Dsl.Haskell.Environment
-      Hydra.Dsl.Haskell.Syntax
       Hydra.Haskell.Coder
+      Hydra.Haskell.Dsl.Environment
+      Hydra.Haskell.Dsl.Syntax
       Hydra.Haskell.Environment
       Hydra.Haskell.Language
       Hydra.Haskell.Operators
@@ -44,6 +44,6 @@
   build-depends:
       base >=4.19.0 && <4.22
     , containers >=0.6.7 && <0.8
-    , hydra-kernel ==0.17.7
+    , hydra-kernel ==0.18.0
     , scientific >=0.3.7 && <0.4
   default-language: Haskell2010
diff --git a/src/main/haskell/Hydra/Dsl/Haskell/Environment.hs b/src/main/haskell/Hydra/Dsl/Haskell/Environment.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Dsl/Haskell/Environment.hs
+++ /dev/null
@@ -1,273 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | DSL functions for hydra.haskell.environment
-
-module Hydra.Dsl.Haskell.Environment where
-
-import qualified Hydra.Core as Core
-import qualified Hydra.Haskell.Environment as Environment
-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 hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadata :: Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
-haskellModuleMetadata usesByteString usesInt usesMap usesSet usesVoid =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "usesByteString"),
-          Core.fieldTerm = (Typed.unTypedTerm usesByteString)},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesInt"),
-          Core.fieldTerm = (Typed.unTypedTerm usesInt)},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesMap"),
-          Core.fieldTerm = (Typed.unTypedTerm usesMap)},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesSet"),
-          Core.fieldTerm = (Typed.unTypedTerm usesSet)},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesVoid"),
-          Core.fieldTerm = (Typed.unTypedTerm usesVoid)}]}))
-
--- | DSL name token for hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataHaskellModuleMetadata :: Typed.TypedName Environment.HaskellModuleMetadata
-haskellModuleMetadataHaskellModuleMetadata = Typed.TypedName (Core.Name "hydra.haskell.environment.HaskellModuleMetadata")
-
--- | DSL accessor for the usesByteString field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataUsesByteString :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
-haskellModuleMetadataUsesByteString x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-        Core.projectionFieldName = (Core.Name "usesByteString")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the usesInt field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataUsesInt :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
-haskellModuleMetadataUsesInt x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-        Core.projectionFieldName = (Core.Name "usesInt")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the usesMap field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataUsesMap :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
-haskellModuleMetadataUsesMap x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-        Core.projectionFieldName = (Core.Name "usesMap")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the usesSet field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataUsesSet :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
-haskellModuleMetadataUsesSet x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-        Core.projectionFieldName = (Core.Name "usesSet")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the usesVoid field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataUsesVoid :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
-haskellModuleMetadataUsesVoid x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-        Core.projectionFieldName = (Core.Name "usesVoid")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the usesByteString field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesByteString :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesByteString original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "usesByteString"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesInt"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesInt")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesMap"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesMap")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesSet"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesSet")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesVoid"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesVoid")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the usesInt field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesInt :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesInt original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "usesByteString"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesByteString")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesInt"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesMap"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesMap")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesSet"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesSet")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesVoid"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesVoid")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the usesMap field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesMap :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesMap original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "usesByteString"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesByteString")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesInt"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesInt")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesMap"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesSet"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesSet")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesVoid"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesVoid")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the usesSet field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesSet :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesSet original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "usesByteString"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesByteString")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesInt"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesInt")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesMap"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesMap")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesSet"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesVoid"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesVoid")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the usesVoid field of hydra.haskell.environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesVoid :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
-haskellModuleMetadataWithUsesVoid original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "usesByteString"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesByteString")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesInt"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesInt")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesMap"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesMap")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesSet"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.environment.HaskellModuleMetadata"),
-              Core.projectionFieldName = (Core.Name "usesSet")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "usesVoid"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
diff --git a/src/main/haskell/Hydra/Dsl/Haskell/Syntax.hs b/src/main/haskell/Hydra/Dsl/Haskell/Syntax.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Dsl/Haskell/Syntax.hs
+++ /dev/null
@@ -1,4407 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | DSL functions for hydra.haskell.syntax
-
-module Hydra.Dsl.Haskell.Syntax where
-
-import qualified Hydra.Core as Core
-import qualified Hydra.Dsl.Core as DslCore
-import qualified Hydra.Haskell.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 hydra.haskell.syntax.Alternative
-alternative :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.CaseRhs -> Typed.TypedTerm (Maybe Syntax.LocalBindings) -> Typed.TypedTerm Syntax.Alternative
-alternative pattern rhs binds =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Typed.unTypedTerm pattern)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "binds"),
-          Core.fieldTerm = (Typed.unTypedTerm binds)}]}))
-
--- | DSL name token for hydra.haskell.syntax.Alternative
-alternativeAlternative :: Typed.TypedName Syntax.Alternative
-alternativeAlternative = Typed.TypedName (Core.Name "hydra.haskell.syntax.Alternative")
-
--- | DSL accessor for the binds field of hydra.haskell.syntax.Alternative
-alternativeBinds :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm (Maybe Syntax.LocalBindings)
-alternativeBinds x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-        Core.projectionFieldName = (Core.Name "binds")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the pattern field of hydra.haskell.syntax.Alternative
-alternativePattern :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm Syntax.Pattern
-alternativePattern x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-        Core.projectionFieldName = (Core.Name "pattern")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the rhs field of hydra.haskell.syntax.Alternative
-alternativeRhs :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm Syntax.CaseRhs
-alternativeRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the binds field of hydra.haskell.syntax.Alternative
-alternativeWithBinds :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm (Maybe Syntax.LocalBindings) -> Typed.TypedTerm Syntax.Alternative
-alternativeWithBinds original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-      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.haskell.syntax.Alternative"),
-              Core.projectionFieldName = (Core.Name "pattern")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "binds"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the pattern field of hydra.haskell.syntax.Alternative
-alternativeWithPattern :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Alternative
-alternativeWithPattern original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          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.haskell.syntax.Alternative"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "binds"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-              Core.projectionFieldName = (Core.Name "binds")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.haskell.syntax.Alternative
-alternativeWithRhs :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm Syntax.CaseRhs -> Typed.TypedTerm Syntax.Alternative
-alternativeWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-      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.haskell.syntax.Alternative"),
-              Core.projectionFieldName = (Core.Name "pattern")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "binds"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Alternative"),
-              Core.projectionFieldName = (Core.Name "binds")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.ApplicationDeclarationHead
-applicationDeclarationHead :: Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.Variable -> Typed.TypedTerm Syntax.ApplicationDeclarationHead
-applicationDeclarationHead function operand =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "function"),
-          Core.fieldTerm = (Typed.unTypedTerm function)},
-        Core.Field {
-          Core.fieldName = (Core.Name "operand"),
-          Core.fieldTerm = (Typed.unTypedTerm operand)}]}))
-
--- | DSL name token for hydra.haskell.syntax.ApplicationDeclarationHead
-applicationDeclarationHeadApplicationDeclarationHead :: Typed.TypedName Syntax.ApplicationDeclarationHead
-applicationDeclarationHeadApplicationDeclarationHead =
-    Typed.TypedName (Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead")
-
--- | DSL accessor for the function field of hydra.haskell.syntax.ApplicationDeclarationHead
-applicationDeclarationHeadFunction :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.DeclarationHead
-applicationDeclarationHeadFunction x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
-        Core.projectionFieldName = (Core.Name "function")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the operand field of hydra.haskell.syntax.ApplicationDeclarationHead
-applicationDeclarationHeadOperand :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.Variable
-applicationDeclarationHeadOperand x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
-        Core.projectionFieldName = (Core.Name "operand")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the function field of hydra.haskell.syntax.ApplicationDeclarationHead
-applicationDeclarationHeadWithFunction :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.ApplicationDeclarationHead
-applicationDeclarationHeadWithFunction original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "function"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "operand"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
-              Core.projectionFieldName = (Core.Name "operand")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the operand field of hydra.haskell.syntax.ApplicationDeclarationHead
-applicationDeclarationHeadWithOperand :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.Variable -> Typed.TypedTerm Syntax.ApplicationDeclarationHead
-applicationDeclarationHeadWithOperand original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "function"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
-              Core.projectionFieldName = (Core.Name "function")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "operand"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.ApplicationExpression
-applicationExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ApplicationExpression
-applicationExpression function argument =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "function"),
-          Core.fieldTerm = (Typed.unTypedTerm function)},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Typed.unTypedTerm argument)}]}))
-
--- | DSL name token for hydra.haskell.syntax.ApplicationExpression
-applicationExpressionApplicationExpression :: Typed.TypedName Syntax.ApplicationExpression
-applicationExpressionApplicationExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.ApplicationExpression")
-
--- | DSL accessor for the argument field of hydra.haskell.syntax.ApplicationExpression
-applicationExpressionArgument :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression
-applicationExpressionArgument x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationExpression"),
-        Core.projectionFieldName = (Core.Name "argument")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the function field of hydra.haskell.syntax.ApplicationExpression
-applicationExpressionFunction :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression
-applicationExpressionFunction x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationExpression"),
-        Core.projectionFieldName = (Core.Name "function")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the argument field of hydra.haskell.syntax.ApplicationExpression
-applicationExpressionWithArgument :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ApplicationExpression
-applicationExpressionWithArgument original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "function"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationExpression"),
-              Core.projectionFieldName = (Core.Name "function")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the function field of hydra.haskell.syntax.ApplicationExpression
-applicationExpressionWithFunction :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ApplicationExpression
-applicationExpressionWithFunction original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "function"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationExpression"),
-              Core.projectionFieldName = (Core.Name "argument")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.ApplicationPattern
-applicationPattern :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.ApplicationPattern
-applicationPattern name args =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "args"),
-          Core.fieldTerm = (Typed.unTypedTerm args)}]}))
-
--- | DSL name token for hydra.haskell.syntax.ApplicationPattern
-applicationPatternApplicationPattern :: Typed.TypedName Syntax.ApplicationPattern
-applicationPatternApplicationPattern = Typed.TypedName (Core.Name "hydra.haskell.syntax.ApplicationPattern")
-
--- | DSL accessor for the args field of hydra.haskell.syntax.ApplicationPattern
-applicationPatternArgs :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm [Syntax.Pattern]
-applicationPatternArgs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationPattern"),
-        Core.projectionFieldName = (Core.Name "args")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.ApplicationPattern
-applicationPatternName :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm Syntax.Name
-applicationPatternName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationPattern"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the args field of hydra.haskell.syntax.ApplicationPattern
-applicationPatternWithArgs :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.ApplicationPattern
-applicationPatternWithArgs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationPattern"),
-      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.haskell.syntax.ApplicationPattern"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "args"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.ApplicationPattern
-applicationPatternWithName :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.ApplicationPattern
-applicationPatternWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "args"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationPattern"),
-              Core.projectionFieldName = (Core.Name "args")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.ApplicationType
-applicationType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ApplicationType
-applicationType context argument =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Typed.unTypedTerm context)},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Typed.unTypedTerm argument)}]}))
-
--- | DSL name token for hydra.haskell.syntax.ApplicationType
-applicationTypeApplicationType :: Typed.TypedName Syntax.ApplicationType
-applicationTypeApplicationType = Typed.TypedName (Core.Name "hydra.haskell.syntax.ApplicationType")
-
--- | DSL accessor for the argument field of hydra.haskell.syntax.ApplicationType
-applicationTypeArgument :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type
-applicationTypeArgument x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationType"),
-        Core.projectionFieldName = (Core.Name "argument")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the context field of hydra.haskell.syntax.ApplicationType
-applicationTypeContext :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type
-applicationTypeContext x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationType"),
-        Core.projectionFieldName = (Core.Name "context")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the argument field of hydra.haskell.syntax.ApplicationType
-applicationTypeWithArgument :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ApplicationType
-applicationTypeWithArgument original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationType"),
-              Core.projectionFieldName = (Core.Name "context")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the context field of hydra.haskell.syntax.ApplicationType
-applicationTypeWithContext :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ApplicationType
-applicationTypeWithContext original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ApplicationType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ApplicationType"),
-              Core.projectionFieldName = (Core.Name "argument")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.AsPattern
-asPattern :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.AsPattern
-asPattern name inner =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.AsPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm inner)}]}))
-
--- | DSL name token for hydra.haskell.syntax.AsPattern
-asPatternAsPattern :: Typed.TypedName Syntax.AsPattern
-asPatternAsPattern = Typed.TypedName (Core.Name "hydra.haskell.syntax.AsPattern")
-
--- | DSL accessor for the inner field of hydra.haskell.syntax.AsPattern
-asPatternInner :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Pattern
-asPatternInner x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.AsPattern"),
-        Core.projectionFieldName = (Core.Name "inner")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.AsPattern
-asPatternName :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Name
-asPatternName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.AsPattern"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the inner field of hydra.haskell.syntax.AsPattern
-asPatternWithInner :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.AsPattern
-asPatternWithInner original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.AsPattern"),
-      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.haskell.syntax.AsPattern"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.AsPattern
-asPatternWithName :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.AsPattern
-asPatternWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.AsPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.AsPattern"),
-              Core.projectionFieldName = (Core.Name "inner")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.CaseExpression
-caseExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm [Syntax.Alternative] -> Typed.TypedTerm Syntax.CaseExpression
-caseExpression case_ alternatives =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.CaseExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "case"),
-          Core.fieldTerm = (Typed.unTypedTerm case_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternatives"),
-          Core.fieldTerm = (Typed.unTypedTerm alternatives)}]}))
-
--- | DSL accessor for the alternatives field of hydra.haskell.syntax.CaseExpression
-caseExpressionAlternatives :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm [Syntax.Alternative]
-caseExpressionAlternatives x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.CaseExpression"),
-        Core.projectionFieldName = (Core.Name "alternatives")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the case field of hydra.haskell.syntax.CaseExpression
-caseExpressionCase :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm Syntax.Expression
-caseExpressionCase x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.CaseExpression"),
-        Core.projectionFieldName = (Core.Name "case")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.CaseExpression
-caseExpressionCaseExpression :: Typed.TypedName Syntax.CaseExpression
-caseExpressionCaseExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.CaseExpression")
-
--- | DSL updater for the alternatives field of hydra.haskell.syntax.CaseExpression
-caseExpressionWithAlternatives :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm [Syntax.Alternative] -> Typed.TypedTerm Syntax.CaseExpression
-caseExpressionWithAlternatives original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.CaseExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "case"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.CaseExpression"),
-              Core.projectionFieldName = (Core.Name "case")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternatives"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the case field of hydra.haskell.syntax.CaseExpression
-caseExpressionWithCase :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.CaseExpression
-caseExpressionWithCase original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.CaseExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "case"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternatives"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.CaseExpression"),
-              Core.projectionFieldName = (Core.Name "alternatives")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.haskell.syntax.CaseRhs wrapper
-caseRhs :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.CaseRhs
-caseRhs x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.haskell.syntax.CaseRhs"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.CaseRhs
-caseRhsCaseRhs :: Typed.TypedName Syntax.CaseRhs
-caseRhsCaseRhs = Typed.TypedName (Core.Name "hydra.haskell.syntax.CaseRhs")
-
--- | DSL constructor for hydra.haskell.syntax.ClassConstraint
-classConstraint :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.ClassConstraint
-classConstraint name types =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ClassConstraint"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Typed.unTypedTerm types)}]}))
-
--- | DSL name token for hydra.haskell.syntax.ClassConstraint
-classConstraintClassConstraint :: Typed.TypedName Syntax.ClassConstraint
-classConstraintClassConstraint = Typed.TypedName (Core.Name "hydra.haskell.syntax.ClassConstraint")
-
--- | DSL accessor for the name field of hydra.haskell.syntax.ClassConstraint
-classConstraintName :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm Syntax.Name
-classConstraintName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ClassConstraint"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the types field of hydra.haskell.syntax.ClassConstraint
-classConstraintTypes :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm [Syntax.Type]
-classConstraintTypes x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ClassConstraint"),
-        Core.projectionFieldName = (Core.Name "types")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.ClassConstraint
-classConstraintWithName :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.ClassConstraint
-classConstraintWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ClassConstraint"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          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.haskell.syntax.ClassConstraint"),
-              Core.projectionFieldName = (Core.Name "types")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the types field of hydra.haskell.syntax.ClassConstraint
-classConstraintWithTypes :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.ClassConstraint
-classConstraintWithTypes original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ClassConstraint"),
-      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.haskell.syntax.ClassConstraint"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "types"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.ConstrainedType
-constrainedType :: Typed.TypedTerm Syntax.Constraint -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ConstrainedType
-constrainedType ctx type_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ConstrainedType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "ctx"),
-          Core.fieldTerm = (Typed.unTypedTerm ctx)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))
-
--- | DSL name token for hydra.haskell.syntax.ConstrainedType
-constrainedTypeConstrainedType :: Typed.TypedName Syntax.ConstrainedType
-constrainedTypeConstrainedType = Typed.TypedName (Core.Name "hydra.haskell.syntax.ConstrainedType")
-
--- | DSL accessor for the ctx field of hydra.haskell.syntax.ConstrainedType
-constrainedTypeCtx :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Constraint
-constrainedTypeCtx x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ConstrainedType"),
-        Core.projectionFieldName = (Core.Name "ctx")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.haskell.syntax.ConstrainedType
-constrainedTypeType :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Type
-constrainedTypeType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ConstrainedType"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the ctx field of hydra.haskell.syntax.ConstrainedType
-constrainedTypeWithCtx :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Constraint -> Typed.TypedTerm Syntax.ConstrainedType
-constrainedTypeWithCtx original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ConstrainedType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "ctx"),
-          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.haskell.syntax.ConstrainedType"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.haskell.syntax.ConstrainedType
-constrainedTypeWithType :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ConstrainedType
-constrainedTypeWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ConstrainedType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "ctx"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ConstrainedType"),
-              Core.projectionFieldName = (Core.Name "ctx")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the class variant of hydra.haskell.syntax.Constraint
-constraintClass :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm Syntax.Constraint
-constraintClass x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Constraint"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "class"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Constraint
-constraintConstraint :: Typed.TypedName Syntax.Constraint
-constraintConstraint = Typed.TypedName (Core.Name "hydra.haskell.syntax.Constraint")
-
--- | DSL injection for the tuple variant of hydra.haskell.syntax.Constraint
-constraintTuple :: Typed.TypedTerm [Syntax.Constraint] -> Typed.TypedTerm Syntax.Constraint
-constraintTuple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Constraint"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "tuple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Constructor
-constructorConstructor :: Typed.TypedName Syntax.Constructor
-constructorConstructor = Typed.TypedName (Core.Name "hydra.haskell.syntax.Constructor")
-
--- | DSL injection for the ordinary variant of hydra.haskell.syntax.Constructor
-constructorOrdinary :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm Syntax.Constructor
-constructorOrdinary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Constructor"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "ordinary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the record variant of hydra.haskell.syntax.Constructor
-constructorRecord :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm Syntax.Constructor
-constructorRecord x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Constructor"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "record"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.haskell.syntax.DataDeclaration
-dataDeclaration :: Typed.TypedTerm Syntax.DataKeyword -> Typed.TypedTerm [Syntax.Constraint] -> Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm [Syntax.Constructor] -> Typed.TypedTerm [Syntax.DerivingClause] -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.DataDeclaration
-dataDeclaration keyword context head constructors deriving_ comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "keyword"),
-          Core.fieldTerm = (Typed.unTypedTerm keyword)},
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Typed.unTypedTerm context)},
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Typed.unTypedTerm head)},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructors"),
-          Core.fieldTerm = (Typed.unTypedTerm constructors)},
-        Core.Field {
-          Core.fieldName = (Core.Name "deriving"),
-          Core.fieldTerm = (Typed.unTypedTerm deriving_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationComments :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm (Maybe String)
-dataDeclarationComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the constructors field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationConstructors :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.Constructor]
-dataDeclarationConstructors x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-        Core.projectionFieldName = (Core.Name "constructors")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the context field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationContext :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.Constraint]
-dataDeclarationContext x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-        Core.projectionFieldName = (Core.Name "context")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.DataDeclaration
-dataDeclarationDataDeclaration :: Typed.TypedName Syntax.DataDeclaration
-dataDeclarationDataDeclaration = Typed.TypedName (Core.Name "hydra.haskell.syntax.DataDeclaration")
-
--- | DSL accessor for the deriving field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationDeriving :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.DerivingClause]
-dataDeclarationDeriving x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-        Core.projectionFieldName = (Core.Name "deriving")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the head field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationHead :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.DeclarationHead
-dataDeclarationHead x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-        Core.projectionFieldName = (Core.Name "head")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the keyword field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationKeyword :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.DataKeyword
-dataDeclarationKeyword x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-        Core.projectionFieldName = (Core.Name "keyword")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the comments field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationWithComments :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.DataDeclaration
-dataDeclarationWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "keyword"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "keyword")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "context")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "head")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructors"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "constructors")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "deriving"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "deriving")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the constructors field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationWithConstructors :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.Constructor] -> Typed.TypedTerm Syntax.DataDeclaration
-dataDeclarationWithConstructors original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "keyword"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "keyword")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "context")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "head")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructors"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "deriving"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "deriving")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the context field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationWithContext :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.Constraint] -> Typed.TypedTerm Syntax.DataDeclaration
-dataDeclarationWithContext original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "keyword"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "keyword")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "head")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructors"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "constructors")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "deriving"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "deriving")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the deriving field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationWithDeriving :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.DerivingClause] -> Typed.TypedTerm Syntax.DataDeclaration
-dataDeclarationWithDeriving original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "keyword"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "keyword")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "context")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "head")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructors"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "constructors")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "deriving"),
-          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.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the head field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationWithHead :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.DataDeclaration
-dataDeclarationWithHead original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "keyword"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "keyword")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "context")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructors"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "constructors")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "deriving"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "deriving")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the keyword field of hydra.haskell.syntax.DataDeclaration
-dataDeclarationWithKeyword :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.DataKeyword -> Typed.TypedTerm Syntax.DataDeclaration
-dataDeclarationWithKeyword original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "keyword"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "context"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "context")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "head")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constructors"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "constructors")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "deriving"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "deriving")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.DataDeclaration"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the data variant of hydra.haskell.syntax.DataKeyword
-dataKeywordData :: Typed.TypedTerm Syntax.DataKeyword
-dataKeywordData =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.DataKeyword"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "data"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.haskell.syntax.DataKeyword
-dataKeywordDataKeyword :: Typed.TypedName Syntax.DataKeyword
-dataKeywordDataKeyword = Typed.TypedName (Core.Name "hydra.haskell.syntax.DataKeyword")
-
--- | DSL injection for the newtype variant of hydra.haskell.syntax.DataKeyword
-dataKeywordNewtype :: Typed.TypedTerm Syntax.DataKeyword
-dataKeywordNewtype =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.DataKeyword"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "newtype"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the data variant of hydra.haskell.syntax.Declaration
-declarationData :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.Declaration
-declarationData x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Declaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "data"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Declaration
-declarationDeclaration :: Typed.TypedName Syntax.Declaration
-declarationDeclaration = Typed.TypedName (Core.Name "hydra.haskell.syntax.Declaration")
-
--- | DSL injection for the application variant of hydra.haskell.syntax.DeclarationHead
-declarationHeadApplication :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.DeclarationHead
-declarationHeadApplication x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.DeclarationHead"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "application"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.DeclarationHead
-declarationHeadDeclarationHead :: Typed.TypedName Syntax.DeclarationHead
-declarationHeadDeclarationHead = Typed.TypedName (Core.Name "hydra.haskell.syntax.DeclarationHead")
-
--- | DSL injection for the simple variant of hydra.haskell.syntax.DeclarationHead
-declarationHeadSimple :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.DeclarationHead
-declarationHeadSimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.DeclarationHead"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the type variant of hydra.haskell.syntax.Declaration
-declarationType :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.Declaration
-declarationType x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Declaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "type"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the typedBinding variant of hydra.haskell.syntax.Declaration
-declarationTypedBinding :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.Declaration
-declarationTypedBinding x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Declaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typedBinding"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the valueBinding variant of hydra.haskell.syntax.Declaration
-declarationValueBinding :: Typed.TypedTerm Syntax.ValueBinding -> Typed.TypedTerm Syntax.Declaration
-declarationValueBinding x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Declaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "valueBinding"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.haskell.syntax.DerivingClause wrapper
-derivingClause :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.DerivingClause
-derivingClause x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.haskell.syntax.DerivingClause"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.DerivingClause
-derivingClauseDerivingClause :: Typed.TypedName Syntax.DerivingClause
-derivingClauseDerivingClause = Typed.TypedName (Core.Name "hydra.haskell.syntax.DerivingClause")
-
--- | DSL injection for the declaration variant of hydra.haskell.syntax.Export
-exportDeclaration :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm Syntax.Export
-exportDeclaration x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Export"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "declaration"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Export
-exportExport :: Typed.TypedName Syntax.Export
-exportExport = Typed.TypedName (Core.Name "hydra.haskell.syntax.Export")
-
--- | DSL injection for the module variant of hydra.haskell.syntax.Export
-exportModule :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.Export
-exportModule x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Export"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "module"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the application variant of hydra.haskell.syntax.Expression
-expressionApplication :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression
-expressionApplication x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "application"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the case variant of hydra.haskell.syntax.Expression
-expressionCase :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm Syntax.Expression
-expressionCase x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "case"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the constructRecord variant of hydra.haskell.syntax.Expression
-expressionConstructRecord :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm Syntax.Expression
-expressionConstructRecord x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "constructRecord"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the do variant of hydra.haskell.syntax.Expression
-expressionDo :: Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.Expression
-expressionDo x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "do"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Expression
-expressionExpression :: Typed.TypedName Syntax.Expression
-expressionExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.Expression")
-
--- | DSL injection for the if variant of hydra.haskell.syntax.Expression
-expressionIf :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression
-expressionIf x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "if"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the infixApplication variant of hydra.haskell.syntax.Expression
-expressionInfixApplication :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression
-expressionInfixApplication x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "infixApplication"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the lambda variant of hydra.haskell.syntax.Expression
-expressionLambda :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.Expression
-expressionLambda x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "lambda"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the leftSection variant of hydra.haskell.syntax.Expression
-expressionLeftSection :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Expression
-expressionLeftSection x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "leftSection"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the let variant of hydra.haskell.syntax.Expression
-expressionLet :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm Syntax.Expression
-expressionLet x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "let"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the list variant of hydra.haskell.syntax.Expression
-expressionList :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Expression
-expressionList x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "list"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the literal variant of hydra.haskell.syntax.Expression
-expressionLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.Expression
-expressionLiteral x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "literal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the rightSection variant of hydra.haskell.syntax.Expression
-expressionRightSection :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Expression
-expressionRightSection x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "rightSection"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the tuple variant of hydra.haskell.syntax.Expression
-expressionTuple :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Expression
-expressionTuple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "tuple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the typeSignature variant of hydra.haskell.syntax.Expression
-expressionTypeSignature :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Expression
-expressionTypeSignature x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typeSignature"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the updateRecord variant of hydra.haskell.syntax.Expression
-expressionUpdateRecord :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm Syntax.Expression
-expressionUpdateRecord x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "updateRecord"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the variable variant of hydra.haskell.syntax.Expression
-expressionVariable :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Expression
-expressionVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.haskell.syntax.Field
-field :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.Field
-field name type_ comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.haskell.syntax.Field
-fieldComments :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm (Maybe String)
-fieldComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.Field
-fieldField :: Typed.TypedName Syntax.Field
-fieldField = Typed.TypedName (Core.Name "hydra.haskell.syntax.Field")
-
--- | DSL accessor for the name field of hydra.haskell.syntax.Field
-fieldName :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm Syntax.Name
-fieldName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.haskell.syntax.Field
-fieldType :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm Syntax.Type
-fieldType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for hydra.haskell.syntax.FieldUpdate
-fieldUpdate :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FieldUpdate
-fieldUpdate name value =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.FieldUpdate"),
-      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 name token for hydra.haskell.syntax.FieldUpdate
-fieldUpdateFieldUpdate :: Typed.TypedName Syntax.FieldUpdate
-fieldUpdateFieldUpdate = Typed.TypedName (Core.Name "hydra.haskell.syntax.FieldUpdate")
-
--- | DSL accessor for the name field of hydra.haskell.syntax.FieldUpdate
-fieldUpdateName :: Typed.TypedTerm Syntax.FieldUpdate -> Typed.TypedTerm Syntax.Name
-fieldUpdateName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.FieldUpdate"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the value field of hydra.haskell.syntax.FieldUpdate
-fieldUpdateValue :: Typed.TypedTerm Syntax.FieldUpdate -> Typed.TypedTerm Syntax.Expression
-fieldUpdateValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.FieldUpdate"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.FieldUpdate
-fieldUpdateWithName :: Typed.TypedTerm Syntax.FieldUpdate -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.FieldUpdate
-fieldUpdateWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.FieldUpdate"),
-      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.haskell.syntax.FieldUpdate"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the value field of hydra.haskell.syntax.FieldUpdate
-fieldUpdateWithValue :: Typed.TypedTerm Syntax.FieldUpdate -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FieldUpdate
-fieldUpdateWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.FieldUpdate"),
-      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.haskell.syntax.FieldUpdate"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the comments field of hydra.haskell.syntax.Field
-fieldWithComments :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.Field
-fieldWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-      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.haskell.syntax.Field"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.Field
-fieldWithName :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Field
-fieldWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.haskell.syntax.Field
-fieldWithType :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Field
-fieldWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-      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.haskell.syntax.Field"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Field"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.FunctionType
-functionType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.FunctionType
-functionType domain codomain =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.FunctionType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "domain"),
-          Core.fieldTerm = (Typed.unTypedTerm domain)},
-        Core.Field {
-          Core.fieldName = (Core.Name "codomain"),
-          Core.fieldTerm = (Typed.unTypedTerm codomain)}]}))
-
--- | DSL accessor for the codomain field of hydra.haskell.syntax.FunctionType
-functionTypeCodomain :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type
-functionTypeCodomain x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.FunctionType"),
-        Core.projectionFieldName = (Core.Name "codomain")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the domain field of hydra.haskell.syntax.FunctionType
-functionTypeDomain :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type
-functionTypeDomain x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.FunctionType"),
-        Core.projectionFieldName = (Core.Name "domain")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.FunctionType
-functionTypeFunctionType :: Typed.TypedName Syntax.FunctionType
-functionTypeFunctionType = Typed.TypedName (Core.Name "hydra.haskell.syntax.FunctionType")
-
--- | DSL updater for the codomain field of hydra.haskell.syntax.FunctionType
-functionTypeWithCodomain :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.FunctionType
-functionTypeWithCodomain original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.FunctionType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "domain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.FunctionType"),
-              Core.projectionFieldName = (Core.Name "domain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "codomain"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the domain field of hydra.haskell.syntax.FunctionType
-functionTypeWithDomain :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.FunctionType
-functionTypeWithDomain original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.FunctionType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "domain"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "codomain"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.FunctionType"),
-              Core.projectionFieldName = (Core.Name "codomain")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.IfExpression
-ifExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfExpression
-ifExpression condition then_ else_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "condition"),
-          Core.fieldTerm = (Typed.unTypedTerm condition)},
-        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 condition field of hydra.haskell.syntax.IfExpression
-ifExpressionCondition :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression
-ifExpressionCondition x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-        Core.projectionFieldName = (Core.Name "condition")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the else field of hydra.haskell.syntax.IfExpression
-ifExpressionElse :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression
-ifExpressionElse x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-        Core.projectionFieldName = (Core.Name "else")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.IfExpression
-ifExpressionIfExpression :: Typed.TypedName Syntax.IfExpression
-ifExpressionIfExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.IfExpression")
-
--- | DSL accessor for the then field of hydra.haskell.syntax.IfExpression
-ifExpressionThen :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression
-ifExpressionThen x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-        Core.projectionFieldName = (Core.Name "then")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the condition field of hydra.haskell.syntax.IfExpression
-ifExpressionWithCondition :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfExpression
-ifExpressionWithCondition original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "condition"),
-          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.haskell.syntax.IfExpression"),
-              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.haskell.syntax.IfExpression"),
-              Core.projectionFieldName = (Core.Name "else")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the else field of hydra.haskell.syntax.IfExpression
-ifExpressionWithElse :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfExpression
-ifExpressionWithElse original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "condition"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-              Core.projectionFieldName = (Core.Name "condition")})),
-            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.haskell.syntax.IfExpression"),
-              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.haskell.syntax.IfExpression
-ifExpressionWithThen :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfExpression
-ifExpressionWithThen original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "condition"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.IfExpression"),
-              Core.projectionFieldName = (Core.Name "condition")})),
-            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.haskell.syntax.IfExpression"),
-              Core.projectionFieldName = (Core.Name "else")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.Import
-import_ :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm (Maybe Syntax.ModuleName) -> Typed.TypedTerm (Maybe Syntax.ImportSpec) -> Typed.TypedTerm Syntax.Import
-import_ qualified module_ as spec =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualified"),
-          Core.fieldTerm = (Typed.unTypedTerm qualified)},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Typed.unTypedTerm module_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "as"),
-          Core.fieldTerm = (Typed.unTypedTerm as)},
-        Core.Field {
-          Core.fieldName = (Core.Name "spec"),
-          Core.fieldTerm = (Typed.unTypedTerm spec)}]}))
-
--- | DSL accessor for the as field of hydra.haskell.syntax.Import
-importAs :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm (Maybe Syntax.ModuleName)
-importAs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-        Core.projectionFieldName = (Core.Name "as")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL injection for the all variant of hydra.haskell.syntax.ImportExportSubspec
-importExportSubspecAll :: Typed.TypedTerm Syntax.ImportExportSubspec
-importExportSubspecAll =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.ImportExportSubspec"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "all"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.haskell.syntax.ImportExportSubspec
-importExportSubspecImportExportSubspec :: Typed.TypedName Syntax.ImportExportSubspec
-importExportSubspecImportExportSubspec = Typed.TypedName (Core.Name "hydra.haskell.syntax.ImportExportSubspec")
-
--- | DSL injection for the list variant of hydra.haskell.syntax.ImportExportSubspec
-importExportSubspecList :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.ImportExportSubspec
-importExportSubspecList x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.ImportExportSubspec"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "list"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Import
-importImport :: Typed.TypedName Syntax.Import
-importImport = Typed.TypedName (Core.Name "hydra.haskell.syntax.Import")
-
--- | DSL name token for hydra.haskell.syntax.ImportModifier
-importModifierImportModifier :: Typed.TypedName Syntax.ImportModifier
-importModifierImportModifier = Typed.TypedName (Core.Name "hydra.haskell.syntax.ImportModifier")
-
--- | DSL injection for the pattern variant of hydra.haskell.syntax.ImportModifier
-importModifierPattern :: Typed.TypedTerm Syntax.ImportModifier
-importModifierPattern =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.ImportModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "pattern"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the type variant of hydra.haskell.syntax.ImportModifier
-importModifierType :: Typed.TypedTerm Syntax.ImportModifier
-importModifierType =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.ImportModifier"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "type"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL accessor for the module field of hydra.haskell.syntax.Import
-importModule :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm Syntax.ModuleName
-importModule x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-        Core.projectionFieldName = (Core.Name "module")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the qualified field of hydra.haskell.syntax.Import
-importQualified :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm Bool
-importQualified x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-        Core.projectionFieldName = (Core.Name "qualified")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the spec field of hydra.haskell.syntax.Import
-importSpec :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm (Maybe Syntax.ImportSpec)
-importSpec x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-        Core.projectionFieldName = (Core.Name "spec")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL injection for the hiding variant of hydra.haskell.syntax.ImportSpec
-importSpecHiding :: Typed.TypedTerm [Syntax.NamedImportExport] -> Typed.TypedTerm Syntax.ImportSpec
-importSpecHiding x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.ImportSpec"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "hiding"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.ImportSpec
-importSpecImportSpec :: Typed.TypedName Syntax.ImportSpec
-importSpecImportSpec = Typed.TypedName (Core.Name "hydra.haskell.syntax.ImportSpec")
-
--- | DSL injection for the list variant of hydra.haskell.syntax.ImportSpec
-importSpecList :: Typed.TypedTerm [Syntax.NamedImportExport] -> Typed.TypedTerm Syntax.ImportSpec
-importSpecList x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.ImportSpec"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "list"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL updater for the as field of hydra.haskell.syntax.Import
-importWithAs :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm (Maybe Syntax.ModuleName) -> Typed.TypedTerm Syntax.Import
-importWithAs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualified"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "qualified")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "module")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "as"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "spec"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "spec")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the module field of hydra.haskell.syntax.Import
-importWithModule :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.Import
-importWithModule original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualified"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "qualified")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "as"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "as")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "spec"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "spec")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the qualified field of hydra.haskell.syntax.Import
-importWithQualified :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Import
-importWithQualified original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualified"),
-          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.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "module")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "as"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "as")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "spec"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "spec")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the spec field of hydra.haskell.syntax.Import
-importWithSpec :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm (Maybe Syntax.ImportSpec) -> Typed.TypedTerm Syntax.Import
-importWithSpec original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualified"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "qualified")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "module"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "module")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "as"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Import"),
-              Core.projectionFieldName = (Core.Name "as")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "spec"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.InfixExpression
-infixExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.InfixExpression
-infixExpression lhs operator rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm operator)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL name token for hydra.haskell.syntax.InfixExpression
-infixExpressionInfixExpression :: Typed.TypedName Syntax.InfixExpression
-infixExpressionInfixExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.InfixExpression")
-
--- | DSL accessor for the lhs field of hydra.haskell.syntax.InfixExpression
-infixExpressionLhs :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression
-infixExpressionLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the operator field of hydra.haskell.syntax.InfixExpression
-infixExpressionOperator :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Operator
-infixExpressionOperator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-        Core.projectionFieldName = (Core.Name "operator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the rhs field of hydra.haskell.syntax.InfixExpression
-infixExpressionRhs :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression
-infixExpressionRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.haskell.syntax.InfixExpression
-infixExpressionWithLhs :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.InfixExpression
-infixExpressionWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the operator field of hydra.haskell.syntax.InfixExpression
-infixExpressionWithOperator :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.InfixExpression
-infixExpressionWithOperator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-      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.haskell.syntax.InfixExpression"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          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.haskell.syntax.InfixExpression"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.haskell.syntax.InfixExpression
-infixExpressionWithRhs :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.InfixExpression
-infixExpressionWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-      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.haskell.syntax.InfixExpression"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.InfixType
-infixType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.InfixType
-infixType lhs operator rhs =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm lhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm operator)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))
-
--- | DSL name token for hydra.haskell.syntax.InfixType
-infixTypeInfixType :: Typed.TypedName Syntax.InfixType
-infixTypeInfixType = Typed.TypedName (Core.Name "hydra.haskell.syntax.InfixType")
-
--- | DSL accessor for the lhs field of hydra.haskell.syntax.InfixType
-infixTypeLhs :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type
-infixTypeLhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-        Core.projectionFieldName = (Core.Name "lhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the operator field of hydra.haskell.syntax.InfixType
-infixTypeOperator :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Operator
-infixTypeOperator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-        Core.projectionFieldName = (Core.Name "operator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the rhs field of hydra.haskell.syntax.InfixType
-infixTypeRhs :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type
-infixTypeRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the lhs field of hydra.haskell.syntax.InfixType
-infixTypeWithLhs :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.InfixType
-infixTypeWithLhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "lhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the operator field of hydra.haskell.syntax.InfixType
-infixTypeWithOperator :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.InfixType
-infixTypeWithOperator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-      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.haskell.syntax.InfixType"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          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.haskell.syntax.InfixType"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.haskell.syntax.InfixType
-infixTypeWithRhs :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.InfixType
-infixTypeWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-      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.haskell.syntax.InfixType"),
-              Core.projectionFieldName = (Core.Name "lhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.InfixType"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.LambdaExpression
-lambdaExpression :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LambdaExpression
-lambdaExpression bindings inner =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.LambdaExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "bindings"),
-          Core.fieldTerm = (Typed.unTypedTerm bindings)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm inner)}]}))
-
--- | DSL accessor for the bindings field of hydra.haskell.syntax.LambdaExpression
-lambdaExpressionBindings :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm [Syntax.Pattern]
-lambdaExpressionBindings x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.LambdaExpression"),
-        Core.projectionFieldName = (Core.Name "bindings")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the inner field of hydra.haskell.syntax.LambdaExpression
-lambdaExpressionInner :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.Expression
-lambdaExpressionInner x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.LambdaExpression"),
-        Core.projectionFieldName = (Core.Name "inner")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.LambdaExpression
-lambdaExpressionLambdaExpression :: Typed.TypedName Syntax.LambdaExpression
-lambdaExpressionLambdaExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.LambdaExpression")
-
--- | DSL updater for the bindings field of hydra.haskell.syntax.LambdaExpression
-lambdaExpressionWithBindings :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.LambdaExpression
-lambdaExpressionWithBindings original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.LambdaExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "bindings"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.LambdaExpression"),
-              Core.projectionFieldName = (Core.Name "inner")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the inner field of hydra.haskell.syntax.LambdaExpression
-lambdaExpressionWithInner :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LambdaExpression
-lambdaExpressionWithInner original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.LambdaExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "bindings"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.LambdaExpression"),
-              Core.projectionFieldName = (Core.Name "bindings")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.LetExpression
-letExpression :: Typed.TypedTerm [Syntax.LocalBinding] -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LetExpression
-letExpression bindings inner =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.LetExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "bindings"),
-          Core.fieldTerm = (Typed.unTypedTerm bindings)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm inner)}]}))
-
--- | DSL accessor for the bindings field of hydra.haskell.syntax.LetExpression
-letExpressionBindings :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm [Syntax.LocalBinding]
-letExpressionBindings x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.LetExpression"),
-        Core.projectionFieldName = (Core.Name "bindings")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the inner field of hydra.haskell.syntax.LetExpression
-letExpressionInner :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm Syntax.Expression
-letExpressionInner x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.LetExpression"),
-        Core.projectionFieldName = (Core.Name "inner")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.LetExpression
-letExpressionLetExpression :: Typed.TypedName Syntax.LetExpression
-letExpressionLetExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.LetExpression")
-
--- | DSL updater for the bindings field of hydra.haskell.syntax.LetExpression
-letExpressionWithBindings :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm [Syntax.LocalBinding] -> Typed.TypedTerm Syntax.LetExpression
-letExpressionWithBindings original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.LetExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "bindings"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.LetExpression"),
-              Core.projectionFieldName = (Core.Name "inner")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the inner field of hydra.haskell.syntax.LetExpression
-letExpressionWithInner :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LetExpression
-letExpressionWithInner original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.LetExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "bindings"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.LetExpression"),
-              Core.projectionFieldName = (Core.Name "bindings")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the char variant of hydra.haskell.syntax.Literal
-literalChar :: Typed.TypedTerm Int -> Typed.TypedTerm Syntax.Literal
-literalChar x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "char"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the double variant of hydra.haskell.syntax.Literal
-literalDouble :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.Literal
-literalDouble x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "double"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the float variant of hydra.haskell.syntax.Literal
-literalFloat :: Typed.TypedTerm Float -> Typed.TypedTerm Syntax.Literal
-literalFloat x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "float"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the int variant of hydra.haskell.syntax.Literal
-literalInt :: Typed.TypedTerm Int -> Typed.TypedTerm Syntax.Literal
-literalInt x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "int"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the integer variant of hydra.haskell.syntax.Literal
-literalInteger :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.Literal
-literalInteger x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "integer"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Literal
-literalLiteral :: Typed.TypedName Syntax.Literal
-literalLiteral = Typed.TypedName (Core.Name "hydra.haskell.syntax.Literal")
-
--- | DSL injection for the string variant of hydra.haskell.syntax.Literal
-literalString :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Literal
-literalString x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "string"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.LocalBinding
-localBindingLocalBinding :: Typed.TypedName Syntax.LocalBinding
-localBindingLocalBinding = Typed.TypedName (Core.Name "hydra.haskell.syntax.LocalBinding")
-
--- | DSL injection for the signature variant of hydra.haskell.syntax.LocalBinding
-localBindingSignature :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.LocalBinding
-localBindingSignature x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.LocalBinding"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "signature"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the value variant of hydra.haskell.syntax.LocalBinding
-localBindingValue :: Typed.TypedTerm Syntax.ValueBinding -> Typed.TypedTerm Syntax.LocalBinding
-localBindingValue x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.LocalBinding"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "value"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.haskell.syntax.LocalBindings wrapper
-localBindings :: Typed.TypedTerm [Syntax.LocalBinding] -> Typed.TypedTerm Syntax.LocalBindings
-localBindings x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.haskell.syntax.LocalBindings"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.LocalBindings
-localBindingsLocalBindings :: Typed.TypedName Syntax.LocalBindings
-localBindingsLocalBindings = Typed.TypedName (Core.Name "hydra.haskell.syntax.LocalBindings")
-
--- | DSL constructor for hydra.haskell.syntax.Module
-module_ :: Typed.TypedTerm (Maybe Syntax.ModuleHead) -> Typed.TypedTerm [Syntax.Import] -> Typed.TypedTerm [Syntax.Declaration] -> Typed.TypedTerm Syntax.Module
-module_ head imports declarations =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Typed.unTypedTerm head)},
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Typed.unTypedTerm imports)},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarations"),
-          Core.fieldTerm = (Typed.unTypedTerm declarations)}]}))
-
--- | DSL accessor for the declarations field of hydra.haskell.syntax.Module
-moduleDeclarations :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.Declaration]
-moduleDeclarations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-        Core.projectionFieldName = (Core.Name "declarations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the head field of hydra.haskell.syntax.Module
-moduleHead :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm (Maybe Syntax.ModuleHead)
-moduleHead x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-        Core.projectionFieldName = (Core.Name "head")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for hydra.haskell.syntax.ModuleHead
-moduleHead2 :: Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm [Syntax.Export] -> Typed.TypedTerm Syntax.ModuleHead
-moduleHead2 comments name exports =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "exports"),
-          Core.fieldTerm = (Typed.unTypedTerm exports)}]}))
-
--- | DSL accessor for the comments field of hydra.haskell.syntax.ModuleHead
-moduleHeadComments :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm (Maybe String)
-moduleHeadComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the exports field of hydra.haskell.syntax.ModuleHead
-moduleHeadExports :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm [Syntax.Export]
-moduleHeadExports x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-        Core.projectionFieldName = (Core.Name "exports")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.ModuleHead
-moduleHeadModuleHead :: Typed.TypedName Syntax.ModuleHead
-moduleHeadModuleHead = Typed.TypedName (Core.Name "hydra.haskell.syntax.ModuleHead")
-
--- | DSL accessor for the name field of hydra.haskell.syntax.ModuleHead
-moduleHeadName :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm Syntax.ModuleName
-moduleHeadName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the comments field of hydra.haskell.syntax.ModuleHead
-moduleHeadWithComments :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.ModuleHead
-moduleHeadWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          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.haskell.syntax.ModuleHead"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "exports"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-              Core.projectionFieldName = (Core.Name "exports")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the exports field of hydra.haskell.syntax.ModuleHead
-moduleHeadWithExports :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm [Syntax.Export] -> Typed.TypedTerm Syntax.ModuleHead
-moduleHeadWithExports original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            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.haskell.syntax.ModuleHead"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "exports"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.ModuleHead
-moduleHeadWithName :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.ModuleHead
-moduleHeadWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "exports"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.ModuleHead"),
-              Core.projectionFieldName = (Core.Name "exports")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL accessor for the imports field of hydra.haskell.syntax.Module
-moduleImports :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.Import]
-moduleImports x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-        Core.projectionFieldName = (Core.Name "imports")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.Module
-moduleModule :: Typed.TypedName Syntax.Module
-moduleModule = Typed.TypedName (Core.Name "hydra.haskell.syntax.Module")
-
--- | DSL constructor for the hydra.haskell.syntax.ModuleName wrapper
-moduleName :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.ModuleName
-moduleName x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.haskell.syntax.ModuleName"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.ModuleName
-moduleNameModuleName :: Typed.TypedName Syntax.ModuleName
-moduleNameModuleName = Typed.TypedName (Core.Name "hydra.haskell.syntax.ModuleName")
-
--- | DSL updater for the declarations field of hydra.haskell.syntax.Module
-moduleWithDeclarations :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.Declaration] -> Typed.TypedTerm Syntax.Module
-moduleWithDeclarations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-              Core.projectionFieldName = (Core.Name "head")})),
-            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.haskell.syntax.Module"),
-              Core.projectionFieldName = (Core.Name "imports")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the head field of hydra.haskell.syntax.Module
-moduleWithHead :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm (Maybe Syntax.ModuleHead) -> Typed.TypedTerm Syntax.Module
-moduleWithHead original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          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.haskell.syntax.Module"),
-              Core.projectionFieldName = (Core.Name "imports")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-              Core.projectionFieldName = (Core.Name "declarations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the imports field of hydra.haskell.syntax.Module
-moduleWithImports :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.Import] -> Typed.TypedTerm Syntax.Module
-moduleWithImports original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "head"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-              Core.projectionFieldName = (Core.Name "head")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "imports"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.Module"),
-              Core.projectionFieldName = (Core.Name "declarations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the implicit variant of hydra.haskell.syntax.Name
-nameImplicit :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.Name
-nameImplicit x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Name"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "implicit"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Name
-nameName :: Typed.TypedName Syntax.Name
-nameName = Typed.TypedName (Core.Name "hydra.haskell.syntax.Name")
-
--- | DSL injection for the normal variant of hydra.haskell.syntax.Name
-nameNormal :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.Name
-nameNormal x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Name"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "normal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.haskell.syntax.NamePart wrapper
-namePart :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.NamePart
-namePart x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.haskell.syntax.NamePart"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.NamePart
-namePartNamePart :: Typed.TypedName Syntax.NamePart
-namePartNamePart = Typed.TypedName (Core.Name "hydra.haskell.syntax.NamePart")
-
--- | DSL constructor for hydra.haskell.syntax.NamedImportExport
-namedImportExport :: Typed.TypedTerm (Maybe Syntax.ImportModifier) -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.ImportExportSubspec) -> Typed.TypedTerm Syntax.NamedImportExport
-namedImportExport modifier name subspec =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifier"),
-          Core.fieldTerm = (Typed.unTypedTerm modifier)},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "subspec"),
-          Core.fieldTerm = (Typed.unTypedTerm subspec)}]}))
-
--- | DSL accessor for the modifier field of hydra.haskell.syntax.NamedImportExport
-namedImportExportModifier :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm (Maybe Syntax.ImportModifier)
-namedImportExportModifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-        Core.projectionFieldName = (Core.Name "modifier")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.NamedImportExport
-namedImportExportName :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm Syntax.Name
-namedImportExportName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.NamedImportExport
-namedImportExportNamedImportExport :: Typed.TypedName Syntax.NamedImportExport
-namedImportExportNamedImportExport = Typed.TypedName (Core.Name "hydra.haskell.syntax.NamedImportExport")
-
--- | DSL accessor for the subspec field of hydra.haskell.syntax.NamedImportExport
-namedImportExportSubspec :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm (Maybe Syntax.ImportExportSubspec)
-namedImportExportSubspec x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-        Core.projectionFieldName = (Core.Name "subspec")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the modifier field of hydra.haskell.syntax.NamedImportExport
-namedImportExportWithModifier :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm (Maybe Syntax.ImportModifier) -> Typed.TypedTerm Syntax.NamedImportExport
-namedImportExportWithModifier original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifier"),
-          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.haskell.syntax.NamedImportExport"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "subspec"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-              Core.projectionFieldName = (Core.Name "subspec")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.NamedImportExport
-namedImportExportWithName :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.NamedImportExport
-namedImportExportWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-              Core.projectionFieldName = (Core.Name "modifier")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "subspec"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-              Core.projectionFieldName = (Core.Name "subspec")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the subspec field of hydra.haskell.syntax.NamedImportExport
-namedImportExportWithSubspec :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm (Maybe Syntax.ImportExportSubspec) -> Typed.TypedTerm Syntax.NamedImportExport
-namedImportExportWithSubspec original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "modifier"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.NamedImportExport"),
-              Core.projectionFieldName = (Core.Name "modifier")})),
-            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.haskell.syntax.NamedImportExport"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "subspec"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the backtick variant of hydra.haskell.syntax.Operator
-operatorBacktick :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.Operator
-operatorBacktick x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Operator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "backtick"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the normal variant of hydra.haskell.syntax.Operator
-operatorNormal :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.Operator
-operatorNormal x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Operator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "normal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Operator
-operatorOperator :: Typed.TypedName Syntax.Operator
-operatorOperator = Typed.TypedName (Core.Name "hydra.haskell.syntax.Operator")
-
--- | DSL injection for the application variant of hydra.haskell.syntax.Pattern
-patternApplication :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm Syntax.Pattern
-patternApplication x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "application"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the as variant of hydra.haskell.syntax.Pattern
-patternAs :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Pattern
-patternAs x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "as"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.haskell.syntax.PatternField
-patternField :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.PatternField
-patternField name pattern =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.PatternField"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Typed.unTypedTerm pattern)}]}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.PatternField
-patternFieldName :: Typed.TypedTerm Syntax.PatternField -> Typed.TypedTerm Syntax.Name
-patternFieldName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PatternField"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the pattern field of hydra.haskell.syntax.PatternField
-patternFieldPattern :: Typed.TypedTerm Syntax.PatternField -> Typed.TypedTerm Syntax.Pattern
-patternFieldPattern x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PatternField"),
-        Core.projectionFieldName = (Core.Name "pattern")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.PatternField
-patternFieldPatternField :: Typed.TypedName Syntax.PatternField
-patternFieldPatternField = Typed.TypedName (Core.Name "hydra.haskell.syntax.PatternField")
-
--- | DSL updater for the name field of hydra.haskell.syntax.PatternField
-patternFieldWithName :: Typed.TypedTerm Syntax.PatternField -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.PatternField
-patternFieldWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.PatternField"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PatternField"),
-              Core.projectionFieldName = (Core.Name "pattern")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the pattern field of hydra.haskell.syntax.PatternField
-patternFieldWithPattern :: Typed.TypedTerm Syntax.PatternField -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.PatternField
-patternFieldWithPattern original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.PatternField"),
-      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.haskell.syntax.PatternField"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the list variant of hydra.haskell.syntax.Pattern
-patternList :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.Pattern
-patternList x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "list"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the literal variant of hydra.haskell.syntax.Pattern
-patternLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.Pattern
-patternLiteral x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "literal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the name variant of hydra.haskell.syntax.Pattern
-patternName :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Pattern
-patternName x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "name"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Pattern
-patternPattern :: Typed.TypedName Syntax.Pattern
-patternPattern = Typed.TypedName (Core.Name "hydra.haskell.syntax.Pattern")
-
--- | DSL injection for the record variant of hydra.haskell.syntax.Pattern
-patternRecord :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.Pattern
-patternRecord x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "record"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the tuple variant of hydra.haskell.syntax.Pattern
-patternTuple :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.Pattern
-patternTuple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "tuple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the typed variant of hydra.haskell.syntax.Pattern
-patternTyped :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern
-patternTyped x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typed"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the wildcard variant of hydra.haskell.syntax.Pattern
-patternWildcard :: Typed.TypedTerm Syntax.Pattern
-patternWildcard =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "wildcard"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for hydra.haskell.syntax.PositionalConstructor
-positionalConstructor :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.PositionalConstructor
-positionalConstructor name fields comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Typed.unTypedTerm fields)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.haskell.syntax.PositionalConstructor
-positionalConstructorComments :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm (Maybe String)
-positionalConstructorComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the fields field of hydra.haskell.syntax.PositionalConstructor
-positionalConstructorFields :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm [Syntax.Type]
-positionalConstructorFields x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-        Core.projectionFieldName = (Core.Name "fields")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.PositionalConstructor
-positionalConstructorName :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm Syntax.Name
-positionalConstructorName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.PositionalConstructor
-positionalConstructorPositionalConstructor :: Typed.TypedName Syntax.PositionalConstructor
-positionalConstructorPositionalConstructor = Typed.TypedName (Core.Name "hydra.haskell.syntax.PositionalConstructor")
-
--- | DSL updater for the comments field of hydra.haskell.syntax.PositionalConstructor
-positionalConstructorWithComments :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.PositionalConstructor
-positionalConstructorWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-      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.haskell.syntax.PositionalConstructor"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-              Core.projectionFieldName = (Core.Name "fields")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the fields field of hydra.haskell.syntax.PositionalConstructor
-positionalConstructorWithFields :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.PositionalConstructor
-positionalConstructorWithFields original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-      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.haskell.syntax.PositionalConstructor"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          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.haskell.syntax.PositionalConstructor"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.PositionalConstructor
-positionalConstructorWithName :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.PositionalConstructor
-positionalConstructorWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-              Core.projectionFieldName = (Core.Name "fields")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.PositionalConstructor"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.QualifiedName
-qualifiedName :: Typed.TypedTerm [Syntax.NamePart] -> Typed.TypedTerm Syntax.NamePart -> Typed.TypedTerm Syntax.QualifiedName
-qualifiedName qualifiers unqualified =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.QualifiedName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm qualifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "unqualified"),
-          Core.fieldTerm = (Typed.unTypedTerm unqualified)}]}))
-
--- | DSL name token for hydra.haskell.syntax.QualifiedName
-qualifiedNameQualifiedName :: Typed.TypedName Syntax.QualifiedName
-qualifiedNameQualifiedName = Typed.TypedName (Core.Name "hydra.haskell.syntax.QualifiedName")
-
--- | DSL accessor for the qualifiers field of hydra.haskell.syntax.QualifiedName
-qualifiedNameQualifiers :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm [Syntax.NamePart]
-qualifiedNameQualifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.QualifiedName"),
-        Core.projectionFieldName = (Core.Name "qualifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the unqualified field of hydra.haskell.syntax.QualifiedName
-qualifiedNameUnqualified :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.NamePart
-qualifiedNameUnqualified x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.QualifiedName"),
-        Core.projectionFieldName = (Core.Name "unqualified")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the qualifiers field of hydra.haskell.syntax.QualifiedName
-qualifiedNameWithQualifiers :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm [Syntax.NamePart] -> Typed.TypedTerm Syntax.QualifiedName
-qualifiedNameWithQualifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.QualifiedName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "unqualified"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.QualifiedName"),
-              Core.projectionFieldName = (Core.Name "unqualified")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the unqualified field of hydra.haskell.syntax.QualifiedName
-qualifiedNameWithUnqualified :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.NamePart -> Typed.TypedTerm Syntax.QualifiedName
-qualifiedNameWithUnqualified original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.QualifiedName"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "qualifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.QualifiedName"),
-              Core.projectionFieldName = (Core.Name "qualifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "unqualified"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.RecordConstructor
-recordConstructor :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.Field] -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.RecordConstructor
-recordConstructor name fields comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Typed.unTypedTerm fields)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.haskell.syntax.RecordConstructor
-recordConstructorComments :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm (Maybe String)
-recordConstructorComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the fields field of hydra.haskell.syntax.RecordConstructor
-recordConstructorFields :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm [Syntax.Field]
-recordConstructorFields x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-        Core.projectionFieldName = (Core.Name "fields")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.RecordConstructor
-recordConstructorName :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm Syntax.Name
-recordConstructorName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.RecordConstructor
-recordConstructorRecordConstructor :: Typed.TypedName Syntax.RecordConstructor
-recordConstructorRecordConstructor = Typed.TypedName (Core.Name "hydra.haskell.syntax.RecordConstructor")
-
--- | DSL updater for the comments field of hydra.haskell.syntax.RecordConstructor
-recordConstructorWithComments :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.RecordConstructor
-recordConstructorWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-      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.haskell.syntax.RecordConstructor"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-              Core.projectionFieldName = (Core.Name "fields")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the fields field of hydra.haskell.syntax.RecordConstructor
-recordConstructorWithFields :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm [Syntax.Field] -> Typed.TypedTerm Syntax.RecordConstructor
-recordConstructorWithFields original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-      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.haskell.syntax.RecordConstructor"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          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.haskell.syntax.RecordConstructor"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.RecordConstructor
-recordConstructorWithName :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.RecordConstructor
-recordConstructorWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-              Core.projectionFieldName = (Core.Name "fields")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordConstructor"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.RecordExpression
-recordExpression :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.FieldUpdate] -> Typed.TypedTerm Syntax.RecordExpression
-recordExpression name fields =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Typed.unTypedTerm fields)}]}))
-
--- | DSL accessor for the fields field of hydra.haskell.syntax.RecordExpression
-recordExpressionFields :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm [Syntax.FieldUpdate]
-recordExpressionFields x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordExpression"),
-        Core.projectionFieldName = (Core.Name "fields")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.RecordExpression
-recordExpressionName :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm Syntax.Name
-recordExpressionName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordExpression"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.RecordExpression
-recordExpressionRecordExpression :: Typed.TypedName Syntax.RecordExpression
-recordExpressionRecordExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.RecordExpression")
-
--- | DSL updater for the fields field of hydra.haskell.syntax.RecordExpression
-recordExpressionWithFields :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm [Syntax.FieldUpdate] -> Typed.TypedTerm Syntax.RecordExpression
-recordExpressionWithFields original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordExpression"),
-      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.haskell.syntax.RecordExpression"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.RecordExpression
-recordExpressionWithName :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.RecordExpression
-recordExpressionWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordExpression"),
-              Core.projectionFieldName = (Core.Name "fields")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.RecordPattern
-recordPattern :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.PatternField] -> Typed.TypedTerm Syntax.RecordPattern
-recordPattern name fields =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Typed.unTypedTerm fields)}]}))
-
--- | DSL accessor for the fields field of hydra.haskell.syntax.RecordPattern
-recordPatternFields :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm [Syntax.PatternField]
-recordPatternFields x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordPattern"),
-        Core.projectionFieldName = (Core.Name "fields")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.RecordPattern
-recordPatternName :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.Name
-recordPatternName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordPattern"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.RecordPattern
-recordPatternRecordPattern :: Typed.TypedName Syntax.RecordPattern
-recordPatternRecordPattern = Typed.TypedName (Core.Name "hydra.haskell.syntax.RecordPattern")
-
--- | DSL updater for the fields field of hydra.haskell.syntax.RecordPattern
-recordPatternWithFields :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm [Syntax.PatternField] -> Typed.TypedTerm Syntax.RecordPattern
-recordPatternWithFields original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordPattern"),
-      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.haskell.syntax.RecordPattern"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.RecordPattern
-recordPatternWithName :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.RecordPattern
-recordPatternWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordPattern"),
-              Core.projectionFieldName = (Core.Name "fields")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.RecordUpdateExpression
-recordUpdateExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm [Syntax.FieldUpdate] -> Typed.TypedTerm Syntax.RecordUpdateExpression
-recordUpdateExpression inner fields =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordUpdateExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm inner)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Typed.unTypedTerm fields)}]}))
-
--- | DSL accessor for the fields field of hydra.haskell.syntax.RecordUpdateExpression
-recordUpdateExpressionFields :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm [Syntax.FieldUpdate]
-recordUpdateExpressionFields x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordUpdateExpression"),
-        Core.projectionFieldName = (Core.Name "fields")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the inner field of hydra.haskell.syntax.RecordUpdateExpression
-recordUpdateExpressionInner :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm Syntax.Expression
-recordUpdateExpressionInner x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordUpdateExpression"),
-        Core.projectionFieldName = (Core.Name "inner")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.RecordUpdateExpression
-recordUpdateExpressionRecordUpdateExpression :: Typed.TypedName Syntax.RecordUpdateExpression
-recordUpdateExpressionRecordUpdateExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.RecordUpdateExpression")
-
--- | DSL updater for the fields field of hydra.haskell.syntax.RecordUpdateExpression
-recordUpdateExpressionWithFields :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm [Syntax.FieldUpdate] -> Typed.TypedTerm Syntax.RecordUpdateExpression
-recordUpdateExpressionWithFields original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordUpdateExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordUpdateExpression"),
-              Core.projectionFieldName = (Core.Name "inner")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the inner field of hydra.haskell.syntax.RecordUpdateExpression
-recordUpdateExpressionWithInner :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.RecordUpdateExpression
-recordUpdateExpressionWithInner original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.RecordUpdateExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "fields"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.RecordUpdateExpression"),
-              Core.projectionFieldName = (Core.Name "fields")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.haskell.syntax.RightHandSide wrapper
-rightHandSide :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.RightHandSide
-rightHandSide x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.haskell.syntax.RightHandSide"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.RightHandSide
-rightHandSideRightHandSide :: Typed.TypedName Syntax.RightHandSide
-rightHandSideRightHandSide = Typed.TypedName (Core.Name "hydra.haskell.syntax.RightHandSide")
-
--- | DSL constructor for hydra.haskell.syntax.SectionExpression
-sectionExpression :: Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SectionExpression
-sectionExpression operator expression =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.SectionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm operator)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))
-
--- | DSL accessor for the expression field of hydra.haskell.syntax.SectionExpression
-sectionExpressionExpression :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Expression
-sectionExpressionExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SectionExpression"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the operator field of hydra.haskell.syntax.SectionExpression
-sectionExpressionOperator :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Operator
-sectionExpressionOperator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SectionExpression"),
-        Core.projectionFieldName = (Core.Name "operator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.SectionExpression
-sectionExpressionSectionExpression :: Typed.TypedName Syntax.SectionExpression
-sectionExpressionSectionExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.SectionExpression")
-
--- | DSL updater for the expression field of hydra.haskell.syntax.SectionExpression
-sectionExpressionWithExpression :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SectionExpression
-sectionExpressionWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.SectionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SectionExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the operator field of hydra.haskell.syntax.SectionExpression
-sectionExpressionWithOperator :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.SectionExpression
-sectionExpressionWithOperator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.SectionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          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.haskell.syntax.SectionExpression"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.SimpleValueBinding
-simpleValueBinding :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.RightHandSide -> Typed.TypedTerm (Maybe Syntax.LocalBindings) -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.SimpleValueBinding
-simpleValueBinding pattern rhs localBindings comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Typed.unTypedTerm pattern)},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm rhs)},
-        Core.Field {
-          Core.fieldName = (Core.Name "localBindings"),
-          Core.fieldTerm = (Typed.unTypedTerm localBindings)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingComments :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm (Maybe String)
-simpleValueBindingComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the localBindings field of hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingLocalBindings :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm (Maybe Syntax.LocalBindings)
-simpleValueBindingLocalBindings x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-        Core.projectionFieldName = (Core.Name "localBindings")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the pattern field of hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingPattern :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.Pattern
-simpleValueBindingPattern x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-        Core.projectionFieldName = (Core.Name "pattern")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the rhs field of hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingRhs :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.RightHandSide
-simpleValueBindingRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-        Core.projectionFieldName = (Core.Name "rhs")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingSimpleValueBinding :: Typed.TypedName Syntax.SimpleValueBinding
-simpleValueBindingSimpleValueBinding = Typed.TypedName (Core.Name "hydra.haskell.syntax.SimpleValueBinding")
-
--- | DSL updater for the comments field of hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingWithComments :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.SimpleValueBinding
-simpleValueBindingWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-      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.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "pattern")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "localBindings"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "localBindings")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the localBindings field of hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingWithLocalBindings :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm (Maybe Syntax.LocalBindings) -> Typed.TypedTerm Syntax.SimpleValueBinding
-simpleValueBindingWithLocalBindings original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-      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.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "pattern")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "localBindings"),
-          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.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the pattern field of hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingWithPattern :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.SimpleValueBinding
-simpleValueBindingWithPattern original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          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.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "rhs")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "localBindings"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "localBindings")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the rhs field of hydra.haskell.syntax.SimpleValueBinding
-simpleValueBindingWithRhs :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.RightHandSide -> Typed.TypedTerm Syntax.SimpleValueBinding
-simpleValueBindingWithRhs original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-      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.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "pattern")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "rhs"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "localBindings"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "localBindings")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.SimpleValueBinding"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.haskell.syntax.Statement wrapper
-statement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement
-statement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.haskell.syntax.Statement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.Statement
-statementStatement :: Typed.TypedName Syntax.Statement
-statementStatement = Typed.TypedName (Core.Name "hydra.haskell.syntax.Statement")
-
--- | DSL injection for the application variant of hydra.haskell.syntax.Type
-typeApplication :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type
-typeApplication x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "application"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the ctx variant of hydra.haskell.syntax.Type
-typeCtx :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Type
-typeCtx x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "ctx"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the function variant of hydra.haskell.syntax.Type
-typeFunction :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type
-typeFunction x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "function"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the infix variant of hydra.haskell.syntax.Type
-typeInfix :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type
-typeInfix x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "infix"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the list variant of hydra.haskell.syntax.Type
-typeList :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Type
-typeList x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "list"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.haskell.syntax.TypeSignature
-typeSignature :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeSignature
-typeSignature name type_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypeSignature"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.TypeSignature
-typeSignatureName :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.Name
-typeSignatureName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSignature"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.haskell.syntax.TypeSignature
-typeSignatureType :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.Type
-typeSignatureType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSignature"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.TypeSignature
-typeSignatureTypeSignature :: Typed.TypedName Syntax.TypeSignature
-typeSignatureTypeSignature = Typed.TypedName (Core.Name "hydra.haskell.syntax.TypeSignature")
-
--- | DSL updater for the name field of hydra.haskell.syntax.TypeSignature
-typeSignatureWithName :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.TypeSignature
-typeSignatureWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypeSignature"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSignature"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.haskell.syntax.TypeSignature
-typeSignatureWithType :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeSignature
-typeSignatureWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypeSignature"),
-      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.haskell.syntax.TypeSignature"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.TypeSynonymDeclaration
-typeSynonymDeclaration :: Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TypeSynonymDeclaration
-typeSynonymDeclaration name type_ comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.haskell.syntax.TypeSynonymDeclaration
-typeSynonymDeclarationComments :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm (Maybe String)
-typeSynonymDeclarationComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.haskell.syntax.TypeSynonymDeclaration
-typeSynonymDeclarationName :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.DeclarationHead
-typeSynonymDeclarationName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.haskell.syntax.TypeSynonymDeclaration
-typeSynonymDeclarationType :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.Type
-typeSynonymDeclarationType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.TypeSynonymDeclaration
-typeSynonymDeclarationTypeSynonymDeclaration :: Typed.TypedName Syntax.TypeSynonymDeclaration
-typeSynonymDeclarationTypeSynonymDeclaration = Typed.TypedName (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration")
-
--- | DSL updater for the comments field of hydra.haskell.syntax.TypeSynonymDeclaration
-typeSynonymDeclarationWithComments :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TypeSynonymDeclaration
-typeSynonymDeclarationWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-      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.haskell.syntax.TypeSynonymDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.haskell.syntax.TypeSynonymDeclaration
-typeSynonymDeclarationWithName :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.TypeSynonymDeclaration
-typeSynonymDeclarationWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.haskell.syntax.TypeSynonymDeclaration
-typeSynonymDeclarationWithType :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeSynonymDeclaration
-typeSynonymDeclarationWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-      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.haskell.syntax.TypeSynonymDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the tuple variant of hydra.haskell.syntax.Type
-typeTuple :: Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.Type
-typeTuple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "tuple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.Type
-typeType :: Typed.TypedName Syntax.Type
-typeType = Typed.TypedName (Core.Name "hydra.haskell.syntax.Type")
-
--- | DSL injection for the variable variant of hydra.haskell.syntax.Type
-typeVariable :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Type
-typeVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.Type"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.haskell.syntax.TypedBinding
-typedBinding :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.ValueBinding -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TypedBinding
-typedBinding typeSignature valueBinding comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeSignature"),
-          Core.fieldTerm = (Typed.unTypedTerm typeSignature)},
-        Core.Field {
-          Core.fieldName = (Core.Name "valueBinding"),
-          Core.fieldTerm = (Typed.unTypedTerm valueBinding)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.haskell.syntax.TypedBinding
-typedBindingComments :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm (Maybe String)
-typedBindingComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeSignature field of hydra.haskell.syntax.TypedBinding
-typedBindingTypeSignature :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.TypeSignature
-typedBindingTypeSignature x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-        Core.projectionFieldName = (Core.Name "typeSignature")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.TypedBinding
-typedBindingTypedBinding :: Typed.TypedName Syntax.TypedBinding
-typedBindingTypedBinding = Typed.TypedName (Core.Name "hydra.haskell.syntax.TypedBinding")
-
--- | DSL accessor for the valueBinding field of hydra.haskell.syntax.TypedBinding
-typedBindingValueBinding :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.ValueBinding
-typedBindingValueBinding x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-        Core.projectionFieldName = (Core.Name "valueBinding")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the comments field of hydra.haskell.syntax.TypedBinding
-typedBindingWithComments :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TypedBinding
-typedBindingWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeSignature"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-              Core.projectionFieldName = (Core.Name "typeSignature")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "valueBinding"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-              Core.projectionFieldName = (Core.Name "valueBinding")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the typeSignature field of hydra.haskell.syntax.TypedBinding
-typedBindingWithTypeSignature :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.TypedBinding
-typedBindingWithTypeSignature original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeSignature"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "valueBinding"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-              Core.projectionFieldName = (Core.Name "valueBinding")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the valueBinding field of hydra.haskell.syntax.TypedBinding
-typedBindingWithValueBinding :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.ValueBinding -> Typed.TypedTerm Syntax.TypedBinding
-typedBindingWithValueBinding original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeSignature"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedBinding"),
-              Core.projectionFieldName = (Core.Name "typeSignature")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "valueBinding"),
-          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.haskell.syntax.TypedBinding"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.haskell.syntax.TypedExpression
-typedExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypedExpression
-typedExpression inner type_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm inner)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))
-
--- | DSL accessor for the inner field of hydra.haskell.syntax.TypedExpression
-typedExpressionInner :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Expression
-typedExpressionInner x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedExpression"),
-        Core.projectionFieldName = (Core.Name "inner")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.haskell.syntax.TypedExpression
-typedExpressionType :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Type
-typedExpressionType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedExpression"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.TypedExpression
-typedExpressionTypedExpression :: Typed.TypedName Syntax.TypedExpression
-typedExpressionTypedExpression = Typed.TypedName (Core.Name "hydra.haskell.syntax.TypedExpression")
-
--- | DSL updater for the inner field of hydra.haskell.syntax.TypedExpression
-typedExpressionWithInner :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypedExpression
-typedExpressionWithInner original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          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.haskell.syntax.TypedExpression"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.haskell.syntax.TypedExpression
-typedExpressionWithType :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypedExpression
-typedExpressionWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedExpression"),
-              Core.projectionFieldName = (Core.Name "inner")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.haskell.syntax.TypedPattern
-typedPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypedPattern
-typedPattern inner type_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Typed.unTypedTerm inner)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))
-
--- | DSL accessor for the inner field of hydra.haskell.syntax.TypedPattern
-typedPatternInner :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern
-typedPatternInner x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedPattern"),
-        Core.projectionFieldName = (Core.Name "inner")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.haskell.syntax.TypedPattern
-typedPatternType :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Type
-typedPatternType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedPattern"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.TypedPattern
-typedPatternTypedPattern :: Typed.TypedName Syntax.TypedPattern
-typedPatternTypedPattern = Typed.TypedName (Core.Name "hydra.haskell.syntax.TypedPattern")
-
--- | DSL updater for the inner field of hydra.haskell.syntax.TypedPattern
-typedPatternWithInner :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.TypedPattern
-typedPatternWithInner original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          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.haskell.syntax.TypedPattern"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.haskell.syntax.TypedPattern
-typedPatternWithType :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypedPattern
-typedPatternWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.haskell.syntax.TypedPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "inner"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.haskell.syntax.TypedPattern"),
-              Core.projectionFieldName = (Core.Name "inner")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL accessor for the body of hydra.haskell.syntax.CaseRhs
-unCaseRhs :: Typed.TypedTerm Syntax.CaseRhs -> Typed.TypedTerm Syntax.Expression
-unCaseRhs x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.haskell.syntax.CaseRhs")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.haskell.syntax.DerivingClause
-unDerivingClause :: Typed.TypedTerm Syntax.DerivingClause -> Typed.TypedTerm [Syntax.Name]
-unDerivingClause x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.haskell.syntax.DerivingClause")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.haskell.syntax.LocalBindings
-unLocalBindings :: Typed.TypedTerm Syntax.LocalBindings -> Typed.TypedTerm [Syntax.LocalBinding]
-unLocalBindings x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.haskell.syntax.LocalBindings")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.haskell.syntax.ModuleName
-unModuleName :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm String
-unModuleName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.haskell.syntax.ModuleName")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.haskell.syntax.NamePart
-unNamePart :: Typed.TypedTerm Syntax.NamePart -> Typed.TypedTerm String
-unNamePart x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.haskell.syntax.NamePart")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.haskell.syntax.RightHandSide
-unRightHandSide :: Typed.TypedTerm Syntax.RightHandSide -> Typed.TypedTerm Syntax.Expression
-unRightHandSide x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.haskell.syntax.RightHandSide")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.haskell.syntax.Statement
-unStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.Expression
-unStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.haskell.syntax.Statement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.haskell.syntax.Variable
-unVariable :: Typed.TypedTerm Syntax.Variable -> Typed.TypedTerm Syntax.Name
-unVariable x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.haskell.syntax.Variable")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL injection for the simple variant of hydra.haskell.syntax.ValueBinding
-valueBindingSimple :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.ValueBinding
-valueBindingSimple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.haskell.syntax.ValueBinding"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "simple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.haskell.syntax.ValueBinding
-valueBindingValueBinding :: Typed.TypedName Syntax.ValueBinding
-valueBindingValueBinding = Typed.TypedName (Core.Name "hydra.haskell.syntax.ValueBinding")
-
--- | DSL constructor for the hydra.haskell.syntax.Variable wrapper
-variable :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Variable
-variable x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.haskell.syntax.Variable"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.haskell.syntax.Variable
-variableVariable :: Typed.TypedName Syntax.Variable
-variableVariable = Typed.TypedName (Core.Name "hydra.haskell.syntax.Variable")
diff --git a/src/main/haskell/Hydra/Haskell/Coder.hs b/src/main/haskell/Hydra/Haskell/Coder.hs
--- a/src/main/haskell/Hydra/Haskell/Coder.hs
+++ b/src/main/haskell/Hydra/Haskell/Coder.hs
@@ -4,69 +4,71 @@
 
 module Hydra.Haskell.Coder where
 
-import qualified Hydra.Adapt as Adapt
-import qualified Hydra.Analysis as Analysis
-import qualified Hydra.Annotations as Annotations
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Constants as Constants
-import qualified Hydra.Core as Core
-import qualified Hydra.Dependencies as Dependencies
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Encode.Core as EncodeCore
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Adapt as Adapt
+import qualified Hydra.Core.Analysis as Analysis
+import qualified Hydra.Core.Annotations as Annotations
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Constants as Constants
+import qualified Hydra.Core.Dependencies as Dependencies
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Encode.Model as EncodeModel
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Formatting as Formatting
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Lexical as Lexical
+import qualified Hydra.Core.Overlay.Haskell.Lib.Eithers as Eithers
+import qualified Hydra.Core.Overlay.Haskell.Lib.Equality as Equality
+import qualified Hydra.Core.Overlay.Haskell.Lib.Lists as Lists
+import qualified Hydra.Core.Overlay.Haskell.Lib.Literals as Literals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Logic as Logic
+import qualified Hydra.Core.Overlay.Haskell.Lib.Maps as Maps
+import qualified Hydra.Core.Overlay.Haskell.Lib.Math as Math
+import qualified Hydra.Core.Overlay.Haskell.Lib.Optionals as Optionals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Pairs as Pairs
+import qualified Hydra.Core.Overlay.Haskell.Lib.Sets as Sets
+import qualified Hydra.Core.Overlay.Haskell.Lib.Strings as Strings
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Names as Names
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Predicates as Predicates
+import qualified Hydra.Core.Print.Errors as PrintErrors
+import qualified Hydra.Core.Print.Model as PrintModel
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.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.Strip as Strip
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variables as Variables
+import qualified Hydra.Core.Variants as Variants
 import qualified Hydra.Haskell.Environment as Environment
 import qualified Hydra.Haskell.Language as Language
 import qualified Hydra.Haskell.Serde as Serde
 import qualified Hydra.Haskell.Syntax as Syntax
 import qualified Hydra.Haskell.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.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.Print.Errors as PrintErrors
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-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.Strip as Strip
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.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
@@ -74,25 +76,25 @@
 import qualified Data.Set as S
 
 -- | Adapt a Hydra type to Haskell's type system and encode it
-adaptTypeToHaskellAndEncode :: Util.ModuleNames Syntax.ModuleName -> Core.Type -> t0 -> t1 -> Either Errors.Error Syntax.Type
+adaptTypeToHaskellAndEncode :: Util.ModuleNames Syntax.ModuleName -> Model.Type -> t0 -> t1 -> Either Errors.Error Syntax.Type
 adaptTypeToHaskellAndEncode namespaces typ cx g =
 
       let enc = \t -> encodeType namespaces t cx g
       in case (Strip.deannotateType typ) of
-        Core.TypeVariable _ -> enc typ
+        Model.TypeVariable _ -> enc typ
         _ -> Eithers.bind (Adapt.adaptTypeForLanguage Language.haskellLanguage typ) (\adaptedType -> enc adaptedType)
 
 -- | Generate a constant name for a field (e.g., '_TypeName_fieldName')
-constantForFieldName :: Core.Name -> Core.Name -> String
+constantForFieldName :: Model.Name -> Model.Name -> String
 constantForFieldName tname fname =
     Strings.concat [
       "_",
       (Names.localNameOf tname),
       "_",
-      (Core.unName fname)]
+      (Model.unName fname)]
 
 -- | Generate a constant name for a type (e.g., '_TypeName')
-constantForTypeName :: Core.Name -> String
+constantForTypeName :: Model.Name -> String
 constantForTypeName tname = Strings.concat2 "_" (Names.localNameOf tname)
 
 -- | Construct a Haskell module from a Hydra module and its definitions
@@ -104,15 +106,16 @@
                   \namespace ->
                     let raw = Packaging.unModuleName namespace
                         parts = Strings.splitOn "." raw
-                        sub = Strings.join "." (Lists.drop 2 parts)
-                    in (Logic.ifElse (Logic.and (Logic.and (Equality.equal (Lists.length parts) 3) (Equality.equal (Lists.take 2 parts) [
+                        sub = Strings.join "." (Lists.drop 3 parts)
+                    in (Logic.ifElse (Logic.and (Logic.and (Equality.equal (Lists.length parts) 4) (Equality.equal (Lists.take 3 parts) [
                       "hydra",
-                      "lib"])) (Sets.member sub overlaySubs)) (Strings.concat2 "hydra.overlay.haskell.lib." sub) raw)
+                      "core",
+                      "lib"])) (Sets.member sub overlaySubs)) (Strings.concat2 "hydra.core.overlay.haskell.lib." sub) raw)
           createDeclarations =
                   \def -> case def of
                     Packaging.DefinitionType v0 ->
                       let name = Packaging.typeDefinitionName v0
-                          typ = Core.typeSchemeBody (Packaging.typeDefinitionBody v0)
+                          typ = Model.typeSchemeBody (Packaging.typeDefinitionBody v0)
                       in (toTypeDeclarationsFrom namespaces name typ cx g)
                     Packaging.DefinitionTerm v0 -> Eithers.bind (toDataDeclaration namespaces v0 cx g) (\d -> Right [
                       d])
@@ -174,7 +177,7 @@
                       (condImport (Environment.haskellModuleMetadataUsesMap meta) (("Data.Map", (Just "M")), [])),
                       (condImport (Environment.haskellModuleMetadataUsesSet meta) (("Data.Set", (Just "S")), [])),
                       (Logic.ifElse (Logic.or (Analysis.moduleContainsBinaryLiterals mod) (Analysis.moduleContainsDecimalLiterals mod)) [
-                        (("Hydra.Overlay.Haskell.Lib.Literals", (Just "Literals")), [])] [])]))
+                        (("Hydra.Core.Overlay.Haskell.Lib.Literals", (Just "Literals")), [])] [])]))
       in (Eithers.bind (Eithers.mapList createDeclarations defs) (\declLists ->
         let decls = Lists.concat declLists
             mc = Optionals.bind (Packaging.moduleMetadata mod) (\em -> Packaging.entityMetadataDescription em)
@@ -197,33 +200,33 @@
       Environment.haskellModuleMetadataUsesVoid = False}
 
 -- | Encode a Hydra case statement as a Haskell case expression with a given scrutinee
-encodeCaseExpression :: Int -> Util.ModuleNames Syntax.ModuleName -> Core.CaseStatement -> Syntax.Expression -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeCaseExpression :: Int -> Util.ModuleNames Syntax.ModuleName -> Model.CaseStatement -> Syntax.Expression -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
 encodeCaseExpression depth namespaces stmt scrutinee cx g =
 
-      let dn = Core.caseStatementTypeName stmt
-          def = Core.caseStatementDefault stmt
-          fields = Core.caseStatementCases stmt
+      let dn = Model.caseStatementTypeName stmt
+          def = Model.caseStatementDefault stmt
+          fields = Model.caseStatementCases stmt
           toAlt =
                   \fieldMap -> \field ->
-                    let fn = Core.caseAlternativeName field
-                        fun_ = Core.caseAlternativeHandler field
+                    let fn = Model.caseAlternativeName field
+                        fun_ = Model.caseAlternativeHandler field
                         v0 = Strings.concat2 "v" (Literals.printInt32 depth)
                         raw =
-                                Core.TermApplication (Core.Application {
-                                  Core.applicationFunction = fun_,
-                                  Core.applicationArgument = (Core.TermVariable (Core.Name v0))})
+                                Model.TermApplication (Model.Application {
+                                  Model.applicationFunction = fun_,
+                                  Model.applicationArgument = (Model.TermVariable (Model.Name v0))})
                         rhsTerm = Dependencies.simplifyTerm raw
-                        v1 = Logic.ifElse (Variables.isFreeVariableInTerm (Core.Name v0) rhsTerm) Constants.ignoredVariable v0
+                        v1 = Logic.ifElse (Variables.isFreeVariableInTerm (Model.Name v0) rhsTerm) Constants.ignoredVariable v0
                         hname =
                                 Utils.unionFieldReference (Sets.union (Sets.fromList (Maps.keys (Graph.graphBoundTerms g))) (Sets.fromList (Maps.keys (Graph.graphSchemaTypes g)))) namespaces dn fn
                     in (Eithers.bind (Optionals.match (Maps.lookup fn fieldMap) (Left (Errors.ErrorResolution (Errors.ResolutionErrorNoMatchingField (Errors.NoMatchingFieldError {
                       Errors.noMatchingFieldErrorFieldName = fn})))) (\fieldType ->
-                      let ft = Core.fieldTypeType fieldType
+                      let ft = Model.fieldTypeType fieldType
                           noArgs = []
                           singleArg = [
                                 Syntax.PatternName (Utils.rawName v1)]
                       in case (Strip.deannotateType ft) of
-                        Core.TypeUnit -> Right noArgs
+                        Model.TypeUnit -> Right noArgs
                         _ -> Right singleArg)) (\args ->
                       let lhs = Utils.applicationPattern hname args
                       in (Eithers.bind (Eithers.map (\x -> Syntax.CaseRhs x) (encodeTerm (Math.add depth 1) namespaces rhsTerm cx g)) (\rhs -> Right (Syntax.Alternative {
@@ -231,7 +234,7 @@
                         Syntax.alternativeRhs = rhs,
                         Syntax.alternativeBinds = Nothing})))))
       in (Eithers.bind (Resolution.requireUnionType cx g dn) (\rt ->
-        let toFieldMapEntry = \f -> (Core.fieldTypeName f, f)
+        let toFieldMapEntry = \f -> (Model.fieldTypeName f, f)
             fieldMap = Maps.fromList (Lists.map toFieldMapEntry rt)
         in (Eithers.bind (Eithers.mapList (toAlt fieldMap) fields) (\ecases -> Eithers.bind (Optionals.match def (Right []) (\d -> Eithers.bind (Eithers.map (\x -> Syntax.CaseRhs x) (encodeTerm depth namespaces d cx g)) (\cs ->
           let lhs = Syntax.PatternName (Utils.rawName Constants.ignoredVariable)
@@ -246,53 +249,53 @@
           Syntax.caseExpressionAlternatives = (Lists.concat2 ecases dcases)})))))))
 
 -- | Encode a Hydra lambda as a Haskell expression
-encodeLambdaTerm :: Int -> Util.ModuleNames Syntax.ModuleName -> Core.Lambda -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeLambdaTerm :: Int -> Util.ModuleNames Syntax.ModuleName -> Model.Lambda -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
 encodeLambdaTerm depth namespaces lam cx g =
 
-      let v = Core.lambdaParameter lam
-          body = Core.lambdaBody lam
+      let v = Model.lambdaParameter lam
+          body = Model.lambdaBody lam
       in (Eithers.bind (encodeTerm depth namespaces body cx g) (\hbody -> Right (Utils.hslambda (Utils.elementReference namespaces v) hbody)))
 
 -- | Encode a Hydra literal as a Haskell expression
-encodeLiteral :: Core.Literal -> t0 -> Either Errors.Error Syntax.Expression
+encodeLiteral :: Model.Literal -> t0 -> Either Errors.Error Syntax.Expression
 encodeLiteral l cx =
     case l of
-      Core.LiteralBinary v0 -> Right (Utils.hsapp (Utils.hsvar "Literals.base64ToBinary") (Utils.hslit (Syntax.LiteralString (Literals.binaryToBase64 v0))))
-      Core.LiteralBoolean v0 -> Right (Utils.hsvar (Logic.ifElse v0 "True" "False"))
-      Core.LiteralDecimal v0 -> Right (Utils.hsapp (Utils.hsvar "Literals.stringToDecimal") (Utils.hslit (Syntax.LiteralString (Literals.printDecimal v0))))
-      Core.LiteralFloat v0 -> case v0 of
-        Core.FloatValueFloat32 v1 -> Right (Utils.hslit (Syntax.LiteralFloat v1))
-        Core.FloatValueFloat64 v1 -> Right (Utils.hslit (Syntax.LiteralDouble v1))
-      Core.LiteralInteger v0 -> case v0 of
-        Core.IntegerValueBigint v1 -> Right (Utils.hslit (Syntax.LiteralInteger v1))
-        Core.IntegerValueInt8 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.int8ToBigint v1)))
-        Core.IntegerValueInt16 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.int16ToBigint v1)))
-        Core.IntegerValueInt32 v1 -> Right (Utils.hslit (Syntax.LiteralInt v1))
-        Core.IntegerValueInt64 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.int64ToBigint v1)))
-        Core.IntegerValueUint8 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.uint8ToBigint v1)))
-        Core.IntegerValueUint16 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.uint16ToBigint v1)))
-        Core.IntegerValueUint32 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.uint32ToBigint v1)))
-        Core.IntegerValueUint64 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.uint64ToBigint v1)))
-      Core.LiteralString v0 -> Right (Utils.hslit (Syntax.LiteralString v0))
+      Model.LiteralBinary v0 -> Right (Utils.hsapp (Utils.hsvar "Literals.base64ToBinary") (Utils.hslit (Syntax.LiteralString (Literals.binaryToBase64 v0))))
+      Model.LiteralBoolean v0 -> Right (Utils.hsvar (Logic.ifElse v0 "True" "False"))
+      Model.LiteralDecimal v0 -> Right (Utils.hsapp (Utils.hsvar "Literals.stringToDecimal") (Utils.hslit (Syntax.LiteralString (Literals.printDecimal v0))))
+      Model.LiteralFloat v0 -> case v0 of
+        Model.FloatValueFloat32 v1 -> Right (Utils.hslit (Syntax.LiteralFloat v1))
+        Model.FloatValueFloat64 v1 -> Right (Utils.hslit (Syntax.LiteralDouble v1))
+      Model.LiteralInteger v0 -> case v0 of
+        Model.IntegerValueBigint v1 -> Right (Utils.hslit (Syntax.LiteralInteger v1))
+        Model.IntegerValueInt8 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.int8ToBigint v1)))
+        Model.IntegerValueInt16 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.int16ToBigint v1)))
+        Model.IntegerValueInt32 v1 -> Right (Utils.hslit (Syntax.LiteralInt v1))
+        Model.IntegerValueInt64 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.int64ToBigint v1)))
+        Model.IntegerValueUint8 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.uint8ToBigint v1)))
+        Model.IntegerValueUint16 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.uint16ToBigint v1)))
+        Model.IntegerValueUint32 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.uint32ToBigint v1)))
+        Model.IntegerValueUint64 v1 -> Right (Utils.hslit (Syntax.LiteralInteger (Literals.uint64ToBigint v1)))
+      Model.LiteralString v0 -> Right (Utils.hslit (Syntax.LiteralString v0))
       _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError {
         Errors.unexpectedShapeErrorExpected = "supported literal",
-        Errors.unexpectedShapeErrorActual = (PrintCore.literal l)})))
+        Errors.unexpectedShapeErrorActual = (PrintModel.literal l)})))
 
 -- | Encode a record projection as a Haskell expression
-encodeProjection :: Util.ModuleNames Syntax.ModuleName -> Core.Projection -> Either t0 Syntax.Expression
+encodeProjection :: Util.ModuleNames Syntax.ModuleName -> Model.Projection -> Either t0 Syntax.Expression
 encodeProjection namespaces proj =
 
-      let dn = Core.projectionTypeName proj
-          fname = Core.projectionFieldName proj
+      let dn = Model.projectionTypeName proj
+          fname = Model.projectionFieldName proj
       in (Right (Syntax.ExpressionVariable (Utils.recordFieldReference namespaces dn fname)))
 
 -- | Encode a standalone (un-applied) case statement as a Haskell lambda over a case expression
-encodeStandaloneCases :: Int -> Util.ModuleNames Syntax.ModuleName -> Core.CaseStatement -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeStandaloneCases :: Int -> Util.ModuleNames Syntax.ModuleName -> Model.CaseStatement -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
 encodeStandaloneCases depth namespaces stmt cx g =
     Eithers.map (Utils.hslambda (Utils.rawName "x")) (encodeCaseExpression depth namespaces stmt (Utils.hsvar "x") cx g)
 
 -- | Encode a Hydra term as a Haskell expression
-encodeTerm :: Int -> Util.ModuleNames Syntax.ModuleName -> Core.Term -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
+encodeTerm :: Int -> Util.ModuleNames Syntax.ModuleName -> Model.Term -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Expression
 encodeTerm depth namespaces term cx g =
 
       let encode = \t -> encodeTerm depth namespaces t cx g
@@ -310,27 +313,27 @@
           nonemptySet =
                   \s ->
                     let lhs = Utils.hsvar "S.fromList"
-                    in (Eithers.bind (encodeTerm depth namespaces (Core.TermList (Sets.toList s)) cx g) (\rhs -> Right (Utils.hsapp lhs rhs)))
+                    in (Eithers.bind (encodeTerm depth namespaces (Model.TermList (Sets.toList s)) cx g) (\rhs -> Right (Utils.hsapp lhs rhs)))
       in case (Strip.deannotateTerm term) of
-        Core.TermApplication v0 ->
-          let fun = Core.applicationFunction v0
-              arg = Core.applicationArgument v0
+        Model.TermApplication v0 ->
+          let fun = Model.applicationFunction v0
+              arg = Model.applicationArgument v0
               deannotatedFun = Strip.deannotateTerm fun
           in case deannotatedFun of
-            Core.TermCases v1 -> Eithers.bind (encode arg) (\harg -> encodeCaseExpression depth namespaces v1 harg cx g)
+            Model.TermCases v1 -> Eithers.bind (encode arg) (\harg -> encodeCaseExpression depth namespaces v1 harg cx g)
             _ -> Eithers.bind (encode fun) (\hfun -> Eithers.bind (encode arg) (\harg -> Right (Utils.hsapp hfun harg)))
-        Core.TermCases v0 -> encodeStandaloneCases depth namespaces v0 cx g
-        Core.TermEither v0 -> Eithers.either (\l -> Eithers.bind (encode l) (\hl -> Right (Utils.hsapp (Utils.hsvar "Left") hl))) (\r -> Eithers.bind (encode r) (\hr -> Right (Utils.hsapp (Utils.hsvar "Right") hr))) v0
-        Core.TermLambda v0 -> encodeLambdaTerm depth namespaces v0 cx g
-        Core.TermProject v0 -> encodeProjection namespaces v0
-        Core.TermUnwrap v0 -> encodeUnwrap namespaces v0
-        Core.TermLet v0 ->
+        Model.TermCases v0 -> encodeStandaloneCases depth namespaces v0 cx g
+        Model.TermEither v0 -> Eithers.either (\l -> Eithers.bind (encode l) (\hl -> Right (Utils.hsapp (Utils.hsvar "Left") hl))) (\r -> Eithers.bind (encode r) (\hr -> Right (Utils.hsapp (Utils.hsvar "Right") hr))) v0
+        Model.TermLambda v0 -> encodeLambdaTerm depth namespaces v0 cx g
+        Model.TermProject v0 -> encodeProjection namespaces v0
+        Model.TermUnwrap v0 -> encodeUnwrap namespaces v0
+        Model.TermLet v0 ->
           let collectBindings =
                   \lt ->
-                    let bs = Core.letBindings lt
-                        body = Core.letBody lt
+                    let bs = Model.letBindings lt
+                        body = Model.letBody lt
                     in case (Strip.deannotateTerm body) of
-                      Core.TermLet v1 ->
+                      Model.TermLet v1 ->
                         let innerResult = collectBindings v1
                         in (Lists.concat2 bs (Pairs.first innerResult), (Pairs.second innerResult))
                       _ -> (bs, body)
@@ -339,27 +342,27 @@
               finalBody = Pairs.second collected
               encodeBinding =
                       \binding ->
-                        let name = Core.bindingName binding
-                            term_ = Core.bindingTerm binding
-                            hname = Utils.simpleName (Core.unName name)
+                        let name = Model.bindingName binding
+                            term_ = Model.bindingTerm binding
+                            hname = Utils.simpleName (Model.unName name)
                         in (Eithers.bind (encode term_) (\hexpr -> Right (Syntax.LocalBindingValue (Utils.simpleValueBinding hname hexpr Nothing))))
           in (Eithers.bind (Eithers.mapList encodeBinding allBindings) (\hbindings -> Eithers.bind (encode finalBody) (\hinner -> Right (Syntax.ExpressionLet (Syntax.LetExpression {
             Syntax.letExpressionBindings = hbindings,
             Syntax.letExpressionInner = hinner})))))
-        Core.TermList v0 -> Eithers.bind (Eithers.mapList encode v0) (\helems -> Right (Syntax.ExpressionList helems))
-        Core.TermLiteral v0 -> encodeLiteral v0 cx
-        Core.TermMap v0 -> Logic.ifElse (Maps.isEmpty v0) (Right (Utils.hsvar "M.empty")) (nonemptyMap v0)
-        Core.TermOptional v0 -> Optionals.match v0 (Right (Utils.hsvar "Nothing")) (\t -> Eithers.bind (encode t) (\ht -> Right (Utils.hsapp (Utils.hsvar "Just") ht)))
-        Core.TermPair v0 -> Eithers.bind (encode (Pairs.first v0)) (\f -> Eithers.bind (encode (Pairs.second v0)) (\s -> Right (Syntax.ExpressionTuple [
+        Model.TermList v0 -> Eithers.bind (Eithers.mapList encode v0) (\helems -> Right (Syntax.ExpressionList helems))
+        Model.TermLiteral v0 -> encodeLiteral v0 cx
+        Model.TermMap v0 -> Logic.ifElse (Maps.isEmpty v0) (Right (Utils.hsvar "M.empty")) (nonemptyMap v0)
+        Model.TermOptional v0 -> Optionals.match v0 (Right (Utils.hsvar "Nothing")) (\t -> Eithers.bind (encode t) (\ht -> Right (Utils.hsapp (Utils.hsvar "Just") ht)))
+        Model.TermPair v0 -> Eithers.bind (encode (Pairs.first v0)) (\f -> Eithers.bind (encode (Pairs.second v0)) (\s -> Right (Syntax.ExpressionTuple [
           f,
           s])))
-        Core.TermRecord v0 ->
-          let sname = Core.recordTypeName v0
-              fields = Core.recordFields v0
+        Model.TermRecord v0 ->
+          let sname = Model.recordTypeName v0
+              fields = Model.recordFields v0
               toFieldUpdate =
                       \field ->
-                        let fn = Core.fieldName field
-                            ft = Core.fieldTerm field
+                        let fn = Model.fieldName field
+                            ft = Model.fieldTerm field
                             fieldRef = Utils.recordFieldReference namespaces sname fn
                         in (Eithers.bind (encode ft) (\hft -> Right (Syntax.FieldUpdate {
                           Syntax.fieldUpdateName = fieldRef,
@@ -368,118 +371,118 @@
           in (Eithers.bind (Eithers.mapList toFieldUpdate fields) (\updates -> Right (Syntax.ExpressionConstructRecord (Syntax.RecordExpression {
             Syntax.recordExpressionName = typeName,
             Syntax.recordExpressionFields = updates}))))
-        Core.TermSet v0 -> Logic.ifElse (Sets.isEmpty v0) (Right (Utils.hsvar "S.empty")) (nonemptySet v0)
-        Core.TermTypeLambda v0 ->
-          let term1 = Core.typeLambdaBody v0
+        Model.TermSet v0 -> Logic.ifElse (Sets.isEmpty v0) (Right (Utils.hsvar "S.empty")) (nonemptySet v0)
+        Model.TermTypeLambda v0 ->
+          let term1 = Model.typeLambdaBody v0
           in (encode term1)
-        Core.TermTypeApplication v0 ->
-          let term1 = Core.typeApplicationTermBody v0
+        Model.TermTypeApplication v0 ->
+          let term1 = Model.typeApplicationTermBody v0
           in (encode term1)
-        Core.TermInject v0 ->
-          let sname = Core.injectionTypeName v0
-              field = Core.injectionField v0
-              fn = Core.fieldName field
-              ft = Core.fieldTerm field
+        Model.TermInject v0 ->
+          let sname = Model.injectionTypeName v0
+              field = Model.injectionField v0
+              fn = Model.fieldName field
+              ft = Model.fieldTerm field
               lhs =
                       Syntax.ExpressionVariable (Utils.unionFieldReference (Sets.union (Sets.fromList (Maps.keys (Graph.graphBoundTerms g))) (Sets.fromList (Maps.keys (Graph.graphSchemaTypes g)))) namespaces sname fn)
               dflt = Eithers.map (Utils.hsapp lhs) (encode ft)
           in (Eithers.bind (Resolution.requireUnionField cx g sname fn) (\ftyp -> case (Strip.deannotateType ftyp) of
-            Core.TypeUnit -> Right lhs
+            Model.TypeUnit -> Right lhs
             _ -> dflt))
-        Core.TermUnit -> Right (Syntax.ExpressionTuple [])
-        Core.TermVariable v0 -> Right (Syntax.ExpressionVariable (Utils.elementReference namespaces v0))
-        Core.TermWrap v0 ->
-          let tname = Core.wrappedTermTypeName v0
-              term_ = Core.wrappedTermBody v0
+        Model.TermUnit -> Right (Syntax.ExpressionTuple [])
+        Model.TermVariable v0 -> Right (Syntax.ExpressionVariable (Utils.elementReference namespaces v0))
+        Model.TermWrap v0 ->
+          let tname = Model.wrappedTermTypeName v0
+              term_ = Model.wrappedTermBody v0
               lhs = Syntax.ExpressionVariable (Utils.elementReference namespaces tname)
           in (Eithers.bind (encode term_) (\rhs -> Right (Utils.hsapp lhs rhs)))
         _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError {
           Errors.unexpectedShapeErrorExpected = "supported term",
-          Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))
+          Errors.unexpectedShapeErrorActual = (PrintModel.term term)})))
 
 -- | Encode a Hydra type as a Haskell type
-encodeType :: Util.ModuleNames Syntax.ModuleName -> Core.Type -> t0 -> t1 -> Either Errors.Error Syntax.Type
+encodeType :: Util.ModuleNames Syntax.ModuleName -> Model.Type -> t0 -> t1 -> Either Errors.Error Syntax.Type
 encodeType namespaces typ cx g =
 
       let encode = \t -> encodeType namespaces t cx g
           ref = \name -> Right (Syntax.TypeVariable (Utils.elementReference namespaces name))
           unitTuple = Syntax.TypeTuple []
       in case (Strip.deannotateType typ) of
-        Core.TypeApplication v0 ->
-          let lhs = Core.applicationTypeFunction v0
-              rhs = Core.applicationTypeArgument v0
+        Model.TypeApplication v0 ->
+          let lhs = Model.applicationTypeFunction v0
+              rhs = Model.applicationTypeArgument v0
           in (Eithers.bind (encode lhs) (\hlhs -> Eithers.bind (encode rhs) (\hrhs -> Right (Utils.toTypeApplication [
             hlhs,
             hrhs]))))
-        Core.TypeEither v0 ->
-          let left_ = Core.eitherTypeLeft v0
-              right_ = Core.eitherTypeRight v0
+        Model.TypeEither v0 ->
+          let left_ = Model.eitherTypeLeft v0
+              right_ = Model.eitherTypeRight v0
           in (Eithers.bind (encode left_) (\hleft -> Eithers.bind (encode right_) (\hright -> Right (Utils.toTypeApplication [
             Syntax.TypeVariable (Utils.rawName "Either"),
             hleft,
             hright]))))
-        Core.TypeEffect v0 -> Eithers.bind (encode v0) (\het -> Right (Utils.toTypeApplication [
+        Model.TypeEffect v0 -> Eithers.bind (encode v0) (\het -> Right (Utils.toTypeApplication [
           Syntax.TypeVariable (Utils.rawName "IO"),
           het]))
-        Core.TypeFunction v0 ->
-          let dom = Core.functionTypeDomain v0
-              cod = Core.functionTypeCodomain v0
+        Model.TypeFunction v0 ->
+          let dom = Model.functionTypeDomain v0
+              cod = Model.functionTypeCodomain v0
           in (Eithers.bind (encode dom) (\hdom -> Eithers.bind (encode cod) (\hcod -> Right (Syntax.TypeFunction (Syntax.FunctionType {
             Syntax.functionTypeDomain = hdom,
             Syntax.functionTypeCodomain = hcod})))))
-        Core.TypeForall v0 ->
-          let v = Core.forallTypeParameter v0
-              body = Core.forallTypeBody v0
+        Model.TypeForall v0 ->
+          let v = Model.forallTypeParameter v0
+              body = Model.forallTypeBody v0
           in (encode body)
-        Core.TypeList v0 -> Eithers.bind (encode v0) (\hlt -> Right (Syntax.TypeList hlt))
-        Core.TypeLiteral v0 -> case v0 of
-          Core.LiteralTypeBinary -> Right (Syntax.TypeVariable (Utils.rawName "B.ByteString"))
-          Core.LiteralTypeBoolean -> Right (Syntax.TypeVariable (Utils.rawName "Bool"))
-          Core.LiteralTypeDecimal -> Right (Syntax.TypeVariable (Utils.rawName "Sci.Scientific"))
-          Core.LiteralTypeFloat v1 -> case v1 of
-            Core.FloatTypeFloat32 -> Right (Syntax.TypeVariable (Utils.rawName "Float"))
-            Core.FloatTypeFloat64 -> Right (Syntax.TypeVariable (Utils.rawName "Double"))
-          Core.LiteralTypeInteger v1 -> case v1 of
-            Core.IntegerTypeBigint -> Right (Syntax.TypeVariable (Utils.rawName "Integer"))
-            Core.IntegerTypeInt8 -> Right (Syntax.TypeVariable (Utils.rawName "I.Int8"))
-            Core.IntegerTypeInt16 -> Right (Syntax.TypeVariable (Utils.rawName "I.Int16"))
-            Core.IntegerTypeInt32 -> Right (Syntax.TypeVariable (Utils.rawName "Int"))
-            Core.IntegerTypeInt64 -> Right (Syntax.TypeVariable (Utils.rawName "I.Int64"))
+        Model.TypeList v0 -> Eithers.bind (encode v0) (\hlt -> Right (Syntax.TypeList hlt))
+        Model.TypeLiteral v0 -> case v0 of
+          Model.LiteralTypeBinary -> Right (Syntax.TypeVariable (Utils.rawName "B.ByteString"))
+          Model.LiteralTypeBoolean -> Right (Syntax.TypeVariable (Utils.rawName "Bool"))
+          Model.LiteralTypeDecimal -> Right (Syntax.TypeVariable (Utils.rawName "Sci.Scientific"))
+          Model.LiteralTypeFloat v1 -> case v1 of
+            Model.FloatTypeFloat32 -> Right (Syntax.TypeVariable (Utils.rawName "Float"))
+            Model.FloatTypeFloat64 -> Right (Syntax.TypeVariable (Utils.rawName "Double"))
+          Model.LiteralTypeInteger v1 -> case v1 of
+            Model.IntegerTypeBigint -> Right (Syntax.TypeVariable (Utils.rawName "Integer"))
+            Model.IntegerTypeInt8 -> Right (Syntax.TypeVariable (Utils.rawName "I.Int8"))
+            Model.IntegerTypeInt16 -> Right (Syntax.TypeVariable (Utils.rawName "I.Int16"))
+            Model.IntegerTypeInt32 -> Right (Syntax.TypeVariable (Utils.rawName "Int"))
+            Model.IntegerTypeInt64 -> Right (Syntax.TypeVariable (Utils.rawName "I.Int64"))
             _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError {
               Errors.unexpectedShapeErrorExpected = "supported integer type",
-              Errors.unexpectedShapeErrorActual = (PrintCore.integerType v1)})))
-          Core.LiteralTypeString -> Right (Syntax.TypeVariable (Utils.rawName "String"))
+              Errors.unexpectedShapeErrorActual = (PrintModel.integerType v1)})))
+          Model.LiteralTypeString -> Right (Syntax.TypeVariable (Utils.rawName "String"))
           _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError {
             Errors.unexpectedShapeErrorExpected = "supported literal type",
-            Errors.unexpectedShapeErrorActual = (PrintCore.literalType v0)})))
-        Core.TypeMap v0 ->
-          let kt = Core.mapTypeKeys v0
-              vt = Core.mapTypeValues v0
+            Errors.unexpectedShapeErrorActual = (PrintModel.literalType v0)})))
+        Model.TypeMap v0 ->
+          let kt = Model.mapTypeKeys v0
+              vt = Model.mapTypeValues v0
           in (Eithers.bind (encode kt) (\hkt -> Eithers.bind (encode vt) (\hvt -> Right (Utils.toTypeApplication [
             Syntax.TypeVariable (Utils.rawName "M.Map"),
             hkt,
             hvt]))))
-        Core.TypeOptional v0 -> Eithers.bind (encode v0) (\hot -> Right (Utils.toTypeApplication [
+        Model.TypeOptional v0 -> Eithers.bind (encode v0) (\hot -> Right (Utils.toTypeApplication [
           Syntax.TypeVariable (Utils.rawName "Maybe"),
           hot]))
-        Core.TypePair v0 -> Eithers.bind (encode (Core.pairTypeFirst v0)) (\f -> Eithers.bind (encode (Core.pairTypeSecond v0)) (\s -> Right (Syntax.TypeTuple [
+        Model.TypePair v0 -> Eithers.bind (encode (Model.pairTypeFirst v0)) (\f -> Eithers.bind (encode (Model.pairTypeSecond v0)) (\s -> Right (Syntax.TypeTuple [
           f,
           s])))
-        Core.TypeRecord _ -> ref (Core.Name "placeholder")
-        Core.TypeSet v0 -> Eithers.bind (encode v0) (\hst -> Right (Utils.toTypeApplication [
+        Model.TypeRecord _ -> ref (Model.Name "placeholder")
+        Model.TypeSet v0 -> Eithers.bind (encode v0) (\hst -> Right (Utils.toTypeApplication [
           Syntax.TypeVariable (Utils.rawName "S.Set"),
           hst]))
-        Core.TypeUnion _ -> ref (Core.Name "placeholder")
-        Core.TypeUnit -> Right unitTuple
-        Core.TypeVariable v0 -> ref v0
-        Core.TypeVoid -> Right (Syntax.TypeVariable (Utils.rawName "Void"))
-        Core.TypeWrap _ -> ref (Core.Name "placeholder")
+        Model.TypeUnion _ -> ref (Model.Name "placeholder")
+        Model.TypeUnit -> Right unitTuple
+        Model.TypeVariable v0 -> ref v0
+        Model.TypeVoid -> Right (Syntax.TypeVariable (Utils.rawName "Void"))
+        Model.TypeWrap _ -> ref (Model.Name "placeholder")
         _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError {
           Errors.unexpectedShapeErrorExpected = "supported type",
-          Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)})))
+          Errors.unexpectedShapeErrorActual = (PrintModel.type_ typ)})))
 
 -- | Encode a Hydra type as a Haskell type with typeclass assertions
-encodeTypeWithClassAssertions :: Util.ModuleNames Syntax.ModuleName -> M.Map Core.Name (S.Set Core.Name) -> Core.Type -> t0 -> t1 -> Either Errors.Error Syntax.Type
+encodeTypeWithClassAssertions :: Util.ModuleNames Syntax.ModuleName -> M.Map Model.Name (S.Set Model.Name) -> Model.Type -> t0 -> t1 -> Either Errors.Error Syntax.Type
 encodeTypeWithClassAssertions namespaces explicitClasses typ cx g =
 
       let classes = Maps.union explicitClasses (getImplicitTypeClasses typ)
@@ -488,10 +491,10 @@
                   \pair ->
                     let name = Pairs.first pair
                         cls = Pairs.second pair
-                        classLocal = Core.unName cls
+                        classLocal = Model.unName cls
                         hname =
                                 Utils.rawName (Logic.ifElse (Equality.equal classLocal "equality") "Eq" (Logic.ifElse (Equality.equal classLocal "ordering") "Ord" (Formatting.capitalize classLocal)))
-                        htype = Syntax.TypeVariable (Utils.rawName (Core.unName name))
+                        htype = Syntax.TypeVariable (Utils.rawName (Model.unName name))
                     in (Syntax.ConstraintClass (Syntax.ClassConstraint {
                       Syntax.classConstraintName = hname,
                       Syntax.classConstraintTypes = [
@@ -512,50 +515,50 @@
           Syntax.constrainedTypeType = htyp}))))))
 
 -- | Encode an unwrap term as a Haskell expression
-encodeUnwrap :: Util.ModuleNames Syntax.ModuleName -> Core.Name -> Either t0 Syntax.Expression
+encodeUnwrap :: Util.ModuleNames Syntax.ModuleName -> Model.Name -> Either t0 Syntax.Expression
 encodeUnwrap namespaces name =
     Right (Syntax.ExpressionVariable (Utils.elementReference namespaces (Names.qname (Optionals.withDefault (Packaging.ModuleName "") (Names.moduleNameOf name)) (Utils.newtypeAccessorName name))))
 
 -- | Extend metadata by analyzing a term for standard import usage (bottom-up step function)
-extendMetaForTerm :: Environment.HaskellModuleMetadata -> Core.Term -> Environment.HaskellModuleMetadata
+extendMetaForTerm :: Environment.HaskellModuleMetadata -> Model.Term -> Environment.HaskellModuleMetadata
 extendMetaForTerm meta term =
     case term of
-      Core.TermMap _ -> setMetaUsesMap True meta
-      Core.TermSet _ -> setMetaUsesSet True meta
+      Model.TermMap _ -> setMetaUsesMap True meta
+      Model.TermSet _ -> setMetaUsesSet True meta
       _ -> meta
 
 -- | Extend metadata by analyzing a type for standard import usage (bottom-up step function)
-extendMetaForType :: Environment.HaskellModuleMetadata -> Core.Type -> Environment.HaskellModuleMetadata
+extendMetaForType :: Environment.HaskellModuleMetadata -> Model.Type -> Environment.HaskellModuleMetadata
 extendMetaForType meta typ =
     case (Strip.deannotateType typ) of
-      Core.TypeLiteral v0 -> case v0 of
-        Core.LiteralTypeBinary -> setMetaUsesByteString True meta
-        Core.LiteralTypeInteger v1 -> case v1 of
-          Core.IntegerTypeInt8 -> setMetaUsesInt True meta
-          Core.IntegerTypeInt16 -> setMetaUsesInt True meta
-          Core.IntegerTypeInt64 -> setMetaUsesInt True meta
+      Model.TypeLiteral v0 -> case v0 of
+        Model.LiteralTypeBinary -> setMetaUsesByteString True meta
+        Model.LiteralTypeInteger v1 -> case v1 of
+          Model.IntegerTypeInt8 -> setMetaUsesInt True meta
+          Model.IntegerTypeInt16 -> setMetaUsesInt True meta
+          Model.IntegerTypeInt64 -> setMetaUsesInt True meta
           _ -> meta
         _ -> meta
-      Core.TypeMap _ -> setMetaUsesMap True meta
-      Core.TypeSet _ -> setMetaUsesSet True meta
-      Core.TypeVoid -> setMetaUsesVoid True meta
+      Model.TypeMap _ -> setMetaUsesMap True meta
+      Model.TypeSet _ -> setMetaUsesSet True meta
+      Model.TypeVoid -> setMetaUsesVoid True meta
       _ -> meta
 
 -- | Find type variables that require an Ord constraint (used in maps or sets)
-findOrdVariables :: Core.Type -> S.Set Core.Name
+findOrdVariables :: Model.Type -> S.Set Model.Name
 findOrdVariables typ =
 
       let fold =
               \names -> \typ_ -> case typ_ of
-                Core.TypeMap v0 ->
-                  let kt = Core.mapTypeKeys v0
+                Model.TypeMap v0 ->
+                  let kt = Model.mapTypeKeys v0
                   in (tryType names kt)
-                Core.TypeSet v0 -> tryType names v0
+                Model.TypeSet v0 -> tryType names v0
                 _ -> names
           isTypeVariable = \v -> Optionals.isNone (Names.moduleNameOf v)
           tryType =
                   \names -> \t -> case (Strip.deannotateType t) of
-                    Core.TypeVariable v0 -> Logic.ifElse (isTypeVariable v0) (Sets.insert v0 names) names
+                    Model.TypeVariable v0 -> Logic.ifElse (isTypeVariable v0) (Sets.insert v0 names) names
                     _ -> names
       in (Rewriting.foldOverType Coders.TraversalOrderPre fold Sets.empty typ)
 
@@ -568,18 +571,18 @@
                 Packaging.DefinitionTerm v0 ->
                   let term = Packaging.termDefinitionBody v0
                       metaWithTerm = Rewriting.foldOverTerm Coders.TraversalOrderPre (\m -> \t -> extendMetaForTerm m t) meta term
-                  in (Optionals.match (Optionals.map Scoping.termSignatureToTypeScheme (Packaging.termDefinitionSignature v0)) metaWithTerm (\ts -> Rewriting.foldOverType Coders.TraversalOrderPre (\m -> \t -> extendMetaForType m t) metaWithTerm (Core.typeSchemeBody ts)))
+                  in (Optionals.match (Optionals.map Scoping.termSignatureToTypeScheme (Packaging.termDefinitionSignature v0)) metaWithTerm (\ts -> Rewriting.foldOverType Coders.TraversalOrderPre (\m -> \t -> extendMetaForType m t) metaWithTerm (Model.typeSchemeBody ts)))
                 Packaging.DefinitionType v0 ->
-                  let typ = Core.typeSchemeBody (Packaging.typeDefinitionBody v0)
+                  let typ = Model.typeSchemeBody (Packaging.typeDefinitionBody v0)
                   in (Rewriting.foldOverType Coders.TraversalOrderPre (\m -> \t -> extendMetaForType m t) meta typ)
       in (Lists.foldl addDef emptyMetadata defs)
 
 -- | Get implicit typeclass constraints for type variables that need Ord
-getImplicitTypeClasses :: Core.Type -> M.Map Core.Name (S.Set Core.Name)
+getImplicitTypeClasses :: Model.Type -> M.Map Model.Name (S.Set Model.Name)
 getImplicitTypeClasses typ =
 
       let toPair = \name -> (name, (Sets.fromList [
-            Core.Name "ordering"]))
+            Model.Name "ordering"]))
       in (Maps.fromList (Lists.map toPair (Sets.toList (findOrdVariables typ))))
 
 -- | Whether to include type definitions in generated Haskell modules
@@ -587,8 +590,8 @@
 includeTypeDefinitions = False
 
 -- | The key used to track Haskell variable depth in annotations
-keyHaskellVar :: Core.Name
-keyHaskellVar = Core.Name "haskellVar"
+keyHaskellVar :: Model.Name
+keyHaskellVar = Model.Name "haskellVar"
 
 -- | Convert a Hydra module to Haskell source code as a filepath-to-content map
 moduleToHaskell :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> t0 -> Graph.Graph -> Either Errors.Error (M.Map String String)
@@ -604,10 +607,10 @@
     Eithers.bind (Utils.namespacesForModule mod cx g) (\namespaces -> constructModule overlaySubs namespaces mod defs cx g)
 
 -- | Generate Haskell declarations for type and field name constants
-nameDecls :: Util.ModuleNames Syntax.ModuleName -> Core.Name -> Core.Type -> [Syntax.Declaration]
+nameDecls :: Util.ModuleNames Syntax.ModuleName -> Model.Name -> Model.Type -> [Syntax.Declaration]
 nameDecls namespaces name typ =
 
-      let nm = Core.unName name
+      let nm = Model.unName name
           toDecl =
                   \n -> \pair ->
                     let k = Pairs.first pair
@@ -623,9 +626,9 @@
           fieldDecls = Lists.map toConstant (Lexical.fieldsOf typ)
           toConstant =
                   \fieldType ->
-                    let fname = Core.fieldTypeName fieldType
-                    in (constantForFieldName name fname, (Core.unName fname))
-      in (Logic.ifElse useCoreImport (Lists.cons (toDecl (Core.Name "hydra.core.Name") nameDecl) (Lists.map (toDecl (Core.Name "hydra.core.Name")) fieldDecls)) [])
+                    let fname = Model.fieldTypeName fieldType
+                    in (constantForFieldName name fname, (Model.unName fname))
+      in (Logic.ifElse useCoreImport (Lists.cons (toDecl (Model.Name "hydra.core.model.Name") nameDecl) (Lists.map (toDecl (Model.Name "hydra.core.model.Name")) fieldDecls)) [])
 
 -- | Set the usesByteString flag in Haskell module metadata
 setMetaUsesByteString :: Bool -> Environment.HaskellModuleMetadata -> Environment.HaskellModuleMetadata
@@ -711,12 +714,12 @@
                         _ -> vb
           toDecl =
                   \comments -> \hname_ -> \term_ -> \bindings -> case (Strip.deannotateTerm term_) of
-                    Core.TermLet v0 ->
-                      let lbindings = Core.letBindings v0
-                          env = Core.letBody v0
+                    Model.TermLet v0 ->
+                      let lbindings = Model.letBindings v0
+                          env = Model.letBody v0
                           toTermDefinition = \hname_ -> \hterm_ -> Syntax.LocalBindingValue (Utils.simpleValueBinding hname_ hterm_ Nothing)
-                          hnames = Lists.map (\binding -> Utils.simpleName (Core.unName (Core.bindingName binding))) lbindings
-                          terms = Lists.map Core.bindingTerm lbindings
+                          hnames = Lists.map (\binding -> Utils.simpleName (Model.unName (Model.bindingName binding))) lbindings
+                          terms = Lists.map Model.bindingTerm lbindings
                       in (Eithers.bind (Eithers.mapList (\t -> encodeTerm 0 namespaces t cx g) terms) (\hterms ->
                         let hbindings = Lists.zipWith toTermDefinition hnames hterms
                             prevBindings = Optionals.match bindings [] (\lb -> Syntax.unLocalBindings lb)
@@ -724,11 +727,11 @@
                         in (toDecl comments hname_ env (Just (Syntax.LocalBindings allBindings)))))
                     _ -> Eithers.bind (encodeTerm 0 namespaces term_ cx g) (\hterm ->
                       let vb = Utils.simpleValueBinding hname_ hterm bindings
-                          schemeConstraints = Optionals.match typ Maps.empty (\ts -> Core.typeSchemeConstraints ts)
+                          schemeConstraints = Optionals.match typ Maps.empty (\ts -> Model.typeSchemeConstraints ts)
                           schemeClasses = typeSchemeConstraintsToClassMap schemeConstraints
                       in (Eithers.bind (Annotations.getTypeClasses cx g (Strip.removeTypesFromTerm term)) (\explicitClasses ->
                         let combinedClasses = Maps.union schemeClasses explicitClasses
-                            schemeType = Optionals.match typ Core.TypeUnit (\ts -> Core.typeSchemeBody ts)
+                            schemeType = Optionals.match typ Model.TypeUnit (\ts -> Model.typeSchemeBody ts)
                         in (Eithers.bind (encodeTypeWithClassAssertions namespaces combinedClasses schemeType cx g) (\htype ->
                           let decl =
                                   Syntax.DeclarationTypedBinding (Syntax.TypedBinding {
@@ -741,7 +744,7 @@
       in (Eithers.bind (Annotations.getTermDescription cx g term) (\comments -> toDecl comments hname term Nothing))
 
 -- | Convert a Hydra type definition to Haskell declarations
-toTypeDeclarationsFrom :: Util.ModuleNames Syntax.ModuleName -> Core.Name -> Core.Type -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.Declaration]
+toTypeDeclarationsFrom :: Util.ModuleNames Syntax.ModuleName -> Model.Name -> Model.Type -> t0 -> Graph.Graph -> Either Errors.Error [Syntax.Declaration]
 toTypeDeclarationsFrom namespaces elementName typ cx g =
 
       let lname = Names.localNameOf elementName
@@ -750,7 +753,7 @@
                   \name -> \vars_ -> Optionals.withDefault (Syntax.DeclarationHeadSimple name) (Optionals.map (\p ->
                     let h = Pairs.first p
                         rest = Pairs.second p
-                        hvar = Syntax.Variable (Utils.simpleName (Core.unName h))
+                        hvar = Syntax.Variable (Utils.simpleName (Model.unName h))
                     in (Syntax.DeclarationHeadApplication (Syntax.ApplicationDeclarationHead {
                       Syntax.applicationDeclarationHeadFunction = (declHead name rest),
                       Syntax.applicationDeclarationHeadOperand = hvar}))) (Lists.uncons vars_))
@@ -773,9 +776,9 @@
                   \lname_ -> \fields ->
                     let toField =
                             \fieldType ->
-                              let fname = Core.fieldTypeName fieldType
-                                  ftype = Core.fieldTypeType fieldType
-                                  hname_ = Utils.simpleName (Strings.concat2 (Formatting.decapitalize lname_) (Formatting.capitalize (Core.unName fname)))
+                              let fname = Model.fieldTypeName fieldType
+                                  ftype = Model.fieldTypeType fieldType
+                                  hname_ = Utils.simpleName (Strings.concat2 (Formatting.decapitalize lname_) (Formatting.capitalize (Model.unName fname)))
                               in (Eithers.bind (adaptTypeToHaskellAndEncode namespaces ftype cx g) (\htype -> Eithers.bind (Annotations.getTypeDescription cx g ftype) (\comments -> Right (Syntax.Field {
                                 Syntax.fieldName = hname_,
                                 Syntax.fieldType = htype,
@@ -786,8 +789,8 @@
                       Syntax.recordConstructorComments = Nothing}))))
           unionCons =
                   \boundNames_ -> \lname_ -> \fieldType ->
-                    let fname = Core.fieldTypeName fieldType
-                        ftype = Core.fieldTypeType fieldType
+                    let fname = Model.fieldTypeName fieldType
+                        ftype = Model.fieldTypeType fieldType
                         deconflict =
                                 \name ->
                                   let tname =
@@ -796,8 +799,8 @@
                                             Util.qualifiedNameLocal = name})
                                   in (Logic.ifElse (Sets.member tname boundNames_) (deconflict (Strings.concat2 name "_")) name)
                     in (Eithers.bind (Annotations.getTypeDescription cx g ftype) (\comments ->
-                      let nm = deconflict (Strings.concat2 (Formatting.capitalize lname_) (Formatting.capitalize (Core.unName fname)))
-                      in (Eithers.bind (Logic.ifElse (Equality.equal (Strip.deannotateType ftype) Core.TypeUnit) (Right []) (Eithers.bind (adaptTypeToHaskellAndEncode namespaces ftype cx g) (\htype -> Right [
+                      let nm = deconflict (Strings.concat2 (Formatting.capitalize lname_) (Formatting.capitalize (Model.unName fname)))
+                      in (Eithers.bind (Logic.ifElse (Equality.equal (Strip.deannotateType ftype) Model.TypeUnit) (Right []) (Eithers.bind (adaptTypeToHaskellAndEncode namespaces ftype cx g) (\htype -> Right [
                         htype]))) (\typeList -> Right (Syntax.ConstructorOrdinary (Syntax.PositionalConstructor {
                         Syntax.positionalConstructorName = (Utils.simpleName nm),
                         Syntax.positionalConstructorFields = typeList,
@@ -814,7 +817,7 @@
             t_ = Pairs.second unpackResult
             hd = declHead hname (Lists.reverse vars)
         in (Eithers.bind (Annotations.getTypeDescription cx g typ) (\comments -> Eithers.bind (case (Strip.deannotateType t_) of
-          Core.TypeRecord v0 -> Eithers.bind (recordCons lname v0) (\cons -> Right (Syntax.DeclarationData (Syntax.DataDeclaration {
+          Model.TypeRecord v0 -> Eithers.bind (recordCons lname v0) (\cons -> Right (Syntax.DeclarationData (Syntax.DataDeclaration {
             Syntax.dataDeclarationKeyword = Syntax.DataKeywordData,
             Syntax.dataDeclarationContext = [],
             Syntax.dataDeclarationHead = hd,
@@ -823,7 +826,7 @@
             Syntax.dataDeclarationDeriving = [
               deriv],
             Syntax.dataDeclarationComments = comments})))
-          Core.TypeUnion v0 -> Eithers.bind (Eithers.mapList (unionCons (Sets.fromList (Maps.keys (Graph.graphBoundTerms g))) lname) v0) (\cons -> Right (Syntax.DeclarationData (Syntax.DataDeclaration {
+          Model.TypeUnion v0 -> Eithers.bind (Eithers.mapList (unionCons (Sets.fromList (Maps.keys (Graph.graphBoundTerms g))) lname) v0) (\cons -> Right (Syntax.DeclarationData (Syntax.DataDeclaration {
             Syntax.dataDeclarationKeyword = Syntax.DataKeywordData,
             Syntax.dataDeclarationContext = [],
             Syntax.dataDeclarationHead = hd,
@@ -831,7 +834,7 @@
             Syntax.dataDeclarationDeriving = [
               deriv],
             Syntax.dataDeclarationComments = comments})))
-          Core.TypeWrap v0 -> Eithers.bind (newtypeCons elementName v0) (\cons -> Right (Syntax.DeclarationData (Syntax.DataDeclaration {
+          Model.TypeWrap v0 -> Eithers.bind (newtypeCons elementName v0) (\cons -> Right (Syntax.DeclarationData (Syntax.DataDeclaration {
             Syntax.dataDeclarationKeyword = Syntax.DataKeywordNewtype,
             Syntax.dataDeclarationContext = [],
             Syntax.dataDeclarationHead = hd,
@@ -853,7 +856,7 @@
             tdecls]))))))))
 
 -- | Generate a Haskell declaration for a type definition constant
-typeDecl :: Util.ModuleNames Syntax.ModuleName -> Core.Name -> Core.Type -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Declaration
+typeDecl :: Util.ModuleNames Syntax.ModuleName -> Model.Name -> Model.Type -> t0 -> Graph.Graph -> Either Errors.Error Syntax.Declaration
 typeDecl namespaces name typ cx g =
 
       let typeName = \ns -> \name_ -> Names.qname ns (typeNameLocal name_)
@@ -862,34 +865,34 @@
                     "_",
                     (Names.localNameOf name_),
                     "_type_"]
-          rawTerm = EncodeCore.type_ typ
+          rawTerm = EncodeModel.type_ typ
           rewrite =
                   \recurse -> \term ->
                     let variantResult =
                             case (Strip.deannotateTerm term) of
-                              Core.TermInject v0 -> Logic.ifElse (Equality.equal (Core.injectionTypeName v0) (Core.Name "hydra.core.Type")) (Just (Core.injectionField v0)) Nothing
+                              Model.TermInject v0 -> Logic.ifElse (Equality.equal (Model.injectionTypeName v0) (Model.Name "hydra.core.model.Type")) (Just (Model.injectionField v0)) Nothing
                               _ -> Nothing
                         decodeString =
                                 \term2 -> case (Strip.deannotateTerm term2) of
-                                  Core.TermLiteral v0 -> case v0 of
-                                    Core.LiteralString v1 -> Just v1
+                                  Model.TermLiteral v0 -> case v0 of
+                                    Model.LiteralString v1 -> Just v1
                                     _ -> Nothing
                                   _ -> Nothing
                         decodeName =
                                 \term2 -> case (Strip.deannotateTerm term2) of
-                                  Core.TermWrap v0 -> Logic.ifElse (Equality.equal (Core.wrappedTermTypeName v0) (Core.Name "hydra.core.Name")) (Optionals.map (\x -> Core.Name x) (decodeString (Core.wrappedTermBody v0))) Nothing
+                                  Model.TermWrap v0 -> Logic.ifElse (Equality.equal (Model.wrappedTermTypeName v0) (Model.Name "hydra.core.model.Name")) (Optionals.map (\x -> Model.Name x) (decodeString (Model.wrappedTermBody v0))) Nothing
                                   _ -> Nothing
                         forType =
                                 \field ->
-                                  let fname = Core.fieldName field
-                                      fterm = Core.fieldTerm field
-                                  in (Logic.ifElse (Equality.equal fname (Core.Name "record")) Nothing (Logic.ifElse (Equality.equal fname (Core.Name "variable")) (Optionals.bind (decodeName fterm) forVariableType) Nothing))
+                                  let fname = Model.fieldName field
+                                      fterm = Model.fieldTerm field
+                                  in (Logic.ifElse (Equality.equal fname (Model.Name "record")) Nothing (Logic.ifElse (Equality.equal fname (Model.Name "variable")) (Optionals.bind (decodeName fterm) forVariableType) Nothing))
                         forVariableType =
                                 \vname ->
                                   let qname = Names.qualifyName vname
                                       mns = Util.qualifiedNameModuleName qname
                                       local = Util.qualifiedNameLocal qname
-                                  in (Optionals.map (\ns -> Core.TermVariable (Names.qname ns (Strings.concat [
+                                  in (Optionals.map (\ns -> Model.TermVariable (Names.qname ns (Strings.concat [
                                     "_",
                                     local,
                                     "_type_"]))) mns)
@@ -908,13 +911,13 @@
         in (Right decl)))
 
 -- | Project type scheme constraints to a map of type variables to typeclass names
-typeSchemeConstraintsToClassMap :: Ord t0 => (M.Map t0 Core.TypeVariableConstraints -> M.Map t0 (S.Set Core.Name))
+typeSchemeConstraintsToClassMap :: Ord t0 => (M.Map t0 Model.TypeVariableConstraints -> M.Map t0 (S.Set Model.Name))
 typeSchemeConstraintsToClassMap constraints =
 
       let constraintToName =
               \tcc -> case tcc of
-                Core.TypeClassConstraintSimple v0 -> Just v0
-      in (Maps.map (\meta -> Sets.fromList (Optionals.givens (Lists.map constraintToName (Sets.toList (Core.typeVariableConstraintsClasses meta))))) constraints)
+                Model.TypeClassConstraintSimple v0 -> Just v0
+      in (Maps.map (\meta -> Sets.fromList (Optionals.givens (Lists.map constraintToName (Sets.toList (Model.typeVariableConstraintsClasses meta))))) constraints)
 
 -- | Whether to use the Hydra core import in generated modules
 useCoreImport :: Bool
diff --git a/src/main/haskell/Hydra/Haskell/Dsl/Environment.hs b/src/main/haskell/Hydra/Haskell/Dsl/Environment.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Haskell/Dsl/Environment.hs
@@ -0,0 +1,274 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | DSL functions for hydra.haskell.environment
+
+module Hydra.Haskell.Dsl.Environment where
+
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Haskell.Environment as Environment
+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 hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadata :: Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
+haskellModuleMetadata usesByteString usesInt usesMap usesSet usesVoid =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "usesByteString"),
+          Model.fieldTerm = (Typed.unTypedTerm usesByteString)},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesInt"),
+          Model.fieldTerm = (Typed.unTypedTerm usesInt)},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesMap"),
+          Model.fieldTerm = (Typed.unTypedTerm usesMap)},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesSet"),
+          Model.fieldTerm = (Typed.unTypedTerm usesSet)},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesVoid"),
+          Model.fieldTerm = (Typed.unTypedTerm usesVoid)}]}))
+
+-- | DSL name token for hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataHaskellModuleMetadata :: Typed.TypedName Environment.HaskellModuleMetadata
+haskellModuleMetadataHaskellModuleMetadata =
+    Typed.TypedName (Model.Name "hydra.haskell.environment.HaskellModuleMetadata")
+
+-- | DSL accessor for the usesByteString field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataUsesByteString :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
+haskellModuleMetadataUsesByteString x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+        Model.projectionFieldName = (Model.Name "usesByteString")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the usesInt field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataUsesInt :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
+haskellModuleMetadataUsesInt x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+        Model.projectionFieldName = (Model.Name "usesInt")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the usesMap field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataUsesMap :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
+haskellModuleMetadataUsesMap x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+        Model.projectionFieldName = (Model.Name "usesMap")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the usesSet field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataUsesSet :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
+haskellModuleMetadataUsesSet x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+        Model.projectionFieldName = (Model.Name "usesSet")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the usesVoid field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataUsesVoid :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool
+haskellModuleMetadataUsesVoid x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+        Model.projectionFieldName = (Model.Name "usesVoid")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the usesByteString field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesByteString :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesByteString original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "usesByteString"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesInt"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesInt")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesMap"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesMap")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesSet"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesSet")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesVoid"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesVoid")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the usesInt field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesInt :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesInt original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "usesByteString"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesByteString")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesInt"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesMap"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesMap")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesSet"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesSet")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesVoid"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesVoid")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the usesMap field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesMap :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesMap original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "usesByteString"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesByteString")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesInt"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesInt")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesMap"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesSet"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesSet")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesVoid"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesVoid")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the usesSet field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesSet :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesSet original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "usesByteString"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesByteString")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesInt"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesInt")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesMap"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesMap")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesSet"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesVoid"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesVoid")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the usesVoid field of hydra.haskell.environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesVoid :: Typed.TypedTerm Environment.HaskellModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.HaskellModuleMetadata
+haskellModuleMetadataWithUsesVoid original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "usesByteString"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesByteString")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesInt"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesInt")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesMap"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesMap")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesSet"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.environment.HaskellModuleMetadata"),
+              Model.projectionFieldName = (Model.Name "usesSet")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "usesVoid"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
diff --git a/src/main/haskell/Hydra/Haskell/Dsl/Syntax.hs b/src/main/haskell/Hydra/Haskell/Dsl/Syntax.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Haskell/Dsl/Syntax.hs
@@ -0,0 +1,4407 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | DSL functions for hydra.haskell.syntax
+
+module Hydra.Haskell.Dsl.Syntax where
+
+import qualified Hydra.Core.Dsl.Model as DslModel
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Haskell.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 hydra.haskell.syntax.Alternative
+alternative :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.CaseRhs -> Typed.TypedTerm (Maybe Syntax.LocalBindings) -> Typed.TypedTerm Syntax.Alternative
+alternative pattern rhs binds =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Typed.unTypedTerm pattern)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "binds"),
+          Model.fieldTerm = (Typed.unTypedTerm binds)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.Alternative
+alternativeAlternative :: Typed.TypedName Syntax.Alternative
+alternativeAlternative = Typed.TypedName (Model.Name "hydra.haskell.syntax.Alternative")
+
+-- | DSL accessor for the binds field of hydra.haskell.syntax.Alternative
+alternativeBinds :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm (Maybe Syntax.LocalBindings)
+alternativeBinds x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+        Model.projectionFieldName = (Model.Name "binds")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the pattern field of hydra.haskell.syntax.Alternative
+alternativePattern :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm Syntax.Pattern
+alternativePattern x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+        Model.projectionFieldName = (Model.Name "pattern")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the rhs field of hydra.haskell.syntax.Alternative
+alternativeRhs :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm Syntax.CaseRhs
+alternativeRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the binds field of hydra.haskell.syntax.Alternative
+alternativeWithBinds :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm (Maybe Syntax.LocalBindings) -> Typed.TypedTerm Syntax.Alternative
+alternativeWithBinds original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+      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.haskell.syntax.Alternative"),
+              Model.projectionFieldName = (Model.Name "pattern")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "binds"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the pattern field of hydra.haskell.syntax.Alternative
+alternativeWithPattern :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Alternative
+alternativeWithPattern original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          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.haskell.syntax.Alternative"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "binds"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+              Model.projectionFieldName = (Model.Name "binds")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.haskell.syntax.Alternative
+alternativeWithRhs :: Typed.TypedTerm Syntax.Alternative -> Typed.TypedTerm Syntax.CaseRhs -> Typed.TypedTerm Syntax.Alternative
+alternativeWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+      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.haskell.syntax.Alternative"),
+              Model.projectionFieldName = (Model.Name "pattern")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "binds"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Alternative"),
+              Model.projectionFieldName = (Model.Name "binds")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.ApplicationDeclarationHead
+applicationDeclarationHead :: Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.Variable -> Typed.TypedTerm Syntax.ApplicationDeclarationHead
+applicationDeclarationHead function operand =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "function"),
+          Model.fieldTerm = (Typed.unTypedTerm function)},
+        Model.Field {
+          Model.fieldName = (Model.Name "operand"),
+          Model.fieldTerm = (Typed.unTypedTerm operand)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.ApplicationDeclarationHead
+applicationDeclarationHeadApplicationDeclarationHead :: Typed.TypedName Syntax.ApplicationDeclarationHead
+applicationDeclarationHeadApplicationDeclarationHead =
+    Typed.TypedName (Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead")
+
+-- | DSL accessor for the function field of hydra.haskell.syntax.ApplicationDeclarationHead
+applicationDeclarationHeadFunction :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.DeclarationHead
+applicationDeclarationHeadFunction x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
+        Model.projectionFieldName = (Model.Name "function")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the operand field of hydra.haskell.syntax.ApplicationDeclarationHead
+applicationDeclarationHeadOperand :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.Variable
+applicationDeclarationHeadOperand x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
+        Model.projectionFieldName = (Model.Name "operand")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the function field of hydra.haskell.syntax.ApplicationDeclarationHead
+applicationDeclarationHeadWithFunction :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.ApplicationDeclarationHead
+applicationDeclarationHeadWithFunction original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "function"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "operand"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
+              Model.projectionFieldName = (Model.Name "operand")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the operand field of hydra.haskell.syntax.ApplicationDeclarationHead
+applicationDeclarationHeadWithOperand :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.Variable -> Typed.TypedTerm Syntax.ApplicationDeclarationHead
+applicationDeclarationHeadWithOperand original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "function"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead"),
+              Model.projectionFieldName = (Model.Name "function")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "operand"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.ApplicationExpression
+applicationExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ApplicationExpression
+applicationExpression function argument =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "function"),
+          Model.fieldTerm = (Typed.unTypedTerm function)},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Typed.unTypedTerm argument)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.ApplicationExpression
+applicationExpressionApplicationExpression :: Typed.TypedName Syntax.ApplicationExpression
+applicationExpressionApplicationExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.ApplicationExpression")
+
+-- | DSL accessor for the argument field of hydra.haskell.syntax.ApplicationExpression
+applicationExpressionArgument :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression
+applicationExpressionArgument x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationExpression"),
+        Model.projectionFieldName = (Model.Name "argument")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the function field of hydra.haskell.syntax.ApplicationExpression
+applicationExpressionFunction :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression
+applicationExpressionFunction x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationExpression"),
+        Model.projectionFieldName = (Model.Name "function")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the argument field of hydra.haskell.syntax.ApplicationExpression
+applicationExpressionWithArgument :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ApplicationExpression
+applicationExpressionWithArgument original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "function"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationExpression"),
+              Model.projectionFieldName = (Model.Name "function")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the function field of hydra.haskell.syntax.ApplicationExpression
+applicationExpressionWithFunction :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ApplicationExpression
+applicationExpressionWithFunction original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "function"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationExpression"),
+              Model.projectionFieldName = (Model.Name "argument")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.ApplicationPattern
+applicationPattern :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.ApplicationPattern
+applicationPattern name args =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "args"),
+          Model.fieldTerm = (Typed.unTypedTerm args)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.ApplicationPattern
+applicationPatternApplicationPattern :: Typed.TypedName Syntax.ApplicationPattern
+applicationPatternApplicationPattern = Typed.TypedName (Model.Name "hydra.haskell.syntax.ApplicationPattern")
+
+-- | DSL accessor for the args field of hydra.haskell.syntax.ApplicationPattern
+applicationPatternArgs :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm [Syntax.Pattern]
+applicationPatternArgs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationPattern"),
+        Model.projectionFieldName = (Model.Name "args")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.ApplicationPattern
+applicationPatternName :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm Syntax.Name
+applicationPatternName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationPattern"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the args field of hydra.haskell.syntax.ApplicationPattern
+applicationPatternWithArgs :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.ApplicationPattern
+applicationPatternWithArgs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationPattern"),
+      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.haskell.syntax.ApplicationPattern"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "args"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.ApplicationPattern
+applicationPatternWithName :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.ApplicationPattern
+applicationPatternWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "args"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationPattern"),
+              Model.projectionFieldName = (Model.Name "args")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.ApplicationType
+applicationType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ApplicationType
+applicationType context argument =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Typed.unTypedTerm context)},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Typed.unTypedTerm argument)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.ApplicationType
+applicationTypeApplicationType :: Typed.TypedName Syntax.ApplicationType
+applicationTypeApplicationType = Typed.TypedName (Model.Name "hydra.haskell.syntax.ApplicationType")
+
+-- | DSL accessor for the argument field of hydra.haskell.syntax.ApplicationType
+applicationTypeArgument :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type
+applicationTypeArgument x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationType"),
+        Model.projectionFieldName = (Model.Name "argument")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the context field of hydra.haskell.syntax.ApplicationType
+applicationTypeContext :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type
+applicationTypeContext x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationType"),
+        Model.projectionFieldName = (Model.Name "context")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the argument field of hydra.haskell.syntax.ApplicationType
+applicationTypeWithArgument :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ApplicationType
+applicationTypeWithArgument original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationType"),
+              Model.projectionFieldName = (Model.Name "context")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the context field of hydra.haskell.syntax.ApplicationType
+applicationTypeWithContext :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ApplicationType
+applicationTypeWithContext original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ApplicationType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ApplicationType"),
+              Model.projectionFieldName = (Model.Name "argument")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.AsPattern
+asPattern :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.AsPattern
+asPattern name inner =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.AsPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm inner)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.AsPattern
+asPatternAsPattern :: Typed.TypedName Syntax.AsPattern
+asPatternAsPattern = Typed.TypedName (Model.Name "hydra.haskell.syntax.AsPattern")
+
+-- | DSL accessor for the inner field of hydra.haskell.syntax.AsPattern
+asPatternInner :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Pattern
+asPatternInner x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.AsPattern"),
+        Model.projectionFieldName = (Model.Name "inner")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.AsPattern
+asPatternName :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Name
+asPatternName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.AsPattern"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the inner field of hydra.haskell.syntax.AsPattern
+asPatternWithInner :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.AsPattern
+asPatternWithInner original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.AsPattern"),
+      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.haskell.syntax.AsPattern"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.AsPattern
+asPatternWithName :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.AsPattern
+asPatternWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.AsPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.AsPattern"),
+              Model.projectionFieldName = (Model.Name "inner")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.CaseExpression
+caseExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm [Syntax.Alternative] -> Typed.TypedTerm Syntax.CaseExpression
+caseExpression case_ alternatives =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.CaseExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "case"),
+          Model.fieldTerm = (Typed.unTypedTerm case_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternatives"),
+          Model.fieldTerm = (Typed.unTypedTerm alternatives)}]}))
+
+-- | DSL accessor for the alternatives field of hydra.haskell.syntax.CaseExpression
+caseExpressionAlternatives :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm [Syntax.Alternative]
+caseExpressionAlternatives x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.CaseExpression"),
+        Model.projectionFieldName = (Model.Name "alternatives")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the case field of hydra.haskell.syntax.CaseExpression
+caseExpressionCase :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm Syntax.Expression
+caseExpressionCase x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.CaseExpression"),
+        Model.projectionFieldName = (Model.Name "case")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.CaseExpression
+caseExpressionCaseExpression :: Typed.TypedName Syntax.CaseExpression
+caseExpressionCaseExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.CaseExpression")
+
+-- | DSL updater for the alternatives field of hydra.haskell.syntax.CaseExpression
+caseExpressionWithAlternatives :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm [Syntax.Alternative] -> Typed.TypedTerm Syntax.CaseExpression
+caseExpressionWithAlternatives original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.CaseExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "case"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.CaseExpression"),
+              Model.projectionFieldName = (Model.Name "case")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternatives"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the case field of hydra.haskell.syntax.CaseExpression
+caseExpressionWithCase :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.CaseExpression
+caseExpressionWithCase original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.CaseExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "case"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternatives"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.CaseExpression"),
+              Model.projectionFieldName = (Model.Name "alternatives")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.haskell.syntax.CaseRhs wrapper
+caseRhs :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.CaseRhs
+caseRhs x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.haskell.syntax.CaseRhs"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.CaseRhs
+caseRhsCaseRhs :: Typed.TypedName Syntax.CaseRhs
+caseRhsCaseRhs = Typed.TypedName (Model.Name "hydra.haskell.syntax.CaseRhs")
+
+-- | DSL constructor for hydra.haskell.syntax.ClassConstraint
+classConstraint :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.ClassConstraint
+classConstraint name types =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ClassConstraint"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Typed.unTypedTerm types)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.ClassConstraint
+classConstraintClassConstraint :: Typed.TypedName Syntax.ClassConstraint
+classConstraintClassConstraint = Typed.TypedName (Model.Name "hydra.haskell.syntax.ClassConstraint")
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.ClassConstraint
+classConstraintName :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm Syntax.Name
+classConstraintName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ClassConstraint"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the types field of hydra.haskell.syntax.ClassConstraint
+classConstraintTypes :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm [Syntax.Type]
+classConstraintTypes x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ClassConstraint"),
+        Model.projectionFieldName = (Model.Name "types")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.ClassConstraint
+classConstraintWithName :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.ClassConstraint
+classConstraintWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ClassConstraint"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          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.haskell.syntax.ClassConstraint"),
+              Model.projectionFieldName = (Model.Name "types")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the types field of hydra.haskell.syntax.ClassConstraint
+classConstraintWithTypes :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.ClassConstraint
+classConstraintWithTypes original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ClassConstraint"),
+      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.haskell.syntax.ClassConstraint"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "types"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.ConstrainedType
+constrainedType :: Typed.TypedTerm Syntax.Constraint -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ConstrainedType
+constrainedType ctx type_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ConstrainedType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "ctx"),
+          Model.fieldTerm = (Typed.unTypedTerm ctx)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.ConstrainedType
+constrainedTypeConstrainedType :: Typed.TypedName Syntax.ConstrainedType
+constrainedTypeConstrainedType = Typed.TypedName (Model.Name "hydra.haskell.syntax.ConstrainedType")
+
+-- | DSL accessor for the ctx field of hydra.haskell.syntax.ConstrainedType
+constrainedTypeCtx :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Constraint
+constrainedTypeCtx x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ConstrainedType"),
+        Model.projectionFieldName = (Model.Name "ctx")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.haskell.syntax.ConstrainedType
+constrainedTypeType :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Type
+constrainedTypeType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ConstrainedType"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the ctx field of hydra.haskell.syntax.ConstrainedType
+constrainedTypeWithCtx :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Constraint -> Typed.TypedTerm Syntax.ConstrainedType
+constrainedTypeWithCtx original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ConstrainedType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "ctx"),
+          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.haskell.syntax.ConstrainedType"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.haskell.syntax.ConstrainedType
+constrainedTypeWithType :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ConstrainedType
+constrainedTypeWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ConstrainedType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "ctx"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ConstrainedType"),
+              Model.projectionFieldName = (Model.Name "ctx")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the class variant of hydra.haskell.syntax.Constraint
+constraintClass :: Typed.TypedTerm Syntax.ClassConstraint -> Typed.TypedTerm Syntax.Constraint
+constraintClass x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Constraint"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "class"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Constraint
+constraintConstraint :: Typed.TypedName Syntax.Constraint
+constraintConstraint = Typed.TypedName (Model.Name "hydra.haskell.syntax.Constraint")
+
+-- | DSL injection for the tuple variant of hydra.haskell.syntax.Constraint
+constraintTuple :: Typed.TypedTerm [Syntax.Constraint] -> Typed.TypedTerm Syntax.Constraint
+constraintTuple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Constraint"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "tuple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Constructor
+constructorConstructor :: Typed.TypedName Syntax.Constructor
+constructorConstructor = Typed.TypedName (Model.Name "hydra.haskell.syntax.Constructor")
+
+-- | DSL injection for the ordinary variant of hydra.haskell.syntax.Constructor
+constructorOrdinary :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm Syntax.Constructor
+constructorOrdinary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Constructor"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "ordinary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the record variant of hydra.haskell.syntax.Constructor
+constructorRecord :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm Syntax.Constructor
+constructorRecord x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Constructor"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "record"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.haskell.syntax.DataDeclaration
+dataDeclaration :: Typed.TypedTerm Syntax.DataKeyword -> Typed.TypedTerm [Syntax.Constraint] -> Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm [Syntax.Constructor] -> Typed.TypedTerm [Syntax.DerivingClause] -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.DataDeclaration
+dataDeclaration keyword context head constructors deriving_ comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "keyword"),
+          Model.fieldTerm = (Typed.unTypedTerm keyword)},
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Typed.unTypedTerm context)},
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Typed.unTypedTerm head)},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructors"),
+          Model.fieldTerm = (Typed.unTypedTerm constructors)},
+        Model.Field {
+          Model.fieldName = (Model.Name "deriving"),
+          Model.fieldTerm = (Typed.unTypedTerm deriving_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationComments :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm (Maybe String)
+dataDeclarationComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the constructors field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationConstructors :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.Constructor]
+dataDeclarationConstructors x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+        Model.projectionFieldName = (Model.Name "constructors")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the context field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationContext :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.Constraint]
+dataDeclarationContext x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+        Model.projectionFieldName = (Model.Name "context")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.DataDeclaration
+dataDeclarationDataDeclaration :: Typed.TypedName Syntax.DataDeclaration
+dataDeclarationDataDeclaration = Typed.TypedName (Model.Name "hydra.haskell.syntax.DataDeclaration")
+
+-- | DSL accessor for the deriving field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationDeriving :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.DerivingClause]
+dataDeclarationDeriving x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+        Model.projectionFieldName = (Model.Name "deriving")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the head field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationHead :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.DeclarationHead
+dataDeclarationHead x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+        Model.projectionFieldName = (Model.Name "head")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the keyword field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationKeyword :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.DataKeyword
+dataDeclarationKeyword x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+        Model.projectionFieldName = (Model.Name "keyword")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the comments field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationWithComments :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.DataDeclaration
+dataDeclarationWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "keyword"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "keyword")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "context")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "head")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructors"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "constructors")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "deriving"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "deriving")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the constructors field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationWithConstructors :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.Constructor] -> Typed.TypedTerm Syntax.DataDeclaration
+dataDeclarationWithConstructors original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "keyword"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "keyword")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "context")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "head")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructors"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "deriving"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "deriving")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the context field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationWithContext :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.Constraint] -> Typed.TypedTerm Syntax.DataDeclaration
+dataDeclarationWithContext original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "keyword"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "keyword")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "head")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructors"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "constructors")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "deriving"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "deriving")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the deriving field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationWithDeriving :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm [Syntax.DerivingClause] -> Typed.TypedTerm Syntax.DataDeclaration
+dataDeclarationWithDeriving original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "keyword"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "keyword")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "context")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "head")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructors"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "constructors")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "deriving"),
+          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.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the head field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationWithHead :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.DataDeclaration
+dataDeclarationWithHead original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "keyword"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "keyword")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "context")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructors"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "constructors")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "deriving"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "deriving")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the keyword field of hydra.haskell.syntax.DataDeclaration
+dataDeclarationWithKeyword :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.DataKeyword -> Typed.TypedTerm Syntax.DataDeclaration
+dataDeclarationWithKeyword original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "keyword"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "context"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "context")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "head")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constructors"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "constructors")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "deriving"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "deriving")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.DataDeclaration"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the data variant of hydra.haskell.syntax.DataKeyword
+dataKeywordData :: Typed.TypedTerm Syntax.DataKeyword
+dataKeywordData =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.DataKeyword"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "data"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.haskell.syntax.DataKeyword
+dataKeywordDataKeyword :: Typed.TypedName Syntax.DataKeyword
+dataKeywordDataKeyword = Typed.TypedName (Model.Name "hydra.haskell.syntax.DataKeyword")
+
+-- | DSL injection for the newtype variant of hydra.haskell.syntax.DataKeyword
+dataKeywordNewtype :: Typed.TypedTerm Syntax.DataKeyword
+dataKeywordNewtype =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.DataKeyword"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "newtype"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the data variant of hydra.haskell.syntax.Declaration
+declarationData :: Typed.TypedTerm Syntax.DataDeclaration -> Typed.TypedTerm Syntax.Declaration
+declarationData x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Declaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "data"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Declaration
+declarationDeclaration :: Typed.TypedName Syntax.Declaration
+declarationDeclaration = Typed.TypedName (Model.Name "hydra.haskell.syntax.Declaration")
+
+-- | DSL injection for the application variant of hydra.haskell.syntax.DeclarationHead
+declarationHeadApplication :: Typed.TypedTerm Syntax.ApplicationDeclarationHead -> Typed.TypedTerm Syntax.DeclarationHead
+declarationHeadApplication x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.DeclarationHead"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "application"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.DeclarationHead
+declarationHeadDeclarationHead :: Typed.TypedName Syntax.DeclarationHead
+declarationHeadDeclarationHead = Typed.TypedName (Model.Name "hydra.haskell.syntax.DeclarationHead")
+
+-- | DSL injection for the simple variant of hydra.haskell.syntax.DeclarationHead
+declarationHeadSimple :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.DeclarationHead
+declarationHeadSimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.DeclarationHead"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the type variant of hydra.haskell.syntax.Declaration
+declarationType :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.Declaration
+declarationType x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Declaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "type"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the typedBinding variant of hydra.haskell.syntax.Declaration
+declarationTypedBinding :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.Declaration
+declarationTypedBinding x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Declaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typedBinding"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the valueBinding variant of hydra.haskell.syntax.Declaration
+declarationValueBinding :: Typed.TypedTerm Syntax.ValueBinding -> Typed.TypedTerm Syntax.Declaration
+declarationValueBinding x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Declaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "valueBinding"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.haskell.syntax.DerivingClause wrapper
+derivingClause :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.DerivingClause
+derivingClause x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.haskell.syntax.DerivingClause"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.DerivingClause
+derivingClauseDerivingClause :: Typed.TypedName Syntax.DerivingClause
+derivingClauseDerivingClause = Typed.TypedName (Model.Name "hydra.haskell.syntax.DerivingClause")
+
+-- | DSL injection for the declaration variant of hydra.haskell.syntax.Export
+exportDeclaration :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm Syntax.Export
+exportDeclaration x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Export"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "declaration"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Export
+exportExport :: Typed.TypedName Syntax.Export
+exportExport = Typed.TypedName (Model.Name "hydra.haskell.syntax.Export")
+
+-- | DSL injection for the module variant of hydra.haskell.syntax.Export
+exportModule :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.Export
+exportModule x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Export"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "module"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the application variant of hydra.haskell.syntax.Expression
+expressionApplication :: Typed.TypedTerm Syntax.ApplicationExpression -> Typed.TypedTerm Syntax.Expression
+expressionApplication x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "application"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the case variant of hydra.haskell.syntax.Expression
+expressionCase :: Typed.TypedTerm Syntax.CaseExpression -> Typed.TypedTerm Syntax.Expression
+expressionCase x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "case"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the constructRecord variant of hydra.haskell.syntax.Expression
+expressionConstructRecord :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm Syntax.Expression
+expressionConstructRecord x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "constructRecord"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the do variant of hydra.haskell.syntax.Expression
+expressionDo :: Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.Expression
+expressionDo x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "do"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Expression
+expressionExpression :: Typed.TypedName Syntax.Expression
+expressionExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.Expression")
+
+-- | DSL injection for the if variant of hydra.haskell.syntax.Expression
+expressionIf :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression
+expressionIf x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "if"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the infixApplication variant of hydra.haskell.syntax.Expression
+expressionInfixApplication :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression
+expressionInfixApplication x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "infixApplication"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the lambda variant of hydra.haskell.syntax.Expression
+expressionLambda :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.Expression
+expressionLambda x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "lambda"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the leftSection variant of hydra.haskell.syntax.Expression
+expressionLeftSection :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Expression
+expressionLeftSection x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "leftSection"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the let variant of hydra.haskell.syntax.Expression
+expressionLet :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm Syntax.Expression
+expressionLet x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "let"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the list variant of hydra.haskell.syntax.Expression
+expressionList :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Expression
+expressionList x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "list"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the literal variant of hydra.haskell.syntax.Expression
+expressionLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.Expression
+expressionLiteral x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "literal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the rightSection variant of hydra.haskell.syntax.Expression
+expressionRightSection :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Expression
+expressionRightSection x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "rightSection"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the tuple variant of hydra.haskell.syntax.Expression
+expressionTuple :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Expression
+expressionTuple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "tuple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the typeSignature variant of hydra.haskell.syntax.Expression
+expressionTypeSignature :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Expression
+expressionTypeSignature x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typeSignature"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the updateRecord variant of hydra.haskell.syntax.Expression
+expressionUpdateRecord :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm Syntax.Expression
+expressionUpdateRecord x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "updateRecord"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the variable variant of hydra.haskell.syntax.Expression
+expressionVariable :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Expression
+expressionVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.haskell.syntax.Field
+field :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.Field
+field name type_ comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.haskell.syntax.Field
+fieldComments :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm (Maybe String)
+fieldComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.Field
+fieldField :: Typed.TypedName Syntax.Field
+fieldField = Typed.TypedName (Model.Name "hydra.haskell.syntax.Field")
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.Field
+fieldName :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm Syntax.Name
+fieldName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.haskell.syntax.Field
+fieldType :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm Syntax.Type
+fieldType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for hydra.haskell.syntax.FieldUpdate
+fieldUpdate :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FieldUpdate
+fieldUpdate name value =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.FieldUpdate"),
+      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 name token for hydra.haskell.syntax.FieldUpdate
+fieldUpdateFieldUpdate :: Typed.TypedName Syntax.FieldUpdate
+fieldUpdateFieldUpdate = Typed.TypedName (Model.Name "hydra.haskell.syntax.FieldUpdate")
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.FieldUpdate
+fieldUpdateName :: Typed.TypedTerm Syntax.FieldUpdate -> Typed.TypedTerm Syntax.Name
+fieldUpdateName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.FieldUpdate"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the value field of hydra.haskell.syntax.FieldUpdate
+fieldUpdateValue :: Typed.TypedTerm Syntax.FieldUpdate -> Typed.TypedTerm Syntax.Expression
+fieldUpdateValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.FieldUpdate"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.FieldUpdate
+fieldUpdateWithName :: Typed.TypedTerm Syntax.FieldUpdate -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.FieldUpdate
+fieldUpdateWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.FieldUpdate"),
+      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.haskell.syntax.FieldUpdate"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the value field of hydra.haskell.syntax.FieldUpdate
+fieldUpdateWithValue :: Typed.TypedTerm Syntax.FieldUpdate -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FieldUpdate
+fieldUpdateWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.FieldUpdate"),
+      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.haskell.syntax.FieldUpdate"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the comments field of hydra.haskell.syntax.Field
+fieldWithComments :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.Field
+fieldWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+      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.haskell.syntax.Field"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.Field
+fieldWithName :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Field
+fieldWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.haskell.syntax.Field
+fieldWithType :: Typed.TypedTerm Syntax.Field -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Field
+fieldWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+      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.haskell.syntax.Field"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Field"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.FunctionType
+functionType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.FunctionType
+functionType domain codomain =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.FunctionType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "domain"),
+          Model.fieldTerm = (Typed.unTypedTerm domain)},
+        Model.Field {
+          Model.fieldName = (Model.Name "codomain"),
+          Model.fieldTerm = (Typed.unTypedTerm codomain)}]}))
+
+-- | DSL accessor for the codomain field of hydra.haskell.syntax.FunctionType
+functionTypeCodomain :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type
+functionTypeCodomain x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.FunctionType"),
+        Model.projectionFieldName = (Model.Name "codomain")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the domain field of hydra.haskell.syntax.FunctionType
+functionTypeDomain :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type
+functionTypeDomain x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.FunctionType"),
+        Model.projectionFieldName = (Model.Name "domain")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.FunctionType
+functionTypeFunctionType :: Typed.TypedName Syntax.FunctionType
+functionTypeFunctionType = Typed.TypedName (Model.Name "hydra.haskell.syntax.FunctionType")
+
+-- | DSL updater for the codomain field of hydra.haskell.syntax.FunctionType
+functionTypeWithCodomain :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.FunctionType
+functionTypeWithCodomain original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.FunctionType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "domain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.FunctionType"),
+              Model.projectionFieldName = (Model.Name "domain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "codomain"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the domain field of hydra.haskell.syntax.FunctionType
+functionTypeWithDomain :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.FunctionType
+functionTypeWithDomain original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.FunctionType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "domain"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "codomain"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.FunctionType"),
+              Model.projectionFieldName = (Model.Name "codomain")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.IfExpression
+ifExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfExpression
+ifExpression condition then_ else_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "condition"),
+          Model.fieldTerm = (Typed.unTypedTerm condition)},
+        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 condition field of hydra.haskell.syntax.IfExpression
+ifExpressionCondition :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression
+ifExpressionCondition x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+        Model.projectionFieldName = (Model.Name "condition")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the else field of hydra.haskell.syntax.IfExpression
+ifExpressionElse :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression
+ifExpressionElse x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+        Model.projectionFieldName = (Model.Name "else")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.IfExpression
+ifExpressionIfExpression :: Typed.TypedName Syntax.IfExpression
+ifExpressionIfExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.IfExpression")
+
+-- | DSL accessor for the then field of hydra.haskell.syntax.IfExpression
+ifExpressionThen :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression
+ifExpressionThen x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+        Model.projectionFieldName = (Model.Name "then")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the condition field of hydra.haskell.syntax.IfExpression
+ifExpressionWithCondition :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfExpression
+ifExpressionWithCondition original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "condition"),
+          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.haskell.syntax.IfExpression"),
+              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.haskell.syntax.IfExpression"),
+              Model.projectionFieldName = (Model.Name "else")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the else field of hydra.haskell.syntax.IfExpression
+ifExpressionWithElse :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfExpression
+ifExpressionWithElse original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "condition"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+              Model.projectionFieldName = (Model.Name "condition")})),
+            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.haskell.syntax.IfExpression"),
+              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.haskell.syntax.IfExpression
+ifExpressionWithThen :: Typed.TypedTerm Syntax.IfExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfExpression
+ifExpressionWithThen original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "condition"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.IfExpression"),
+              Model.projectionFieldName = (Model.Name "condition")})),
+            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.haskell.syntax.IfExpression"),
+              Model.projectionFieldName = (Model.Name "else")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.Import
+import_ :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm (Maybe Syntax.ModuleName) -> Typed.TypedTerm (Maybe Syntax.ImportSpec) -> Typed.TypedTerm Syntax.Import
+import_ qualified module_ as spec =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualified"),
+          Model.fieldTerm = (Typed.unTypedTerm qualified)},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Typed.unTypedTerm module_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "as"),
+          Model.fieldTerm = (Typed.unTypedTerm as)},
+        Model.Field {
+          Model.fieldName = (Model.Name "spec"),
+          Model.fieldTerm = (Typed.unTypedTerm spec)}]}))
+
+-- | DSL accessor for the as field of hydra.haskell.syntax.Import
+importAs :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm (Maybe Syntax.ModuleName)
+importAs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+        Model.projectionFieldName = (Model.Name "as")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL injection for the all variant of hydra.haskell.syntax.ImportExportSubspec
+importExportSubspecAll :: Typed.TypedTerm Syntax.ImportExportSubspec
+importExportSubspecAll =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.ImportExportSubspec"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "all"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.haskell.syntax.ImportExportSubspec
+importExportSubspecImportExportSubspec :: Typed.TypedName Syntax.ImportExportSubspec
+importExportSubspecImportExportSubspec = Typed.TypedName (Model.Name "hydra.haskell.syntax.ImportExportSubspec")
+
+-- | DSL injection for the list variant of hydra.haskell.syntax.ImportExportSubspec
+importExportSubspecList :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.ImportExportSubspec
+importExportSubspecList x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.ImportExportSubspec"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "list"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Import
+importImport :: Typed.TypedName Syntax.Import
+importImport = Typed.TypedName (Model.Name "hydra.haskell.syntax.Import")
+
+-- | DSL name token for hydra.haskell.syntax.ImportModifier
+importModifierImportModifier :: Typed.TypedName Syntax.ImportModifier
+importModifierImportModifier = Typed.TypedName (Model.Name "hydra.haskell.syntax.ImportModifier")
+
+-- | DSL injection for the pattern variant of hydra.haskell.syntax.ImportModifier
+importModifierPattern :: Typed.TypedTerm Syntax.ImportModifier
+importModifierPattern =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.ImportModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "pattern"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the type variant of hydra.haskell.syntax.ImportModifier
+importModifierType :: Typed.TypedTerm Syntax.ImportModifier
+importModifierType =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.ImportModifier"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "type"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL accessor for the module field of hydra.haskell.syntax.Import
+importModule :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm Syntax.ModuleName
+importModule x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+        Model.projectionFieldName = (Model.Name "module")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the qualified field of hydra.haskell.syntax.Import
+importQualified :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm Bool
+importQualified x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+        Model.projectionFieldName = (Model.Name "qualified")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the spec field of hydra.haskell.syntax.Import
+importSpec :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm (Maybe Syntax.ImportSpec)
+importSpec x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+        Model.projectionFieldName = (Model.Name "spec")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL injection for the hiding variant of hydra.haskell.syntax.ImportSpec
+importSpecHiding :: Typed.TypedTerm [Syntax.NamedImportExport] -> Typed.TypedTerm Syntax.ImportSpec
+importSpecHiding x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.ImportSpec"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "hiding"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.ImportSpec
+importSpecImportSpec :: Typed.TypedName Syntax.ImportSpec
+importSpecImportSpec = Typed.TypedName (Model.Name "hydra.haskell.syntax.ImportSpec")
+
+-- | DSL injection for the list variant of hydra.haskell.syntax.ImportSpec
+importSpecList :: Typed.TypedTerm [Syntax.NamedImportExport] -> Typed.TypedTerm Syntax.ImportSpec
+importSpecList x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.ImportSpec"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "list"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL updater for the as field of hydra.haskell.syntax.Import
+importWithAs :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm (Maybe Syntax.ModuleName) -> Typed.TypedTerm Syntax.Import
+importWithAs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualified"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "qualified")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "module")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "as"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "spec"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "spec")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the module field of hydra.haskell.syntax.Import
+importWithModule :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.Import
+importWithModule original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualified"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "qualified")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "as"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "as")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "spec"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "spec")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the qualified field of hydra.haskell.syntax.Import
+importWithQualified :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Import
+importWithQualified original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualified"),
+          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.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "module")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "as"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "as")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "spec"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "spec")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the spec field of hydra.haskell.syntax.Import
+importWithSpec :: Typed.TypedTerm Syntax.Import -> Typed.TypedTerm (Maybe Syntax.ImportSpec) -> Typed.TypedTerm Syntax.Import
+importWithSpec original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualified"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "qualified")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "module"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "module")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "as"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Import"),
+              Model.projectionFieldName = (Model.Name "as")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "spec"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.InfixExpression
+infixExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.InfixExpression
+infixExpression lhs operator rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm operator)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.InfixExpression
+infixExpressionInfixExpression :: Typed.TypedName Syntax.InfixExpression
+infixExpressionInfixExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.InfixExpression")
+
+-- | DSL accessor for the lhs field of hydra.haskell.syntax.InfixExpression
+infixExpressionLhs :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression
+infixExpressionLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the operator field of hydra.haskell.syntax.InfixExpression
+infixExpressionOperator :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Operator
+infixExpressionOperator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+        Model.projectionFieldName = (Model.Name "operator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the rhs field of hydra.haskell.syntax.InfixExpression
+infixExpressionRhs :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression
+infixExpressionRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.haskell.syntax.InfixExpression
+infixExpressionWithLhs :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.InfixExpression
+infixExpressionWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the operator field of hydra.haskell.syntax.InfixExpression
+infixExpressionWithOperator :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.InfixExpression
+infixExpressionWithOperator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+      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.haskell.syntax.InfixExpression"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          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.haskell.syntax.InfixExpression"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.haskell.syntax.InfixExpression
+infixExpressionWithRhs :: Typed.TypedTerm Syntax.InfixExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.InfixExpression
+infixExpressionWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+      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.haskell.syntax.InfixExpression"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.InfixType
+infixType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.InfixType
+infixType lhs operator rhs =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm lhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm operator)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.InfixType
+infixTypeInfixType :: Typed.TypedName Syntax.InfixType
+infixTypeInfixType = Typed.TypedName (Model.Name "hydra.haskell.syntax.InfixType")
+
+-- | DSL accessor for the lhs field of hydra.haskell.syntax.InfixType
+infixTypeLhs :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type
+infixTypeLhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+        Model.projectionFieldName = (Model.Name "lhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the operator field of hydra.haskell.syntax.InfixType
+infixTypeOperator :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Operator
+infixTypeOperator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+        Model.projectionFieldName = (Model.Name "operator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the rhs field of hydra.haskell.syntax.InfixType
+infixTypeRhs :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type
+infixTypeRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the lhs field of hydra.haskell.syntax.InfixType
+infixTypeWithLhs :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.InfixType
+infixTypeWithLhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "lhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the operator field of hydra.haskell.syntax.InfixType
+infixTypeWithOperator :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.InfixType
+infixTypeWithOperator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+      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.haskell.syntax.InfixType"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          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.haskell.syntax.InfixType"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.haskell.syntax.InfixType
+infixTypeWithRhs :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.InfixType
+infixTypeWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+      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.haskell.syntax.InfixType"),
+              Model.projectionFieldName = (Model.Name "lhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.InfixType"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.LambdaExpression
+lambdaExpression :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LambdaExpression
+lambdaExpression bindings inner =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.LambdaExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "bindings"),
+          Model.fieldTerm = (Typed.unTypedTerm bindings)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm inner)}]}))
+
+-- | DSL accessor for the bindings field of hydra.haskell.syntax.LambdaExpression
+lambdaExpressionBindings :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm [Syntax.Pattern]
+lambdaExpressionBindings x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.LambdaExpression"),
+        Model.projectionFieldName = (Model.Name "bindings")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the inner field of hydra.haskell.syntax.LambdaExpression
+lambdaExpressionInner :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.Expression
+lambdaExpressionInner x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.LambdaExpression"),
+        Model.projectionFieldName = (Model.Name "inner")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.LambdaExpression
+lambdaExpressionLambdaExpression :: Typed.TypedName Syntax.LambdaExpression
+lambdaExpressionLambdaExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.LambdaExpression")
+
+-- | DSL updater for the bindings field of hydra.haskell.syntax.LambdaExpression
+lambdaExpressionWithBindings :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.LambdaExpression
+lambdaExpressionWithBindings original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.LambdaExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "bindings"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.LambdaExpression"),
+              Model.projectionFieldName = (Model.Name "inner")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the inner field of hydra.haskell.syntax.LambdaExpression
+lambdaExpressionWithInner :: Typed.TypedTerm Syntax.LambdaExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LambdaExpression
+lambdaExpressionWithInner original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.LambdaExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "bindings"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.LambdaExpression"),
+              Model.projectionFieldName = (Model.Name "bindings")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.LetExpression
+letExpression :: Typed.TypedTerm [Syntax.LocalBinding] -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LetExpression
+letExpression bindings inner =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.LetExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "bindings"),
+          Model.fieldTerm = (Typed.unTypedTerm bindings)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm inner)}]}))
+
+-- | DSL accessor for the bindings field of hydra.haskell.syntax.LetExpression
+letExpressionBindings :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm [Syntax.LocalBinding]
+letExpressionBindings x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.LetExpression"),
+        Model.projectionFieldName = (Model.Name "bindings")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the inner field of hydra.haskell.syntax.LetExpression
+letExpressionInner :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm Syntax.Expression
+letExpressionInner x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.LetExpression"),
+        Model.projectionFieldName = (Model.Name "inner")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.LetExpression
+letExpressionLetExpression :: Typed.TypedName Syntax.LetExpression
+letExpressionLetExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.LetExpression")
+
+-- | DSL updater for the bindings field of hydra.haskell.syntax.LetExpression
+letExpressionWithBindings :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm [Syntax.LocalBinding] -> Typed.TypedTerm Syntax.LetExpression
+letExpressionWithBindings original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.LetExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "bindings"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.LetExpression"),
+              Model.projectionFieldName = (Model.Name "inner")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the inner field of hydra.haskell.syntax.LetExpression
+letExpressionWithInner :: Typed.TypedTerm Syntax.LetExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.LetExpression
+letExpressionWithInner original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.LetExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "bindings"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.LetExpression"),
+              Model.projectionFieldName = (Model.Name "bindings")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the char variant of hydra.haskell.syntax.Literal
+literalChar :: Typed.TypedTerm Int -> Typed.TypedTerm Syntax.Literal
+literalChar x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "char"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the double variant of hydra.haskell.syntax.Literal
+literalDouble :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.Literal
+literalDouble x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "double"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the float variant of hydra.haskell.syntax.Literal
+literalFloat :: Typed.TypedTerm Float -> Typed.TypedTerm Syntax.Literal
+literalFloat x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "float"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the int variant of hydra.haskell.syntax.Literal
+literalInt :: Typed.TypedTerm Int -> Typed.TypedTerm Syntax.Literal
+literalInt x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "int"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the integer variant of hydra.haskell.syntax.Literal
+literalInteger :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.Literal
+literalInteger x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "integer"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Literal
+literalLiteral :: Typed.TypedName Syntax.Literal
+literalLiteral = Typed.TypedName (Model.Name "hydra.haskell.syntax.Literal")
+
+-- | DSL injection for the string variant of hydra.haskell.syntax.Literal
+literalString :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Literal
+literalString x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "string"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.LocalBinding
+localBindingLocalBinding :: Typed.TypedName Syntax.LocalBinding
+localBindingLocalBinding = Typed.TypedName (Model.Name "hydra.haskell.syntax.LocalBinding")
+
+-- | DSL injection for the signature variant of hydra.haskell.syntax.LocalBinding
+localBindingSignature :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.LocalBinding
+localBindingSignature x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.LocalBinding"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "signature"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the value variant of hydra.haskell.syntax.LocalBinding
+localBindingValue :: Typed.TypedTerm Syntax.ValueBinding -> Typed.TypedTerm Syntax.LocalBinding
+localBindingValue x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.LocalBinding"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "value"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.haskell.syntax.LocalBindings wrapper
+localBindings :: Typed.TypedTerm [Syntax.LocalBinding] -> Typed.TypedTerm Syntax.LocalBindings
+localBindings x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.haskell.syntax.LocalBindings"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.LocalBindings
+localBindingsLocalBindings :: Typed.TypedName Syntax.LocalBindings
+localBindingsLocalBindings = Typed.TypedName (Model.Name "hydra.haskell.syntax.LocalBindings")
+
+-- | DSL constructor for hydra.haskell.syntax.Module
+module_ :: Typed.TypedTerm (Maybe Syntax.ModuleHead) -> Typed.TypedTerm [Syntax.Import] -> Typed.TypedTerm [Syntax.Declaration] -> Typed.TypedTerm Syntax.Module
+module_ head imports declarations =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Typed.unTypedTerm head)},
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Typed.unTypedTerm imports)},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarations"),
+          Model.fieldTerm = (Typed.unTypedTerm declarations)}]}))
+
+-- | DSL accessor for the declarations field of hydra.haskell.syntax.Module
+moduleDeclarations :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.Declaration]
+moduleDeclarations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+        Model.projectionFieldName = (Model.Name "declarations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the head field of hydra.haskell.syntax.Module
+moduleHead :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm (Maybe Syntax.ModuleHead)
+moduleHead x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+        Model.projectionFieldName = (Model.Name "head")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for hydra.haskell.syntax.ModuleHead
+moduleHead2 :: Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm [Syntax.Export] -> Typed.TypedTerm Syntax.ModuleHead
+moduleHead2 comments name exports =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "exports"),
+          Model.fieldTerm = (Typed.unTypedTerm exports)}]}))
+
+-- | DSL accessor for the comments field of hydra.haskell.syntax.ModuleHead
+moduleHeadComments :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm (Maybe String)
+moduleHeadComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the exports field of hydra.haskell.syntax.ModuleHead
+moduleHeadExports :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm [Syntax.Export]
+moduleHeadExports x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+        Model.projectionFieldName = (Model.Name "exports")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.ModuleHead
+moduleHeadModuleHead :: Typed.TypedName Syntax.ModuleHead
+moduleHeadModuleHead = Typed.TypedName (Model.Name "hydra.haskell.syntax.ModuleHead")
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.ModuleHead
+moduleHeadName :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm Syntax.ModuleName
+moduleHeadName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the comments field of hydra.haskell.syntax.ModuleHead
+moduleHeadWithComments :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.ModuleHead
+moduleHeadWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          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.haskell.syntax.ModuleHead"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "exports"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+              Model.projectionFieldName = (Model.Name "exports")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the exports field of hydra.haskell.syntax.ModuleHead
+moduleHeadWithExports :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm [Syntax.Export] -> Typed.TypedTerm Syntax.ModuleHead
+moduleHeadWithExports original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            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.haskell.syntax.ModuleHead"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "exports"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.ModuleHead
+moduleHeadWithName :: Typed.TypedTerm Syntax.ModuleHead -> Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm Syntax.ModuleHead
+moduleHeadWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "exports"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.ModuleHead"),
+              Model.projectionFieldName = (Model.Name "exports")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL accessor for the imports field of hydra.haskell.syntax.Module
+moduleImports :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.Import]
+moduleImports x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+        Model.projectionFieldName = (Model.Name "imports")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.Module
+moduleModule :: Typed.TypedName Syntax.Module
+moduleModule = Typed.TypedName (Model.Name "hydra.haskell.syntax.Module")
+
+-- | DSL constructor for the hydra.haskell.syntax.ModuleName wrapper
+moduleName :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.ModuleName
+moduleName x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.haskell.syntax.ModuleName"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.ModuleName
+moduleNameModuleName :: Typed.TypedName Syntax.ModuleName
+moduleNameModuleName = Typed.TypedName (Model.Name "hydra.haskell.syntax.ModuleName")
+
+-- | DSL updater for the declarations field of hydra.haskell.syntax.Module
+moduleWithDeclarations :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.Declaration] -> Typed.TypedTerm Syntax.Module
+moduleWithDeclarations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+              Model.projectionFieldName = (Model.Name "head")})),
+            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.haskell.syntax.Module"),
+              Model.projectionFieldName = (Model.Name "imports")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the head field of hydra.haskell.syntax.Module
+moduleWithHead :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm (Maybe Syntax.ModuleHead) -> Typed.TypedTerm Syntax.Module
+moduleWithHead original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          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.haskell.syntax.Module"),
+              Model.projectionFieldName = (Model.Name "imports")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+              Model.projectionFieldName = (Model.Name "declarations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the imports field of hydra.haskell.syntax.Module
+moduleWithImports :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.Import] -> Typed.TypedTerm Syntax.Module
+moduleWithImports original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "head"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+              Model.projectionFieldName = (Model.Name "head")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "imports"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.Module"),
+              Model.projectionFieldName = (Model.Name "declarations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the implicit variant of hydra.haskell.syntax.Name
+nameImplicit :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.Name
+nameImplicit x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Name"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "implicit"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Name
+nameName :: Typed.TypedName Syntax.Name
+nameName = Typed.TypedName (Model.Name "hydra.haskell.syntax.Name")
+
+-- | DSL injection for the normal variant of hydra.haskell.syntax.Name
+nameNormal :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.Name
+nameNormal x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Name"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "normal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.haskell.syntax.NamePart wrapper
+namePart :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.NamePart
+namePart x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.haskell.syntax.NamePart"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.NamePart
+namePartNamePart :: Typed.TypedName Syntax.NamePart
+namePartNamePart = Typed.TypedName (Model.Name "hydra.haskell.syntax.NamePart")
+
+-- | DSL constructor for hydra.haskell.syntax.NamedImportExport
+namedImportExport :: Typed.TypedTerm (Maybe Syntax.ImportModifier) -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.ImportExportSubspec) -> Typed.TypedTerm Syntax.NamedImportExport
+namedImportExport modifier name subspec =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifier"),
+          Model.fieldTerm = (Typed.unTypedTerm modifier)},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "subspec"),
+          Model.fieldTerm = (Typed.unTypedTerm subspec)}]}))
+
+-- | DSL accessor for the modifier field of hydra.haskell.syntax.NamedImportExport
+namedImportExportModifier :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm (Maybe Syntax.ImportModifier)
+namedImportExportModifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+        Model.projectionFieldName = (Model.Name "modifier")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.NamedImportExport
+namedImportExportName :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm Syntax.Name
+namedImportExportName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.NamedImportExport
+namedImportExportNamedImportExport :: Typed.TypedName Syntax.NamedImportExport
+namedImportExportNamedImportExport = Typed.TypedName (Model.Name "hydra.haskell.syntax.NamedImportExport")
+
+-- | DSL accessor for the subspec field of hydra.haskell.syntax.NamedImportExport
+namedImportExportSubspec :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm (Maybe Syntax.ImportExportSubspec)
+namedImportExportSubspec x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+        Model.projectionFieldName = (Model.Name "subspec")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the modifier field of hydra.haskell.syntax.NamedImportExport
+namedImportExportWithModifier :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm (Maybe Syntax.ImportModifier) -> Typed.TypedTerm Syntax.NamedImportExport
+namedImportExportWithModifier original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifier"),
+          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.haskell.syntax.NamedImportExport"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "subspec"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+              Model.projectionFieldName = (Model.Name "subspec")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.NamedImportExport
+namedImportExportWithName :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.NamedImportExport
+namedImportExportWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+              Model.projectionFieldName = (Model.Name "modifier")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "subspec"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+              Model.projectionFieldName = (Model.Name "subspec")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the subspec field of hydra.haskell.syntax.NamedImportExport
+namedImportExportWithSubspec :: Typed.TypedTerm Syntax.NamedImportExport -> Typed.TypedTerm (Maybe Syntax.ImportExportSubspec) -> Typed.TypedTerm Syntax.NamedImportExport
+namedImportExportWithSubspec original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "modifier"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.NamedImportExport"),
+              Model.projectionFieldName = (Model.Name "modifier")})),
+            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.haskell.syntax.NamedImportExport"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "subspec"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the backtick variant of hydra.haskell.syntax.Operator
+operatorBacktick :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.Operator
+operatorBacktick x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Operator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "backtick"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the normal variant of hydra.haskell.syntax.Operator
+operatorNormal :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.Operator
+operatorNormal x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Operator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "normal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Operator
+operatorOperator :: Typed.TypedName Syntax.Operator
+operatorOperator = Typed.TypedName (Model.Name "hydra.haskell.syntax.Operator")
+
+-- | DSL injection for the application variant of hydra.haskell.syntax.Pattern
+patternApplication :: Typed.TypedTerm Syntax.ApplicationPattern -> Typed.TypedTerm Syntax.Pattern
+patternApplication x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "application"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the as variant of hydra.haskell.syntax.Pattern
+patternAs :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Pattern
+patternAs x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "as"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.haskell.syntax.PatternField
+patternField :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.PatternField
+patternField name pattern =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.PatternField"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Typed.unTypedTerm pattern)}]}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.PatternField
+patternFieldName :: Typed.TypedTerm Syntax.PatternField -> Typed.TypedTerm Syntax.Name
+patternFieldName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PatternField"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the pattern field of hydra.haskell.syntax.PatternField
+patternFieldPattern :: Typed.TypedTerm Syntax.PatternField -> Typed.TypedTerm Syntax.Pattern
+patternFieldPattern x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PatternField"),
+        Model.projectionFieldName = (Model.Name "pattern")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.PatternField
+patternFieldPatternField :: Typed.TypedName Syntax.PatternField
+patternFieldPatternField = Typed.TypedName (Model.Name "hydra.haskell.syntax.PatternField")
+
+-- | DSL updater for the name field of hydra.haskell.syntax.PatternField
+patternFieldWithName :: Typed.TypedTerm Syntax.PatternField -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.PatternField
+patternFieldWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.PatternField"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PatternField"),
+              Model.projectionFieldName = (Model.Name "pattern")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the pattern field of hydra.haskell.syntax.PatternField
+patternFieldWithPattern :: Typed.TypedTerm Syntax.PatternField -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.PatternField
+patternFieldWithPattern original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.PatternField"),
+      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.haskell.syntax.PatternField"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the list variant of hydra.haskell.syntax.Pattern
+patternList :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.Pattern
+patternList x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "list"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the literal variant of hydra.haskell.syntax.Pattern
+patternLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.Pattern
+patternLiteral x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "literal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the name variant of hydra.haskell.syntax.Pattern
+patternName :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Pattern
+patternName x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "name"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Pattern
+patternPattern :: Typed.TypedName Syntax.Pattern
+patternPattern = Typed.TypedName (Model.Name "hydra.haskell.syntax.Pattern")
+
+-- | DSL injection for the record variant of hydra.haskell.syntax.Pattern
+patternRecord :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.Pattern
+patternRecord x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "record"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the tuple variant of hydra.haskell.syntax.Pattern
+patternTuple :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.Pattern
+patternTuple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "tuple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the typed variant of hydra.haskell.syntax.Pattern
+patternTyped :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern
+patternTyped x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typed"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the wildcard variant of hydra.haskell.syntax.Pattern
+patternWildcard :: Typed.TypedTerm Syntax.Pattern
+patternWildcard =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "wildcard"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for hydra.haskell.syntax.PositionalConstructor
+positionalConstructor :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.PositionalConstructor
+positionalConstructor name fields comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Typed.unTypedTerm fields)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.haskell.syntax.PositionalConstructor
+positionalConstructorComments :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm (Maybe String)
+positionalConstructorComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the fields field of hydra.haskell.syntax.PositionalConstructor
+positionalConstructorFields :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm [Syntax.Type]
+positionalConstructorFields x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+        Model.projectionFieldName = (Model.Name "fields")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.PositionalConstructor
+positionalConstructorName :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm Syntax.Name
+positionalConstructorName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.PositionalConstructor
+positionalConstructorPositionalConstructor :: Typed.TypedName Syntax.PositionalConstructor
+positionalConstructorPositionalConstructor = Typed.TypedName (Model.Name "hydra.haskell.syntax.PositionalConstructor")
+
+-- | DSL updater for the comments field of hydra.haskell.syntax.PositionalConstructor
+positionalConstructorWithComments :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.PositionalConstructor
+positionalConstructorWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+      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.haskell.syntax.PositionalConstructor"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+              Model.projectionFieldName = (Model.Name "fields")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the fields field of hydra.haskell.syntax.PositionalConstructor
+positionalConstructorWithFields :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.PositionalConstructor
+positionalConstructorWithFields original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+      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.haskell.syntax.PositionalConstructor"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          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.haskell.syntax.PositionalConstructor"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.PositionalConstructor
+positionalConstructorWithName :: Typed.TypedTerm Syntax.PositionalConstructor -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.PositionalConstructor
+positionalConstructorWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+              Model.projectionFieldName = (Model.Name "fields")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.PositionalConstructor"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.QualifiedName
+qualifiedName :: Typed.TypedTerm [Syntax.NamePart] -> Typed.TypedTerm Syntax.NamePart -> Typed.TypedTerm Syntax.QualifiedName
+qualifiedName qualifiers unqualified =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.QualifiedName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm qualifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "unqualified"),
+          Model.fieldTerm = (Typed.unTypedTerm unqualified)}]}))
+
+-- | DSL name token for hydra.haskell.syntax.QualifiedName
+qualifiedNameQualifiedName :: Typed.TypedName Syntax.QualifiedName
+qualifiedNameQualifiedName = Typed.TypedName (Model.Name "hydra.haskell.syntax.QualifiedName")
+
+-- | DSL accessor for the qualifiers field of hydra.haskell.syntax.QualifiedName
+qualifiedNameQualifiers :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm [Syntax.NamePart]
+qualifiedNameQualifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.QualifiedName"),
+        Model.projectionFieldName = (Model.Name "qualifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the unqualified field of hydra.haskell.syntax.QualifiedName
+qualifiedNameUnqualified :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.NamePart
+qualifiedNameUnqualified x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.QualifiedName"),
+        Model.projectionFieldName = (Model.Name "unqualified")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the qualifiers field of hydra.haskell.syntax.QualifiedName
+qualifiedNameWithQualifiers :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm [Syntax.NamePart] -> Typed.TypedTerm Syntax.QualifiedName
+qualifiedNameWithQualifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.QualifiedName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "unqualified"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.QualifiedName"),
+              Model.projectionFieldName = (Model.Name "unqualified")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the unqualified field of hydra.haskell.syntax.QualifiedName
+qualifiedNameWithUnqualified :: Typed.TypedTerm Syntax.QualifiedName -> Typed.TypedTerm Syntax.NamePart -> Typed.TypedTerm Syntax.QualifiedName
+qualifiedNameWithUnqualified original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.QualifiedName"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "qualifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.QualifiedName"),
+              Model.projectionFieldName = (Model.Name "qualifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "unqualified"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.RecordConstructor
+recordConstructor :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.Field] -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.RecordConstructor
+recordConstructor name fields comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Typed.unTypedTerm fields)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.haskell.syntax.RecordConstructor
+recordConstructorComments :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm (Maybe String)
+recordConstructorComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the fields field of hydra.haskell.syntax.RecordConstructor
+recordConstructorFields :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm [Syntax.Field]
+recordConstructorFields x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+        Model.projectionFieldName = (Model.Name "fields")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.RecordConstructor
+recordConstructorName :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm Syntax.Name
+recordConstructorName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.RecordConstructor
+recordConstructorRecordConstructor :: Typed.TypedName Syntax.RecordConstructor
+recordConstructorRecordConstructor = Typed.TypedName (Model.Name "hydra.haskell.syntax.RecordConstructor")
+
+-- | DSL updater for the comments field of hydra.haskell.syntax.RecordConstructor
+recordConstructorWithComments :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.RecordConstructor
+recordConstructorWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+      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.haskell.syntax.RecordConstructor"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+              Model.projectionFieldName = (Model.Name "fields")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the fields field of hydra.haskell.syntax.RecordConstructor
+recordConstructorWithFields :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm [Syntax.Field] -> Typed.TypedTerm Syntax.RecordConstructor
+recordConstructorWithFields original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+      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.haskell.syntax.RecordConstructor"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          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.haskell.syntax.RecordConstructor"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.RecordConstructor
+recordConstructorWithName :: Typed.TypedTerm Syntax.RecordConstructor -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.RecordConstructor
+recordConstructorWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+              Model.projectionFieldName = (Model.Name "fields")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordConstructor"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.RecordExpression
+recordExpression :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.FieldUpdate] -> Typed.TypedTerm Syntax.RecordExpression
+recordExpression name fields =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Typed.unTypedTerm fields)}]}))
+
+-- | DSL accessor for the fields field of hydra.haskell.syntax.RecordExpression
+recordExpressionFields :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm [Syntax.FieldUpdate]
+recordExpressionFields x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordExpression"),
+        Model.projectionFieldName = (Model.Name "fields")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.RecordExpression
+recordExpressionName :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm Syntax.Name
+recordExpressionName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordExpression"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.RecordExpression
+recordExpressionRecordExpression :: Typed.TypedName Syntax.RecordExpression
+recordExpressionRecordExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.RecordExpression")
+
+-- | DSL updater for the fields field of hydra.haskell.syntax.RecordExpression
+recordExpressionWithFields :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm [Syntax.FieldUpdate] -> Typed.TypedTerm Syntax.RecordExpression
+recordExpressionWithFields original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordExpression"),
+      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.haskell.syntax.RecordExpression"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.RecordExpression
+recordExpressionWithName :: Typed.TypedTerm Syntax.RecordExpression -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.RecordExpression
+recordExpressionWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordExpression"),
+              Model.projectionFieldName = (Model.Name "fields")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.RecordPattern
+recordPattern :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.PatternField] -> Typed.TypedTerm Syntax.RecordPattern
+recordPattern name fields =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Typed.unTypedTerm fields)}]}))
+
+-- | DSL accessor for the fields field of hydra.haskell.syntax.RecordPattern
+recordPatternFields :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm [Syntax.PatternField]
+recordPatternFields x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordPattern"),
+        Model.projectionFieldName = (Model.Name "fields")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.RecordPattern
+recordPatternName :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.Name
+recordPatternName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordPattern"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.RecordPattern
+recordPatternRecordPattern :: Typed.TypedName Syntax.RecordPattern
+recordPatternRecordPattern = Typed.TypedName (Model.Name "hydra.haskell.syntax.RecordPattern")
+
+-- | DSL updater for the fields field of hydra.haskell.syntax.RecordPattern
+recordPatternWithFields :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm [Syntax.PatternField] -> Typed.TypedTerm Syntax.RecordPattern
+recordPatternWithFields original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordPattern"),
+      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.haskell.syntax.RecordPattern"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.RecordPattern
+recordPatternWithName :: Typed.TypedTerm Syntax.RecordPattern -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.RecordPattern
+recordPatternWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordPattern"),
+              Model.projectionFieldName = (Model.Name "fields")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.RecordUpdateExpression
+recordUpdateExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm [Syntax.FieldUpdate] -> Typed.TypedTerm Syntax.RecordUpdateExpression
+recordUpdateExpression inner fields =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordUpdateExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm inner)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Typed.unTypedTerm fields)}]}))
+
+-- | DSL accessor for the fields field of hydra.haskell.syntax.RecordUpdateExpression
+recordUpdateExpressionFields :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm [Syntax.FieldUpdate]
+recordUpdateExpressionFields x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordUpdateExpression"),
+        Model.projectionFieldName = (Model.Name "fields")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the inner field of hydra.haskell.syntax.RecordUpdateExpression
+recordUpdateExpressionInner :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm Syntax.Expression
+recordUpdateExpressionInner x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordUpdateExpression"),
+        Model.projectionFieldName = (Model.Name "inner")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.RecordUpdateExpression
+recordUpdateExpressionRecordUpdateExpression :: Typed.TypedName Syntax.RecordUpdateExpression
+recordUpdateExpressionRecordUpdateExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.RecordUpdateExpression")
+
+-- | DSL updater for the fields field of hydra.haskell.syntax.RecordUpdateExpression
+recordUpdateExpressionWithFields :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm [Syntax.FieldUpdate] -> Typed.TypedTerm Syntax.RecordUpdateExpression
+recordUpdateExpressionWithFields original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordUpdateExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordUpdateExpression"),
+              Model.projectionFieldName = (Model.Name "inner")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the inner field of hydra.haskell.syntax.RecordUpdateExpression
+recordUpdateExpressionWithInner :: Typed.TypedTerm Syntax.RecordUpdateExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.RecordUpdateExpression
+recordUpdateExpressionWithInner original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.RecordUpdateExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "fields"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.RecordUpdateExpression"),
+              Model.projectionFieldName = (Model.Name "fields")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.haskell.syntax.RightHandSide wrapper
+rightHandSide :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.RightHandSide
+rightHandSide x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.haskell.syntax.RightHandSide"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.RightHandSide
+rightHandSideRightHandSide :: Typed.TypedName Syntax.RightHandSide
+rightHandSideRightHandSide = Typed.TypedName (Model.Name "hydra.haskell.syntax.RightHandSide")
+
+-- | DSL constructor for hydra.haskell.syntax.SectionExpression
+sectionExpression :: Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SectionExpression
+sectionExpression operator expression =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.SectionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm operator)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)}]}))
+
+-- | DSL accessor for the expression field of hydra.haskell.syntax.SectionExpression
+sectionExpressionExpression :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Expression
+sectionExpressionExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SectionExpression"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the operator field of hydra.haskell.syntax.SectionExpression
+sectionExpressionOperator :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Operator
+sectionExpressionOperator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SectionExpression"),
+        Model.projectionFieldName = (Model.Name "operator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.SectionExpression
+sectionExpressionSectionExpression :: Typed.TypedName Syntax.SectionExpression
+sectionExpressionSectionExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.SectionExpression")
+
+-- | DSL updater for the expression field of hydra.haskell.syntax.SectionExpression
+sectionExpressionWithExpression :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SectionExpression
+sectionExpressionWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.SectionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SectionExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the operator field of hydra.haskell.syntax.SectionExpression
+sectionExpressionWithOperator :: Typed.TypedTerm Syntax.SectionExpression -> Typed.TypedTerm Syntax.Operator -> Typed.TypedTerm Syntax.SectionExpression
+sectionExpressionWithOperator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.SectionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          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.haskell.syntax.SectionExpression"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.SimpleValueBinding
+simpleValueBinding :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.RightHandSide -> Typed.TypedTerm (Maybe Syntax.LocalBindings) -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.SimpleValueBinding
+simpleValueBinding pattern rhs localBindings comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Typed.unTypedTerm pattern)},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm rhs)},
+        Model.Field {
+          Model.fieldName = (Model.Name "localBindings"),
+          Model.fieldTerm = (Typed.unTypedTerm localBindings)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingComments :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm (Maybe String)
+simpleValueBindingComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the localBindings field of hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingLocalBindings :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm (Maybe Syntax.LocalBindings)
+simpleValueBindingLocalBindings x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+        Model.projectionFieldName = (Model.Name "localBindings")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the pattern field of hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingPattern :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.Pattern
+simpleValueBindingPattern x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+        Model.projectionFieldName = (Model.Name "pattern")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the rhs field of hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingRhs :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.RightHandSide
+simpleValueBindingRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+        Model.projectionFieldName = (Model.Name "rhs")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingSimpleValueBinding :: Typed.TypedName Syntax.SimpleValueBinding
+simpleValueBindingSimpleValueBinding = Typed.TypedName (Model.Name "hydra.haskell.syntax.SimpleValueBinding")
+
+-- | DSL updater for the comments field of hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingWithComments :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.SimpleValueBinding
+simpleValueBindingWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+      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.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "pattern")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "localBindings"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "localBindings")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the localBindings field of hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingWithLocalBindings :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm (Maybe Syntax.LocalBindings) -> Typed.TypedTerm Syntax.SimpleValueBinding
+simpleValueBindingWithLocalBindings original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+      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.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "pattern")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "localBindings"),
+          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.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the pattern field of hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingWithPattern :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.SimpleValueBinding
+simpleValueBindingWithPattern original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          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.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "rhs")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "localBindings"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "localBindings")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the rhs field of hydra.haskell.syntax.SimpleValueBinding
+simpleValueBindingWithRhs :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.RightHandSide -> Typed.TypedTerm Syntax.SimpleValueBinding
+simpleValueBindingWithRhs original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+      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.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "pattern")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "rhs"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "localBindings"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "localBindings")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.SimpleValueBinding"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.haskell.syntax.Statement wrapper
+statement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement
+statement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.haskell.syntax.Statement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.Statement
+statementStatement :: Typed.TypedName Syntax.Statement
+statementStatement = Typed.TypedName (Model.Name "hydra.haskell.syntax.Statement")
+
+-- | DSL injection for the application variant of hydra.haskell.syntax.Type
+typeApplication :: Typed.TypedTerm Syntax.ApplicationType -> Typed.TypedTerm Syntax.Type
+typeApplication x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "application"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the ctx variant of hydra.haskell.syntax.Type
+typeCtx :: Typed.TypedTerm Syntax.ConstrainedType -> Typed.TypedTerm Syntax.Type
+typeCtx x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "ctx"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the function variant of hydra.haskell.syntax.Type
+typeFunction :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Type
+typeFunction x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "function"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the infix variant of hydra.haskell.syntax.Type
+typeInfix :: Typed.TypedTerm Syntax.InfixType -> Typed.TypedTerm Syntax.Type
+typeInfix x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "infix"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the list variant of hydra.haskell.syntax.Type
+typeList :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Type
+typeList x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "list"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.haskell.syntax.TypeSignature
+typeSignature :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeSignature
+typeSignature name type_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypeSignature"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)}]}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.TypeSignature
+typeSignatureName :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.Name
+typeSignatureName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSignature"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.haskell.syntax.TypeSignature
+typeSignatureType :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.Type
+typeSignatureType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSignature"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.TypeSignature
+typeSignatureTypeSignature :: Typed.TypedName Syntax.TypeSignature
+typeSignatureTypeSignature = Typed.TypedName (Model.Name "hydra.haskell.syntax.TypeSignature")
+
+-- | DSL updater for the name field of hydra.haskell.syntax.TypeSignature
+typeSignatureWithName :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.TypeSignature
+typeSignatureWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypeSignature"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSignature"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.haskell.syntax.TypeSignature
+typeSignatureWithType :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeSignature
+typeSignatureWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypeSignature"),
+      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.haskell.syntax.TypeSignature"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.TypeSynonymDeclaration
+typeSynonymDeclaration :: Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TypeSynonymDeclaration
+typeSynonymDeclaration name type_ comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.haskell.syntax.TypeSynonymDeclaration
+typeSynonymDeclarationComments :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm (Maybe String)
+typeSynonymDeclarationComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.haskell.syntax.TypeSynonymDeclaration
+typeSynonymDeclarationName :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.DeclarationHead
+typeSynonymDeclarationName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.haskell.syntax.TypeSynonymDeclaration
+typeSynonymDeclarationType :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.Type
+typeSynonymDeclarationType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.TypeSynonymDeclaration
+typeSynonymDeclarationTypeSynonymDeclaration :: Typed.TypedName Syntax.TypeSynonymDeclaration
+typeSynonymDeclarationTypeSynonymDeclaration = Typed.TypedName (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration")
+
+-- | DSL updater for the comments field of hydra.haskell.syntax.TypeSynonymDeclaration
+typeSynonymDeclarationWithComments :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TypeSynonymDeclaration
+typeSynonymDeclarationWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+      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.haskell.syntax.TypeSynonymDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.haskell.syntax.TypeSynonymDeclaration
+typeSynonymDeclarationWithName :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.DeclarationHead -> Typed.TypedTerm Syntax.TypeSynonymDeclaration
+typeSynonymDeclarationWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.haskell.syntax.TypeSynonymDeclaration
+typeSynonymDeclarationWithType :: Typed.TypedTerm Syntax.TypeSynonymDeclaration -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeSynonymDeclaration
+typeSynonymDeclarationWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+      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.haskell.syntax.TypeSynonymDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the tuple variant of hydra.haskell.syntax.Type
+typeTuple :: Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.Type
+typeTuple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "tuple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.Type
+typeType :: Typed.TypedName Syntax.Type
+typeType = Typed.TypedName (Model.Name "hydra.haskell.syntax.Type")
+
+-- | DSL injection for the variable variant of hydra.haskell.syntax.Type
+typeVariable :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Type
+typeVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.Type"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.haskell.syntax.TypedBinding
+typedBinding :: Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.ValueBinding -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TypedBinding
+typedBinding typeSignature valueBinding comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeSignature"),
+          Model.fieldTerm = (Typed.unTypedTerm typeSignature)},
+        Model.Field {
+          Model.fieldName = (Model.Name "valueBinding"),
+          Model.fieldTerm = (Typed.unTypedTerm valueBinding)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.haskell.syntax.TypedBinding
+typedBindingComments :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm (Maybe String)
+typedBindingComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeSignature field of hydra.haskell.syntax.TypedBinding
+typedBindingTypeSignature :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.TypeSignature
+typedBindingTypeSignature x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+        Model.projectionFieldName = (Model.Name "typeSignature")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.TypedBinding
+typedBindingTypedBinding :: Typed.TypedName Syntax.TypedBinding
+typedBindingTypedBinding = Typed.TypedName (Model.Name "hydra.haskell.syntax.TypedBinding")
+
+-- | DSL accessor for the valueBinding field of hydra.haskell.syntax.TypedBinding
+typedBindingValueBinding :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.ValueBinding
+typedBindingValueBinding x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+        Model.projectionFieldName = (Model.Name "valueBinding")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the comments field of hydra.haskell.syntax.TypedBinding
+typedBindingWithComments :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm (Maybe String) -> Typed.TypedTerm Syntax.TypedBinding
+typedBindingWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeSignature"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+              Model.projectionFieldName = (Model.Name "typeSignature")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "valueBinding"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+              Model.projectionFieldName = (Model.Name "valueBinding")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the typeSignature field of hydra.haskell.syntax.TypedBinding
+typedBindingWithTypeSignature :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.TypeSignature -> Typed.TypedTerm Syntax.TypedBinding
+typedBindingWithTypeSignature original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeSignature"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "valueBinding"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+              Model.projectionFieldName = (Model.Name "valueBinding")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the valueBinding field of hydra.haskell.syntax.TypedBinding
+typedBindingWithValueBinding :: Typed.TypedTerm Syntax.TypedBinding -> Typed.TypedTerm Syntax.ValueBinding -> Typed.TypedTerm Syntax.TypedBinding
+typedBindingWithValueBinding original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeSignature"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedBinding"),
+              Model.projectionFieldName = (Model.Name "typeSignature")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "valueBinding"),
+          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.haskell.syntax.TypedBinding"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.TypedExpression
+typedExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypedExpression
+typedExpression inner type_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm inner)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)}]}))
+
+-- | DSL accessor for the inner field of hydra.haskell.syntax.TypedExpression
+typedExpressionInner :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Expression
+typedExpressionInner x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedExpression"),
+        Model.projectionFieldName = (Model.Name "inner")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.haskell.syntax.TypedExpression
+typedExpressionType :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Type
+typedExpressionType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedExpression"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.TypedExpression
+typedExpressionTypedExpression :: Typed.TypedName Syntax.TypedExpression
+typedExpressionTypedExpression = Typed.TypedName (Model.Name "hydra.haskell.syntax.TypedExpression")
+
+-- | DSL updater for the inner field of hydra.haskell.syntax.TypedExpression
+typedExpressionWithInner :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypedExpression
+typedExpressionWithInner original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          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.haskell.syntax.TypedExpression"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.haskell.syntax.TypedExpression
+typedExpressionWithType :: Typed.TypedTerm Syntax.TypedExpression -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypedExpression
+typedExpressionWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedExpression"),
+              Model.projectionFieldName = (Model.Name "inner")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.haskell.syntax.TypedPattern
+typedPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypedPattern
+typedPattern inner type_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Typed.unTypedTerm inner)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)}]}))
+
+-- | DSL accessor for the inner field of hydra.haskell.syntax.TypedPattern
+typedPatternInner :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern
+typedPatternInner x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedPattern"),
+        Model.projectionFieldName = (Model.Name "inner")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.haskell.syntax.TypedPattern
+typedPatternType :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Type
+typedPatternType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedPattern"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.TypedPattern
+typedPatternTypedPattern :: Typed.TypedName Syntax.TypedPattern
+typedPatternTypedPattern = Typed.TypedName (Model.Name "hydra.haskell.syntax.TypedPattern")
+
+-- | DSL updater for the inner field of hydra.haskell.syntax.TypedPattern
+typedPatternWithInner :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.TypedPattern
+typedPatternWithInner original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          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.haskell.syntax.TypedPattern"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.haskell.syntax.TypedPattern
+typedPatternWithType :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypedPattern
+typedPatternWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.haskell.syntax.TypedPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "inner"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.haskell.syntax.TypedPattern"),
+              Model.projectionFieldName = (Model.Name "inner")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL accessor for the body of hydra.haskell.syntax.CaseRhs
+unCaseRhs :: Typed.TypedTerm Syntax.CaseRhs -> Typed.TypedTerm Syntax.Expression
+unCaseRhs x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.haskell.syntax.CaseRhs")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.haskell.syntax.DerivingClause
+unDerivingClause :: Typed.TypedTerm Syntax.DerivingClause -> Typed.TypedTerm [Syntax.Name]
+unDerivingClause x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.haskell.syntax.DerivingClause")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.haskell.syntax.LocalBindings
+unLocalBindings :: Typed.TypedTerm Syntax.LocalBindings -> Typed.TypedTerm [Syntax.LocalBinding]
+unLocalBindings x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.haskell.syntax.LocalBindings")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.haskell.syntax.ModuleName
+unModuleName :: Typed.TypedTerm Syntax.ModuleName -> Typed.TypedTerm String
+unModuleName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.haskell.syntax.ModuleName")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.haskell.syntax.NamePart
+unNamePart :: Typed.TypedTerm Syntax.NamePart -> Typed.TypedTerm String
+unNamePart x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.haskell.syntax.NamePart")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.haskell.syntax.RightHandSide
+unRightHandSide :: Typed.TypedTerm Syntax.RightHandSide -> Typed.TypedTerm Syntax.Expression
+unRightHandSide x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.haskell.syntax.RightHandSide")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.haskell.syntax.Statement
+unStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.Expression
+unStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.haskell.syntax.Statement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.haskell.syntax.Variable
+unVariable :: Typed.TypedTerm Syntax.Variable -> Typed.TypedTerm Syntax.Name
+unVariable x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.haskell.syntax.Variable")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL injection for the simple variant of hydra.haskell.syntax.ValueBinding
+valueBindingSimple :: Typed.TypedTerm Syntax.SimpleValueBinding -> Typed.TypedTerm Syntax.ValueBinding
+valueBindingSimple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.haskell.syntax.ValueBinding"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "simple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.haskell.syntax.ValueBinding
+valueBindingValueBinding :: Typed.TypedName Syntax.ValueBinding
+valueBindingValueBinding = Typed.TypedName (Model.Name "hydra.haskell.syntax.ValueBinding")
+
+-- | DSL constructor for the hydra.haskell.syntax.Variable wrapper
+variable :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Variable
+variable x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.haskell.syntax.Variable"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.haskell.syntax.Variable
+variableVariable :: Typed.TypedName Syntax.Variable
+variableVariable = Typed.TypedName (Model.Name "hydra.haskell.syntax.Variable")
diff --git a/src/main/haskell/Hydra/Haskell/Environment.hs b/src/main/haskell/Hydra/Haskell/Environment.hs
--- a/src/main/haskell/Hydra/Haskell/Environment.hs
+++ b/src/main/haskell/Hydra/Haskell/Environment.hs
@@ -4,7 +4,7 @@
 
 module Hydra.Haskell.Environment where
 
-import qualified Hydra.Core as Core
+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
@@ -24,14 +24,14 @@
     haskellModuleMetadataUsesVoid :: Bool}
   deriving (Eq, Ord, Read, Show)
 
-_HaskellModuleMetadata = Core.Name "hydra.haskell.environment.HaskellModuleMetadata"
+_HaskellModuleMetadata = Model.Name "hydra.haskell.environment.HaskellModuleMetadata"
 
-_HaskellModuleMetadata_usesByteString = Core.Name "usesByteString"
+_HaskellModuleMetadata_usesByteString = Model.Name "usesByteString"
 
-_HaskellModuleMetadata_usesInt = Core.Name "usesInt"
+_HaskellModuleMetadata_usesInt = Model.Name "usesInt"
 
-_HaskellModuleMetadata_usesMap = Core.Name "usesMap"
+_HaskellModuleMetadata_usesMap = Model.Name "usesMap"
 
-_HaskellModuleMetadata_usesSet = Core.Name "usesSet"
+_HaskellModuleMetadata_usesSet = Model.Name "usesSet"
 
-_HaskellModuleMetadata_usesVoid = Core.Name "usesVoid"
+_HaskellModuleMetadata_usesVoid = Model.Name "usesVoid"
diff --git a/src/main/haskell/Hydra/Haskell/Language.hs b/src/main/haskell/Hydra/Haskell/Language.hs
--- a/src/main/haskell/Hydra/Haskell/Language.hs
+++ b/src/main/haskell/Hydra/Haskell/Language.hs
@@ -4,37 +4,39 @@
 
 module Hydra.Haskell.Language where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
-import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets
-import qualified Hydra.Packaging as Packaging
-import qualified Hydra.Parsing as Parsing
-import qualified Hydra.Paths as Paths
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-import qualified Hydra.Util as Util
-import qualified Hydra.Validation as Validation
-import qualified Hydra.Variants as Variants
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Overlay.Haskell.Lib.Lists as Lists
+import qualified Hydra.Core.Overlay.Haskell.Lib.Sets as Sets
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
 import qualified Data.Scientific as Sci
 import Data.Void
@@ -79,15 +81,15 @@
           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]
+          Model.IntegerTypeBigint,
+          Model.IntegerTypeInt8,
+          Model.IntegerTypeInt16,
+          Model.IntegerTypeInt32,
+          Model.IntegerTypeInt64]
     termVariants =
         Sets.fromList [
           Variants.TermVariantAnnotated,
diff --git a/src/main/haskell/Hydra/Haskell/Operators.hs b/src/main/haskell/Hydra/Haskell/Operators.hs
--- a/src/main/haskell/Hydra/Haskell/Operators.hs
+++ b/src/main/haskell/Hydra/Haskell/Operators.hs
@@ -4,37 +4,39 @@
 
 module Hydra.Haskell.Operators where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Overlay.Haskell.Lib.Math as Math
-import qualified Hydra.Packaging as Packaging
-import qualified Hydra.Parsing as Parsing
-import qualified Hydra.Paths as Paths
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Serialization as Serialization
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-import qualified Hydra.Util as Util
-import qualified Hydra.Validation as Validation
-import qualified Hydra.Variants as Variants
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Overlay.Haskell.Lib.Math as Math
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Serialization as Serialization
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
 import qualified Data.Scientific as Sci
 import Data.Void
diff --git a/src/main/haskell/Hydra/Haskell/Serde.hs b/src/main/haskell/Hydra/Haskell/Serde.hs
--- a/src/main/haskell/Hydra/Haskell/Serde.hs
+++ b/src/main/haskell/Hydra/Haskell/Serde.hs
@@ -8,49 +8,51 @@
 
 module Hydra.Haskell.Serde where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Constants as Constants
-import qualified Hydra.Core as Core
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Constants as Constants
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Formatting as Formatting
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Overlay.Haskell.Lib.Equality as Equality
+import qualified Hydra.Core.Overlay.Haskell.Lib.Lists as Lists
+import qualified Hydra.Core.Overlay.Haskell.Lib.Literals as Literals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Logic as Logic
+import qualified Hydra.Core.Overlay.Haskell.Lib.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.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Names as Names
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Print.Docs as PrintDocs
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Serialization as Serialization
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variants as Variants
 import qualified Hydra.Haskell.Operators as Operators
 import qualified Hydra.Haskell.Syntax as Syntax
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality
-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
-import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals
-import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic
-import qualified Hydra.Overlay.Haskell.Lib.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 PrintDocs
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Serialization as Serialization
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-import qualified Hydra.Util as Util
-import qualified Hydra.Validation as Validation
-import qualified Hydra.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
 import qualified Data.Scientific as Sci
 import Data.Void
diff --git a/src/main/haskell/Hydra/Haskell/Syntax.hs b/src/main/haskell/Hydra/Haskell/Syntax.hs
--- a/src/main/haskell/Hydra/Haskell/Syntax.hs
+++ b/src/main/haskell/Hydra/Haskell/Syntax.hs
@@ -4,7 +4,7 @@
 
 module Hydra.Haskell.Syntax where
 
-import qualified Hydra.Core as Core
+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
@@ -20,13 +20,13 @@
     alternativeBinds :: (Maybe LocalBindings)}
   deriving (Eq, Ord, Read, Show)
 
-_Alternative = Core.Name "hydra.haskell.syntax.Alternative"
+_Alternative = Model.Name "hydra.haskell.syntax.Alternative"
 
-_Alternative_pattern = Core.Name "pattern"
+_Alternative_pattern = Model.Name "pattern"
 
-_Alternative_rhs = Core.Name "rhs"
+_Alternative_rhs = Model.Name "rhs"
 
-_Alternative_binds = Core.Name "binds"
+_Alternative_binds = Model.Name "binds"
 
 -- | An application-style declaration head
 data ApplicationDeclarationHead =
@@ -37,11 +37,11 @@
     applicationDeclarationHeadOperand :: Variable}
   deriving (Eq, Ord, Read, Show)
 
-_ApplicationDeclarationHead = Core.Name "hydra.haskell.syntax.ApplicationDeclarationHead"
+_ApplicationDeclarationHead = Model.Name "hydra.haskell.syntax.ApplicationDeclarationHead"
 
-_ApplicationDeclarationHead_function = Core.Name "function"
+_ApplicationDeclarationHead_function = Model.Name "function"
 
-_ApplicationDeclarationHead_operand = Core.Name "operand"
+_ApplicationDeclarationHead_operand = Model.Name "operand"
 
 -- | An application expression
 data ApplicationExpression =
@@ -52,11 +52,11 @@
     applicationExpressionArgument :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_ApplicationExpression = Core.Name "hydra.haskell.syntax.ApplicationExpression"
+_ApplicationExpression = Model.Name "hydra.haskell.syntax.ApplicationExpression"
 
-_ApplicationExpression_function = Core.Name "function"
+_ApplicationExpression_function = Model.Name "function"
 
-_ApplicationExpression_argument = Core.Name "argument"
+_ApplicationExpression_argument = Model.Name "argument"
 
 -- | An application pattern
 data ApplicationPattern =
@@ -67,11 +67,11 @@
     applicationPatternArgs :: [Pattern]}
   deriving (Eq, Ord, Read, Show)
 
-_ApplicationPattern = Core.Name "hydra.haskell.syntax.ApplicationPattern"
+_ApplicationPattern = Model.Name "hydra.haskell.syntax.ApplicationPattern"
 
-_ApplicationPattern_name = Core.Name "name"
+_ApplicationPattern_name = Model.Name "name"
 
-_ApplicationPattern_args = Core.Name "args"
+_ApplicationPattern_args = Model.Name "args"
 
 -- | An application type
 data ApplicationType =
@@ -82,11 +82,11 @@
     applicationTypeArgument :: Type}
   deriving (Eq, Ord, Read, Show)
 
-_ApplicationType = Core.Name "hydra.haskell.syntax.ApplicationType"
+_ApplicationType = Model.Name "hydra.haskell.syntax.ApplicationType"
 
-_ApplicationType_context = Core.Name "context"
+_ApplicationType_context = Model.Name "context"
 
-_ApplicationType_argument = Core.Name "argument"
+_ApplicationType_argument = Model.Name "argument"
 
 -- | An 'as' pattern
 data AsPattern =
@@ -97,11 +97,11 @@
     asPatternInner :: Pattern}
   deriving (Eq, Ord, Read, Show)
 
-_AsPattern = Core.Name "hydra.haskell.syntax.AsPattern"
+_AsPattern = Model.Name "hydra.haskell.syntax.AsPattern"
 
-_AsPattern_name = Core.Name "name"
+_AsPattern_name = Model.Name "name"
 
-_AsPattern_inner = Core.Name "inner"
+_AsPattern_inner = Model.Name "inner"
 
 -- | A case expression
 data CaseExpression =
@@ -112,11 +112,11 @@
     caseExpressionAlternatives :: [Alternative]}
   deriving (Eq, Ord, Read, Show)
 
-_CaseExpression = Core.Name "hydra.haskell.syntax.CaseExpression"
+_CaseExpression = Model.Name "hydra.haskell.syntax.CaseExpression"
 
-_CaseExpression_case = Core.Name "case"
+_CaseExpression_case = Model.Name "case"
 
-_CaseExpression_alternatives = Core.Name "alternatives"
+_CaseExpression_alternatives = Model.Name "alternatives"
 
 -- | The right-hand side of a pattern-matching alternative
 newtype CaseRhs =
@@ -124,7 +124,7 @@
     unCaseRhs :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_CaseRhs = Core.Name "hydra.haskell.syntax.CaseRhs"
+_CaseRhs = Model.Name "hydra.haskell.syntax.CaseRhs"
 
 -- | A class constraint
 data ClassConstraint =
@@ -135,11 +135,11 @@
     classConstraintTypes :: [Type]}
   deriving (Eq, Ord, Read, Show)
 
-_ClassConstraint = Core.Name "hydra.haskell.syntax.ClassConstraint"
+_ClassConstraint = Model.Name "hydra.haskell.syntax.ClassConstraint"
 
-_ClassConstraint_name = Core.Name "name"
+_ClassConstraint_name = Model.Name "name"
 
-_ClassConstraint_types = Core.Name "types"
+_ClassConstraint_types = Model.Name "types"
 
 -- | A type with a context (type class constraints)
 data ConstrainedType =
@@ -150,11 +150,11 @@
     constrainedTypeType :: Type}
   deriving (Eq, Ord, Read, Show)
 
-_ConstrainedType = Core.Name "hydra.haskell.syntax.ConstrainedType"
+_ConstrainedType = Model.Name "hydra.haskell.syntax.ConstrainedType"
 
-_ConstrainedType_ctx = Core.Name "ctx"
+_ConstrainedType_ctx = Model.Name "ctx"
 
-_ConstrainedType_type = Core.Name "type"
+_ConstrainedType_type = Model.Name "type"
 
 -- | A type constraint
 data Constraint =
@@ -164,11 +164,11 @@
   ConstraintTuple [Constraint]
   deriving (Eq, Ord, Read, Show)
 
-_Constraint = Core.Name "hydra.haskell.syntax.Constraint"
+_Constraint = Model.Name "hydra.haskell.syntax.Constraint"
 
-_Constraint_class = Core.Name "class"
+_Constraint_class = Model.Name "class"
 
-_Constraint_tuple = Core.Name "tuple"
+_Constraint_tuple = Model.Name "tuple"
 
 -- | A data constructor
 data Constructor =
@@ -178,11 +178,11 @@
   ConstructorRecord RecordConstructor
   deriving (Eq, Ord, Read, Show)
 
-_Constructor = Core.Name "hydra.haskell.syntax.Constructor"
+_Constructor = Model.Name "hydra.haskell.syntax.Constructor"
 
-_Constructor_ordinary = Core.Name "ordinary"
+_Constructor_ordinary = Model.Name "ordinary"
 
-_Constructor_record = Core.Name "record"
+_Constructor_record = Model.Name "record"
 
 -- | A data type declaration
 data DataDeclaration =
@@ -201,19 +201,19 @@
     dataDeclarationComments :: (Maybe String)}
   deriving (Eq, Ord, Read, Show)
 
-_DataDeclaration = Core.Name "hydra.haskell.syntax.DataDeclaration"
+_DataDeclaration = Model.Name "hydra.haskell.syntax.DataDeclaration"
 
-_DataDeclaration_keyword = Core.Name "keyword"
+_DataDeclaration_keyword = Model.Name "keyword"
 
-_DataDeclaration_context = Core.Name "context"
+_DataDeclaration_context = Model.Name "context"
 
-_DataDeclaration_head = Core.Name "head"
+_DataDeclaration_head = Model.Name "head"
 
-_DataDeclaration_constructors = Core.Name "constructors"
+_DataDeclaration_constructors = Model.Name "constructors"
 
-_DataDeclaration_deriving = Core.Name "deriving"
+_DataDeclaration_deriving = Model.Name "deriving"
 
-_DataDeclaration_comments = Core.Name "comments"
+_DataDeclaration_comments = Model.Name "comments"
 
 -- | The 'data' versus 'newtype keyword
 data DataKeyword =
@@ -221,11 +221,11 @@
   DataKeywordNewtype
   deriving (Eq, Ord, Read, Show)
 
-_DataKeyword = Core.Name "hydra.haskell.syntax.DataKeyword"
+_DataKeyword = Model.Name "hydra.haskell.syntax.DataKeyword"
 
-_DataKeyword_data = Core.Name "data"
+_DataKeyword_data = Model.Name "data"
 
-_DataKeyword_newtype = Core.Name "newtype"
+_DataKeyword_newtype = Model.Name "newtype"
 
 -- | A data or value declaration
 data Declaration =
@@ -239,15 +239,15 @@
   DeclarationTypedBinding TypedBinding
   deriving (Eq, Ord, Read, Show)
 
-_Declaration = Core.Name "hydra.haskell.syntax.Declaration"
+_Declaration = Model.Name "hydra.haskell.syntax.Declaration"
 
-_Declaration_data = Core.Name "data"
+_Declaration_data = Model.Name "data"
 
-_Declaration_type = Core.Name "type"
+_Declaration_type = Model.Name "type"
 
-_Declaration_valueBinding = Core.Name "valueBinding"
+_Declaration_valueBinding = Model.Name "valueBinding"
 
-_Declaration_typedBinding = Core.Name "typedBinding"
+_Declaration_typedBinding = Model.Name "typedBinding"
 
 -- | The left-hand side of a declaration
 data DeclarationHead =
@@ -257,11 +257,11 @@
   DeclarationHeadSimple Name
   deriving (Eq, Ord, Read, Show)
 
-_DeclarationHead = Core.Name "hydra.haskell.syntax.DeclarationHead"
+_DeclarationHead = Model.Name "hydra.haskell.syntax.DeclarationHead"
 
-_DeclarationHead_application = Core.Name "application"
+_DeclarationHead_application = Model.Name "application"
 
-_DeclarationHead_simple = Core.Name "simple"
+_DeclarationHead_simple = Model.Name "simple"
 
 -- | A 'deriving' clause
 newtype DerivingClause =
@@ -269,7 +269,7 @@
     unDerivingClause :: [Name]}
   deriving (Eq, Ord, Read, Show)
 
-_DerivingClause = Core.Name "hydra.haskell.syntax.DerivingClause"
+_DerivingClause = Model.Name "hydra.haskell.syntax.DerivingClause"
 
 -- | An export statement
 data Export =
@@ -279,11 +279,11 @@
   ExportModule ModuleName
   deriving (Eq, Ord, Read, Show)
 
-_Export = Core.Name "hydra.haskell.syntax.Export"
+_Export = Model.Name "hydra.haskell.syntax.Export"
 
-_Export_declaration = Core.Name "declaration"
+_Export_declaration = Model.Name "declaration"
 
-_Export_module = Core.Name "module"
+_Export_module = Model.Name "module"
 
 -- | A data expression
 data Expression =
@@ -321,39 +321,39 @@
   ExpressionVariable Name
   deriving (Eq, Ord, Read, Show)
 
-_Expression = Core.Name "hydra.haskell.syntax.Expression"
+_Expression = Model.Name "hydra.haskell.syntax.Expression"
 
-_Expression_application = Core.Name "application"
+_Expression_application = Model.Name "application"
 
-_Expression_case = Core.Name "case"
+_Expression_case = Model.Name "case"
 
-_Expression_constructRecord = Core.Name "constructRecord"
+_Expression_constructRecord = Model.Name "constructRecord"
 
-_Expression_do = Core.Name "do"
+_Expression_do = Model.Name "do"
 
-_Expression_if = Core.Name "if"
+_Expression_if = Model.Name "if"
 
-_Expression_infixApplication = Core.Name "infixApplication"
+_Expression_infixApplication = Model.Name "infixApplication"
 
-_Expression_literal = Core.Name "literal"
+_Expression_literal = Model.Name "literal"
 
-_Expression_lambda = Core.Name "lambda"
+_Expression_lambda = Model.Name "lambda"
 
-_Expression_leftSection = Core.Name "leftSection"
+_Expression_leftSection = Model.Name "leftSection"
 
-_Expression_let = Core.Name "let"
+_Expression_let = Model.Name "let"
 
-_Expression_list = Core.Name "list"
+_Expression_list = Model.Name "list"
 
-_Expression_rightSection = Core.Name "rightSection"
+_Expression_rightSection = Model.Name "rightSection"
 
-_Expression_tuple = Core.Name "tuple"
+_Expression_tuple = Model.Name "tuple"
 
-_Expression_typeSignature = Core.Name "typeSignature"
+_Expression_typeSignature = Model.Name "typeSignature"
 
-_Expression_updateRecord = Core.Name "updateRecord"
+_Expression_updateRecord = Model.Name "updateRecord"
 
-_Expression_variable = Core.Name "variable"
+_Expression_variable = Model.Name "variable"
 
 -- | A field (name/type pair)
 data Field =
@@ -366,13 +366,13 @@
     fieldComments :: (Maybe String)}
   deriving (Eq, Ord, Read, Show)
 
-_Field = Core.Name "hydra.haskell.syntax.Field"
+_Field = Model.Name "hydra.haskell.syntax.Field"
 
-_Field_name = Core.Name "name"
+_Field_name = Model.Name "name"
 
-_Field_type = Core.Name "type"
+_Field_type = Model.Name "type"
 
-_Field_comments = Core.Name "comments"
+_Field_comments = Model.Name "comments"
 
 -- | A field name and value
 data FieldUpdate =
@@ -383,11 +383,11 @@
     fieldUpdateValue :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_FieldUpdate = Core.Name "hydra.haskell.syntax.FieldUpdate"
+_FieldUpdate = Model.Name "hydra.haskell.syntax.FieldUpdate"
 
-_FieldUpdate_name = Core.Name "name"
+_FieldUpdate_name = Model.Name "name"
 
-_FieldUpdate_value = Core.Name "value"
+_FieldUpdate_value = Model.Name "value"
 
 -- | A function type
 data FunctionType =
@@ -398,11 +398,11 @@
     functionTypeCodomain :: Type}
   deriving (Eq, Ord, Read, Show)
 
-_FunctionType = Core.Name "hydra.haskell.syntax.FunctionType"
+_FunctionType = Model.Name "hydra.haskell.syntax.FunctionType"
 
-_FunctionType_domain = Core.Name "domain"
+_FunctionType_domain = Model.Name "domain"
 
-_FunctionType_codomain = Core.Name "codomain"
+_FunctionType_codomain = Model.Name "codomain"
 
 -- | An 'if' expression
 data IfExpression =
@@ -415,13 +415,13 @@
     ifExpressionElse :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_IfExpression = Core.Name "hydra.haskell.syntax.IfExpression"
+_IfExpression = Model.Name "hydra.haskell.syntax.IfExpression"
 
-_IfExpression_condition = Core.Name "condition"
+_IfExpression_condition = Model.Name "condition"
 
-_IfExpression_then = Core.Name "then"
+_IfExpression_then = Model.Name "then"
 
-_IfExpression_else = Core.Name "else"
+_IfExpression_else = Model.Name "else"
 
 -- | An import statement
 data Import =
@@ -436,15 +436,15 @@
     importSpec :: (Maybe ImportSpec)}
   deriving (Eq, Ord, Read, Show)
 
-_Import = Core.Name "hydra.haskell.syntax.Import"
+_Import = Model.Name "hydra.haskell.syntax.Import"
 
-_Import_qualified = Core.Name "qualified"
+_Import_qualified = Model.Name "qualified"
 
-_Import_module = Core.Name "module"
+_Import_module = Model.Name "module"
 
-_Import_as = Core.Name "as"
+_Import_as = Model.Name "as"
 
-_Import_spec = Core.Name "spec"
+_Import_spec = Model.Name "spec"
 
 -- | A subspecification within an import/export
 data ImportExportSubspec =
@@ -454,11 +454,11 @@
   ImportExportSubspecList [Name]
   deriving (Eq, Ord, Read, Show)
 
-_ImportExportSubspec = Core.Name "hydra.haskell.syntax.ImportExportSubspec"
+_ImportExportSubspec = Model.Name "hydra.haskell.syntax.ImportExportSubspec"
 
-_ImportExportSubspec_all = Core.Name "all"
+_ImportExportSubspec_all = Model.Name "all"
 
-_ImportExportSubspec_list = Core.Name "list"
+_ImportExportSubspec_list = Model.Name "list"
 
 -- | An import modifier ('pattern' or 'type')
 data ImportModifier =
@@ -466,11 +466,11 @@
   ImportModifierType
   deriving (Eq, Ord, Read, Show)
 
-_ImportModifier = Core.Name "hydra.haskell.syntax.ImportModifier"
+_ImportModifier = Model.Name "hydra.haskell.syntax.ImportModifier"
 
-_ImportModifier_pattern = Core.Name "pattern"
+_ImportModifier_pattern = Model.Name "pattern"
 
-_ImportModifier_type = Core.Name "type"
+_ImportModifier_type = Model.Name "type"
 
 -- | An import specification
 data ImportSpec =
@@ -480,11 +480,11 @@
   ImportSpecHiding [NamedImportExport]
   deriving (Eq, Ord, Read, Show)
 
-_ImportSpec = Core.Name "hydra.haskell.syntax.ImportSpec"
+_ImportSpec = Model.Name "hydra.haskell.syntax.ImportSpec"
 
-_ImportSpec_list = Core.Name "list"
+_ImportSpec_list = Model.Name "list"
 
-_ImportSpec_hiding = Core.Name "hiding"
+_ImportSpec_hiding = Model.Name "hiding"
 
 -- | An infix application expression
 data InfixExpression =
@@ -497,13 +497,13 @@
     infixExpressionRhs :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_InfixExpression = Core.Name "hydra.haskell.syntax.InfixExpression"
+_InfixExpression = Model.Name "hydra.haskell.syntax.InfixExpression"
 
-_InfixExpression_lhs = Core.Name "lhs"
+_InfixExpression_lhs = Model.Name "lhs"
 
-_InfixExpression_operator = Core.Name "operator"
+_InfixExpression_operator = Model.Name "operator"
 
-_InfixExpression_rhs = Core.Name "rhs"
+_InfixExpression_rhs = Model.Name "rhs"
 
 -- | An infix type application
 data InfixType =
@@ -516,13 +516,13 @@
     infixTypeRhs :: Type}
   deriving (Eq, Ord, Read, Show)
 
-_InfixType = Core.Name "hydra.haskell.syntax.InfixType"
+_InfixType = Model.Name "hydra.haskell.syntax.InfixType"
 
-_InfixType_lhs = Core.Name "lhs"
+_InfixType_lhs = Model.Name "lhs"
 
-_InfixType_operator = Core.Name "operator"
+_InfixType_operator = Model.Name "operator"
 
-_InfixType_rhs = Core.Name "rhs"
+_InfixType_rhs = Model.Name "rhs"
 
 -- | A lambda expression
 data LambdaExpression =
@@ -533,11 +533,11 @@
     lambdaExpressionInner :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_LambdaExpression = Core.Name "hydra.haskell.syntax.LambdaExpression"
+_LambdaExpression = Model.Name "hydra.haskell.syntax.LambdaExpression"
 
-_LambdaExpression_bindings = Core.Name "bindings"
+_LambdaExpression_bindings = Model.Name "bindings"
 
-_LambdaExpression_inner = Core.Name "inner"
+_LambdaExpression_inner = Model.Name "inner"
 
 -- | A 'let' expression
 data LetExpression =
@@ -548,11 +548,11 @@
     letExpressionInner :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_LetExpression = Core.Name "hydra.haskell.syntax.LetExpression"
+_LetExpression = Model.Name "hydra.haskell.syntax.LetExpression"
 
-_LetExpression_bindings = Core.Name "bindings"
+_LetExpression_bindings = Model.Name "bindings"
 
-_LetExpression_inner = Core.Name "inner"
+_LetExpression_inner = Model.Name "inner"
 
 -- | A literal value
 data Literal =
@@ -570,19 +570,19 @@
   LiteralString String
   deriving (Eq, Ord, Read, Show)
 
-_Literal = Core.Name "hydra.haskell.syntax.Literal"
+_Literal = Model.Name "hydra.haskell.syntax.Literal"
 
-_Literal_char = Core.Name "char"
+_Literal_char = Model.Name "char"
 
-_Literal_double = Core.Name "double"
+_Literal_double = Model.Name "double"
 
-_Literal_float = Core.Name "float"
+_Literal_float = Model.Name "float"
 
-_Literal_int = Core.Name "int"
+_Literal_int = Model.Name "int"
 
-_Literal_integer = Core.Name "integer"
+_Literal_integer = Model.Name "integer"
 
-_Literal_string = Core.Name "string"
+_Literal_string = Model.Name "string"
 
 -- | A local binding
 data LocalBinding =
@@ -592,11 +592,11 @@
   LocalBindingValue ValueBinding
   deriving (Eq, Ord, Read, Show)
 
-_LocalBinding = Core.Name "hydra.haskell.syntax.LocalBinding"
+_LocalBinding = Model.Name "hydra.haskell.syntax.LocalBinding"
 
-_LocalBinding_signature = Core.Name "signature"
+_LocalBinding_signature = Model.Name "signature"
 
-_LocalBinding_value = Core.Name "value"
+_LocalBinding_value = Model.Name "value"
 
 -- | A collection of local bindings
 newtype LocalBindings =
@@ -604,7 +604,7 @@
     unLocalBindings :: [LocalBinding]}
   deriving (Eq, Ord, Read, Show)
 
-_LocalBindings = Core.Name "hydra.haskell.syntax.LocalBindings"
+_LocalBindings = Model.Name "hydra.haskell.syntax.LocalBindings"
 
 -- | A Haskell module
 data Module =
@@ -617,13 +617,13 @@
     moduleDeclarations :: [Declaration]}
   deriving (Eq, Ord, Read, Show)
 
-_Module = Core.Name "hydra.haskell.syntax.Module"
+_Module = Model.Name "hydra.haskell.syntax.Module"
 
-_Module_head = Core.Name "head"
+_Module_head = Model.Name "head"
 
-_Module_imports = Core.Name "imports"
+_Module_imports = Model.Name "imports"
 
-_Module_declarations = Core.Name "declarations"
+_Module_declarations = Model.Name "declarations"
 
 -- | A module head
 data ModuleHead =
@@ -636,13 +636,13 @@
     moduleHeadExports :: [Export]}
   deriving (Eq, Ord, Read, Show)
 
-_ModuleHead = Core.Name "hydra.haskell.syntax.ModuleHead"
+_ModuleHead = Model.Name "hydra.haskell.syntax.ModuleHead"
 
-_ModuleHead_comments = Core.Name "comments"
+_ModuleHead_comments = Model.Name "comments"
 
-_ModuleHead_name = Core.Name "name"
+_ModuleHead_name = Model.Name "name"
 
-_ModuleHead_exports = Core.Name "exports"
+_ModuleHead_exports = Model.Name "exports"
 
 -- | A module name
 newtype ModuleName =
@@ -650,7 +650,7 @@
     unModuleName :: String}
   deriving (Eq, Ord, Read, Show)
 
-_ModuleName = Core.Name "hydra.haskell.syntax.ModuleName"
+_ModuleName = Model.Name "hydra.haskell.syntax.ModuleName"
 
 -- | A name
 data Name =
@@ -660,11 +660,11 @@
   NameNormal QualifiedName
   deriving (Eq, Ord, Read, Show)
 
-_Name = Core.Name "hydra.haskell.syntax.Name"
+_Name = Model.Name "hydra.haskell.syntax.Name"
 
-_Name_implicit = Core.Name "implicit"
+_Name_implicit = Model.Name "implicit"
 
-_Name_normal = Core.Name "normal"
+_Name_normal = Model.Name "normal"
 
 -- | A component of a qualified name
 newtype NamePart =
@@ -672,7 +672,7 @@
     unNamePart :: String}
   deriving (Eq, Ord, Read, Show)
 
-_NamePart = Core.Name "hydra.haskell.syntax.NamePart"
+_NamePart = Model.Name "hydra.haskell.syntax.NamePart"
 
 -- | An import or export specification
 data NamedImportExport =
@@ -685,13 +685,13 @@
     namedImportExportSubspec :: (Maybe ImportExportSubspec)}
   deriving (Eq, Ord, Read, Show)
 
-_NamedImportExport = Core.Name "hydra.haskell.syntax.NamedImportExport"
+_NamedImportExport = Model.Name "hydra.haskell.syntax.NamedImportExport"
 
-_NamedImportExport_modifier = Core.Name "modifier"
+_NamedImportExport_modifier = Model.Name "modifier"
 
-_NamedImportExport_name = Core.Name "name"
+_NamedImportExport_name = Model.Name "name"
 
-_NamedImportExport_subspec = Core.Name "subspec"
+_NamedImportExport_subspec = Model.Name "subspec"
 
 -- | An operator
 data Operator =
@@ -701,11 +701,11 @@
   OperatorNormal QualifiedName
   deriving (Eq, Ord, Read, Show)
 
-_Operator = Core.Name "hydra.haskell.syntax.Operator"
+_Operator = Model.Name "hydra.haskell.syntax.Operator"
 
-_Operator_backtick = Core.Name "backtick"
+_Operator_backtick = Model.Name "backtick"
 
-_Operator_normal = Core.Name "normal"
+_Operator_normal = Model.Name "normal"
 
 -- | A pattern
 data Pattern =
@@ -729,25 +729,25 @@
   PatternWildcard
   deriving (Eq, Ord, Read, Show)
 
-_Pattern = Core.Name "hydra.haskell.syntax.Pattern"
+_Pattern = Model.Name "hydra.haskell.syntax.Pattern"
 
-_Pattern_application = Core.Name "application"
+_Pattern_application = Model.Name "application"
 
-_Pattern_as = Core.Name "as"
+_Pattern_as = Model.Name "as"
 
-_Pattern_list = Core.Name "list"
+_Pattern_list = Model.Name "list"
 
-_Pattern_literal = Core.Name "literal"
+_Pattern_literal = Model.Name "literal"
 
-_Pattern_name = Core.Name "name"
+_Pattern_name = Model.Name "name"
 
-_Pattern_record = Core.Name "record"
+_Pattern_record = Model.Name "record"
 
-_Pattern_tuple = Core.Name "tuple"
+_Pattern_tuple = Model.Name "tuple"
 
-_Pattern_typed = Core.Name "typed"
+_Pattern_typed = Model.Name "typed"
 
-_Pattern_wildcard = Core.Name "wildcard"
+_Pattern_wildcard = Model.Name "wildcard"
 
 -- | A pattern field
 data PatternField =
@@ -758,11 +758,11 @@
     patternFieldPattern :: Pattern}
   deriving (Eq, Ord, Read, Show)
 
-_PatternField = Core.Name "hydra.haskell.syntax.PatternField"
+_PatternField = Model.Name "hydra.haskell.syntax.PatternField"
 
-_PatternField_name = Core.Name "name"
+_PatternField_name = Model.Name "name"
 
-_PatternField_pattern = Core.Name "pattern"
+_PatternField_pattern = Model.Name "pattern"
 
 -- | An ordinary (positional) data constructor
 data PositionalConstructor =
@@ -775,13 +775,13 @@
     positionalConstructorComments :: (Maybe String)}
   deriving (Eq, Ord, Read, Show)
 
-_PositionalConstructor = Core.Name "hydra.haskell.syntax.PositionalConstructor"
+_PositionalConstructor = Model.Name "hydra.haskell.syntax.PositionalConstructor"
 
-_PositionalConstructor_name = Core.Name "name"
+_PositionalConstructor_name = Model.Name "name"
 
-_PositionalConstructor_fields = Core.Name "fields"
+_PositionalConstructor_fields = Model.Name "fields"
 
-_PositionalConstructor_comments = Core.Name "comments"
+_PositionalConstructor_comments = Model.Name "comments"
 
 -- | A qualified name
 data QualifiedName =
@@ -792,11 +792,11 @@
     qualifiedNameUnqualified :: NamePart}
   deriving (Eq, Ord, Read, Show)
 
-_QualifiedName = Core.Name "hydra.haskell.syntax.QualifiedName"
+_QualifiedName = Model.Name "hydra.haskell.syntax.QualifiedName"
 
-_QualifiedName_qualifiers = Core.Name "qualifiers"
+_QualifiedName_qualifiers = Model.Name "qualifiers"
 
-_QualifiedName_unqualified = Core.Name "unqualified"
+_QualifiedName_unqualified = Model.Name "unqualified"
 
 -- | A record-style data constructor
 data RecordConstructor =
@@ -809,13 +809,13 @@
     recordConstructorComments :: (Maybe String)}
   deriving (Eq, Ord, Read, Show)
 
-_RecordConstructor = Core.Name "hydra.haskell.syntax.RecordConstructor"
+_RecordConstructor = Model.Name "hydra.haskell.syntax.RecordConstructor"
 
-_RecordConstructor_name = Core.Name "name"
+_RecordConstructor_name = Model.Name "name"
 
-_RecordConstructor_fields = Core.Name "fields"
+_RecordConstructor_fields = Model.Name "fields"
 
-_RecordConstructor_comments = Core.Name "comments"
+_RecordConstructor_comments = Model.Name "comments"
 
 -- | A record constructor expression
 data RecordExpression =
@@ -826,11 +826,11 @@
     recordExpressionFields :: [FieldUpdate]}
   deriving (Eq, Ord, Read, Show)
 
-_RecordExpression = Core.Name "hydra.haskell.syntax.RecordExpression"
+_RecordExpression = Model.Name "hydra.haskell.syntax.RecordExpression"
 
-_RecordExpression_name = Core.Name "name"
+_RecordExpression_name = Model.Name "name"
 
-_RecordExpression_fields = Core.Name "fields"
+_RecordExpression_fields = Model.Name "fields"
 
 -- | A record pattern
 data RecordPattern =
@@ -841,11 +841,11 @@
     recordPatternFields :: [PatternField]}
   deriving (Eq, Ord, Read, Show)
 
-_RecordPattern = Core.Name "hydra.haskell.syntax.RecordPattern"
+_RecordPattern = Model.Name "hydra.haskell.syntax.RecordPattern"
 
-_RecordPattern_name = Core.Name "name"
+_RecordPattern_name = Model.Name "name"
 
-_RecordPattern_fields = Core.Name "fields"
+_RecordPattern_fields = Model.Name "fields"
 
 -- | An update record expression
 data RecordUpdateExpression =
@@ -856,11 +856,11 @@
     recordUpdateExpressionFields :: [FieldUpdate]}
   deriving (Eq, Ord, Read, Show)
 
-_RecordUpdateExpression = Core.Name "hydra.haskell.syntax.RecordUpdateExpression"
+_RecordUpdateExpression = Model.Name "hydra.haskell.syntax.RecordUpdateExpression"
 
-_RecordUpdateExpression_inner = Core.Name "inner"
+_RecordUpdateExpression_inner = Model.Name "inner"
 
-_RecordUpdateExpression_fields = Core.Name "fields"
+_RecordUpdateExpression_fields = Model.Name "fields"
 
 -- | A right-hand side of a binding
 newtype RightHandSide =
@@ -868,7 +868,7 @@
     unRightHandSide :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_RightHandSide = Core.Name "hydra.haskell.syntax.RightHandSide"
+_RightHandSide = Model.Name "hydra.haskell.syntax.RightHandSide"
 
 -- | A section expression
 data SectionExpression =
@@ -879,11 +879,11 @@
     sectionExpressionExpression :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_SectionExpression = Core.Name "hydra.haskell.syntax.SectionExpression"
+_SectionExpression = Model.Name "hydra.haskell.syntax.SectionExpression"
 
-_SectionExpression_operator = Core.Name "operator"
+_SectionExpression_operator = Model.Name "operator"
 
-_SectionExpression_expression = Core.Name "expression"
+_SectionExpression_expression = Model.Name "expression"
 
 -- | A simple value binding
 data SimpleValueBinding =
@@ -898,15 +898,15 @@
     simpleValueBindingComments :: (Maybe String)}
   deriving (Eq, Ord, Read, Show)
 
-_SimpleValueBinding = Core.Name "hydra.haskell.syntax.SimpleValueBinding"
+_SimpleValueBinding = Model.Name "hydra.haskell.syntax.SimpleValueBinding"
 
-_SimpleValueBinding_pattern = Core.Name "pattern"
+_SimpleValueBinding_pattern = Model.Name "pattern"
 
-_SimpleValueBinding_rhs = Core.Name "rhs"
+_SimpleValueBinding_rhs = Model.Name "rhs"
 
-_SimpleValueBinding_localBindings = Core.Name "localBindings"
+_SimpleValueBinding_localBindings = Model.Name "localBindings"
 
-_SimpleValueBinding_comments = Core.Name "comments"
+_SimpleValueBinding_comments = Model.Name "comments"
 
 -- | A do-notation statement
 newtype Statement =
@@ -914,7 +914,7 @@
     unStatement :: Expression}
   deriving (Eq, Ord, Read, Show)
 
-_Statement = Core.Name "hydra.haskell.syntax.Statement"
+_Statement = Model.Name "hydra.haskell.syntax.Statement"
 
 -- | A type expression
 data Type =
@@ -934,21 +934,21 @@
   TypeVariable Name
   deriving (Eq, Ord, Read, Show)
 
-_Type = Core.Name "hydra.haskell.syntax.Type"
+_Type = Model.Name "hydra.haskell.syntax.Type"
 
-_Type_application = Core.Name "application"
+_Type_application = Model.Name "application"
 
-_Type_ctx = Core.Name "ctx"
+_Type_ctx = Model.Name "ctx"
 
-_Type_function = Core.Name "function"
+_Type_function = Model.Name "function"
 
-_Type_infix = Core.Name "infix"
+_Type_infix = Model.Name "infix"
 
-_Type_list = Core.Name "list"
+_Type_list = Model.Name "list"
 
-_Type_tuple = Core.Name "tuple"
+_Type_tuple = Model.Name "tuple"
 
-_Type_variable = Core.Name "variable"
+_Type_variable = Model.Name "variable"
 
 -- | A type signature
 data TypeSignature =
@@ -959,11 +959,11 @@
     typeSignatureType :: Type}
   deriving (Eq, Ord, Read, Show)
 
-_TypeSignature = Core.Name "hydra.haskell.syntax.TypeSignature"
+_TypeSignature = Model.Name "hydra.haskell.syntax.TypeSignature"
 
-_TypeSignature_name = Core.Name "name"
+_TypeSignature_name = Model.Name "name"
 
-_TypeSignature_type = Core.Name "type"
+_TypeSignature_type = Model.Name "type"
 
 -- | A type synonym declaration
 data TypeSynonymDeclaration =
@@ -976,13 +976,13 @@
     typeSynonymDeclarationComments :: (Maybe String)}
   deriving (Eq, Ord, Read, Show)
 
-_TypeSynonymDeclaration = Core.Name "hydra.haskell.syntax.TypeSynonymDeclaration"
+_TypeSynonymDeclaration = Model.Name "hydra.haskell.syntax.TypeSynonymDeclaration"
 
-_TypeSynonymDeclaration_name = Core.Name "name"
+_TypeSynonymDeclaration_name = Model.Name "name"
 
-_TypeSynonymDeclaration_type = Core.Name "type"
+_TypeSynonymDeclaration_type = Model.Name "type"
 
-_TypeSynonymDeclaration_comments = Core.Name "comments"
+_TypeSynonymDeclaration_comments = Model.Name "comments"
 
 -- | A binding with its type signature
 data TypedBinding =
@@ -995,13 +995,13 @@
     typedBindingComments :: (Maybe String)}
   deriving (Eq, Ord, Read, Show)
 
-_TypedBinding = Core.Name "hydra.haskell.syntax.TypedBinding"
+_TypedBinding = Model.Name "hydra.haskell.syntax.TypedBinding"
 
-_TypedBinding_typeSignature = Core.Name "typeSignature"
+_TypedBinding_typeSignature = Model.Name "typeSignature"
 
-_TypedBinding_valueBinding = Core.Name "valueBinding"
+_TypedBinding_valueBinding = Model.Name "valueBinding"
 
-_TypedBinding_comments = Core.Name "comments"
+_TypedBinding_comments = Model.Name "comments"
 
 -- | A type signature expression
 data TypedExpression =
@@ -1012,11 +1012,11 @@
     typedExpressionType :: Type}
   deriving (Eq, Ord, Read, Show)
 
-_TypedExpression = Core.Name "hydra.haskell.syntax.TypedExpression"
+_TypedExpression = Model.Name "hydra.haskell.syntax.TypedExpression"
 
-_TypedExpression_inner = Core.Name "inner"
+_TypedExpression_inner = Model.Name "inner"
 
-_TypedExpression_type = Core.Name "type"
+_TypedExpression_type = Model.Name "type"
 
 -- | A typed pattern
 data TypedPattern =
@@ -1027,11 +1027,11 @@
     typedPatternType :: Type}
   deriving (Eq, Ord, Read, Show)
 
-_TypedPattern = Core.Name "hydra.haskell.syntax.TypedPattern"
+_TypedPattern = Model.Name "hydra.haskell.syntax.TypedPattern"
 
-_TypedPattern_inner = Core.Name "inner"
+_TypedPattern_inner = Model.Name "inner"
 
-_TypedPattern_type = Core.Name "type"
+_TypedPattern_type = Model.Name "type"
 
 -- | A value binding
 data ValueBinding =
@@ -1039,9 +1039,9 @@
   ValueBindingSimple SimpleValueBinding
   deriving (Eq, Ord, Read, Show)
 
-_ValueBinding = Core.Name "hydra.haskell.syntax.ValueBinding"
+_ValueBinding = Model.Name "hydra.haskell.syntax.ValueBinding"
 
-_ValueBinding_simple = Core.Name "simple"
+_ValueBinding_simple = Model.Name "simple"
 
 -- | A type variable
 newtype Variable =
@@ -1049,4 +1049,4 @@
     unVariable :: Name}
   deriving (Eq, Ord, Read, Show)
 
-_Variable = Core.Name "hydra.haskell.syntax.Variable"
+_Variable = Model.Name "hydra.haskell.syntax.Variable"
diff --git a/src/main/haskell/Hydra/Haskell/Testing.hs b/src/main/haskell/Hydra/Haskell/Testing.hs
--- a/src/main/haskell/Hydra/Haskell/Testing.hs
+++ b/src/main/haskell/Hydra/Haskell/Testing.hs
@@ -4,66 +4,68 @@
 
 module Hydra.Haskell.Testing where
 
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Constants as Constants
-import qualified Hydra.Core as Core
-import qualified Hydra.Decode.Core as DecodeCore
-import qualified Hydra.Dependencies as Dependencies
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Ast as Ast
+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.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Formatting as Formatting
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.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.Pairs as Pairs
+import qualified Hydra.Core.Overlay.Haskell.Lib.Sets as Sets
+import qualified Hydra.Core.Overlay.Haskell.Lib.Strings as Strings
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Names as Names
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Predicates as Predicates
+import qualified Hydra.Core.Print.Errors as PrintErrors
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Rewriting as Rewriting
+import qualified Hydra.Core.Scoping as Scoping
+import qualified Hydra.Core.Strip as Strip
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variants as Variants
 import qualified Hydra.Haskell.Syntax as Syntax
 import qualified Hydra.Haskell.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.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.Errors as PrintErrors
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Rewriting as Rewriting
-import qualified Hydra.Scoping as Scoping
-import qualified Hydra.Strip as Strip
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.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
 
 -- | Add namespaces from a set of names to existing namespaces
-addNamespacesToNamespaces :: Util.ModuleNames Syntax.ModuleName -> S.Set Core.Name -> Util.ModuleNames Syntax.ModuleName
+addNamespacesToNamespaces :: Util.ModuleNames Syntax.ModuleName -> S.Set Model.Name -> Util.ModuleNames Syntax.ModuleName
 addNamespacesToNamespaces ns0 names =
 
       let newNamespaces = Sets.fromList (Optionals.givens (Lists.map Names.moduleNameOf (Sets.toList names)))
@@ -81,20 +83,20 @@
       let testCases_ = collectTestCases tgroup
           testTerms = Lists.concat (Lists.map extractTestTerms testCases_)
           testBindings =
-                  Lists.map (\term -> Core.Binding {
-                    Core.bindingName = (Core.Name "_test_"),
-                    Core.bindingTerm = term,
-                    Core.bindingTypeScheme = Nothing}) testTerms
+                  Lists.map (\term -> Model.Binding {
+                    Model.bindingName = (Model.Name "_test_"),
+                    Model.bindingTerm = term,
+                    Model.bindingTypeScheme = Nothing}) testTerms
           tempModule =
                   Packaging.Module {
                     Packaging.moduleName = (Packaging.moduleName mod),
                     Packaging.moduleMetadata = (Packaging.moduleMetadata mod),
                     Packaging.moduleDependencies = (Packaging.moduleDependencies mod),
                     Packaging.moduleDefinitions = (Lists.map (\b -> Packaging.DefinitionTerm (Packaging.TermDefinition {
-                      Packaging.termDefinitionName = (Core.bindingName b),
+                      Packaging.termDefinitionName = (Model.bindingName b),
                       Packaging.termDefinitionMetadata = Nothing,
-                      Packaging.termDefinitionSignature = (Optionals.map Scoping.typeSchemeToTermSignature (Core.bindingTypeScheme b)),
-                      Packaging.termDefinitionBody = (Core.bindingTerm b)})) testBindings)}
+                      Packaging.termDefinitionSignature = (Optionals.map Scoping.typeSchemeToTermSignature (Model.bindingTypeScheme b)),
+                      Packaging.termDefinitionBody = (Model.bindingTerm b)})) testBindings)}
       in (Eithers.bind (Eithers.bimap (\e -> PrintErrors.error e) (\a -> a) (Utils.namespacesForModule tempModule Lexical.emptyInferenceContext graph_)) (\baseNamespaces ->
         let encodedNames = Sets.unions (Lists.map (\t -> extractEncodedTermVariableNames graph_ t) testTerms)
         in (Right (addNamespacesToNamespaces baseNamespaces encodedNames))))
@@ -144,9 +146,9 @@
         "\n"])
 
 -- | Collect variable names from encoded terms within a single term node
-collectNames :: Graph.Graph -> S.Set Core.Name -> Core.Term -> S.Set Core.Name
+collectNames :: Graph.Graph -> S.Set Model.Name -> Model.Term -> S.Set Model.Name
 collectNames graf names t =
-    Logic.ifElse (Predicates.isEncodedTerm (Strip.deannotateTerm t)) (Eithers.either (\_ -> names) (\decodedTerm -> Sets.union names (Dependencies.termDependencyNames True True True decodedTerm)) (Eithers.bimap (\_e -> _e) (\_a -> _a) (DecodeCore.term graf t))) names
+    Logic.ifElse (Predicates.isEncodedTerm (Strip.deannotateTerm t)) (Eithers.either (\_ -> names) (\decodedTerm -> Sets.union names (Dependencies.termDependencyNames True True True decodedTerm)) (Eithers.bimap (\_e -> _e) (\_a -> _a) (DecodeModel.term graf t))) names
 
 -- | Collect all test cases from a test group recursively
 collectTestCases :: Testing.TestGroup -> [Testing.TestCaseWithMetadata]
@@ -154,7 +156,7 @@
     Lists.concat2 (Testing.testGroupCases tg) (Lists.concat (Lists.map collectTestCases (Testing.testGroupSubgroups tg)))
 
 -- | Extract all variable names from term-encoded terms in a given term
-extractEncodedTermVariableNames :: Graph.Graph -> Core.Term -> S.Set Core.Name
+extractEncodedTermVariableNames :: Graph.Graph -> Model.Term -> S.Set Model.Name
 extractEncodedTermVariableNames graf term =
     Rewriting.foldOverTerm Coders.TraversalOrderPre (collectNames graf) Sets.empty term
 
@@ -168,7 +170,7 @@
 
       let mapping_ = Util.moduleNamesMapping namespaces
           filtered =
-                  Maps.filterWithKey (\ns_ -> \_v -> Logic.not (Equality.equal (Optionals.withDefault "" (Lists.head (Strings.splitOn "hydra.test." (Packaging.unModuleName ns_)))) "")) mapping_
+                  Maps.filterWithKey (\ns_ -> \_v -> Logic.not (Equality.equal (Optionals.withDefault "" (Lists.head (Strings.splitOn "hydra.core.test." (Packaging.unModuleName ns_)))) "")) mapping_
       in (Lists.map (\entry -> Strings.concat [
         "import qualified ",
         (Strings.join "." (Lists.map Formatting.capitalize (Strings.splitOn "." (Packaging.unModuleName (Pairs.first entry))))),
diff --git a/src/main/haskell/Hydra/Haskell/Utils.hs b/src/main/haskell/Hydra/Haskell/Utils.hs
--- a/src/main/haskell/Hydra/Haskell/Utils.hs
+++ b/src/main/haskell/Hydra/Haskell/Utils.hs
@@ -4,52 +4,54 @@
 
 module Hydra.Haskell.Utils where
 
-import qualified Hydra.Analysis as Analysis
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
+import qualified Hydra.Core.Analysis as Analysis
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.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.Maps as Maps
+import qualified Hydra.Core.Overlay.Haskell.Lib.Math as Math
+import qualified Hydra.Core.Overlay.Haskell.Lib.Optionals as Optionals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Ordering as Ordering
+import qualified Hydra.Core.Overlay.Haskell.Lib.Pairs as Pairs
+import qualified Hydra.Core.Overlay.Haskell.Lib.Sets as Sets
+import qualified Hydra.Core.Overlay.Haskell.Lib.Strings as Strings
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Names as Names
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Strip as Strip
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variants as Variants
 import qualified Hydra.Haskell.Language as Language
 import qualified Hydra.Haskell.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.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.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Strip as Strip
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.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
@@ -63,7 +65,7 @@
       Syntax.applicationPatternArgs = args})
 
 -- | Generate a Haskell name reference for a Hydra element
-elementReference :: Util.ModuleNames Syntax.ModuleName -> Core.Name -> Syntax.Name
+elementReference :: Util.ModuleNames Syntax.ModuleName -> Model.Name -> Syntax.Name
 elementReference namespaces name =
 
       let namespacePair = Util.moduleNamesFocus namespaces
@@ -175,7 +177,7 @@
         Util.moduleNamesMapping = resultMap})))
 
 -- | Generate an accessor name for a newtype wrapper (e.g., 'unFoo' for Foo)
-newtypeAccessorName :: Core.Name -> String
+newtypeAccessorName :: Model.Name -> String
 newtypeAccessorName name = Strings.concat2 "un" (Names.localNameOf name)
 
 -- | Create a raw Haskell name from a string without sanitization
@@ -186,10 +188,10 @@
       Syntax.qualifiedNameUnqualified = (Syntax.NamePart n)})
 
 -- | Generate a Haskell name for a record field accessor
-recordFieldReference :: Util.ModuleNames Syntax.ModuleName -> Core.Name -> Core.Name -> Syntax.Name
+recordFieldReference :: Util.ModuleNames Syntax.ModuleName -> Model.Name -> Model.Name -> Syntax.Name
 recordFieldReference namespaces sname fname =
 
-      let fnameStr = Core.unName fname
+      let fnameStr = Model.unName fname
           qname = Names.qualifyName sname
           ns = Util.qualifiedNameModuleName qname
           typeNameStr = typeNameForRecord sname
@@ -241,18 +243,18 @@
       in (app (Lists.reverse types))
 
 -- | Extract the local type name from a fully qualified record type name
-typeNameForRecord :: Core.Name -> String
+typeNameForRecord :: Model.Name -> String
 typeNameForRecord sname =
 
-      let snameStr = Core.unName sname
+      let snameStr = Model.unName sname
           parts = Strings.splitOn "." snameStr
       in (Optionals.withDefault snameStr (Lists.last parts))
 
 -- | Generate a Haskell name for a union variant constructor, with disambiguation
-unionFieldReference :: S.Set Core.Name -> Util.ModuleNames Syntax.ModuleName -> Core.Name -> Core.Name -> Syntax.Name
+unionFieldReference :: S.Set Model.Name -> Util.ModuleNames Syntax.ModuleName -> Model.Name -> Model.Name -> Syntax.Name
 unionFieldReference boundNames namespaces sname fname =
 
-      let fnameStr = Core.unName fname
+      let fnameStr = Model.unName fname
           qname = Names.qualifyName sname
           ns = Util.qualifiedNameModuleName qname
           typeNameStr = typeNameForRecord sname
@@ -274,12 +276,12 @@
       in (elementReference namespaces unqualName)
 
 -- | Unpack nested forall types into a list of type variables and the inner type
-unpackForallType :: Core.Type -> ([Core.Name], Core.Type)
+unpackForallType :: Model.Type -> ([Model.Name], Model.Type)
 unpackForallType t =
     case (Strip.deannotateType t) of
-      Core.TypeForall v0 ->
-        let v = Core.forallTypeParameter v0
-            tbody = Core.forallTypeBody v0
+      Model.TypeForall v0 ->
+        let v = Model.forallTypeParameter v0
+            tbody = Model.forallTypeBody v0
             recursiveResult = unpackForallType tbody
             vars = Pairs.first recursiveResult
             finalType = Pairs.second recursiveResult
