packages feed

hydra-go (empty) → 0.17.0

raw patch · 7 files changed

+10031/−0 lines, 7 filesdep +basedep +containersdep +hydra-kernel

Dependencies added: base, containers, hydra-kernel, scientific

Files

+ CHANGELOG.md view
@@ -0,0 +1,1372 @@+# Hydra changelog++All notable changes to the Hydra project are documented in this file.++This changelog tracks changes across all Hydra implementations+(Haskell, Java, Python, Scala, TypeScript, Clojure, Common Lisp, Emacs Lisp, Scheme)+and supporting infrastructure.++The format is inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)+and [Apache TinkerPop](https://github.com/apache/tinkerpop/blob/master/CHANGELOG.asciidoc).++Pre-1.0 versions are listed below.+Untagged versions correspond to in-repository version bumps that were not pushed as Git tags or Hackage releases;+they are documented here for completeness.++---++## [0.17.0] - 2026-07-01++Major themes: first-class support for effects and I/O in the kernel, TypeScript and+Scala reaching publishable parity with the other hosts, and continued maturation of+the published-host build model.++### Highlights++- **Effects and I/O** ([#286](https://github.com/CategoricalData/hydra/issues/286),+  [#288](https://github.com/CategoricalData/hydra/issues/288),+  [#494](https://github.com/CategoricalData/hydra/issues/494)): a new `effect` variant+  on `hydra.core.Type` for representing effectful computations; new kernel modules+  `hydra.file` (`FilePath`, `FileType`, `FileStatus`, `FileExtension`), `hydra.time`+  (`Timespec`), and `hydra.error.file`; new primitive libraries `hydra.lib.effects`,+  `hydra.lib.files`, and `hydra.lib.text` with byte-level I/O; and a new+  `EffectfulTestCase` mechanism so the common test suite can exercise effectful+  primitives across hosts.+- **TypeScript is a complete implementation**+  ([#462](https://github.com/CategoricalData/hydra/issues/462)): self-hosts and passes+  the common test suite, with a per-package npm publish pipeline+  ([#492](https://github.com/CategoricalData/hydra/issues/492)).+- **Scala publishing**: per-package Maven Central publish infrastructure+  ([#491](https://github.com/CategoricalData/hydra/issues/491)).+- **Published-host build model**: published mode now compiles the kernel from the+  co-generated `dist/haskell` rather than Hackage, removing the need for a+  `haskell=local` shim ([#500](https://github.com/CategoricalData/hydra/issues/500));+  the oil-and-water principle and cold-build workflow for `dist/haskell` are documented+  ([#376](https://github.com/CategoricalData/hydra/issues/376)).+- **Kernel hygiene**: `uniqueLabel` (apostrophe suffixes) replaced by `chooseUniqueLabel`+  (numeric suffixes) in `hydra.names`+  ([#436](https://github.com/CategoricalData/hydra/issues/436)).++### Implementations++Eight hosts self-host and pass the common test suite across five families: Haskell,+Java, Python, Scala, and the four Lisp dialects (Clojure, Common Lisp, Scheme, Emacs+Lisp), with TypeScript now joining as a complete host/target. Go remains a "head bud"+(the coder still has emission bugs and the head's runtime is largely placeholder; it+does not yet host the test suite).++### New Features++- Translingual cross-reference convention for `doc` strings: doc-escape tags render to+  each host's native doc syntax (Javadoc, Haddock, Sphinx, TSDoc)+  ([#433](https://github.com/CategoricalData/hydra/issues/433)).+- Neo4j JSON-artifact validation demo, exercised across Java, Python, Haskell, and+  TypeScript ([#510](https://github.com/CategoricalData/hydra/issues/510)).++### Improvements++- The Java/Maven publish set now covers every official Hydra target language, one coder+  package per implementation family+  ([#468](https://github.com/CategoricalData/hydra/issues/468)).+- JVM Maven artifact groups are bifurcated to `net.fortytwo.hydra.java` and+  `net.fortytwo.hydra.scala`, so the Java and Scala (and future Clojure) publish sets+  never collide on coordinates+  ([#519](https://github.com/CategoricalData/hydra/issues/519)).+- Host-specific third-party integrations (the former `bindings/` tree) are folded into+  `overlay/`, unifying hand-written host-native source under one tree+  ([#511](https://github.com/CategoricalData/hydra/issues/511)).+- The coder de-parameterizes context and error types, simplifying generated coder+  signatures ([#518](https://github.com/CategoricalData/hydra/issues/518)).+- TypeScript-to-Java generation now emits the `hydra.lib.*` aggregate namespace+  interfaces (`Maps`, `Strings`, etc.)+  ([#499](https://github.com/CategoricalData/hydra/issues/499)).++---++## [0.16.1] - 2026-06-16++Major themes: the first release built by bootstrapping from previously published+packages, the first full 9 × 9 cross-implementation bootstrapping sweep, and+published-package self-containment fixes for the artifacts that bootstrap rests on.++### Highlights++- **Bootstrap from published packages**: the build links the published 0.16.0 hosts+  (Hackage / Maven Central / PyPI) and uses them to build the next version of Hydra,+  resting on 0.16.0's forward-compatibility guarantees — the published-host consume+  model with a `--local-host` shim, used for the first time in a release+  ([#370](https://github.com/CategoricalData/hydra/issues/370)). 0.16.1 still builds+  against **local** Haskell and Python hosts (`hostOverrides`), because the published+  0.16.0 artifacts it would otherwise consume are the very ones being repaired below.+- **First full 9 × 9 bootstrapping sweep** — every implementation generating every+  other; dozens of cross-host issues surfaced and fixed+  ([#409](https://github.com/CategoricalData/hydra/issues/409), ongoing).+- **Published-package self-containment**: relocate each host's hand-written runtime+  into `overlay/<lang>/hydra-kernel/` so it ships inside the published `hydra-kernel`+  artifact — Python `hydra.python.util` into the wheel+  ([#461](https://github.com/CategoricalData/hydra/issues/461),+  [#472](https://github.com/CategoricalData/hydra/issues/472)) and the Haskell+  authoring DSL + `Libraries`/`Terms` into the sdist+  ([#473](https://github.com/CategoricalData/hydra/issues/473)). Generalized to a+  uniform `overlay/ = transform(packages) + copy(overlay)` model across all hosts+  ([#434](https://github.com/CategoricalData/hydra/issues/434)).+- **Kernel self-containment via generated `hydra.lib.*` registries**: primitive+  names are derived from generated `PrimitiveDefinition` def-modules rather than+  hand-written name strings, in every host+  ([#473](https://github.com/CategoricalData/hydra/issues/473)).+- **In-memory encode/decode synthesis**: derived `hydra.{encode,decode}.*` modules+  are synthesized at build time and excluded from `dist/`, with the synthesizer (not+  inference) as the authority for their annotations+  ([#448](https://github.com/CategoricalData/hydra/issues/448),+  [#476](https://github.com/CategoricalData/hydra/issues/476)).+- **Release hardening**: Apache source-release compliance (signed source archive,+  LICENSE/NOTICE bundling, KEYS) ([#441](https://github.com/CategoricalData/hydra/issues/441)),+  per-package publish orchestrators ([#449](https://github.com/CategoricalData/hydra/issues/449)),+  and packaging-boundary verification gated in CI and at publish time+  ([#472](https://github.com/CategoricalData/hydra/issues/472)).++### New features++- Published-host consume model wired through `bin/sync.sh` for all three hosts+  (`--published-host` default, `--local-host` shim), with the version basis keyed+  off `hydra.json` and the `VERSION` file retired+  ([#370](https://github.com/CategoricalData/hydra/issues/370),+  [#347](https://github.com/CategoricalData/hydra/issues/347)).+- Java and Python coder DSL sources made the sole source of truth; the legacy+  Haskell DSL copies were deleted and cross-package references resolve by name+  ([#346](https://github.com/CategoricalData/hydra/issues/346)).+- Per-host `verify-distribution.sh` self-containment gates (Haskell stages the+  per-package trio and `stack build`s it; Python installs the wheels into an+  isolated venv and imports the kernel modules; Java resolves the published jars+  from an offline consumer), run in CI and as a hard gate in `bin/prepare-release.sh`+  ([#472](https://github.com/CategoricalData/hydra/issues/472)).+- Apache-compliant canonical source archive: signed + checksummed `git archive`+  tarball as the release of record, root `NOTICE`, `KEYS`, and a release-verify CI+  workflow ([#441](https://github.com/CategoricalData/hydra/issues/441)).+- Per-package publish orchestrators `publish-maven.sh` / `publish-pypi.sh` with+  dependency-closure and leaves-first ordering checks+  ([#449](https://github.com/CategoricalData/hydra/issues/449)).+- `hydra-typescript` published as a target Java/Maven + PyPI artifact+  ([#468](https://github.com/CategoricalData/hydra/issues/468)).+- Java coder emits a fluent builder for every generated record type+  ([#465](https://github.com/CategoricalData/hydra/issues/465)); Python coder emits+  per-field `with_<field>` copy-update methods and a fluent builder+  ([#466](https://github.com/CategoricalData/hydra/issues/466)).++### Improvements++- Drop the vestigial `InferenceContext` parameter from the `Primitive.implementation`+  carrier across all hosts; add a graph-free `funT` coder and six `lists` default+  implementations ([#446](https://github.com/CategoricalData/hydra/issues/446)).+- Derive package routing from declared modules; split derived generation into broad+  `mainDslModules` and scoped `mainEncodingModules`+  ([#474](https://github.com/CategoricalData/hydra/issues/474),+  [#475](https://github.com/CategoricalData/hydra/issues/475)).+- Hash JSON content into the per-package input digest; add `digest-check+  refresh-input` and a CI guard that force-regenerates and diffs+  `dist/haskell/hydra-{java,python}` ([#469](https://github.com/CategoricalData/hydra/issues/469)).+- Per-package inference seeds downstream packages from each package's full universe+  while inferring only write targets, fixing `hydra-scala` inference within the CI+  heap budget; declare the `hydra-java` dependency in `hydra-scala` for cold+  ordering ([#470](https://github.com/CategoricalData/hydra/issues/470)).+- Remove the vestigial `Lib/Defaults` registry and empty `defaultLibModules`+  manifest field from all hosts ([#437](https://github.com/CategoricalData/hydra/issues/437)).+- Bundle LICENSE + NOTICE into Java jars (`META-INF`) and Python wheels+  (`dist-info`); declare Apache-2.0 in the Scala build+  ([#441](https://github.com/CategoricalData/hydra/issues/441)).+- Mark lazy parameters on the Scala and Common Lisp primitive registries so eager+  coders thunk correctly ([#453](https://github.com/CategoricalData/hydra/issues/453),+  [#477](https://github.com/CategoricalData/hydra/issues/477),+  [#425](https://github.com/CategoricalData/hydra/issues/425)).+- Staging-loop WIP-commit gate to keep `WIP:` commits off `origin/main`+  ([#466](https://github.com/CategoricalData/hydra/issues/466)).++### Bug fixes++- **Python wheel self-containment**: the `hydra-kernel` wheel now ships+  `hydra.python.util`; gated by a packaging-boundary smoke test in CI and+  `publish-pypi.sh` ([#472](https://github.com/CategoricalData/hydra/issues/472),+  [#461](https://github.com/CategoricalData/hydra/issues/461)).+- **Haskell sdist self-containment**: track the generated `Hydra/Dsl/Terms.hs`+  (was gitignored) so the committed dist exports `ToPrimName`, fixing the cold+  build of the published `hydra-kernel`+  ([#473](https://github.com/CategoricalData/hydra/issues/473)).+- Decode synthesizer threads the fully-applied result type into wrap/record/union+  decoder bodies, so derived decoders emit `DataRow<v>` rather than raw `DataRow`,+  fixing Java and Scala generic decode compilation+  ([#476](https://github.com/CategoricalData/hydra/issues/476)).+- Scala coder emits explicit type arguments for polymorphic non-primitive+  references under a type application (e.g. `requireField`), fixing `Any`-inference+  of curried decoder lambda parameters in `decode/typed`+  ([#434](https://github.com/CategoricalData/hydra/issues/434)).+- Common Lisp and Emacs Lisp: move the hand-written runtime to a dialect-tier path+  so it no longer collides with the generated `hydra.lib.*` def-modules+  ([#434](https://github.com/CategoricalData/hydra/issues/434)).+- Python coder uses the binding `TypeScheme` as the authoritative source for+  parameter and return types ([#488](https://github.com/CategoricalData/hydra/issues/488));+  fixes a duplicate `self` parameter in builders+  ([#478](https://github.com/CategoricalData/hydra/issues/478)).+- Sort term definitions by name in source-file generation so non-Haskell hosts emit+  deterministic alphabetical Haskell output (host-independent of `Maps.elems`+  iteration order) ([#489](https://github.com/CategoricalData/hydra/issues/489)).+- Java coder serializes the `static` method modifier (previously a non-exhaustive+  case) ([#465](https://github.com/CategoricalData/hydra/issues/465)); JavaDoc+  `@link`/`@param` sanitization for strict doclint+  ([#449](https://github.com/CategoricalData/hydra/issues/449)).+- Scala host writer appends a trailing newline when missing, fixing a Lisp-target+  byte mismatch ([#463](https://github.com/CategoricalData/hydra/issues/463)).+- Clojure host: silent wrapping `bigint_to_int{8,16,32,64}` casts per the kernel+  contract ([#483](https://github.com/CategoricalData/hydra/issues/483)); load-order+  and `--kernel-only` filter fixes after kernel renames+  ([#425](https://github.com/CategoricalData/hydra/issues/425)); load the+  `hydra-haskell` baseline for Clojure→Haskell rebuilds+  ([#487](https://github.com/CategoricalData/hydra/issues/487),+  [#460](https://github.com/CategoricalData/hydra/issues/460)).+- Lisp-dialect bootstrap fixes: emit JSON object entries as 2-element `Pair` lists+  rather than dotted cons ([#452](https://github.com/CategoricalData/hydra/issues/452),+  also fixing [#16](https://github.com/CategoricalData/hydra/issues/16)); read+  module names via the correct struct accessor+  ([#471](https://github.com/CategoricalData/hydra/issues/471)); drop stale+  surplus flag arguments from `generate-source-files` calls+  ([#457](https://github.com/CategoricalData/hydra/issues/457),+  [#458](https://github.com/CategoricalData/hydra/issues/458),+  [#464](https://github.com/CategoricalData/hydra/issues/464)); rename eta-wrapped+  projection/unwrap parameters to avoid kernel shadowing+  ([#428](https://github.com/CategoricalData/hydra/issues/428)); propagate a+  non-zero exit from the Scheme test runner on failures and fix Scheme float+  scientific-notation formatting for `|x| >= 1e7`+  ([#447](https://github.com/CategoricalData/hydra/issues/447)).+- Cross-host target dispatch: Common Lisp and Clojure hosts dispatch Scala and+  TypeScript targets ([#482](https://github.com/CategoricalData/hydra/issues/482),+  [#483](https://github.com/CategoricalData/hydra/issues/483)); Scala/Java host+  target-dispatch completions ([#5](https://github.com/CategoricalData/hydra/issues/5),+  [#7](https://github.com/CategoricalData/hydra/issues/7),+  [#17](https://github.com/CategoricalData/hydra/issues/17)).+- TypeScript test runtime reads the kernel JSON field names `body`/`signature`+  (not legacy `term`/`typeScheme`); `lists.nub` dedups by canonical JSON+  ([#485](https://github.com/CategoricalData/hydra/issues/485)).+- Sync robustness: always reassemble `dist/python` under `HYDRA_IN_SYNC` to heal+  partial-dist state ([#480](https://github.com/CategoricalData/hydra/issues/480));+  persist the run dir on bootstrap prep-phase failures+  ([#481](https://github.com/CategoricalData/hydra/issues/481)); complete per-host+  static deps so the bootstrap demo finds fresh dist+  ([#445](https://github.com/CategoricalData/hydra/issues/445)).+- Pin the Python target test interpreter to Python ≥ 3.12+  ([#486](https://github.com/CategoricalData/hydra/issues/486)); Emacs Lisp / Scheme+  target test-runner re-copy robustness+  ([#456](https://github.com/CategoricalData/hydra/issues/456)).+- JavaDoc Pages publish rewritten to build a combined site from the CI-generated+  `dist/java/` artifact, fixing the failure mode where `pages.yml` ran against a+  bare checkout with no `dist/java/` present+  ([#450](https://github.com/CategoricalData/hydra/issues/450)).++### Documentation++- Document the `overlay/` self-containment model, the published-host consume model+  for all three hosts, the `hydra.json` version / host-version basis, and a+  migration-shims recipe ([#434](https://github.com/CategoricalData/hydra/issues/434),+  [#370](https://github.com/CategoricalData/hydra/issues/370),+  [#347](https://github.com/CategoricalData/hydra/issues/347)).+- Document the kernel self-containment / `hydra.lib.*` def-module model and the+  derived-module no-inference invariant+  ([#473](https://github.com/CategoricalData/hydra/issues/473),+  [#466](https://github.com/CategoricalData/hydra/issues/466)); generated Java and+  Python record builders documented in the DSL guides+  ([#465](https://github.com/CategoricalData/hydra/issues/465),+  [#466](https://github.com/CategoricalData/hydra/issues/466)).+- Use absolute GitHub URLs in package READMEs so links resolve when published+  standalone ([#454](https://github.com/CategoricalData/hydra/issues/454)); bundle a+  README into each Python package dir for sdist metadata+  ([#418](https://github.com/CategoricalData/hydra/issues/418)).++---++## [0.16.0] - 2026-06-09++Major themes: primitive-metadata reification, self-hosting coder DSLs with all+eight hosts passing the common test suite, finalized `hydra.packaging`, and a+deep kernel-vocabulary cleanup.++### Highlights++- **`PrimitiveDefinition` and per-namespace registry modules** with host-independent+  specs for every standard-library primitive ([#156](https://github.com/CategoricalData/hydra/issues/156), [#319](https://github.com/CategoricalData/hydra/issues/319)).+- **Self-hosting coder DSLs; all eight hosts pass the common test suite**, including+  the completed TypeScript head ([#344](https://github.com/CategoricalData/hydra/issues/344), [#126](https://github.com/CategoricalData/hydra/issues/126)).+- **Finalized `hydra.packaging`** and a unified `Module.dependencies` field ([#369](https://github.com/CategoricalData/hydra/issues/369), [#354](https://github.com/CategoricalData/hydra/issues/354)).+- **Kernel-vocabulary cleanup**: `maybe`→`optional` across kernel and hosts, plus+  order-preserving JSON objects ([#401](https://github.com/CategoricalData/hydra/issues/401), [#398](https://github.com/CategoricalData/hydra/issues/398)).++### New features++- Reify `PrimitiveDefinition` in `hydra.packaging` with per-namespace `hydra.lib.<sub>` registries ([#156](https://github.com/CategoricalData/hydra/issues/156)).+- Host-independent `comments` specifications for all standard-library primitives ([#319](https://github.com/CategoricalData/hydra/issues/319)).+- Kernel-oriented style checks in `hydra.validate.*` ([#321](https://github.com/CategoricalData/hydra/issues/321), [#351](https://github.com/CategoricalData/hydra/issues/351), [#352](https://github.com/CategoricalData/hydra/issues/352)), on a reshaped validation API ([#320](https://github.com/CategoricalData/hydra/issues/320)).+- Promote the JSON Schema coder to a full DSL coder ([#350](https://github.com/CategoricalData/hydra/issues/350)).+- Transpose coder sources into host-native DSLs for self-hosting ([#344](https://github.com/CategoricalData/hydra/issues/344), [#358](https://github.com/CategoricalData/hydra/issues/358)).+- `Term`-typed annotations replacing `Map<Name, Term>` ([#386](https://github.com/CategoricalData/hydra/issues/386)).+- Language-specific EDSL features on the kernel `Language` ([#233](https://github.com/CategoricalData/hydra/issues/233)).+- Primitive-metadata-driven laziness in eager coders ([#391](https://github.com/CategoricalData/hydra/issues/391)).+- `/test` skill and `bin/test.sh` for target-language test validation ([#387](https://github.com/CategoricalData/hydra/issues/387)).+- Automatic differentiation: a `grad` transform ([#324](https://github.com/CategoricalData/hydra/issues/324)).+- `hydra.show.error.pg` for `InvalidGraphError` ([#374](https://github.com/CategoricalData/hydra/issues/374)).++### Improvements++- Finalize `hydra.packaging`: `Binding`→`TypeDefinition`, `Module`/`Package` `comments`, `moduleName` cleanup ([#369](https://github.com/CategoricalData/hydra/issues/369), [#396](https://github.com/CategoricalData/hydra/issues/396), [#402](https://github.com/CategoricalData/hydra/issues/402), [#404](https://github.com/CategoricalData/hydra/issues/404)).+- Merge `Module.termDependencies`/`typeDependencies` into one `dependencies` field ([#354](https://github.com/CategoricalData/hydra/issues/354)).+- Resolve the `maybe`/`optional` ambiguity across kernel and all hosts ([#401](https://github.com/CategoricalData/hydra/issues/401)).+- Order-preserving JSON objects; order-sensitive `Value` equality ([#398](https://github.com/CategoricalData/hydra/issues/398)).+- Rename `Namespace`→`ModuleName` ([#316](https://github.com/CategoricalData/hydra/issues/316)) and the phantom DSL types to `Typed*` ([#397](https://github.com/CategoricalData/hydra/issues/397)).+- Move from a type-class enum to type-class names ([#275](https://github.com/CategoricalData/hydra/issues/275)).+- Repackage "eval lib" modules as kernel lib modules; promote remaining sources ([#260](https://github.com/CategoricalData/hydra/issues/260), [#355](https://github.com/CategoricalData/hydra/issues/355), [#356](https://github.com/CategoricalData/hydra/issues/356)).+- Reshape `hydra.context` into `InferenceContext` ([#368](https://github.com/CategoricalData/hydra/issues/368)).+- Streamline the Haskell, Java, Python, and Scala syntax models, re-pinning Java to SE 21 and Python to the 3.14 PEG grammar ([#297](https://github.com/CategoricalData/hydra/issues/297)).+- Adopt persistent immutable collections across hosts ([#359](https://github.com/CategoricalData/hydra/issues/359), [#360](https://github.com/CategoricalData/hydra/issues/360), [#361](https://github.com/CategoricalData/hydra/issues/361), [#362](https://github.com/CategoricalData/hydra/issues/362)).+- Migrate underscored kernel definition names to camelCase ([#348](https://github.com/CategoricalData/hydra/issues/348)).+- Tidy qualified/unqualified imports in the Haskell DSL sources ([#308](https://github.com/CategoricalData/hydra/issues/308)).+- Eliminate the `Hydra.Module.Compat` shim ([#315](https://github.com/CategoricalData/hydra/issues/315)).+- Homogenize writer conventions across target languages ([#339](https://github.com/CategoricalData/hydra/issues/339)).+- Disambiguate format-version field naming across JSON metadata ([#412](https://github.com/CategoricalData/hydra/issues/412)).+- Per-package DSL→JSON build with per-package incremental inference ([#381](https://github.com/CategoricalData/hydra/issues/381), [#395](https://github.com/CategoricalData/hydra/issues/395)).+- Prune stale `dist/` outputs; self-heal digests; exclude digests from VCS; reconcile drift; fail loud ([#357](https://github.com/CategoricalData/hydra/issues/357), [#393](https://github.com/CategoricalData/hydra/issues/393), [#405](https://github.com/CategoricalData/hydra/issues/405), [#378](https://github.com/CategoricalData/hydra/issues/378), [#379](https://github.com/CategoricalData/hydra/issues/379), [#392](https://github.com/CategoricalData/hydra/issues/392), [#414](https://github.com/CategoricalData/hydra/issues/414)).+- Accept all valid (host, target) pairs in the generation drivers ([#421](https://github.com/CategoricalData/hydra/issues/421)).+- Move Gradle build infrastructure into `heads/java/`; remove top-level `pixi.toml` ([#384](https://github.com/CategoricalData/hydra/issues/384), [#385](https://github.com/CategoricalData/hydra/issues/385)).+- Eliminate post-generation test patches; fix loader/runner kludges; re-enable test timing ([#307](https://github.com/CategoricalData/hydra/issues/307), [#309](https://github.com/CategoricalData/hydra/issues/309), [#311](https://github.com/CategoricalData/hydra/issues/311)).+- Performance/benchmarks and usability assessments ([#277](https://github.com/CategoricalData/hydra/issues/277), [#283](https://github.com/CategoricalData/hydra/issues/283)).+- Split the Hackage distribution into per-package distributions ([#418](https://github.com/CategoricalData/hydra/issues/418)).++### Bug fixes++- Encode `uint32` JSON literals as numbers, not strings ([#431](https://github.com/CategoricalData/hydra/issues/431)).+- Satisfy or suppress warnings in generated Java ([#349](https://github.com/CategoricalData/hydra/issues/349)).+- Restore JSON parser test cases (polymorphic case handling, ordering fallback) ([#336](https://github.com/CategoricalData/hydra/issues/336)).+- Keep annotations through `termAlternatives`/`typeAlternatives` adaptation ([#353](https://github.com/CategoricalData/hydra/issues/353)).+- Scala host decodes module JSON containing term definitions ([#342](https://github.com/CategoricalData/hydra/issues/342)).+- Java coder: fix exponential `let`-bound `cases` cost ([#372](https://github.com/CategoricalData/hydra/issues/372)) and explicit type args on `PersistentMap.ofEntries` ([#394](https://github.com/CategoricalData/hydra/issues/394)).+- Python-host codegen: drop extra `pyStringToPyStrings` wrapping ([#367](https://github.com/CategoricalData/hydra/issues/367)).+- `escape_literal_char` no longer mangles RDF triples ([#363](https://github.com/CategoricalData/hydra/issues/363)).+- Sync robustness: stale coder JSON, omitted native modules, dead helper, bad source dirs ([#406](https://github.com/CategoricalData/hydra/issues/406), [#400](https://github.com/CategoricalData/hydra/issues/400), [#411](https://github.com/CategoricalData/hydra/issues/411), [#408](https://github.com/CategoricalData/hydra/issues/408)).+- Cross-host self-hosting fixes (Scala, TypeScript, and the four Lisp dialects) ([#422](https://github.com/CategoricalData/hydra/issues/422), [#423](https://github.com/CategoricalData/hydra/issues/423), [#424](https://github.com/CategoricalData/hydra/issues/424), [#429](https://github.com/CategoricalData/hydra/issues/429), [#444](https://github.com/CategoricalData/hydra/issues/444), [#366](https://github.com/CategoricalData/hydra/issues/366), [#389](https://github.com/CategoricalData/hydra/issues/389), [#407](https://github.com/CategoricalData/hydra/issues/407), [#425](https://github.com/CategoricalData/hydra/issues/425), [#426](https://github.com/CategoricalData/hydra/issues/426), [#427](https://github.com/CategoricalData/hydra/issues/427), [#432](https://github.com/CategoricalData/hydra/issues/432), [#438](https://github.com/CategoricalData/hydra/issues/438), [#439](https://github.com/CategoricalData/hydra/issues/439), [#443](https://github.com/CategoricalData/hydra/issues/443)).++### Removed++- Removed the `bigfloat` literal type from `FloatType` and `FloatValue` ([#330](https://github.com/CategoricalData/hydra/issues/330)).+  Arbitrary-precision floating-point values were inconsistently supported+  across host languages (Java/Scala in particular lacked a true IEEE 754+  arbitrary-precision implementation), and nothing in the codebase relied on+  them. `FloatType` and `FloatValue` now have only `float32` and `float64`+  variants. Removed library primitives: `bigfloatToBigint`, `bigfloatToFloat32`,+  `bigfloatToFloat64`, `bigintToBigfloat`, `float32ToBigfloat`,+  `float64ToBigfloat`, `readBigfloat`, `showBigfloat`, `roundBigfloat`. New+  primitives `float32ToFloat64` and `float64ToFloat32` (the latter lossy)+  replace the removed bigfloat-routed conversions.+- Removed `heads/haskell/bin/assemble-hackage-sdist.sh` ([#418](https://github.com/CategoricalData/hydra/issues/418)), the 0.15-era+  bridge that flattened the multi-source-dir Haskell head into one self-contained+  `hydra` sdist. Superseded by the per-package assembler (see Improvements).++### Documentation++- Comprehensive documentation refresh for 0.16 ([#383](https://github.com/CategoricalData/hydra/issues/383))+  spanning nine tracks across READMEs, `docs/`, the wiki, CLAUDE.md, and+  in-source kernel comments.+- New `docs/json-format.md` reference describing the canonical JSON wire format+  (tagged-union duality, optional-field rules, IEEE 754 sentinels, integer+  threshold).+- New wiki pages: `Design` (rationale behind each major choice) and `Inference`+  (HM type inference with class constraints).+- Cross-checked every prose doc against current code; corrected drift in+  primitive-checking sections of `docs/recipes/maintenance.md`, the `Primitive`+  shape in `docs/implementation.md` and `docs/recipes/adding-primitives.md`,+  and the build-system narrative.+- Wove motivation ("the why") through the existing doc surface rather than+  collecting it into separately-titled sidebars; landed an inference-overview+  centerpiece on the wiki ([#377](https://github.com/CategoricalData/hydra/issues/377)).+- Aligned doc vocabulary with the LambdaGraph paper and the literature review+  for the design space Hydra inhabits.+- Net-new READMEs for `packages/hydra-kernel`, `packages/hydra-ext`,+  `packages/hydra-coq`, and `packages/hydra-wasm`; top-level `README.md`+  now carries a canonical packages table.+- Audited and refreshed the Claude surface: CLAUDE.md "Where to look up X"+  table extended with rows for `docs/getting-started.md`, `docs/json-format.md`,+  and the `Design` / `Inference` wiki pages; hard-rules block reordered by+  violation frequency; `claude/pitfalls.md` superseded entries folded into+  `docs/troubleshooting.md` / recipes.+- Project-descriptor strings reviewed and aligned across 24 build / packaging+  files (Hackage synopsis, Maven Central description, PyPI / conda-forge+  classifiers, Hydra-format `package.json` files).+- `docs/index.html` (the GitHub Pages landing page) refreshed with audience+  hops into wiki Concepts / Design, `docs/getting-started.md`, and the GitHub+  repo, plus the full published-artifact list across Hackage, Maven Central,+  PyPI, and conda-forge.+- In-source kernel-code rationale comments added at key Sources sites covering+  injection / pair / either / unit-void duality, error taxonomy, variant+  records, inference-context threading, validation profiles, reduction state,+  lexical filters, name mangling, scoping, variable handling, defaults+  integration, and Tarjan SCC choice rationale. JSON encode/decode modules+  cross-reference `docs/json-format.md`.+- Filed `Primitive.implementation` carrier-simplification follow-up+  ([#446](https://github.com/CategoricalData/hydra/issues/446))+  to drop the unused `InferenceContext` and `Graph` parameters once the+  `Lib/Defaults/` integration ([#437](https://github.com/CategoricalData/hydra/issues/437))+  lands.++---++## [0.15.0] - 2026-04-29++A structural-cleanup release.+The repository is reorganized into a three-tree+`packages/` (DSL sources) / `heads/` (per-host runtime) / `dist/` (generated output)+layout ([#290](https://github.com/CategoricalData/hydra/issues/290)), the kernel is simplified ([#251](https://github.com/CategoricalData/hydra/issues/251), [#292](https://github.com/CategoricalData/hydra/issues/292), [#332](https://github.com/CategoricalData/hydra/issues/332)), and Java + Python now+ship as per-package publishable artifacts on Maven Central / PyPI / conda-forge+([#305](https://github.com/CategoricalData/hydra/issues/305)).+Incremental, content-hash-based caches accelerate the sync pipeline ([#247](https://github.com/CategoricalData/hydra/issues/247)).+Three new generation-only targets — Coq ([#326](https://github.com/CategoricalData/hydra/issues/326)), WebAssembly ([#325](https://github.com/CategoricalData/hydra/issues/325)), and an+automatic-differentiation demo ([#324](https://github.com/CategoricalData/hydra/issues/324)) — are in progress as Claude collaborations.++### Highlights++- **Three-tree repository layout**: `packages/` (DSL), `heads/` (host runtime),+  `dist/` (generated) ([#290](https://github.com/CategoricalData/hydra/issues/290)).+- **Per-package distributions** for Java (4 Maven artifacts) and Python (5 wheels):+  `hydra-kernel`, `hydra-pg`, `hydra-rdf`, `hydra-{java,python}`, plus `hydra-ext`+  on PyPI ([#305](https://github.com/CategoricalData/hydra/issues/305)).+- **Kernel simplifications**: `Function`/`Elimination` removed ([#332](https://github.com/CategoricalData/hydra/issues/332)),+  `FunctionPrimitive` removed ([#251](https://github.com/CategoricalData/hydra/issues/251)), `Hydra.Ext.*` prefix retired ([#331](https://github.com/CategoricalData/hydra/issues/331)),+  `Context` error wrapper gone ([#292](https://github.com/CategoricalData/hydra/issues/292)).+- **Incremental caches** across the sync pipeline; ~70x speedup on no-op resync ([#247](https://github.com/CategoricalData/hydra/issues/247)).+- **JSON kernel format v1** with formal wire-format spec and four-field rename ([#343](https://github.com/CategoricalData/hydra/issues/343)).+- **Three new generation-only targets** (in progress): Coq ([#326](https://github.com/CategoricalData/hydra/issues/326)), WebAssembly ([#325](https://github.com/CategoricalData/hydra/issues/325)),+  automatic-differentiation demo ([#324](https://github.com/CategoricalData/hydra/issues/324)).++### New features++- Per-package distributions ([#305](https://github.com/CategoricalData/hydra/issues/305)): standalone Maven / PyPI / conda-forge builds,+  generated `build.gradle` / `pyproject.toml` per package, transitive dep resolution.+- JSON kernel format v1 ([#343](https://github.com/CategoricalData/hydra/issues/343)): formal spec at `docs/json-format.md`,+  four-field rename to `typeScheme`, `Module` field reorder, `formatVersion` stamp.+- `decimal` literal type in the kernel ([#338](https://github.com/CategoricalData/hydra/issues/338)) across all hosts.+- Type-directed JSON encoder with idiomatic optional encoding ([#314](https://github.com/CategoricalData/hydra/issues/314), [#318](https://github.com/CategoricalData/hydra/issues/318)).+- Incremental type inference plus content-hash caches ([#247](https://github.com/CategoricalData/hydra/issues/247)).+- Coq generation target ([#326](https://github.com/CategoricalData/hydra/issues/326), in progress): `hydra-coq` package, 131/131 `.v` files pass `coqc`.+- WebAssembly target ([#325](https://github.com/CategoricalData/hydra/issues/325), in progress): `hydra-wasm` package, M4 closure mechanism.+- Automatic-differentiation demo ([#324](https://github.com/CategoricalData/hydra/issues/324), in progress): symbolic source-to-source.+- `hydra.show.error` module ([#265](https://github.com/CategoricalData/hydra/issues/265)): consolidated error-message builders.+- `hydra.lib.maybes.toList` primitive ([#257](https://github.com/CategoricalData/hydra/issues/257)).+- NaN / Inf round-tripping through JSON and per-language serdes ([#312](https://github.com/CategoricalData/hydra/issues/312), [#318](https://github.com/CategoricalData/hydra/issues/318), [#330](https://github.com/CategoricalData/hydra/issues/330)).+- Typeclass inference test group ([#274](https://github.com/CategoricalData/hydra/issues/274)).+- Term and type linters ([#232](https://github.com/CategoricalData/hydra/issues/232)).+- Validation for modules and graphs ([#155](https://github.com/CategoricalData/hydra/issues/155)).+- User-defined-function (UDF) support and DSL-vs-primitive overrides+  ([#62](https://github.com/CategoricalData/hydra/issues/62), [#63](https://github.com/CategoricalData/hydra/issues/63), [#102](https://github.com/CategoricalData/hydra/issues/102), [#158](https://github.com/CategoricalData/hydra/issues/158)).+- Stale-source detection across sync entrypoints ([#228](https://github.com/CategoricalData/hydra/issues/228)).++### Improvements++- Sync infrastructure: matrix tool, per-package orchestrator, per-language wrappers ([#290](https://github.com/CategoricalData/hydra/issues/290)).+- TestGraph post-generation patches eliminated; DSL emits `TestEnv` refs directly.+- Minimized standard imports in generated Haskell ([#161](https://github.com/CategoricalData/hydra/issues/161)); improved auto-aliases ([#322](https://github.com/CategoricalData/hydra/issues/322)).+- Removed kernel term dependencies from the interpreter ([#257](https://github.com/CategoricalData/hydra/issues/257)).+- Removed `Graph` and `Context` arguments from primitive implementations ([#266](https://github.com/CategoricalData/hydra/issues/266)).+- Refactored kernel term modules: split rewriting/schemas, renamed show.meta → codegen,+  moved `Coder` to `coders`, merged `extract.helpers` ([#221](https://github.com/CategoricalData/hydra/issues/221)).+- Removed Aeson and HsYAML dependencies; YAML coder moved to `hydra-ext` ([#261](https://github.com/CategoricalData/hydra/issues/261)).+- Lisp recursive let bindings via SCC ([#341](https://github.com/CategoricalData/hydra/issues/341)); parenthesis cleanup ([#84](https://github.com/CategoricalData/hydra/issues/84)).+- Everything-to-everything bootstrapping demo ([#254](https://github.com/CategoricalData/hydra/issues/254)).+- Re-enabled skipped Python tests; `disabledForPython` retired ([#263](https://github.com/CategoricalData/hydra/issues/263)).+- Promoted host-specific code in `packages/` into per-head locations ([#337](https://github.com/CategoricalData/hydra/issues/337)).+- Migrated `hydra.common` Java module out ([#10](https://github.com/CategoricalData/hydra/issues/10)).+- Test infrastructure unification under `UniversalTestCase` ([#246](https://github.com/CategoricalData/hydra/issues/246)).+- Default property graph → RDF mapping ([#296](https://github.com/CategoricalData/hydra/issues/296)).+- 13 unsafe partial primitives replaced with `Maybe`-returning alternatives ([#201](https://github.com/CategoricalData/hydra/issues/201)).+- Java generated code uses standard `java.util` collection interfaces ([#313](https://github.com/CategoricalData/hydra/issues/313)).+- `Term.union` renamed to `Term.inject` ([#334](https://github.com/CategoricalData/hydra/issues/334)).+- Inconsistencies in domain DSLs cleaned up ([#219](https://github.com/CategoricalData/hydra/issues/219)).+- Coder packages moved out of hydra-haskell ([#182](https://github.com/CategoricalData/hydra/issues/182)).+- Java package-naming scheme revised ([#223](https://github.com/CategoricalData/hydra/issues/223)).+- Decimal used (instead of bigfloat) for JSON numbers ([#340](https://github.com/CategoricalData/hydra/issues/340)).+- Hydra kernel moved out of hydra-haskell ([#282](https://github.com/CategoricalData/hydra/issues/282)).++### Bug fixes++- `substInTypeScheme` capture-unsafe substitution under nested forall binders.+- Java `Float64` arithmetic primitives corrected for current `PrimitiveFunction` API.+- Clojure decimal handling: value-based equality, `BigInteger` return from `decimal_to_bigint`.+- Scheme runtime R7RS imports for `sets.scm` / `maps.scm` / `eithers.map_set`.+- Python coder defaults corrected from `Py.Name` to `Py.Expression`.+- Scala host JSON-decode failure on modules containing term definitions ([#342](https://github.com/CategoricalData/hydra/issues/342)).+- Lisp coder mutually-recursive let bindings for Clojure ([#341](https://github.com/CategoricalData/hydra/issues/341)).++### Documentation++- Documentation refresh for the 0.15 packaging restructure ([#290](https://github.com/CategoricalData/hydra/issues/290), [#331](https://github.com/CategoricalData/hydra/issues/331)); CLAUDE.md,+  READMEs, recipes, demos, and seven wiki pages updated.+- Code-generation recipe rewritten for the per-package dist layout ([#282](https://github.com/CategoricalData/hydra/issues/282)).+- New `maintenance.md` recipe consolidates non-source-file scans, stale generated+  detection, design-violation checks, and freshness checks.+- Documentation style guide added at `docs/documentation-style-guide.md`.+- Cross-worktree messaging protocol documented in CLAUDE.md.+- Decimal type documented in the lexicon and per-language READMEs ([#338](https://github.com/CategoricalData/hydra/issues/338)).+- JSON encoding format docs updated for idiomatic optional encoding ([#314](https://github.com/CategoricalData/hydra/issues/314)).++---++## [0.14.1] - 2026-03-30++Patch release.+Regenerates all implementations after a fix to the group eval primitive ([#281](https://github.com/CategoricalData/hydra/issues/281)),+and relocates the property-graph and RDF/SHACL "ext" modules into hydra-java and hydra-python.++### Improvements++- Moved PG, RDF, and SHACL ext modules from hydra-ext into hydra-java and hydra-python.++### Bug fixes++- Group eval primitive fix; all targets regenerated ([#281](https://github.com/CategoricalData/hydra/issues/281)).+- JavaDoc HTML-entity escaping in generated `DestructuringPattern.java`.++---++## [0.14.0] - 2026-03-29++Major release adding four new complete Hydra implementations — Scala ([#273](https://github.com/CategoricalData/hydra/issues/273)),+Clojure ([#278](https://github.com/CategoricalData/hydra/issues/278)), Common Lisp, and Scheme — bringing the total to seven bootstrapping hosts+(plus Emacs Lisp, which passes the test suite but does not yet participate in bootstrapping).+Also includes kernel simplifications, an Avro bidirectional coder ([#301](https://github.com/CategoricalData/hydra/issues/301)),+eval primitives ([#281](https://github.com/CategoricalData/hydra/issues/281)), new demos, and significant performance work on the Scheme host.++### Highlights++- **Four new complete implementations**: Hydra-Scala ([#273](https://github.com/CategoricalData/hydra/issues/273)), Hydra-Clojure ([#278](https://github.com/CategoricalData/hydra/issues/278)),+  Hydra-Common Lisp, and Hydra-Scheme pass the common test suite and can serve as+  bootstrapping hosts.+  The four Lisp dialects share a single coder and serializer.+- **Kernel simplifications**: removed `RowType`/`WrappedType` ([#82](https://github.com/CategoricalData/hydra/issues/82)),+  unified `Graph`/`TypeContext`/`InferenceContext` ([#192](https://github.com/CategoricalData/hydra/issues/192)),+  replaced `Module.elements` with `Module.definitions` ([#214](https://github.com/CategoricalData/hydra/issues/214)),+  consolidated error types ([#268](https://github.com/CategoricalData/hydra/issues/268)), and promoted all staging modules to DSL sources ([#267](https://github.com/CategoricalData/hydra/issues/267)).+- **Avro bidirectional coder** ([#301](https://github.com/CategoricalData/hydra/issues/301)) with property graph pipeline demo.+- **Scheme bootstrap performance**: 58 minutes → 5.7 minutes via O(1) vhash data structures+  and IEEE 754 float precision fixes.++### Breaking changes++- Removed legacy adapter framework; replaced by the staging-promoted variant ([#236](https://github.com/CategoricalData/hydra/issues/236), [#295](https://github.com/CategoricalData/hydra/issues/295)).+- Replaced legacy Flow monad with Either ([#245](https://github.com/CategoricalData/hydra/issues/245)).+- Removed `Module.elements`; use `Module.definitions` ([#214](https://github.com/CategoricalData/hydra/issues/214)).+- Removed `RowType` and `WrappedType` ([#82](https://github.com/CategoricalData/hydra/issues/82)).+- Renamed `hydra.accessors` to `hydra.paths` ([#271](https://github.com/CategoricalData/hydra/issues/271)).+- Renamed `hydra.tarjan` and merged into `hydra.sorting` ([#220](https://github.com/CategoricalData/hydra/issues/220)).+- Merged `hydra.constraints` into `hydra.query` ([#272](https://github.com/CategoricalData/hydra/issues/272)).+- Moved `hydra.workflow` to hydra-ext ([#270](https://github.com/CategoricalData/hydra/issues/270)).+- Consolidated `hydra.compute` into `hydra.util` ([#269](https://github.com/CategoricalData/hydra/issues/269)).+- Removed `hydra.describe` ([#216](https://github.com/CategoricalData/hydra/issues/216)) and types from `hydra.mantle` ([#217](https://github.com/CategoricalData/hydra/issues/217)).+- Replaced `OtherError` with task-specific error types ([#268](https://github.com/CategoricalData/hydra/issues/268)).+- Java: lowered minimum Java version to 11 ([#249](https://github.com/CategoricalData/hydra/issues/249)).+- Java: `Pair` replaces `Tuple2` ([#252](https://github.com/CategoricalData/hydra/issues/252)); `Comparable` implemented for generated classes ([#131](https://github.com/CategoricalData/hydra/issues/131)).++### New features++- Hydra-Scala ([#273](https://github.com/CategoricalData/hydra/issues/273)): complete implementation, sbt/Scala 3, 3043 tests.+- Hydra-Lisp: Clojure ([#278](https://github.com/CategoricalData/hydra/issues/278)), Common Lisp, Emacs Lisp, Scheme — four dialects,+  one coder. CI workflows for Clojure, Common Lisp, and Scheme.+- Avro bidirectional coder ([#301](https://github.com/CategoricalData/hydra/issues/301)) with demo.+- Eval primitives ([#281](https://github.com/CategoricalData/hydra/issues/281)): Logic, Equality, Math, collections, and Groups.+- Generated DSL modules ([#180](https://github.com/CategoricalData/hydra/issues/180)): `hydra.dsls` generates DSL helpers from type modules.+- New demos: GraphQL+JSON ([#279](https://github.com/CategoricalData/hydra/issues/279)), PG validation ([#284](https://github.com/CategoricalData/hydra/issues/284)), SHACL ([#294](https://github.com/CategoricalData/hydra/issues/294)), Avro+PG.+- Packaging module ([#290](https://github.com/CategoricalData/hydra/issues/290)): `hydra.packaging` with `Package` type and validation.+- New primitives: `lists.foldr` ([#280](https://github.com/CategoricalData/hydra/issues/280)), `maybes.toList`, float rounding ([#264](https://github.com/CategoricalData/hydra/issues/264), [#285](https://github.com/CategoricalData/hydra/issues/285)).+- Cross-language benchmarking suite ([#234](https://github.com/CategoricalData/hydra/issues/234)).+- Limited typeclass inference ([#164](https://github.com/CategoricalData/hydra/issues/164)).+- Standardized validation patterns across modules ([#291](https://github.com/CategoricalData/hydra/issues/291)).++### Improvements++- Promoted all staging modules to DSL sources ([#267](https://github.com/CategoricalData/hydra/issues/267)).+- Removed legacy adapters, JSON/YAML coders, grammar framework ([#236](https://github.com/CategoricalData/hydra/issues/236), [#295](https://github.com/CategoricalData/hydra/issues/295)).+- Java: efficient immutable data structures ([#193](https://github.com/CategoricalData/hydra/issues/193)); flattened term naming.+- Java: hidden specialized collection classes in type-level files ([#313](https://github.com/CategoricalData/hydra/issues/313)).+- Inference error messages improved ([#231](https://github.com/CategoricalData/hydra/issues/231)).+- Combined nested let bindings in the Haskell coder ([#248](https://github.com/CategoricalData/hydra/issues/248)).+- Simplified `hydra.adapt.simple` ([#255](https://github.com/CategoricalData/hydra/issues/255)).+- Removed Haskell operators dependency from tests ([#288](https://github.com/CategoricalData/hydra/issues/288)).+- Regression tests for non-Haskell/Java coders ([#85](https://github.com/CategoricalData/hydra/issues/85)).+- Regex support added ([#293](https://github.com/CategoricalData/hydra/issues/293)).+- `hydra.annotations.isNativeType` revisited ([#214](https://github.com/CategoricalData/hydra/issues/214)).+- Migrated grammar-generated models ([#295](https://github.com/CategoricalData/hydra/issues/295)).+- `<<= -shouldBe-> <<~` operator change ([#276](https://github.com/CategoricalData/hydra/issues/276)).+- Minimize Generation.hs ([#225](https://github.com/CategoricalData/hydra/issues/225)).+- Implemented missing Flows primitives ([#183](https://github.com/CategoricalData/hydra/issues/183)).+- Removed JavaDocs from the repository ([#262](https://github.com/CategoricalData/hydra/issues/262)).+- Floating-point test portability fixes for Linux CI ([#264](https://github.com/CategoricalData/hydra/issues/264), [#285](https://github.com/CategoricalData/hydra/issues/285)).+- Moved YAML coder to hydra-ext ([#224](https://github.com/CategoricalData/hydra/issues/224)).+- Minimized native Python and Java primitives in favor of DSL implementations ([#244](https://github.com/CategoricalData/hydra/issues/244)).+- Removed the `disabledForPython` test tag ([#250](https://github.com/CategoricalData/hydra/issues/250)).++### Release tooling++- 0.14 release tracking ([#304](https://github.com/CategoricalData/hydra/issues/304)).++### Documentation++- Thorough cleanup of user documentation ([#302](https://github.com/CategoricalData/hydra/issues/302), [#303](https://github.com/CategoricalData/hydra/issues/303)).+- Coding style guide added to wiki.+- Updated 'new implementation' recipe with learnings from Clojure head ([#278](https://github.com/CategoricalData/hydra/issues/278)).++---++## [0.13.0] - 2026-02-27++Major release completing Hydra-Python ([#66](https://github.com/CategoricalData/hydra/issues/66)) and Hydra-Java ([#166](https://github.com/CategoricalData/hydra/issues/166)) as self-hosting Hydra implementations+and demonstrating mutual self-hosting across all three languages.+Significant improvements to type inference, type checking, rewriting, and adaptation.+New language features include first-class Either types, typeclass inference, binary data support,+and a native JSON parser/writer.+Comprehensive tooling for cross-implementation bootstrapping+and provisional support for Go, Rust, and JavaScript targets.++### Highlights++- **Mutual self-hosting across three implementations**: Hydra is now fully self-hosting+  in Haskell ([#179](https://github.com/CategoricalData/hydra/issues/179)), Java, and Python, and can cross-generate between every combination+  of host and target language (9 paths total).+- **Hydra-Java is complete** ([#166](https://github.com/CategoricalData/hydra/issues/166)): all kernel and generation tests pass.+- **Hydra-Python is complete** ([#66](https://github.com/CategoricalData/hydra/issues/66)): 100% test parity with Haskell.+- **Language coders promoted into the Hydra kernel** ([#176](https://github.com/CategoricalData/hydra/issues/176)): Haskell, Java, and Python+  coders are now defined as Hydra DSL modules, making them self-hosting.+- **Either type support** ([#210](https://github.com/CategoricalData/hydra/issues/210)) with full inference, checking, and library support.+- **Native JSON parser and writer** ([#188](https://github.com/CategoricalData/hydra/issues/188), [#243](https://github.com/CategoricalData/hydra/issues/243), [#253](https://github.com/CategoricalData/hydra/issues/253)): Hydra's own JSON parser and writer+  replace the Aeson dependency; bootstrap-from-JSON architecture for cross-implementation+  code generation.++### Breaking changes++- Renamed `Optional` to `Maybe` throughout the codebase ([#204](https://github.com/CategoricalData/hydra/issues/204)):+  `hydra.lib.optionals` → `hydra.lib.maybes`; all `optional` variants renamed to `maybe`.+- Removed unlabeled product and sum types; replaced with pair types ([#212](https://github.com/CategoricalData/hydra/issues/212)).+- Renamed `hydra.core.TypedTerm` to `hydra.core.TypeApplicationTerm`.+- Renamed `hydra.json` to `hydra.json.model`.+- Renamed `hydra.lib.maps.remove` to `hydra.lib.maps.delete`.+- Removed deprecated `hydra.decoding` module.+- Removed old `hydra.mantle.Either` type (replaced by core `Either`).+- Removed `hydra.lib.tuples` library.+- Removed C# coder stub (C# syntax model remains).+- DSL syntax migration: removed `OverloadedStrings` for term expressions ([#238](https://github.com/CategoricalData/hydra/issues/238)).+- Removed `Hydra.Dsl.ShorthandTypes` ([#222](https://github.com/CategoricalData/hydra/issues/222)).++### New features++- Self-hosting in Haskell ([#179](https://github.com/CategoricalData/hydra/issues/179)) and full mutual cross-generation (Haskell ↔ Java ↔ Python).+- New bootstrapping demo validating all 9 paths across 249 modules.+- Promoted Haskell, Java, and Python coders from staging code into Hydra DSL sources ([#176](https://github.com/CategoricalData/hydra/issues/176)).+- JSON-as-source-of-truth bootstrapping architecture ([#243](https://github.com/CategoricalData/hydra/issues/243), [#253](https://github.com/CategoricalData/hydra/issues/253)):+  new executables and scripts enabling `bootstrap-from-json` for cross-implementation+  code generation.+- Generated term encoders and decoders replace legacy hand-coded modules ([#47](https://github.com/CategoricalData/hydra/issues/47)).+- Hydra-Python completion ([#66](https://github.com/CategoricalData/hydra/issues/66)): restructured project layout with `src/main` and+  `src/gen-main` ([#191](https://github.com/CategoricalData/hydra/issues/191)); full library implementations including `hydra.lib.flows`;+  `@lru_cache` optimization for nullary bindings; PyPy compatibility.+- Hydra-Java completion ([#166](https://github.com/CategoricalData/hydra/issues/166)): all kernel and generation tests pass; deep changes+  to Java coder; `Lazy` utility class for delayed evaluation; array-type support+  in Java serde; tail-call optimization in the Java coder; `Tuple` implements `Comparable`.+- Either type ([#210](https://github.com/CategoricalData/hydra/issues/210)): `EitherType`, `either` term constructor, `hydra.lib.eithers` library+  with `either`, `map`, `mapList`, `mapMaybe`, `bimap`, `bind`, `fromLeft`, `fromRight`,+  `isLeft`, `isRight`, `lefts`, `rights`, `partitionEithers`.+- Pair type as a core construct ([#211](https://github.com/CategoricalData/hydra/issues/211)).+- Void type ([#237](https://github.com/CategoricalData/hydra/issues/237)): uninhabited `void` type as the dual of `unit`; type-level only.+- Native JSON parser and writer ([#188](https://github.com/CategoricalData/hydra/issues/188), [#242](https://github.com/CategoricalData/hydra/issues/242)):+  bidirectional JSON encoder/decoder; replaces the Aeson dependency;+  cross-checked via a special test runner.+- Typeclass inference ([#164](https://github.com/CategoricalData/hydra/issues/164)):+  type schemes with typeclass constraints via `TypeVariableMetadata`;+  typeclass metadata on primitive definitions; Haskell coder uses typeclass info.+- Binary/`ByteString` support ([#172](https://github.com/CategoricalData/hydra/issues/172)): binary data via `ByteString` instead of `String`;+  Haskell coder uses `Data.ByteString`; new `binaryToBytes` primitive.+- Parser combinators: new `hydra.parsing` module with combinator types and DSL.+- Higher-order primitive interpreter ([#198](https://github.com/CategoricalData/hydra/issues/198)): all primitives are fully interpretable+  across all three implementations; legacy `requiresInterp` tag removed.+- Let hoisting and flattening: hoisting polymorphic let terms;+  refined hoisting for monomorphic bindings inside polymorphic ones;+  more efficient `liftLambdaAboveLet` ([#202](https://github.com/CategoricalData/hydra/issues/202));+  case-statement hoisting ([#241](https://github.com/CategoricalData/hydra/issues/241)); subterm hoisting helpers.+- Provisional language targets: Go ([#65](https://github.com/CategoricalData/hydra/issues/65)), Rust (with experimental type-level coder),+  JavaScript (syntax model, serde, DSL, generated sources), and Java/Python syntax DSLs.+- New adapter framework ([#236](https://github.com/CategoricalData/hydra/issues/236)): all external coders refactored+  (Haskell, YAML, Scala, JSON Schema, C++, PDL, Protobuf, GraphQL).+- Compact labeled records and variants ([#122](https://github.com/CategoricalData/hydra/issues/122)).+- New primitives:+  `hydra.lib.lists.find`, `hydra.lib.lists.partition`,+  `hydra.lib.flows.withDefault`, `hydra.lib.flows.foldl`,+  `hydra.lib.math.{max,min,abs,pred,signum,succ,even,odd}`,+  `hydra.lib.pairs.bimap`, `hydra.lib.eithers.bind`,+  `hydra.lib.literals.binaryToBytes`, complete `readXxx`/`showXxx` families,+  `hydra.lexical.chooseUniqueName`, `neg` renamed to `negate`,+  full floating-point math primitives in Python ([#208](https://github.com/CategoricalData/hydra/issues/208)).+- DeepCore DSL: a layer one level deeper than the Meta DSLs,+  for programs that construct programs that construct terms.+- `typeOf` implementation ([#168](https://github.com/CategoricalData/hydra/issues/168)).+- Implement `Comparable` for generated Java classes ([#131](https://github.com/CategoricalData/hydra/issues/131)); update of Hydra-Java ([#166](https://github.com/CategoricalData/hydra/issues/166)).+- Compact labeled records exploration ([#122](https://github.com/CategoricalData/hydra/issues/122)).+- Comparison primitives without typeclasses ([#187](https://github.com/CategoricalData/hydra/issues/187)).+- Investigated core support for Either and Flow monads ([#200](https://github.com/CategoricalData/hydra/issues/200)).++### Improvements++- Type system:+  - Refactored `hydra.inference` to create new module `hydra.checking`.+  - Inference checks after unification to prevent schema names from being unified+    with inferred type variables.+  - Type application terms preserved when preparing application terms for Python.+  - Sanity-check tuple projection index against arity during inference.+  - Bind lost type variables in term annotations.+  - Made `extendTypeContextForLet` tolerant of untyped bindings.+- Code generation:+  - Python: support for deeply-nested match statements; more complete `let` support;+    Pythonic syntax for polymorphic function definitions; refinements for complex+    case-hoisting scenarios; performance improvements ([#209](https://github.com/CategoricalData/hydra/issues/209), [#239](https://github.com/CategoricalData/hydra/issues/239), [#240](https://github.com/CategoricalData/hydra/issues/240)); inline+    let/case rewriting for Python targets ([#203](https://github.com/CategoricalData/hydra/issues/203)).+  - Java: method declaration style consistent with calling style.+  - Haskell: standardized typeclass names.+  - Increased maximum trace depth to support more complex sources.+- Common test suite promotion: all tests promoted into a shared, implementation-independent+  test kernel ([#213](https://github.com/CategoricalData/hydra/issues/213)).+- Statically-compiled test suite in Haskell ([#207](https://github.com/CategoricalData/hydra/issues/207)).+- Included all Hydra kernel types in test schema ([#205](https://github.com/CategoricalData/hydra/issues/205)).+- Reorganized Haskell DSL definitions; standardized imports.+- Added TODO comments to all unsafe primitives ([#201](https://github.com/CategoricalData/hydra/issues/201)).+- New `rewriteAndFoldTerm` utility for simultaneous rewriting and folding.+- Lexical helper for dereferencing schema types through aliases.+- Made JSON parser lazy with new `lazy` parser combinator.+- More efficient substitution helpers for empty substitutions.+- Precomputed type/inference context in kernel test runner for performance.+- Property graph encoding and decoding modules promoted into DSL.+- `hydra.tabular` and `hydra.pg.graphson` modules promoted into DSL.+- `hydra.show.*` modules generated into Java and Python.+- Aligned epsilon encoding with the LambdaGraph spec ([#89](https://github.com/CategoricalData/hydra/issues/89)).+- Fixed asymmetry of introductions and eliminations ([#86](https://github.com/CategoricalData/hydra/issues/86), [#134](https://github.com/CategoricalData/hydra/issues/134)).+- Minimized inferred type annotations ([#114](https://github.com/CategoricalData/hydra/issues/114)).+- Investigated combining products with records, sums with unions ([#196](https://github.com/CategoricalData/hydra/issues/196), [#212](https://github.com/CategoricalData/hydra/issues/212)).+- Refined type reduction in adapters ([#144](https://github.com/CategoricalData/hydra/issues/144)).+- Investigation of unification issues ([#163](https://github.com/CategoricalData/hydra/issues/163)).+- Refactored RowType ([#82](https://github.com/CategoricalData/hydra/issues/82)).+- LLM-assisted PG schemas and mappings ([#171](https://github.com/CategoricalData/hydra/issues/171)).+- Simplified unit-valued variants in Python ([#206](https://github.com/CategoricalData/hydra/issues/206)).+- Checked for inconsistencies between Term/TTerm and Type/TType DSLs ([#218](https://github.com/CategoricalData/hydra/issues/218)).+- GenPG demo: refactored to support Haskell, Python, and Java; Python runner;+  Java generation; finalized output format.+- Testing: extended test runners for let hoisting (Haskell, Python, Java);+  floating-point precision tests; ordering tests for `hydra.lib.maps`/`hydra.lib.sets`;+  inference tests for inferred System F terms; case-hoisting test cases; new JSON coder tests;+  thorough test cases for all primitives ([#199](https://github.com/CategoricalData/hydra/issues/199)).++### Bug fixes++- Fixed interpreter bugs causing test failures ([#235](https://github.com/CategoricalData/hydra/issues/235)).+- Fixed bug in type checking in connection with dead code.+- Fixed bug in `removeTypesFromTerm`.+- Fixed bug in `typeOfMap`.+- Fixed 32-bit max int value in `hydra.constants`.+- Fixed numeric precision in Python.+- Added `BigDecimal` support and fixed `uint8` (short) support in Java.+- Fixed Haskell coder with respect to imports for binary literals.+- Excluded `Prelude.encodeFloat` and `Prelude.decodeFloat` from generated Haskell+  due to name collisions.+- Fixed consistency issues in Python primitives:+  `hydra.lib.sets.toList`, `hydra.lib.maps.union` (precedence),+  `hydra.lib.strings.lines`, `hydra.lib.strings.readString` (dequoting),+  `hydra.lib.lists.apply`, `hydra.lib.maps.toList`.+- Fixed Haskell type signature of `hydra.lists.span`.+- Fixed issue with eta expansion of typed terms.+- Fixed shadowing issue in generated encoding modules.+- Added missing alternatives in `hydra.rewriting.rewriteTermM`.++### Documentation++- Updated main README with complete implementation status.+- Added Documentation sections to all implementation READMEs.+- Fixed outdated Code-organization.md (Python now uses `src/gen-main`).+- Fixed incorrect code paths in Implementation.md.+- Added Java section to Testing wiki.+- Comprehensive developer recipes in `docs/recipes/`.+- Documentation for tail-call optimization implementation.+- Added Haddock comments to Haskell primitives.+- Created wiki page on the release process ([#194](https://github.com/CategoricalData/hydra/issues/194)).++### Community++- Accepted babeloff's `isTrivialTerm` changes.++---++## [0.12.0] - 2025-08-28++A consolidation release: significant Python progress, kernel-level cleanup,+and a wave of bookkeeping closures for Hydra-Java module ports.++### Breaking changes++- Removed `hydra.decoding` module ([#190](https://github.com/CategoricalData/hydra/issues/190)).+- Flattened dependency tiers; eliminated tier-1, tier-2, tier-3 organization ([#184](https://github.com/CategoricalData/hydra/issues/184)).+- Removed `typed` term variant ([#173](https://github.com/CategoricalData/hydra/issues/173), [#162](https://github.com/CategoricalData/hydra/issues/162)).+- Module naming changes: moved tabular and relational modules into kernel ([#152](https://github.com/CategoricalData/hydra/issues/152)).+- Standardized on uncurried helper functions in term-level DSLs ([#174](https://github.com/CategoricalData/hydra/issues/174)).+- Renamed `hydra.lib.flows.traverseOptional` to `hydra.lib.flows.mapOptional`.+- Eliminated camel-cased namespace parts from the kernel ([#152](https://github.com/CategoricalData/hydra/issues/152)).+- Replaced list and optional eliminations with primitive functions ([#150](https://github.com/CategoricalData/hydra/issues/150)).+- Moved `Hydra.Ext` to hydra-ext ([#178](https://github.com/CategoricalData/hydra/issues/178)); moved 'ext' sources into hydra-ext ([#189](https://github.com/CategoricalData/hydra/issues/189)).++### New features++- Significant progress toward Hydra-Python completion:+  generated all kernel types and terms into Python;+  added `Decimal` support for bigfloat values;+  environment tracking for variable scoping;+  generated `hydra.languages` into Python;+  `__hash__` and `__eq__` on serializable generated classes ([#160](https://github.com/CategoricalData/hydra/issues/160)).+- Designated `unit` term and type variants ([#186](https://github.com/CategoricalData/hydra/issues/186)).+- `hydra.lib.flows.mapElems` and `hydra.lib.flows.mapKeys` utilities.+- Promoted JSON coder into the DSL ([#181](https://github.com/CategoricalData/hydra/issues/181)).+- Promoted JSON utilities into the DSL ([#181](https://github.com/CategoricalData/hydra/issues/181)).+- C# coder ([#139](https://github.com/CategoricalData/hydra/issues/139)).+- GQL model and parser ([#140](https://github.com/CategoricalData/hydra/issues/140)).+- Tabular adapters ([#142](https://github.com/CategoricalData/hydra/issues/142)).+- Type-level C++ coder ([#170](https://github.com/CategoricalData/hydra/issues/170)).+- Variable-types-to-Haskell-typedefs transformation ([#70](https://github.com/CategoricalData/hydra/issues/70)).+- A newline at the end of each generated file ([#154](https://github.com/CategoricalData/hydra/issues/154)).+- Refactor kernel modules and primitives by connectivity ([#177](https://github.com/CategoricalData/hydra/issues/177)).++### Improvements++- Condensed repeated elements in error traces ([#165](https://github.com/CategoricalData/hydra/issues/165)).+- Fixed transitive schema dependencies ([#185](https://github.com/CategoricalData/hydra/issues/185)).+- Improved adapter solution with respect to literals.+- Better handling of type variables in Python coder.+- Enhanced term-level Python generation with proper ordering to minimize forward references.+- Topo-sort helper function for dependency management.+- Updated all Python libraries with latest changes.+- Distinguished between deannotation and detyping of terms.+- Adapted primitives when applying language constraints to a graph.+- Use unqualified names where possible in generated code ([#153](https://github.com/CategoricalData/hydra/issues/153)).+- Eliminated `Data.Graph` (containers) dependency ([#167](https://github.com/CategoricalData/hydra/issues/167)).+- "Close the loop" demonstration ([#175](https://github.com/CategoricalData/hydra/issues/175)).+- Implemented `typeOf` ([#168](https://github.com/CategoricalData/hydra/issues/168)).++### Bug fixes++- Fixed System F terms for records and case statements ([#168](https://github.com/CategoricalData/hydra/issues/168)).+- Fixed issue with transitive type-level module dependencies ([#185](https://github.com/CategoricalData/hydra/issues/185)).+- Corrected handling of variable references in Python application terms.+- Fixed nullary functions in Python (added empty parens).+- Added missing alternatives in `hydra.rewriting.rewriteTermM`.++### Bookkeeping++- Closed long-standing Hydra-Java module-port issues+  ([#9](https://github.com/CategoricalData/hydra/issues/9), [#11](https://github.com/CategoricalData/hydra/issues/11), [#15](https://github.com/CategoricalData/hydra/issues/15), [#16](https://github.com/CategoricalData/hydra/issues/16), [#18](https://github.com/CategoricalData/hydra/issues/18), [#19](https://github.com/CategoricalData/hydra/issues/19), [#20](https://github.com/CategoricalData/hydra/issues/20), [#21](https://github.com/CategoricalData/hydra/issues/21), [#22](https://github.com/CategoricalData/hydra/issues/22), [#23](https://github.com/CategoricalData/hydra/issues/23), [#25](https://github.com/CategoricalData/hydra/issues/25), [#44](https://github.com/CategoricalData/hydra/issues/44), [#45](https://github.com/CategoricalData/hydra/issues/45));+  most of the underlying work shipped in earlier releases.+- Closed Hydra-Java DSL-port issues ([#24](https://github.com/CategoricalData/hydra/issues/24), [#26](https://github.com/CategoricalData/hydra/issues/26), [#27](https://github.com/CategoricalData/hydra/issues/27), [#28](https://github.com/CategoricalData/hydra/issues/28), [#29](https://github.com/CategoricalData/hydra/issues/29)) and+  the Scala/Avro tracking issues ([#77](https://github.com/CategoricalData/hydra/issues/77), [#81](https://github.com/CategoricalData/hydra/issues/81)); these had been resolved+  by earlier releases (Scala in 0.14.0, Avro bidi in 0.14.0).++### Documentation++- Updated Hydra-Haskell README.+- Updated Hydra-Java README with corrected links.+- Updated JavaDocs.++---++## [0.11.0] - 2025-03-16++Untagged in-repository version.+A type-inference rebase release: major restructuring of inference internals+to align with Algorithm W, plus a sweeping removal of explicit type annotations+across the kernel.++### Highlights++- **Inference rebased on Algorithm W** ([#118](https://github.com/CategoricalData/hydra/issues/118)): unify-early strategy ([#146](https://github.com/CategoricalData/hydra/issues/146)),+  infinite-type checks restored ([#116](https://github.com/CategoricalData/hydra/issues/116)), recursive-element inference ([#90](https://github.com/CategoricalData/hydra/issues/90)),+  unified handling of elements and let bindings ([#112](https://github.com/CategoricalData/hydra/issues/112)), minimized manual+  type annotations ([#119](https://github.com/CategoricalData/hydra/issues/119)).+- **`hydra.inference` module** introduced for inference type definitions;+  substitution and unification moved up a level.++### Breaking changes++- Argument order of `Logic.ifElse` changed ([#147](https://github.com/CategoricalData/hydra/issues/147)).++### New features++- Inference test cases promoted into the common test suite ([#148](https://github.com/CategoricalData/hydra/issues/148));+  added "kernel examples" inference tests; more recursion / mutual recursion cases.++### Improvements++- Removed type annotations across all kernel sources ([#119](https://github.com/CategoricalData/hydra/issues/119)).+- Migrated to fully-applied primitive library DSLs ([#157](https://github.com/CategoricalData/hydra/issues/157)).+- Aligned `Graph` and `Element` with `LetBinding` ([#159](https://github.com/CategoricalData/hydra/issues/159)).+- `hydra.core.Unit` recognized by the Haskell coder.+- Refactored inference tests.++### Bug fixes++- Fix for underdetermined type in `hydra.decode`.++---++## [0.10.0] - 2025-02-19++Untagged in-repository version.+Adds Hydra-Python (initial completion), a GraphSON coder,+provisional Hydra-Go support, and dot-separated namespace conventions.++### Highlights++- **Hydra-Python initial completion** ([#80](https://github.com/CategoricalData/hydra/issues/80), [#66](https://github.com/CategoricalData/hydra/issues/66)): Python coder, generated kernel+  modules in Python, and full library implementations across kernel namespaces.+- **GraphSON coder** ([#79](https://github.com/CategoricalData/hydra/issues/79)).+- **Provisional Hydra-Go** ([#65](https://github.com/CategoricalData/hydra/issues/65)).+- **Namespace formatting** standardized to dot-separated form ([#151](https://github.com/CategoricalData/hydra/issues/151)).++### Breaking changes++- All namespaces use dot-separated form ([#151](https://github.com/CategoricalData/hydra/issues/151)).++### New features++- Hydra-Python: Python coder; generated `hydra.coreEncoding`, `hydra.strip`,+  `hydra.literals` and other kernel modules in Python; tuple-expression support;+  updated `hydra.constants` in Python.+- GraphSON coder ([#79](https://github.com/CategoricalData/hydra/issues/79)).+- Provisional Hydra-Go ([#65](https://github.com/CategoricalData/hydra/issues/65)).+- `string-to-char-list` and `char-list-to-string` primitives ([#149](https://github.com/CategoricalData/hydra/issues/149)).+- Restored normalization for generated term variables ([#145](https://github.com/CategoricalData/hydra/issues/145)).++### Improvements++- Re-leveled dependency tiers ([#135](https://github.com/CategoricalData/hydra/issues/135)).+- Updated all Java, Haskell, hydra-ext, and Python primitives to current sources.++---++## [0.9.0] - 2025-01-06++Untagged in-repository version.+Bootstraps Hydra-Python and the JSON Schema coder; introduces a fluent Java DSL for flows.++### Highlights++- **JSON Schema coder** ([#141](https://github.com/CategoricalData/hydra/issues/141)).+- **Python coder scaffold**: serde, language constraints, and generated Haskell+  sources for Python.+- **Fluent-style Java DSL for flows** ([#143](https://github.com/CategoricalData/hydra/issues/143)).++### New features++- JSON Schema coder ([#141](https://github.com/CategoricalData/hydra/issues/141)).+- Python coder scaffold and serde.+- Provisional Python language constraints module.+- Fluent-style Java DSL for flows ([#143](https://github.com/CategoricalData/hydra/issues/143)); moved Flows DSL into `hydra.dsl`.+- New `hydra.coders` DSL.+- New DSL functions for core variants.++### Improvements++- Generalized `Namespaces` so it can be used for languages other than Haskell.+- Local-name-only Python type aliases (the directory tree provides the namespace).+- Coders DSL used to simplify Java language-constraint sources.+- Removed redundant productions in the Python grammar.+- Added unit tests for fluent flows.++### Documentation++- Updated JavaDocs for 0.9.0.++---++## [0.8.1] - 2024-09-24++Patch release.++### Improvements++- Generalized the property graph merging utility to accept type systems other than Hydra Core.++---++## [0.8.0] - 2024-09-09++C# support ([#139](https://github.com/CategoricalData/hydra/issues/139)), Graphviz DOT coder, term accessors, and a small breaking change in Java+to support Spark.++### Breaking changes++- Made `FlowException` serializable for Spark support (may affect existing error handling).++### New features++- C# syntax module based on the Microsoft ANTLR grammar ([#139](https://github.com/CategoricalData/hydra/issues/139)).+- Graphviz DOT coder ([#136](https://github.com/CategoricalData/hydra/issues/136)):+  full support for lambdas and recursive `let` statements;+  compact 'accessor graph' visualization option;+  customizable label styles;+  highlighted let-bound terms; edge labels.+- Term accessor type to facilitate lenses and path-aware transformations.+- OpenGQL grammar and generated Haskell for the OpenGQL model ([#140](https://github.com/CategoricalData/hydra/issues/140)).++### Improvements++- Added `</>` as alternative to `@@` application operator in Haskell DSLs.+- Utilities for working with term accessors.+- More specific exception class for JSON decoding.+- Additional convenience methods on `JsonDecoding.java`.+- Used transitive dependencies in hydra-java and hydra-ext.+- Upgraded ANTLR to address a vulnerability.+- Moved TinkerPop utilities from `hydra/ext/org/apache/tinkerpop` into `hydra/pg`.++---++## [0.7.0] - 2024-08-21++Major refactoring of module organization and namespace management.+Establishes the DNS-style namespace convention in hydra-ext+and lifts property-graph models into a top-level `hydra/pg` namespace.++### Breaking changes++- Namespace reorganization: migrated to DNS-based module naming in hydra-ext ([#138](https://github.com/CategoricalData/hydra/issues/138)):+  `hydra/ext/avro` → `hydra/ext/org/apache/avro`,+  `hydra/ext/graphql` → `hydra/ext/org/graphql`,+  `hydra/ext/yaml` → `hydra/ext/org/yaml`,+  `hydra/ext/json/decoding` → `hydra/ext/org/json/decoding`,+  `hydra/ext/rdf` → `hydra/ext/org/w3/rdf`,+  `hydra/ext/shacl` → `hydra/ext/org/w3/shacl`,+  `hydra/ext/tinkerpop` → `hydra/ext/org/apache/tinkerpop`.+- Property graphs: promoted property graph modules from+  `hydra/ext/org/apache/tinkerpop` to `hydra/pg`.+- Project structure: renamed `hydra-extensions` to `hydra-ext`;+  renamed `hydra/langs` to `hydra/ext` ([#138](https://github.com/CategoricalData/hydra/issues/138));+  made hydra-ext into a Gradle subproject alongside hydra-java;+  added top-level Gradle build.++### Improvements++- Moved TinkerPop modules from hydra-haskell into hydra-ext for better separation.+- Moved miscellaneous models to `Hydra.Ext.Other` ([#138](https://github.com/CategoricalData/hydra/issues/138)).+- Moved XML Schema, SQL, ShEx, and OWL models to hydra-ext.+- Moved KQL, Parquet, and Python modules to hydra-ext.+- Separated JavaDocs for hydra-java and hydra-ext.+- Updated publishing configuration in `build.gradle`.++---++## [0.6.0] - 2024-08-19++Type-system improvements (System F type abstraction/application; eliminated polymorphic+types from Hydra Core), expanded language support (Graphviz DOT model, generated Java+field-name constants), and revamped annotation handling.++### Breaking changes++- Eliminated `InferenceContext` helper type ([#103](https://github.com/CategoricalData/hydra/issues/103)).+- Changed typing environment from `Map Name Type` to `Map Name TypeScheme` in graphs ([#76](https://github.com/CategoricalData/hydra/issues/76)).+- Updated annotations and flows to use `map<Name, Term>` instead of `map<string, Term>` ([#133](https://github.com/CategoricalData/hydra/issues/133)).+- Unified `Name` and `FieldName`; aliased to `string` ([#121](https://github.com/CategoricalData/hydra/issues/121)).+- Renamed `hydra/core.UnitType` to `hydra/core.Unit` ([#123](https://github.com/CategoricalData/hydra/issues/123)).+- Eliminated annotation classes; Hydra has a single built-in notion of annotations ([#113](https://github.com/CategoricalData/hydra/issues/113)).+- Unified the `Nominal` type with `RowType` ([#115](https://github.com/CategoricalData/hydra/issues/115)).+- Removed the `extends` parameter for row types ([#132](https://github.com/CategoricalData/hydra/issues/132)).+- Replaced `hydra/Kv` with `hydra/Annotations` (rename revisited).++### New features++- System F support: `typeAbstraction` and `typeApplication` term constructors.+- Python3 syntax model based on the official Python BNF ([#80](https://github.com/CategoricalData/hydra/issues/80)).+- Graphviz DOT model and initial support ([#136](https://github.com/CategoricalData/hydra/issues/136)).+- Field-name constants generated in Java code generation ([#137](https://github.com/CategoricalData/hydra/issues/137)).+- Provisional Algorithm W implementation in Haskell (originally from @wisnesky), kept for reference.++### Improvements++- Primitive organization: Hydra primitives organized into libraries for namespace management.+- Code generation:+  - Escaped field name constants and `with_` methods in Java coder.+  - Generated field name constants in Java ([#137](https://github.com/CategoricalData/hydra/issues/137)).+  - Avoided duplicated comments in wrapper classes in generated Java.+  - Removed superfluous newtype comments in Haskell coder.+- Updated Delta Parquet model to follow the Java API more closely.+- Enriched OpenCypher features module with the complete list of standard Cypher functions.+- Added convenience methods to `JsonEncoding.java`.+- Restored `Hydra.Inference` subdirectory.+- Allowed arbitrary case for element names ([#7](https://github.com/CategoricalData/hydra/issues/7)).+- Corrected `uint8` representation in Java to `Short` ([#120](https://github.com/CategoricalData/hydra/issues/120)).++### Bug fixes++- Fixed handling of type annotations in term adapters.+- Fixed decoding of encoded terms annotated with a type.+- Corrected encoding of universal types in `showTerm` ([#117](https://github.com/CategoricalData/hydra/issues/117)).++---++## [0.5.3] - 2024-08-06++Patch release.+Preserves order of map key/value pairs and set elements during JSON serialization.++### Bug fixes++- Preserved ordering of key/value pairs and set elements in JSON output.++### New features++- Polymorphic `equal` primitive in Haskell and Java.+- Generated Hydra type definitions together with native instantiations of Hydra types+  in Haskell (a stepping stone toward generated coders, [#47](https://github.com/CategoricalData/hydra/issues/47)).++---++## [0.5.1] - 2024-08-01++Patch release.+Dependency updates and minor improvements following the 0.5.0 Hydra Core overhaul.++### Improvements++- Updated dependencies.++---++## [0.5.0] - 2024-07-26++Untagged in-repository version.+Major Hydra Core overhaul: eliminates polymorphic types in favor of explicit+TypeScheme; consolidates the annotation system; revamps `Let` term encoding.++### Breaking changes++- Eliminated polymorphic types from Hydra Core in Haskell ([#125](https://github.com/CategoricalData/hydra/issues/125)):+  removed type parameters from `hydra/core` types in Hydra-Java; replaced type schemes+  with forall types ([#76](https://github.com/CategoricalData/hydra/issues/76)).+- Revamped core encoding and `Let`: bindings are now a list of+  `(name, term, optional type scheme)` triplets instead of a map.+- Unified typed-term types and moved `TypeScheme` into Hydra Core.+- Eliminated `AnnotationClass`; Hydra has a single built-in notion of annotations now ([#113](https://github.com/CategoricalData/hydra/issues/113)).+- Renamed and refactored phantom-type wrappers ([#128](https://github.com/CategoricalData/hydra/issues/128)); removed deprecated `Reference`+  type from `hydra/phantoms`.+- Removed incomplete support for stream types and stream terms ([#88](https://github.com/CategoricalData/hydra/issues/88)).++### New features++- `LiteralTypes` DSL module so literals can be built independently of terms.+- `Hydra.Minimal` module to facilitate collaboration on Hydra application prototypes.+- `TypeConstraint` type added to the kernel.+- `foldl` primitive in Haskell and Java; DSL uses `foldl` instead of the built-in+  list elimination term by default.++### Improvements++- Improvements to Java and JSON coders; improved untyped JSON coder.+- Pre-order and post-order term-traversal test cases added.+- Refactored type inference tests.+- Restored generated Java (Core through Tier 3) with only a few manual tweaks.+- Element names allow arbitrary case ([#7](https://github.com/CategoricalData/hydra/issues/7)).++---++## [0.4.0] - 2024-07-10++Untagged in-repository version.+Adds null checks to generated Java (breaking, but justified — Hydra-Java disallows nulls),+the Gremlin model, and Protobuf annotation refinements.++### Breaking changes++- Null checks added to constructors and `withXXX()` methods in generated Java;+  null values are no longer permitted in Hydra-Java.+- Removed Java 8 restriction (raised minimum Java version).++### New features++- Gremlin model ([#127](https://github.com/CategoricalData/hydra/issues/127)); generated Haskell for Gremlin.+- `hydra/lib/lists.safeHead` primitive in Haskell (necessary in Java due to eager evaluation).+- Support for Protobuf `deprecated=true` annotation; non-string Protobuf options.+- Java options in generated Protobuf.++### Improvements++- Used `java.util.Objects.requireNonNull` instead of a custom null check in generated Java.+- Added 'automatically generated file' disclaimer to generated Java files.+- Added autogen comments and null checks to (most) generated Java.+- Added necessary schema-level dependencies for built-in modules.+- Added null checks to the Flows DSL in Java.++---++## [0.3.0] - 2024-06-05++Untagged in-repository version.+Adds an OpenCypher parser based on an ANTLR grammar ([#124](https://github.com/CategoricalData/hydra/issues/124)),+a KQL (Kusto Query Language) model and serializer,+a Delta Parquet model,+and an early property graph queries model in the style of Cypher.++### New features++- OpenCypher parser based on the OpenCypher M23 ANTLR grammar ([#124](https://github.com/CategoricalData/hydra/issues/124));+  ANTLR added as a build dependency;+  large Cypher test suite drawn from the Cypher Manual.+- Cypher-to-PG-query transformer (Java; partially implemented).+- Property graph queries DSL and generated property graph query classes in Java.+- Property graph queries model (Cypher / future GQL style).+- KQL (Kusto Query Language) initial model and basic serializer.+- Delta Parquet model with generated sources.++### Improvements++- Java options and `deprecated=true` support in generated Protobuf.+- Convenience methods in Java.++---++## [0.2.0] - 2024-01-10++Hydra-Java 0.2.0 release.+Significant Java tooling and DSL build-out, Protobuf bidirectional coder,+Python3 syntax model ([#80](https://github.com/CategoricalData/hydra/issues/80)), property graph validation ([#100](https://github.com/CategoricalData/hydra/issues/100)),+JSON bidirectional support in Java ([#104](https://github.com/CategoricalData/hydra/issues/104)),+OpenCypher initial model ([#108](https://github.com/CategoricalData/hydra/issues/108)),+Cypher unification, and the start of the typed-DSL story in Haskell.++### New features++- Property graph validation: validator type, optionality on property types,+  customizable id/property handling in the merging adapter, fine-tuned validation,+  comprehensive unit tests in Java ([#100](https://github.com/CategoricalData/hydra/issues/100)).+- Bidirectional JSON serialization/deserialization in Java ([#104](https://github.com/CategoricalData/hydra/issues/104)).+- Checkstyle configuration based on Google style guide ([#111](https://github.com/CategoricalData/hydra/issues/111)).+- Python3 syntax model based on the official Python BNF ([#80](https://github.com/CategoricalData/hydra/issues/80)).+- Initial OpenCypher model and parser scaffold ([#108](https://github.com/CategoricalData/hydra/issues/108)).+- Protobuf coder ([#99](https://github.com/CategoricalData/hydra/issues/99)): type encoder, field numbering, formatting, deprecated annotation,+  Java options, non-string options.+- Adapter framework tolerance of recursive types ([#58](https://github.com/CategoricalData/hydra/issues/58)); default branch for case+  statements ([#60](https://github.com/CategoricalData/hydra/issues/60)).+- Topological sort in type inference ([#67](https://github.com/CategoricalData/hydra/issues/67)).+- `hydra/query` model ([#73](https://github.com/CategoricalData/hydra/issues/73)).+- Records-to-TinkerPop-elements coder ([#64](https://github.com/CategoricalData/hydra/issues/64)).+- Equality primitives for all literal types ([#92](https://github.com/CategoricalData/hydra/issues/92)); polymorphic logic primitives ([#95](https://github.com/CategoricalData/hydra/issues/95)).+- `mapKeys` primitive ([#93](https://github.com/CategoricalData/hydra/issues/93)).+- Tuple support in Java ([#94](https://github.com/CategoricalData/hydra/issues/94)).+- Java 8 as an optional target ([#96](https://github.com/CategoricalData/hydra/issues/96)); optionally generate Java classes as `Serializable` ([#97](https://github.com/CategoricalData/hydra/issues/97)).+- Bidirectional "merged vertex" and "merged edge" coders ([#106](https://github.com/CategoricalData/hydra/issues/106)).+- Nullability and parameterization in the tabular model ([#107](https://github.com/CategoricalData/hydra/issues/107)).+- Term-level / type-level dependency distinction for modules ([#109](https://github.com/CategoricalData/hydra/issues/109)).+- Flatten nested `let` terms for transformation into Java ([#110](https://github.com/CategoricalData/hydra/issues/110)).+- Various `Flow` utilities in Java: `bind3`; convenience methods for consuming results;+  `fromFlow` variants including one that throws.++### Improvements++- Hydra-Java module ports ([#10](https://github.com/CategoricalData/hydra/issues/10), [#12](https://github.com/CategoricalData/hydra/issues/12), [#13](https://github.com/CategoricalData/hydra/issues/13), [#14](https://github.com/CategoricalData/hydra/issues/14), [#17](https://github.com/CategoricalData/hydra/issues/17), [#30](https://github.com/CategoricalData/hydra/issues/30), [#31](https://github.com/CategoricalData/hydra/issues/31), [#32](https://github.com/CategoricalData/hydra/issues/32), [#33](https://github.com/CategoricalData/hydra/issues/33), [#34](https://github.com/CategoricalData/hydra/issues/34), [#35](https://github.com/CategoricalData/hydra/issues/35),+  [#38](https://github.com/CategoricalData/hydra/issues/38), [#39](https://github.com/CategoricalData/hydra/issues/39), [#41](https://github.com/CategoricalData/hydra/issues/41), [#43](https://github.com/CategoricalData/hydra/issues/43), [#48](https://github.com/CategoricalData/hydra/issues/48), [#71](https://github.com/CategoricalData/hydra/issues/71), [#72](https://github.com/CategoricalData/hydra/issues/72), [#75](https://github.com/CategoricalData/hydra/issues/75), [#83](https://github.com/CategoricalData/hydra/issues/83)):+  `Common`, `CoreEncoding`, `CoreLanguage`, `Kernel`, `Flows`, `Lists`, `Literals`,+  `Math`, `Sets`, `Strings`, `Optionals`, `Maps`, `Flows` primitives, `Sets` primitives.+- Common DSLs in Haskell: Flow support ([#68](https://github.com/CategoricalData/hydra/issues/68)), Let support ([#69](https://github.com/CategoricalData/hydra/issues/69)).+- Renamed annotation type parameter `m` to `a` ([#41](https://github.com/CategoricalData/hydra/issues/41)).+- Updated wrapper, element, and variable types ([#75](https://github.com/CategoricalData/hydra/issues/75)).+- Removed `schema` field from `Element` ([#83](https://github.com/CategoricalData/hydra/issues/83)).+- GraphQL coder ([#78](https://github.com/CategoricalData/hydra/issues/78)).+- Code quality:+  - Updated main and test sources to conform to Checkstyle configuration ([#111](https://github.com/CategoricalData/hydra/issues/111)).+  - Extended line-length limit from 100 to 120 characters.+  - Disabled overly restrictive indentation and import-order rules.+  - Disabled `RightCurlyAlone` for compact inline map definitions.+- Streamlined property-graph element merging to unify properties with identical+  keys and types ([#106](https://github.com/CategoricalData/hydra/issues/106)).+- Convenience functions for printing literals and literal types in the Java DSL.+- Minor addition to JSON decoding.+- DSL convenience: alphabetic-case flexibility for element names ([#7](https://github.com/CategoricalData/hydra/issues/7)).++### Bug fixes++- Fixed type annotations for the Sets Java port ([#48](https://github.com/CategoricalData/hydra/issues/48)).+- Various minor fixes during the Java module ports.++---++## [0.1.1] - 2022-12-04++Patch release the same day as 0.1.0.+README polish only.++---++## [0.1.0] - 2022-12-04++First packaged release of Hydra (Hackage).+This release contains the complete foundation of Hydra.++### Core language++- Hydra's core type and data languages (`hydra.core`).+- Core models for graphs and modules.+- Computation model with the `Flow` monad.+- BNF grammars support.+- Phantom types.+- Basic operations on types and terms.++### Type system++- Hindley–Milner-style type inference.+- Type schemes with polymorphism.+- Type/term validation.++### Transformations++- Adapter system: type-to-type rewriting and transformation.+- Coders:+  Haskell coder (types and terms),+  Java coder (types and terms),+  partial Scala coder (terms only),+  Avro coder,+  JSON coder,+  PDL (Pegasus Data Language) coder,+  RDF + SHACL coder,+  YAML coder.++### Language support++- Models for GraphQL, OWL (Web Ontology Language), ShEx (Shape Expressions),+  and TinkerPop-style property graphs.++### Developer tools++- Type-construction DSL and term-construction DSL.+- QuickCheck property-based tests.++### Implementations++- Hydra-Haskell: bootstrapping implementation with full kernel.+- Hydra-Java: Java implementation with mature tooling.++### Community++- Set up the LambdaGraph Discord server ([#2](https://github.com/CategoricalData/hydra/issues/2)).++---++## Contributing++We welcome contributions! Please see:++- [Developer recipes](https://github.com/CategoricalData/hydra/tree/main/docs/recipes)+- [LambdaGraph Discord](https://bit.ly/lg-discord)++## Release process++See the [Release policy](https://github.com/CategoricalData/hydra/wiki/Release-policy)+wiki page and [docs/release-workflow.md](docs/release-workflow.md)+for information on how Hydra releases are versioned, built, and published.
+ LICENSE view
@@ -0,0 +1,201 @@+                                 Apache License+                           Version 2.0, January 2004+                        http://www.apache.org/licenses/++   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION++   1. Definitions.++      "License" shall mean the terms and conditions for use, reproduction,+      and distribution as defined by Sections 1 through 9 of this document.++      "Licensor" shall mean the copyright owner or entity authorized by+      the copyright owner that is granting the License.++      "Legal Entity" shall mean the union of the acting entity and all+      other entities that control, are controlled by, or are under common+      control with that entity. For the purposes of this definition,+      "control" means (i) the power, direct or indirect, to cause the+      direction or management of such entity, whether by contract or+      otherwise, or (ii) ownership of fifty percent (50%) or more of the+      outstanding shares, or (iii) beneficial ownership of such entity.++      "You" (or "Your") shall mean an individual or Legal Entity+      exercising permissions granted by this License.++      "Source" form shall mean the preferred form for making modifications,+      including but not limited to software source code, documentation+      source, and configuration files.++      "Object" form shall mean any form resulting from mechanical+      transformation or translation of a Source form, including but+      not limited to compiled object code, generated documentation,+      and conversions to other media types.++      "Work" shall mean the work of authorship, whether in Source or+      Object form, made available under the License, as indicated by a+      copyright notice that is included in or attached to the work+      (an example is provided in the Appendix below).++      "Derivative Works" shall mean any work, whether in Source or Object+      form, that is based on (or derived from) the Work and for which the+      editorial revisions, annotations, elaborations, or other modifications+      represent, as a whole, an original work of authorship. For the purposes+      of this License, Derivative Works shall not include works that remain+      separable from, or merely link (or bind by name) to the interfaces of,+      the Work and Derivative Works thereof.++      "Contribution" shall mean any work of authorship, including+      the original version of the Work and any modifications or additions+      to that Work or Derivative Works thereof, that is intentionally+      submitted to Licensor for inclusion in the Work by the copyright owner+      or by an individual or Legal Entity authorized to submit on behalf of+      the copyright owner. For the purposes of this definition, "submitted"+      means any form of electronic, verbal, or written communication sent+      to the Licensor or its representatives, including but not limited to+      communication on electronic mailing lists, source code control systems,+      and issue tracking systems that are managed by, or on behalf of, the+      Licensor for the purpose of discussing and improving the Work, but+      excluding communication that is conspicuously marked or otherwise+      designated in writing by the copyright owner as "Not a Contribution."++      "Contributor" shall mean Licensor and any individual or Legal Entity+      on behalf of whom a Contribution has been received by Licensor and+      subsequently incorporated within the Work.++   2. Grant of Copyright License. Subject to the terms and conditions of+      this License, each Contributor hereby grants to You a perpetual,+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable+      copyright license to reproduce, prepare Derivative Works of,+      publicly display, publicly perform, sublicense, and distribute the+      Work and such Derivative Works in Source or Object form.++   3. Grant of Patent License. Subject to the terms and conditions of+      this License, each Contributor hereby grants to You a perpetual,+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable+      (except as stated in this section) patent license to make, have made,+      use, offer to sell, sell, import, and otherwise transfer the Work,+      where such license applies only to those patent claims licensable+      by such Contributor that are necessarily infringed by their+      Contribution(s) alone or by combination of their Contribution(s)+      with the Work to which such Contribution(s) was submitted. If You+      institute patent litigation against any entity (including a+      cross-claim or counterclaim in a lawsuit) alleging that the Work+      or a Contribution incorporated within the Work constitutes direct+      or contributory patent infringement, then any patent licenses+      granted to You under this License for that Work shall terminate+      as of the date such litigation is filed.++   4. Redistribution. You may reproduce and distribute copies of the+      Work or Derivative Works thereof in any medium, with or without+      modifications, and in Source or Object form, provided that You+      meet the following conditions:++      (a) You must give any other recipients of the Work or+          Derivative Works a copy of this License; and++      (b) You must cause any modified files to carry prominent notices+          stating that You changed the files; and++      (c) You must retain, in the Source form of any Derivative Works+          that You distribute, all copyright, patent, trademark, and+          attribution notices from the Source form of the Work,+          excluding those notices that do not pertain to any part of+          the Derivative Works; and++      (d) If the Work includes a "NOTICE" text file as part of its+          distribution, then any Derivative Works that You distribute must+          include a readable copy of the attribution notices contained+          within such NOTICE file, excluding those notices that do not+          pertain to any part of the Derivative Works, in at least one+          of the following places: within a NOTICE text file distributed+          as part of the Derivative Works; within the Source form or+          documentation, if provided along with the Derivative Works; or,+          within a display generated by the Derivative Works, if and+          wherever such third-party notices normally appear. The contents+          of the NOTICE file are for informational purposes only and+          do not modify the License. You may add Your own attribution+          notices within Derivative Works that You distribute, alongside+          or as an addendum to the NOTICE text from the Work, provided+          that such additional attribution notices cannot be construed+          as modifying the License.++      You may add Your own copyright statement to Your modifications and+      may provide additional or different license terms and conditions+      for use, reproduction, or distribution of Your modifications, or+      for any such Derivative Works as a whole, provided Your use,+      reproduction, and distribution of the Work otherwise complies with+      the conditions stated in this License.++   5. Submission of Contributions. Unless You explicitly state otherwise,+      any Contribution intentionally submitted for inclusion in the Work+      by You to the Licensor shall be under the terms and conditions of+      this License, without any additional terms or conditions.+      Notwithstanding the above, nothing herein shall supersede or modify+      the terms of any separate license agreement you may have executed+      with Licensor regarding such Contributions.++   6. Trademarks. This License does not grant permission to use the trade+      names, trademarks, service marks, or product names of the Licensor,+      except as required for reasonable and customary use in describing the+      origin of the Work and reproducing the content of the NOTICE file.++   7. Disclaimer of Warranty. Unless required by applicable law or+      agreed to in writing, Licensor provides the Work (and each+      Contributor provides its Contributions) on an "AS IS" BASIS,+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or+      implied, including, without limitation, any warranties or conditions+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A+      PARTICULAR PURPOSE. You are solely responsible for determining the+      appropriateness of using or redistributing the Work and assume any+      risks associated with Your exercise of permissions under this License.++   8. Limitation of Liability. In no event and under no legal theory,+      whether in tort (including negligence), contract, or otherwise,+      unless required by applicable law (such as deliberate and grossly+      negligent acts) or agreed to in writing, shall any Contributor be+      liable to You for damages, including any direct, indirect, special,+      incidental, or consequential damages of any character arising as a+      result of this License or out of the use or inability to use the+      Work (including but not limited to damages for loss of goodwill,+      work stoppage, computer failure or malfunction, or any and all+      other commercial damages or losses), even if such Contributor+      has been advised of the possibility of such damages.++   9. Accepting Warranty or Additional Liability. While redistributing+      the Work or Derivative Works thereof, You may choose to offer,+      and charge a fee for, acceptance of support, warranty, indemnity,+      or other liability obligations and/or rights consistent with this+      License. However, in accepting such obligations, You may act only+      on Your own behalf and on Your sole responsibility, not on behalf+      of any other Contributor, and only if You agree to indemnify,+      defend, and hold each Contributor harmless for any liability+      incurred by, or claims asserted against, such Contributor by reason+      of your accepting any such warranty or additional liability.++   END OF TERMS AND CONDITIONS++   APPENDIX: How to apply the Apache License to your work.++      To apply the Apache License to your work, attach the following+      boilerplate notice, with the fields enclosed by brackets "[]"+      replaced with your own identifying information. (Don't include+      the brackets!)  The text should be enclosed in the appropriate+      comment syntax for the file format. We also recommend that a+      file or class name and description of purpose be included on the+      same "printed page" as the copyright notice for easier+      identification within third-party archives.++   Copyright [yyyy] [name of copyright owner]++   Licensed under the Apache License, Version 2.0 (the "License");+   you may not use this file except in compliance with the License.+   You may obtain a copy of the License at++       http://www.apache.org/licenses/LICENSE-2.0++   Unless required by applicable law or agreed to in writing, software+   distributed under the License is distributed on an "AS IS" BASIS,+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+   See the License for the specific language governing permissions and+   limitations under the License.
+ NOTICE view
@@ -0,0 +1,3 @@+Hydra+Copyright 2021-2026 The Hydra authors+https://github.com/CategoricalData/hydra
+ hydra-go.cabal view
@@ -0,0 +1,42 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.39.1.+--+-- see: https://github.com/sol/hpack++name:           hydra-go+version:        0.17.0+synopsis:       Hydra's Go coder: emit Go 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". Go support for Hydra+category:       Data+homepage:       https://github.com/CategoricalData/hydra#readme+bug-reports:    https://github.com/CategoricalData/hydra/issues+author:         Joshua Shinavier <josh@fortytwo.net>+maintainer:     Joshua Shinavier <josh@fortytwo.net>+license:        Apache-2.0+license-file:   LICENSE+build-type:     Simple+extra-source-files:+    LICENSE+    NOTICE+    CHANGELOG.md++source-repository head+  type: git+  location: https://github.com/CategoricalData/hydra++library+  exposed-modules:+      Hydra.Dsl.Go.Syntax+      Hydra.Go.Language+      Hydra.Go.Syntax+  other-modules:+      Paths_hydra_go+  hs-source-dirs:+      src/main/haskell+  build-depends:+      base >=4.19.0 && <4.22+    , containers >=0.6.7 && <0.8+    , hydra-kernel ==0.17.0+    , scientific >=0.3.7 && <0.4+  default-language: Haskell2010
+ src/main/haskell/Hydra/Dsl/Go/Syntax.hs view
@@ -0,0 +1,6562 @@+-- Note: this is an automatically generated file. Do not edit.++-- | DSL functions for hydra.go.syntax++module Hydra.Dsl.Go.Syntax where++import qualified Hydra.Core as Core+import qualified Hydra.Dsl.Core as DslCore+import qualified Hydra.Go.Syntax as Syntax+import qualified Hydra.Typed as Typed+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++-- | DSL injection for the add variant of hydra.go.syntax.AddOp+addOpAdd :: Typed.TypedTerm Syntax.AddOp+addOpAdd =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.AddOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "add"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the bitwiseOr variant of hydra.go.syntax.AddOp+addOpBitwiseOr :: Typed.TypedTerm Syntax.AddOp+addOpBitwiseOr =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.AddOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bitwiseOr"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the bitwiseXor variant of hydra.go.syntax.AddOp+addOpBitwiseXor :: Typed.TypedTerm Syntax.AddOp+addOpBitwiseXor =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.AddOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bitwiseXor"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the subtract variant of hydra.go.syntax.AddOp+addOpSubtract :: Typed.TypedTerm Syntax.AddOp+addOpSubtract =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.AddOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "subtract"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.go.syntax.AliasDecl+aliasDecl :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.AliasDecl+aliasDecl name type_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.AliasDecl"),+      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.go.syntax.AliasDecl+aliasDeclName :: Typed.TypedTerm Syntax.AliasDecl -> Typed.TypedTerm Syntax.Identifier+aliasDeclName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.AliasDecl"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.AliasDecl+aliasDeclType :: Typed.TypedTerm Syntax.AliasDecl -> Typed.TypedTerm Syntax.Type+aliasDeclType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.AliasDecl"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.go.syntax.AliasDecl+aliasDeclWithName :: Typed.TypedTerm Syntax.AliasDecl -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.AliasDecl+aliasDeclWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.AliasDecl"),+      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.go.syntax.AliasDecl"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the type field of hydra.go.syntax.AliasDecl+aliasDeclWithType :: Typed.TypedTerm Syntax.AliasDecl -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.AliasDecl+aliasDeclWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.AliasDecl"),+      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.go.syntax.AliasDecl"),+              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.go.syntax.AnnotatedDeclaration+annotatedDeclaration :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.TopLevelDecl -> Typed.TypedTerm Syntax.AnnotatedDeclaration+annotatedDeclaration comment declaration =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.AnnotatedDeclaration"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "comment"),+          Core.fieldTerm = (Typed.unTypedTerm comment)},+        Core.Field {+          Core.fieldName = (Core.Name "declaration"),+          Core.fieldTerm = (Typed.unTypedTerm declaration)}]}))++-- | DSL accessor for the comment field of hydra.go.syntax.AnnotatedDeclaration+annotatedDeclarationComment :: Typed.TypedTerm Syntax.AnnotatedDeclaration -> Typed.TypedTerm String+annotatedDeclarationComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.AnnotatedDeclaration"),+        Core.projectionFieldName = (Core.Name "comment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the declaration field of hydra.go.syntax.AnnotatedDeclaration+annotatedDeclarationDeclaration :: Typed.TypedTerm Syntax.AnnotatedDeclaration -> Typed.TypedTerm Syntax.TopLevelDecl+annotatedDeclarationDeclaration x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.AnnotatedDeclaration"),+        Core.projectionFieldName = (Core.Name "declaration")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the comment field of hydra.go.syntax.AnnotatedDeclaration+annotatedDeclarationWithComment :: Typed.TypedTerm Syntax.AnnotatedDeclaration -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.AnnotatedDeclaration+annotatedDeclarationWithComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.AnnotatedDeclaration"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "comment"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "declaration"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.AnnotatedDeclaration"),+              Core.projectionFieldName = (Core.Name "declaration")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the declaration field of hydra.go.syntax.AnnotatedDeclaration+annotatedDeclarationWithDeclaration :: Typed.TypedTerm Syntax.AnnotatedDeclaration -> Typed.TypedTerm Syntax.TopLevelDecl -> Typed.TypedTerm Syntax.AnnotatedDeclaration+annotatedDeclarationWithDeclaration original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.AnnotatedDeclaration"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "comment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.AnnotatedDeclaration"),+              Core.projectionFieldName = (Core.Name "comment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "declaration"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.Arguments+arguments :: Typed.TypedTerm (Maybe Syntax.Type) -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Arguments+arguments typeArg expressions ellipsis =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Arguments"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "typeArg"),+          Core.fieldTerm = (Typed.unTypedTerm typeArg)},+        Core.Field {+          Core.fieldName = (Core.Name "expressions"),+          Core.fieldTerm = (Typed.unTypedTerm expressions)},+        Core.Field {+          Core.fieldName = (Core.Name "ellipsis"),+          Core.fieldTerm = (Typed.unTypedTerm ellipsis)}]}))++-- | DSL accessor for the ellipsis field of hydra.go.syntax.Arguments+argumentsEllipsis :: Typed.TypedTerm Syntax.Arguments -> Typed.TypedTerm Bool+argumentsEllipsis x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+        Core.projectionFieldName = (Core.Name "ellipsis")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the expressions field of hydra.go.syntax.Arguments+argumentsExpressions :: Typed.TypedTerm Syntax.Arguments -> Typed.TypedTerm [Syntax.Expression]+argumentsExpressions x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+        Core.projectionFieldName = (Core.Name "expressions")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeArg field of hydra.go.syntax.Arguments+argumentsTypeArg :: Typed.TypedTerm Syntax.Arguments -> Typed.TypedTerm (Maybe Syntax.Type)+argumentsTypeArg x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+        Core.projectionFieldName = (Core.Name "typeArg")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the ellipsis field of hydra.go.syntax.Arguments+argumentsWithEllipsis :: Typed.TypedTerm Syntax.Arguments -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Arguments+argumentsWithEllipsis original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Arguments"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "typeArg"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+              Core.projectionFieldName = (Core.Name "typeArg")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expressions"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+              Core.projectionFieldName = (Core.Name "expressions")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "ellipsis"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the expressions field of hydra.go.syntax.Arguments+argumentsWithExpressions :: Typed.TypedTerm Syntax.Arguments -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Arguments+argumentsWithExpressions original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Arguments"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "typeArg"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+              Core.projectionFieldName = (Core.Name "typeArg")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expressions"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "ellipsis"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+              Core.projectionFieldName = (Core.Name "ellipsis")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeArg field of hydra.go.syntax.Arguments+argumentsWithTypeArg :: Typed.TypedTerm Syntax.Arguments -> Typed.TypedTerm (Maybe Syntax.Type) -> Typed.TypedTerm Syntax.Arguments+argumentsWithTypeArg original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Arguments"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "typeArg"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "expressions"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+              Core.projectionFieldName = (Core.Name "expressions")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "ellipsis"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Arguments"),+              Core.projectionFieldName = (Core.Name "ellipsis")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.ArrayType+arrayType :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ArrayType+arrayType length element =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ArrayType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "length"),+          Core.fieldTerm = (Typed.unTypedTerm length)},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Typed.unTypedTerm element)}]}))++-- | DSL accessor for the element field of hydra.go.syntax.ArrayType+arrayTypeElement :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.Type+arrayTypeElement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ArrayType"),+        Core.projectionFieldName = (Core.Name "element")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the length field of hydra.go.syntax.ArrayType+arrayTypeLength :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.Expression+arrayTypeLength x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ArrayType"),+        Core.projectionFieldName = (Core.Name "length")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the element field of hydra.go.syntax.ArrayType+arrayTypeWithElement :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ArrayType+arrayTypeWithElement original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ArrayType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "length"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ArrayType"),+              Core.projectionFieldName = (Core.Name "length")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the length field of hydra.go.syntax.ArrayType+arrayTypeWithLength :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ArrayType+arrayTypeWithLength original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ArrayType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "length"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ArrayType"),+              Core.projectionFieldName = (Core.Name "element")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the add variant of hydra.go.syntax.AssignOp+assignOpAdd :: Typed.TypedTerm Syntax.AddOp -> Typed.TypedTerm Syntax.AssignOp+assignOpAdd x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.AssignOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "add"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the mul variant of hydra.go.syntax.AssignOp+assignOpMul :: Typed.TypedTerm Syntax.MulOp -> Typed.TypedTerm Syntax.AssignOp+assignOpMul x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.AssignOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "mul"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.go.syntax.AssignOp+assignOpSimple :: Typed.TypedTerm Syntax.AssignOp+assignOpSimple =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.AssignOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.go.syntax.Assignment+assignment :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.AssignOp -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Assignment+assignment lhs op rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Assignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Typed.unTypedTerm op)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.go.syntax.Assignment+assignmentLhs :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm [Syntax.Expression]+assignmentLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Assignment"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the op field of hydra.go.syntax.Assignment+assignmentOp :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.AssignOp+assignmentOp x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Assignment"),+        Core.projectionFieldName = (Core.Name "op")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.go.syntax.Assignment+assignmentRhs :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm [Syntax.Expression]+assignmentRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Assignment"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.go.syntax.Assignment+assignmentWithLhs :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Assignment+assignmentWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Assignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Assignment"),+              Core.projectionFieldName = (Core.Name "op")})),+            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.go.syntax.Assignment"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the op field of hydra.go.syntax.Assignment+assignmentWithOp :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.AssignOp -> Typed.TypedTerm Syntax.Assignment+assignmentWithOp original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Assignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Assignment"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Assignment"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.go.syntax.Assignment+assignmentWithRhs :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Assignment+assignmentWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Assignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Assignment"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Assignment"),+              Core.projectionFieldName = (Core.Name "op")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the float variant of hydra.go.syntax.BasicLit+basicLitFloat :: Typed.TypedTerm Syntax.FloatLit -> Typed.TypedTerm Syntax.BasicLit+basicLitFloat x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BasicLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "float"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the imaginary variant of hydra.go.syntax.BasicLit+basicLitImaginary :: Typed.TypedTerm Syntax.ImaginaryLit -> Typed.TypedTerm Syntax.BasicLit+basicLitImaginary x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BasicLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "imaginary"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the int variant of hydra.go.syntax.BasicLit+basicLitInt :: Typed.TypedTerm Syntax.IntLit -> Typed.TypedTerm Syntax.BasicLit+basicLitInt x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BasicLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "int"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the rune variant of hydra.go.syntax.BasicLit+basicLitRune :: Typed.TypedTerm Syntax.RuneLit -> Typed.TypedTerm Syntax.BasicLit+basicLitRune x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BasicLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "rune"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the string variant of hydra.go.syntax.BasicLit+basicLitString :: Typed.TypedTerm Syntax.StringLit -> Typed.TypedTerm Syntax.BasicLit+basicLitString x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BasicLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "string"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.BinaryExpr+binaryExpr :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryOp -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpr+binaryExpr left op right =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "left"),+          Core.fieldTerm = (Typed.unTypedTerm left)},+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Typed.unTypedTerm op)},+        Core.Field {+          Core.fieldName = (Core.Name "right"),+          Core.fieldTerm = (Typed.unTypedTerm right)}]}))++-- | DSL accessor for the left field of hydra.go.syntax.BinaryExpr+binaryExprLeft :: Typed.TypedTerm Syntax.BinaryExpr -> Typed.TypedTerm Syntax.Expression+binaryExprLeft x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+        Core.projectionFieldName = (Core.Name "left")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the op field of hydra.go.syntax.BinaryExpr+binaryExprOp :: Typed.TypedTerm Syntax.BinaryExpr -> Typed.TypedTerm Syntax.BinaryOp+binaryExprOp x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+        Core.projectionFieldName = (Core.Name "op")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the right field of hydra.go.syntax.BinaryExpr+binaryExprRight :: Typed.TypedTerm Syntax.BinaryExpr -> Typed.TypedTerm Syntax.Expression+binaryExprRight x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+        Core.projectionFieldName = (Core.Name "right")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the left field of hydra.go.syntax.BinaryExpr+binaryExprWithLeft :: Typed.TypedTerm Syntax.BinaryExpr -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpr+binaryExprWithLeft original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "left"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+              Core.projectionFieldName = (Core.Name "op")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "right"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+              Core.projectionFieldName = (Core.Name "right")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the op field of hydra.go.syntax.BinaryExpr+binaryExprWithOp :: Typed.TypedTerm Syntax.BinaryExpr -> Typed.TypedTerm Syntax.BinaryOp -> Typed.TypedTerm Syntax.BinaryExpr+binaryExprWithOp original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "left"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+              Core.projectionFieldName = (Core.Name "left")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "right"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+              Core.projectionFieldName = (Core.Name "right")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the right field of hydra.go.syntax.BinaryExpr+binaryExprWithRight :: Typed.TypedTerm Syntax.BinaryExpr -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpr+binaryExprWithRight original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "left"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+              Core.projectionFieldName = (Core.Name "left")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.BinaryExpr"),+              Core.projectionFieldName = (Core.Name "op")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "right"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the add variant of hydra.go.syntax.BinaryOp+binaryOpAdd :: Typed.TypedTerm Syntax.BinaryOp+binaryOpAdd =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "add"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the and variant of hydra.go.syntax.BinaryOp+binaryOpAnd :: Typed.TypedTerm Syntax.BinaryOp+binaryOpAnd =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "and"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the bitClear variant of hydra.go.syntax.BinaryOp+binaryOpBitClear :: Typed.TypedTerm Syntax.BinaryOp+binaryOpBitClear =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bitClear"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the bitwiseAnd variant of hydra.go.syntax.BinaryOp+binaryOpBitwiseAnd :: Typed.TypedTerm Syntax.BinaryOp+binaryOpBitwiseAnd =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bitwiseAnd"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the bitwiseOr variant of hydra.go.syntax.BinaryOp+binaryOpBitwiseOr :: Typed.TypedTerm Syntax.BinaryOp+binaryOpBitwiseOr =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bitwiseOr"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the bitwiseXor variant of hydra.go.syntax.BinaryOp+binaryOpBitwiseXor :: Typed.TypedTerm Syntax.BinaryOp+binaryOpBitwiseXor =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bitwiseXor"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the divide variant of hydra.go.syntax.BinaryOp+binaryOpDivide :: Typed.TypedTerm Syntax.BinaryOp+binaryOpDivide =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "divide"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the equal variant of hydra.go.syntax.BinaryOp+binaryOpEqual :: Typed.TypedTerm Syntax.BinaryOp+binaryOpEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "equal"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the greater variant of hydra.go.syntax.BinaryOp+binaryOpGreater :: Typed.TypedTerm Syntax.BinaryOp+binaryOpGreater =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "greater"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the greaterEqual variant of hydra.go.syntax.BinaryOp+binaryOpGreaterEqual :: Typed.TypedTerm Syntax.BinaryOp+binaryOpGreaterEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "greaterEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the leftShift variant of hydra.go.syntax.BinaryOp+binaryOpLeftShift :: Typed.TypedTerm Syntax.BinaryOp+binaryOpLeftShift =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "leftShift"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the less variant of hydra.go.syntax.BinaryOp+binaryOpLess :: Typed.TypedTerm Syntax.BinaryOp+binaryOpLess =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "less"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the lessEqual variant of hydra.go.syntax.BinaryOp+binaryOpLessEqual :: Typed.TypedTerm Syntax.BinaryOp+binaryOpLessEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "lessEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the multiply variant of hydra.go.syntax.BinaryOp+binaryOpMultiply :: Typed.TypedTerm Syntax.BinaryOp+binaryOpMultiply =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "multiply"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the notEqual variant of hydra.go.syntax.BinaryOp+binaryOpNotEqual :: Typed.TypedTerm Syntax.BinaryOp+binaryOpNotEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "notEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the or variant of hydra.go.syntax.BinaryOp+binaryOpOr :: Typed.TypedTerm Syntax.BinaryOp+binaryOpOr =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "or"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the remainder variant of hydra.go.syntax.BinaryOp+binaryOpRemainder :: Typed.TypedTerm Syntax.BinaryOp+binaryOpRemainder =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "remainder"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the rightShift variant of hydra.go.syntax.BinaryOp+binaryOpRightShift :: Typed.TypedTerm Syntax.BinaryOp+binaryOpRightShift =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "rightShift"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the subtract variant of hydra.go.syntax.BinaryOp+binaryOpSubtract :: Typed.TypedTerm Syntax.BinaryOp+binaryOpSubtract =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.BinaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "subtract"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for the hydra.go.syntax.Block wrapper+block :: Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.Block+block x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.Block"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.BreakStmt wrapper+breakStmt :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.BreakStmt+breakStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.BreakStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.CallExpr+callExpr :: Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.Arguments -> Typed.TypedTerm Syntax.CallExpr+callExpr function arguments =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CallExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "function"),+          Core.fieldTerm = (Typed.unTypedTerm function)},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Typed.unTypedTerm arguments)}]}))++-- | DSL accessor for the arguments field of hydra.go.syntax.CallExpr+callExprArguments :: Typed.TypedTerm Syntax.CallExpr -> Typed.TypedTerm Syntax.Arguments+callExprArguments x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.CallExpr"),+        Core.projectionFieldName = (Core.Name "arguments")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the function field of hydra.go.syntax.CallExpr+callExprFunction :: Typed.TypedTerm Syntax.CallExpr -> Typed.TypedTerm Syntax.PrimaryExpr+callExprFunction x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.CallExpr"),+        Core.projectionFieldName = (Core.Name "function")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the arguments field of hydra.go.syntax.CallExpr+callExprWithArguments :: Typed.TypedTerm Syntax.CallExpr -> Typed.TypedTerm Syntax.Arguments -> Typed.TypedTerm Syntax.CallExpr+callExprWithArguments original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CallExpr"),+      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.go.syntax.CallExpr"),+              Core.projectionFieldName = (Core.Name "function")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the function field of hydra.go.syntax.CallExpr+callExprWithFunction :: Typed.TypedTerm Syntax.CallExpr -> Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.CallExpr+callExprWithFunction original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CallExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "function"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.CallExpr"),+              Core.projectionFieldName = (Core.Name "arguments")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the bidirectional variant of hydra.go.syntax.ChannelDirection+channelDirectionBidirectional :: Typed.TypedTerm Syntax.ChannelDirection+channelDirectionBidirectional =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ChannelDirection"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bidirectional"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the receive variant of hydra.go.syntax.ChannelDirection+channelDirectionReceive :: Typed.TypedTerm Syntax.ChannelDirection+channelDirectionReceive =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ChannelDirection"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "receive"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the send variant of hydra.go.syntax.ChannelDirection+channelDirectionSend :: Typed.TypedTerm Syntax.ChannelDirection+channelDirectionSend =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ChannelDirection"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "send"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.go.syntax.ChannelType+channelType :: Typed.TypedTerm Syntax.ChannelDirection -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ChannelType+channelType direction element =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ChannelType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "direction"),+          Core.fieldTerm = (Typed.unTypedTerm direction)},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Typed.unTypedTerm element)}]}))++-- | DSL accessor for the direction field of hydra.go.syntax.ChannelType+channelTypeDirection :: Typed.TypedTerm Syntax.ChannelType -> Typed.TypedTerm Syntax.ChannelDirection+channelTypeDirection x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ChannelType"),+        Core.projectionFieldName = (Core.Name "direction")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the element field of hydra.go.syntax.ChannelType+channelTypeElement :: Typed.TypedTerm Syntax.ChannelType -> Typed.TypedTerm Syntax.Type+channelTypeElement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ChannelType"),+        Core.projectionFieldName = (Core.Name "element")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the direction field of hydra.go.syntax.ChannelType+channelTypeWithDirection :: Typed.TypedTerm Syntax.ChannelType -> Typed.TypedTerm Syntax.ChannelDirection -> Typed.TypedTerm Syntax.ChannelType+channelTypeWithDirection original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ChannelType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "direction"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ChannelType"),+              Core.projectionFieldName = (Core.Name "element")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the element field of hydra.go.syntax.ChannelType+channelTypeWithElement :: Typed.TypedTerm Syntax.ChannelType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ChannelType+channelTypeWithElement original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ChannelType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "direction"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ChannelType"),+              Core.projectionFieldName = (Core.Name "direction")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the default variant of hydra.go.syntax.CommCase+commCaseDefault :: Typed.TypedTerm Syntax.CommCase+commCaseDefault =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.CommCase"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "default"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the receive variant of hydra.go.syntax.CommCase+commCaseReceive :: Typed.TypedTerm Syntax.ReceiveCase -> Typed.TypedTerm Syntax.CommCase+commCaseReceive x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.CommCase"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "receive"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the send variant of hydra.go.syntax.CommCase+commCaseSend :: Typed.TypedTerm Syntax.SendStmt -> Typed.TypedTerm Syntax.CommCase+commCaseSend x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.CommCase"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "send"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.CommClause+commClause :: Typed.TypedTerm Syntax.CommCase -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.CommClause+commClause case_ statements =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CommClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "case"),+          Core.fieldTerm = (Typed.unTypedTerm case_)},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Typed.unTypedTerm statements)}]}))++-- | DSL accessor for the case field of hydra.go.syntax.CommClause+commClauseCase :: Typed.TypedTerm Syntax.CommClause -> Typed.TypedTerm Syntax.CommCase+commClauseCase x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.CommClause"),+        Core.projectionFieldName = (Core.Name "case")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the statements field of hydra.go.syntax.CommClause+commClauseStatements :: Typed.TypedTerm Syntax.CommClause -> Typed.TypedTerm [Syntax.Statement]+commClauseStatements x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.CommClause"),+        Core.projectionFieldName = (Core.Name "statements")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the case field of hydra.go.syntax.CommClause+commClauseWithCase :: Typed.TypedTerm Syntax.CommClause -> Typed.TypedTerm Syntax.CommCase -> Typed.TypedTerm Syntax.CommClause+commClauseWithCase original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CommClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "case"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.CommClause"),+              Core.projectionFieldName = (Core.Name "statements")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the statements field of hydra.go.syntax.CommClause+commClauseWithStatements :: Typed.TypedTerm Syntax.CommClause -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.CommClause+commClauseWithStatements original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CommClause"),+      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.go.syntax.CommClause"),+              Core.projectionFieldName = (Core.Name "case")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.CompositeLit+compositeLit :: Typed.TypedTerm Syntax.LiteralType -> Typed.TypedTerm Syntax.LiteralValue -> Typed.TypedTerm Syntax.CompositeLit+compositeLit type_ value =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CompositeLit"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm value)}]}))++-- | DSL accessor for the type field of hydra.go.syntax.CompositeLit+compositeLitType :: Typed.TypedTerm Syntax.CompositeLit -> Typed.TypedTerm Syntax.LiteralType+compositeLitType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.CompositeLit"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the value field of hydra.go.syntax.CompositeLit+compositeLitValue :: Typed.TypedTerm Syntax.CompositeLit -> Typed.TypedTerm Syntax.LiteralValue+compositeLitValue x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.CompositeLit"),+        Core.projectionFieldName = (Core.Name "value")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the type field of hydra.go.syntax.CompositeLit+compositeLitWithType :: Typed.TypedTerm Syntax.CompositeLit -> Typed.TypedTerm Syntax.LiteralType -> Typed.TypedTerm Syntax.CompositeLit+compositeLitWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CompositeLit"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          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.go.syntax.CompositeLit"),+              Core.projectionFieldName = (Core.Name "value")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the value field of hydra.go.syntax.CompositeLit+compositeLitWithValue :: Typed.TypedTerm Syntax.CompositeLit -> Typed.TypedTerm Syntax.LiteralValue -> Typed.TypedTerm Syntax.CompositeLit+compositeLitWithValue original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.CompositeLit"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.CompositeLit"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.go.syntax.ConstDecl wrapper+constDecl :: Typed.TypedTerm [Syntax.ConstSpec] -> Typed.TypedTerm Syntax.ConstDecl+constDecl x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.ConstDecl"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.ConstSpec+constSpec :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm (Maybe Syntax.Type) -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ConstSpec+constSpec names type_ values =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm names)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Typed.unTypedTerm values)}]}))++-- | DSL accessor for the names field of hydra.go.syntax.ConstSpec+constSpecNames :: Typed.TypedTerm Syntax.ConstSpec -> Typed.TypedTerm [Syntax.Identifier]+constSpecNames x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+        Core.projectionFieldName = (Core.Name "names")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.ConstSpec+constSpecType :: Typed.TypedTerm Syntax.ConstSpec -> Typed.TypedTerm (Maybe Syntax.Type)+constSpecType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the values field of hydra.go.syntax.ConstSpec+constSpecValues :: Typed.TypedTerm Syntax.ConstSpec -> Typed.TypedTerm [Syntax.Expression]+constSpecValues x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+        Core.projectionFieldName = (Core.Name "values")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the names field of hydra.go.syntax.ConstSpec+constSpecWithNames :: Typed.TypedTerm Syntax.ConstSpec -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.ConstSpec+constSpecWithNames original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          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.go.syntax.ConstSpec"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+              Core.projectionFieldName = (Core.Name "values")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the type field of hydra.go.syntax.ConstSpec+constSpecWithType :: Typed.TypedTerm Syntax.ConstSpec -> Typed.TypedTerm (Maybe Syntax.Type) -> Typed.TypedTerm Syntax.ConstSpec+constSpecWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+              Core.projectionFieldName = (Core.Name "names")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+              Core.projectionFieldName = (Core.Name "values")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the values field of hydra.go.syntax.ConstSpec+constSpecWithValues :: Typed.TypedTerm Syntax.ConstSpec -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ConstSpec+constSpecWithValues original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ConstSpec"),+              Core.projectionFieldName = (Core.Name "names")})),+            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.go.syntax.ConstSpec"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.go.syntax.ContinueStmt wrapper+continueStmt :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ContinueStmt+continueStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.ContinueStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.Conversion+conversion :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Conversion+conversion type_ expression =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Conversion"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))++-- | DSL accessor for the expression field of hydra.go.syntax.Conversion+conversionExpression :: Typed.TypedTerm Syntax.Conversion -> Typed.TypedTerm Syntax.Expression+conversionExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Conversion"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.Conversion+conversionType :: Typed.TypedTerm Syntax.Conversion -> Typed.TypedTerm Syntax.Type+conversionType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Conversion"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.go.syntax.Conversion+conversionWithExpression :: Typed.TypedTerm Syntax.Conversion -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Conversion+conversionWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Conversion"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Conversion"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the type field of hydra.go.syntax.Conversion+conversionWithType :: Typed.TypedTerm Syntax.Conversion -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Conversion+conversionWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Conversion"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Conversion"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the const variant of hydra.go.syntax.Declaration+declarationConst :: Typed.TypedTerm Syntax.ConstDecl -> Typed.TypedTerm Syntax.Declaration+declarationConst x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Declaration"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "const"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the type variant of hydra.go.syntax.Declaration+declarationType :: Typed.TypedTerm Syntax.TypeDecl -> Typed.TypedTerm Syntax.Declaration+declarationType x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Declaration"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "type"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the var variant of hydra.go.syntax.Declaration+declarationVar :: Typed.TypedTerm Syntax.VarDecl -> Typed.TypedTerm Syntax.Declaration+declarationVar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Declaration"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "var"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.DeferStmt wrapper+deferStmt :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DeferStmt+deferStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.DeferStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the expression variant of hydra.go.syntax.Element+elementExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Element+elementExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Element"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "expression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.ElementList wrapper+elementList :: Typed.TypedTerm [Syntax.KeyedElement] -> Typed.TypedTerm Syntax.ElementList+elementList x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.ElementList"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the literal variant of hydra.go.syntax.Element+elementLiteral :: Typed.TypedTerm Syntax.LiteralValue -> Typed.TypedTerm Syntax.Element+elementLiteral x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Element"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "literal"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the block variant of hydra.go.syntax.ElseClause+elseClauseBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ElseClause+elseClauseBlock x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ElseClause"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "block"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the if variant of hydra.go.syntax.ElseClause+elseClauseIf :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm Syntax.ElseClause+elseClauseIf x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ElseClause"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "if"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.EmbeddedField+embeddedField :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm (Maybe Syntax.Tag) -> Typed.TypedTerm Syntax.EmbeddedField+embeddedField pointer type_ tag =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "pointer"),+          Core.fieldTerm = (Typed.unTypedTerm pointer)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)},+        Core.Field {+          Core.fieldName = (Core.Name "tag"),+          Core.fieldTerm = (Typed.unTypedTerm tag)}]}))++-- | DSL accessor for the pointer field of hydra.go.syntax.EmbeddedField+embeddedFieldPointer :: Typed.TypedTerm Syntax.EmbeddedField -> Typed.TypedTerm Bool+embeddedFieldPointer x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+        Core.projectionFieldName = (Core.Name "pointer")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the tag field of hydra.go.syntax.EmbeddedField+embeddedFieldTag :: Typed.TypedTerm Syntax.EmbeddedField -> Typed.TypedTerm (Maybe Syntax.Tag)+embeddedFieldTag x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+        Core.projectionFieldName = (Core.Name "tag")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.EmbeddedField+embeddedFieldType :: Typed.TypedTerm Syntax.EmbeddedField -> Typed.TypedTerm Syntax.TypeName+embeddedFieldType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the pointer field of hydra.go.syntax.EmbeddedField+embeddedFieldWithPointer :: Typed.TypedTerm Syntax.EmbeddedField -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.EmbeddedField+embeddedFieldWithPointer original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "pointer"),+          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.go.syntax.EmbeddedField"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "tag"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+              Core.projectionFieldName = (Core.Name "tag")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the tag field of hydra.go.syntax.EmbeddedField+embeddedFieldWithTag :: Typed.TypedTerm Syntax.EmbeddedField -> Typed.TypedTerm (Maybe Syntax.Tag) -> Typed.TypedTerm Syntax.EmbeddedField+embeddedFieldWithTag original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "pointer"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+              Core.projectionFieldName = (Core.Name "pointer")})),+            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.go.syntax.EmbeddedField"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "tag"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the type field of hydra.go.syntax.EmbeddedField+embeddedFieldWithType :: Typed.TypedTerm Syntax.EmbeddedField -> Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.EmbeddedField+embeddedFieldWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "pointer"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+              Core.projectionFieldName = (Core.Name "pointer")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "tag"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.EmbeddedField"),+              Core.projectionFieldName = (Core.Name "tag")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.go.syntax.EmptyStmt wrapper+emptyStmt :: Typed.TypedTerm () -> Typed.TypedTerm Syntax.EmptyStmt+emptyStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.EmptyStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.ExprCaseClause+exprCaseClause :: Typed.TypedTerm (Maybe [Syntax.Expression]) -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.ExprCaseClause+exprCaseClause case_ statements =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ExprCaseClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "case"),+          Core.fieldTerm = (Typed.unTypedTerm case_)},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Typed.unTypedTerm statements)}]}))++-- | DSL accessor for the case field of hydra.go.syntax.ExprCaseClause+exprCaseClauseCase :: Typed.TypedTerm Syntax.ExprCaseClause -> Typed.TypedTerm (Maybe [Syntax.Expression])+exprCaseClauseCase x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprCaseClause"),+        Core.projectionFieldName = (Core.Name "case")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the statements field of hydra.go.syntax.ExprCaseClause+exprCaseClauseStatements :: Typed.TypedTerm Syntax.ExprCaseClause -> Typed.TypedTerm [Syntax.Statement]+exprCaseClauseStatements x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprCaseClause"),+        Core.projectionFieldName = (Core.Name "statements")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the case field of hydra.go.syntax.ExprCaseClause+exprCaseClauseWithCase :: Typed.TypedTerm Syntax.ExprCaseClause -> Typed.TypedTerm (Maybe [Syntax.Expression]) -> Typed.TypedTerm Syntax.ExprCaseClause+exprCaseClauseWithCase original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ExprCaseClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "case"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprCaseClause"),+              Core.projectionFieldName = (Core.Name "statements")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the statements field of hydra.go.syntax.ExprCaseClause+exprCaseClauseWithStatements :: Typed.TypedTerm Syntax.ExprCaseClause -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.ExprCaseClause+exprCaseClauseWithStatements original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ExprCaseClause"),+      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.go.syntax.ExprCaseClause"),+              Core.projectionFieldName = (Core.Name "case")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.ExprSwitchStmt+exprSwitchStmt :: Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm [Syntax.ExprCaseClause] -> Typed.TypedTerm Syntax.ExprSwitchStmt+exprSwitchStmt init expression cases =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Typed.unTypedTerm init)},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Typed.unTypedTerm cases)}]}))++-- | DSL accessor for the cases field of hydra.go.syntax.ExprSwitchStmt+exprSwitchStmtCases :: Typed.TypedTerm Syntax.ExprSwitchStmt -> Typed.TypedTerm [Syntax.ExprCaseClause]+exprSwitchStmtCases x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+        Core.projectionFieldName = (Core.Name "cases")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the expression field of hydra.go.syntax.ExprSwitchStmt+exprSwitchStmtExpression :: Typed.TypedTerm Syntax.ExprSwitchStmt -> Typed.TypedTerm (Maybe Syntax.Expression)+exprSwitchStmtExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the init field of hydra.go.syntax.ExprSwitchStmt+exprSwitchStmtInit :: Typed.TypedTerm Syntax.ExprSwitchStmt -> Typed.TypedTerm (Maybe Syntax.SimpleStmt)+exprSwitchStmtInit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+        Core.projectionFieldName = (Core.Name "init")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the cases field of hydra.go.syntax.ExprSwitchStmt+exprSwitchStmtWithCases :: Typed.TypedTerm Syntax.ExprSwitchStmt -> Typed.TypedTerm [Syntax.ExprCaseClause] -> Typed.TypedTerm Syntax.ExprSwitchStmt+exprSwitchStmtWithCases original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the expression field of hydra.go.syntax.ExprSwitchStmt+exprSwitchStmtWithExpression :: Typed.TypedTerm Syntax.ExprSwitchStmt -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ExprSwitchStmt+exprSwitchStmtWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+              Core.projectionFieldName = (Core.Name "cases")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the init field of hydra.go.syntax.ExprSwitchStmt+exprSwitchStmtWithInit :: Typed.TypedTerm Syntax.ExprSwitchStmt -> Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm Syntax.ExprSwitchStmt+exprSwitchStmtWithInit original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          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.go.syntax.ExprSwitchStmt"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ExprSwitchStmt"),+              Core.projectionFieldName = (Core.Name "cases")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the binary variant of hydra.go.syntax.Expression+expressionBinary :: Typed.TypedTerm Syntax.BinaryExpr -> Typed.TypedTerm Syntax.Expression+expressionBinary x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Expression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "binary"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.ExpressionStmt wrapper+expressionStmt :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ExpressionStmt+expressionStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.ExpressionStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the unary variant of hydra.go.syntax.Expression+expressionUnary :: Typed.TypedTerm Syntax.UnaryExpr -> Typed.TypedTerm Syntax.Expression+expressionUnary x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Expression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "unary"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.FallthroughStmt wrapper+fallthroughStmt :: Typed.TypedTerm () -> Typed.TypedTerm Syntax.FallthroughStmt+fallthroughStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.FallthroughStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the embedded variant of hydra.go.syntax.FieldDecl+fieldDeclEmbedded :: Typed.TypedTerm Syntax.EmbeddedField -> Typed.TypedTerm Syntax.FieldDecl+fieldDeclEmbedded x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.FieldDecl"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "embedded"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the named variant of hydra.go.syntax.FieldDecl+fieldDeclNamed :: Typed.TypedTerm Syntax.NamedField -> Typed.TypedTerm Syntax.FieldDecl+fieldDeclNamed x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.FieldDecl"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "named"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.FloatLit wrapper+floatLit :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.FloatLit+floatLit x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.FloatLit"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.ForClause+forClause :: Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm Syntax.ForClause+forClause init condition post =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ForClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Typed.unTypedTerm init)},+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Typed.unTypedTerm condition)},+        Core.Field {+          Core.fieldName = (Core.Name "post"),+          Core.fieldTerm = (Typed.unTypedTerm post)}]}))++-- | DSL accessor for the condition field of hydra.go.syntax.ForClause+forClauseCondition :: Typed.TypedTerm Syntax.ForClause -> Typed.TypedTerm (Maybe Syntax.Expression)+forClauseCondition x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+        Core.projectionFieldName = (Core.Name "condition")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the init field of hydra.go.syntax.ForClause+forClauseInit :: Typed.TypedTerm Syntax.ForClause -> Typed.TypedTerm (Maybe Syntax.SimpleStmt)+forClauseInit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+        Core.projectionFieldName = (Core.Name "init")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL injection for the clause variant of hydra.go.syntax.ForClauseOrRange+forClauseOrRangeClause :: Typed.TypedTerm Syntax.ForClause -> Typed.TypedTerm Syntax.ForClauseOrRange+forClauseOrRangeClause x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ForClauseOrRange"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "clause"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the condition variant of hydra.go.syntax.ForClauseOrRange+forClauseOrRangeCondition :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ForClauseOrRange+forClauseOrRangeCondition x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ForClauseOrRange"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "condition"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the range variant of hydra.go.syntax.ForClauseOrRange+forClauseOrRangeRange :: Typed.TypedTerm Syntax.RangeClause -> Typed.TypedTerm Syntax.ForClauseOrRange+forClauseOrRangeRange x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ForClauseOrRange"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "range"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL accessor for the post field of hydra.go.syntax.ForClause+forClausePost :: Typed.TypedTerm Syntax.ForClause -> Typed.TypedTerm (Maybe Syntax.SimpleStmt)+forClausePost x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+        Core.projectionFieldName = (Core.Name "post")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the condition field of hydra.go.syntax.ForClause+forClauseWithCondition :: Typed.TypedTerm Syntax.ForClause -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ForClause+forClauseWithCondition original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ForClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "post"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+              Core.projectionFieldName = (Core.Name "post")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the init field of hydra.go.syntax.ForClause+forClauseWithInit :: Typed.TypedTerm Syntax.ForClause -> Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm Syntax.ForClause+forClauseWithInit original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ForClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+              Core.projectionFieldName = (Core.Name "condition")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "post"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+              Core.projectionFieldName = (Core.Name "post")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the post field of hydra.go.syntax.ForClause+forClauseWithPost :: Typed.TypedTerm Syntax.ForClause -> Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm Syntax.ForClause+forClauseWithPost original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ForClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForClause"),+              Core.projectionFieldName = (Core.Name "condition")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "post"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.ForStmt+forStmt :: Typed.TypedTerm (Maybe Syntax.ForClauseOrRange) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ForStmt+forStmt clause body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ForStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "clause"),+          Core.fieldTerm = (Typed.unTypedTerm clause)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the body field of hydra.go.syntax.ForStmt+forStmtBody :: Typed.TypedTerm Syntax.ForStmt -> Typed.TypedTerm Syntax.Block+forStmtBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForStmt"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the clause field of hydra.go.syntax.ForStmt+forStmtClause :: Typed.TypedTerm Syntax.ForStmt -> Typed.TypedTerm (Maybe Syntax.ForClauseOrRange)+forStmtClause x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForStmt"),+        Core.projectionFieldName = (Core.Name "clause")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.go.syntax.ForStmt+forStmtWithBody :: Typed.TypedTerm Syntax.ForStmt -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ForStmt+forStmtWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ForStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "clause"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForStmt"),+              Core.projectionFieldName = (Core.Name "clause")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the clause field of hydra.go.syntax.ForStmt+forStmtWithClause :: Typed.TypedTerm Syntax.ForStmt -> Typed.TypedTerm (Maybe Syntax.ForClauseOrRange) -> Typed.TypedTerm Syntax.ForStmt+forStmtWithClause original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ForStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "clause"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ForStmt"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.FullSlice+fullSlice :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FullSlice+fullSlice low high max =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "low"),+          Core.fieldTerm = (Typed.unTypedTerm low)},+        Core.Field {+          Core.fieldName = (Core.Name "high"),+          Core.fieldTerm = (Typed.unTypedTerm high)},+        Core.Field {+          Core.fieldName = (Core.Name "max"),+          Core.fieldTerm = (Typed.unTypedTerm max)}]}))++-- | DSL accessor for the high field of hydra.go.syntax.FullSlice+fullSliceHigh :: Typed.TypedTerm Syntax.FullSlice -> Typed.TypedTerm Syntax.Expression+fullSliceHigh x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+        Core.projectionFieldName = (Core.Name "high")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the low field of hydra.go.syntax.FullSlice+fullSliceLow :: Typed.TypedTerm Syntax.FullSlice -> Typed.TypedTerm (Maybe Syntax.Expression)+fullSliceLow x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+        Core.projectionFieldName = (Core.Name "low")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the max field of hydra.go.syntax.FullSlice+fullSliceMax :: Typed.TypedTerm Syntax.FullSlice -> Typed.TypedTerm Syntax.Expression+fullSliceMax x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+        Core.projectionFieldName = (Core.Name "max")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the high field of hydra.go.syntax.FullSlice+fullSliceWithHigh :: Typed.TypedTerm Syntax.FullSlice -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FullSlice+fullSliceWithHigh original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "low"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+              Core.projectionFieldName = (Core.Name "low")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "high"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "max"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+              Core.projectionFieldName = (Core.Name "max")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the low field of hydra.go.syntax.FullSlice+fullSliceWithLow :: Typed.TypedTerm Syntax.FullSlice -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.FullSlice+fullSliceWithLow original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "low"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "high"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+              Core.projectionFieldName = (Core.Name "high")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "max"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+              Core.projectionFieldName = (Core.Name "max")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the max field of hydra.go.syntax.FullSlice+fullSliceWithMax :: Typed.TypedTerm Syntax.FullSlice -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FullSlice+fullSliceWithMax original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "low"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+              Core.projectionFieldName = (Core.Name "low")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "high"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FullSlice"),+              Core.projectionFieldName = (Core.Name "high")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "max"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.go.syntax.FunctionBody wrapper+functionBody :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.FunctionBody+functionBody x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.FunctionBody"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.FunctionDecl+functionDecl :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.TypeParameters) -> Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm (Maybe Syntax.FunctionBody) -> Typed.TypedTerm Syntax.FunctionDecl+functionDecl name typeParams signature body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          Core.fieldTerm = (Typed.unTypedTerm typeParams)},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Typed.unTypedTerm signature)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the body field of hydra.go.syntax.FunctionDecl+functionDeclBody :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm (Maybe Syntax.FunctionBody)+functionDeclBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.go.syntax.FunctionDecl+functionDeclName :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm Syntax.Identifier+functionDeclName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the signature field of hydra.go.syntax.FunctionDecl+functionDeclSignature :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm Syntax.Signature+functionDeclSignature x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+        Core.projectionFieldName = (Core.Name "signature")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeParams field of hydra.go.syntax.FunctionDecl+functionDeclTypeParams :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm (Maybe Syntax.TypeParameters)+functionDeclTypeParams x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+        Core.projectionFieldName = (Core.Name "typeParams")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.go.syntax.FunctionDecl+functionDeclWithBody :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm (Maybe Syntax.FunctionBody) -> Typed.TypedTerm Syntax.FunctionDecl+functionDeclWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+      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.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "signature")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.go.syntax.FunctionDecl+functionDeclWithName :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.FunctionDecl+functionDeclWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "signature")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the signature field of hydra.go.syntax.FunctionDecl+functionDeclWithSignature :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.FunctionDecl+functionDeclWithSignature original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+      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.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeParams field of hydra.go.syntax.FunctionDecl+functionDeclWithTypeParams :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm (Maybe Syntax.TypeParameters) -> Typed.TypedTerm Syntax.FunctionDecl+functionDeclWithTypeParams original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+      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.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "signature")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionDecl"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.FunctionLit+functionLit :: Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.FunctionBody -> Typed.TypedTerm Syntax.FunctionLit+functionLit signature body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FunctionLit"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Typed.unTypedTerm signature)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the body field of hydra.go.syntax.FunctionLit+functionLitBody :: Typed.TypedTerm Syntax.FunctionLit -> Typed.TypedTerm Syntax.FunctionBody+functionLitBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionLit"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the signature field of hydra.go.syntax.FunctionLit+functionLitSignature :: Typed.TypedTerm Syntax.FunctionLit -> Typed.TypedTerm Syntax.Signature+functionLitSignature x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionLit"),+        Core.projectionFieldName = (Core.Name "signature")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.go.syntax.FunctionLit+functionLitWithBody :: Typed.TypedTerm Syntax.FunctionLit -> Typed.TypedTerm Syntax.FunctionBody -> Typed.TypedTerm Syntax.FunctionLit+functionLitWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FunctionLit"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionLit"),+              Core.projectionFieldName = (Core.Name "signature")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the signature field of hydra.go.syntax.FunctionLit+functionLitWithSignature :: Typed.TypedTerm Syntax.FunctionLit -> Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.FunctionLit+functionLitWithSignature original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.FunctionLit"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.FunctionLit"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.go.syntax.FunctionType wrapper+functionType :: Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.FunctionType+functionType x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.FunctionType"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.GoStmt wrapper+goStmt :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.GoStmt+goStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.GoStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.GotoStmt wrapper+gotoStmt :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.GotoStmt+gotoStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.GotoStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.Identifier wrapper+identifier :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Identifier+identifier x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.Identifier"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.IfStmt+ifStmt :: Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm (Maybe Syntax.ElseClause) -> Typed.TypedTerm Syntax.IfStmt+ifStmt init condition then_ else_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Typed.unTypedTerm init)},+        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.go.syntax.IfStmt+ifStmtCondition :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm Syntax.Expression+ifStmtCondition x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+        Core.projectionFieldName = (Core.Name "condition")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the else field of hydra.go.syntax.IfStmt+ifStmtElse :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm (Maybe Syntax.ElseClause)+ifStmtElse x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+        Core.projectionFieldName = (Core.Name "else")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the init field of hydra.go.syntax.IfStmt+ifStmtInit :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm (Maybe Syntax.SimpleStmt)+ifStmtInit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+        Core.projectionFieldName = (Core.Name "init")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the then field of hydra.go.syntax.IfStmt+ifStmtThen :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm Syntax.Block+ifStmtThen x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+        Core.projectionFieldName = (Core.Name "then")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the condition field of hydra.go.syntax.IfStmt+ifStmtWithCondition :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfStmt+ifStmtWithCondition original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        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.go.syntax.IfStmt"),+              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.go.syntax.IfStmt"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the else field of hydra.go.syntax.IfStmt+ifStmtWithElse :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm (Maybe Syntax.ElseClause) -> Typed.TypedTerm Syntax.IfStmt+ifStmtWithElse original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+              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.go.syntax.IfStmt"),+              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 init field of hydra.go.syntax.IfStmt+ifStmtWithInit :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm Syntax.IfStmt+ifStmtWithInit original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+              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.go.syntax.IfStmt"),+              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.go.syntax.IfStmt"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the then field of hydra.go.syntax.IfStmt+ifStmtWithThen :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.IfStmt+ifStmtWithThen original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IfStmt"),+              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.go.syntax.IfStmt"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.go.syntax.ImaginaryLit wrapper+imaginaryLit :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.ImaginaryLit+imaginaryLit x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.ImaginaryLit"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the dot variant of hydra.go.syntax.ImportAlias+importAliasDot :: Typed.TypedTerm Syntax.ImportAlias+importAliasDot =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ImportAlias"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "dot"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the name variant of hydra.go.syntax.ImportAlias+importAliasName :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportAlias+importAliasName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.ImportAlias"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.ImportDecl wrapper+importDecl :: Typed.TypedTerm [Syntax.ImportSpec] -> Typed.TypedTerm Syntax.ImportDecl+importDecl x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.ImportDecl"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.ImportPath wrapper+importPath :: Typed.TypedTerm Syntax.StringLit -> Typed.TypedTerm Syntax.ImportPath+importPath x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.ImportPath"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.ImportSpec+importSpec :: Typed.TypedTerm (Maybe Syntax.ImportAlias) -> Typed.TypedTerm Syntax.ImportPath -> Typed.TypedTerm Syntax.ImportSpec+importSpec alias path =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ImportSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "alias"),+          Core.fieldTerm = (Typed.unTypedTerm alias)},+        Core.Field {+          Core.fieldName = (Core.Name "path"),+          Core.fieldTerm = (Typed.unTypedTerm path)}]}))++-- | DSL accessor for the alias field of hydra.go.syntax.ImportSpec+importSpecAlias :: Typed.TypedTerm Syntax.ImportSpec -> Typed.TypedTerm (Maybe Syntax.ImportAlias)+importSpecAlias x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ImportSpec"),+        Core.projectionFieldName = (Core.Name "alias")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the path field of hydra.go.syntax.ImportSpec+importSpecPath :: Typed.TypedTerm Syntax.ImportSpec -> Typed.TypedTerm Syntax.ImportPath+importSpecPath x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ImportSpec"),+        Core.projectionFieldName = (Core.Name "path")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the alias field of hydra.go.syntax.ImportSpec+importSpecWithAlias :: Typed.TypedTerm Syntax.ImportSpec -> Typed.TypedTerm (Maybe Syntax.ImportAlias) -> Typed.TypedTerm Syntax.ImportSpec+importSpecWithAlias original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ImportSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "alias"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "path"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ImportSpec"),+              Core.projectionFieldName = (Core.Name "path")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the path field of hydra.go.syntax.ImportSpec+importSpecWithPath :: Typed.TypedTerm Syntax.ImportSpec -> Typed.TypedTerm Syntax.ImportPath -> Typed.TypedTerm Syntax.ImportSpec+importSpecWithPath original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ImportSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "alias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ImportSpec"),+              Core.projectionFieldName = (Core.Name "alias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "path"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.IncDecStmt+incDecStmt :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.IncDecStmt+incDecStmt expression increment =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IncDecStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "increment"),+          Core.fieldTerm = (Typed.unTypedTerm increment)}]}))++-- | DSL accessor for the expression field of hydra.go.syntax.IncDecStmt+incDecStmtExpression :: Typed.TypedTerm Syntax.IncDecStmt -> Typed.TypedTerm Syntax.Expression+incDecStmtExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.IncDecStmt"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the increment field of hydra.go.syntax.IncDecStmt+incDecStmtIncrement :: Typed.TypedTerm Syntax.IncDecStmt -> Typed.TypedTerm Bool+incDecStmtIncrement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.IncDecStmt"),+        Core.projectionFieldName = (Core.Name "increment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.go.syntax.IncDecStmt+incDecStmtWithExpression :: Typed.TypedTerm Syntax.IncDecStmt -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IncDecStmt+incDecStmtWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IncDecStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "increment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IncDecStmt"),+              Core.projectionFieldName = (Core.Name "increment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the increment field of hydra.go.syntax.IncDecStmt+incDecStmtWithIncrement :: Typed.TypedTerm Syntax.IncDecStmt -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.IncDecStmt+incDecStmtWithIncrement original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IncDecStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IncDecStmt"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "increment"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.go.syntax.Index wrapper+index :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Index+index x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.Index"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.IndexExpr+indexExpr :: Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IndexExpr+indexExpr expr index =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IndexExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Typed.unTypedTerm expr)},+        Core.Field {+          Core.fieldName = (Core.Name "index"),+          Core.fieldTerm = (Typed.unTypedTerm index)}]}))++-- | DSL accessor for the expr field of hydra.go.syntax.IndexExpr+indexExprExpr :: Typed.TypedTerm Syntax.IndexExpr -> Typed.TypedTerm Syntax.PrimaryExpr+indexExprExpr x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.IndexExpr"),+        Core.projectionFieldName = (Core.Name "expr")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the index field of hydra.go.syntax.IndexExpr+indexExprIndex :: Typed.TypedTerm Syntax.IndexExpr -> Typed.TypedTerm Syntax.Expression+indexExprIndex x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.IndexExpr"),+        Core.projectionFieldName = (Core.Name "index")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expr field of hydra.go.syntax.IndexExpr+indexExprWithExpr :: Typed.TypedTerm Syntax.IndexExpr -> Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.IndexExpr+indexExprWithExpr original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IndexExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "index"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IndexExpr"),+              Core.projectionFieldName = (Core.Name "index")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the index field of hydra.go.syntax.IndexExpr+indexExprWithIndex :: Typed.TypedTerm Syntax.IndexExpr -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IndexExpr+indexExprWithIndex original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.IndexExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.IndexExpr"),+              Core.projectionFieldName = (Core.Name "expr")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "index"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.go.syntax.IntLit wrapper+intLit :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.IntLit+intLit x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.IntLit"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the method variant of hydra.go.syntax.InterfaceElem+interfaceElemMethod :: Typed.TypedTerm Syntax.MethodElem -> Typed.TypedTerm Syntax.InterfaceElem+interfaceElemMethod x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.InterfaceElem"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "method"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the type variant of hydra.go.syntax.InterfaceElem+interfaceElemType :: Typed.TypedTerm Syntax.TypeElem -> Typed.TypedTerm Syntax.InterfaceElem+interfaceElemType x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.InterfaceElem"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "type"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.InterfaceType wrapper+interfaceType :: Typed.TypedTerm [Syntax.InterfaceElem] -> Typed.TypedTerm Syntax.InterfaceType+interfaceType x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.InterfaceType"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.InterpretedStringLit wrapper+interpretedStringLit :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.InterpretedStringLit+interpretedStringLit x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.InterpretedStringLit"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the expression variant of hydra.go.syntax.Key+keyExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Key+keyExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Key"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "expression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the field variant of hydra.go.syntax.Key+keyField :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Key+keyField x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Key"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "field"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the literal variant of hydra.go.syntax.Key+keyLiteral :: Typed.TypedTerm Syntax.LiteralValue -> Typed.TypedTerm Syntax.Key+keyLiteral x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Key"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "literal"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.KeyedElement+keyedElement :: Typed.TypedTerm (Maybe Syntax.Key) -> Typed.TypedTerm Syntax.Element -> Typed.TypedTerm Syntax.KeyedElement+keyedElement key element =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.KeyedElement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "key"),+          Core.fieldTerm = (Typed.unTypedTerm key)},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Typed.unTypedTerm element)}]}))++-- | DSL accessor for the element field of hydra.go.syntax.KeyedElement+keyedElementElement :: Typed.TypedTerm Syntax.KeyedElement -> Typed.TypedTerm Syntax.Element+keyedElementElement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.KeyedElement"),+        Core.projectionFieldName = (Core.Name "element")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the key field of hydra.go.syntax.KeyedElement+keyedElementKey :: Typed.TypedTerm Syntax.KeyedElement -> Typed.TypedTerm (Maybe Syntax.Key)+keyedElementKey x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.KeyedElement"),+        Core.projectionFieldName = (Core.Name "key")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the element field of hydra.go.syntax.KeyedElement+keyedElementWithElement :: Typed.TypedTerm Syntax.KeyedElement -> Typed.TypedTerm Syntax.Element -> Typed.TypedTerm Syntax.KeyedElement+keyedElementWithElement original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.KeyedElement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "key"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.KeyedElement"),+              Core.projectionFieldName = (Core.Name "key")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the key field of hydra.go.syntax.KeyedElement+keyedElementWithKey :: Typed.TypedTerm Syntax.KeyedElement -> Typed.TypedTerm (Maybe Syntax.Key) -> Typed.TypedTerm Syntax.KeyedElement+keyedElementWithKey original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.KeyedElement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "key"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "element"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.KeyedElement"),+              Core.projectionFieldName = (Core.Name "element")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.LabeledStmt+labeledStmt :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStmt+labeledStmt label statement =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.LabeledStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "label"),+          Core.fieldTerm = (Typed.unTypedTerm label)},+        Core.Field {+          Core.fieldName = (Core.Name "statement"),+          Core.fieldTerm = (Typed.unTypedTerm statement)}]}))++-- | DSL accessor for the label field of hydra.go.syntax.LabeledStmt+labeledStmtLabel :: Typed.TypedTerm Syntax.LabeledStmt -> Typed.TypedTerm Syntax.Identifier+labeledStmtLabel x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.LabeledStmt"),+        Core.projectionFieldName = (Core.Name "label")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the statement field of hydra.go.syntax.LabeledStmt+labeledStmtStatement :: Typed.TypedTerm Syntax.LabeledStmt -> Typed.TypedTerm Syntax.Statement+labeledStmtStatement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.LabeledStmt"),+        Core.projectionFieldName = (Core.Name "statement")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the label field of hydra.go.syntax.LabeledStmt+labeledStmtWithLabel :: Typed.TypedTerm Syntax.LabeledStmt -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LabeledStmt+labeledStmtWithLabel original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.LabeledStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "label"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "statement"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.LabeledStmt"),+              Core.projectionFieldName = (Core.Name "statement")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the statement field of hydra.go.syntax.LabeledStmt+labeledStmtWithStatement :: Typed.TypedTerm Syntax.LabeledStmt -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStmt+labeledStmtWithStatement original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.LabeledStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "label"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.LabeledStmt"),+              Core.projectionFieldName = (Core.Name "label")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "statement"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the basic variant of hydra.go.syntax.Literal+literalBasic :: Typed.TypedTerm Syntax.BasicLit -> Typed.TypedTerm Syntax.Literal+literalBasic x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Literal"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "basic"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the composite variant of hydra.go.syntax.Literal+literalComposite :: Typed.TypedTerm Syntax.CompositeLit -> Typed.TypedTerm Syntax.Literal+literalComposite x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Literal"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "composite"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the function variant of hydra.go.syntax.Literal+literalFunction :: Typed.TypedTerm Syntax.FunctionLit -> Typed.TypedTerm Syntax.Literal+literalFunction x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Literal"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "function"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the array variant of hydra.go.syntax.LiteralType+literalTypeArray :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.LiteralType+literalTypeArray x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.LiteralType"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "array"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the inferredArray variant of hydra.go.syntax.LiteralType+literalTypeInferredArray :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.LiteralType+literalTypeInferredArray x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.LiteralType"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "inferredArray"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the map variant of hydra.go.syntax.LiteralType+literalTypeMap :: Typed.TypedTerm Syntax.MapType -> Typed.TypedTerm Syntax.LiteralType+literalTypeMap x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.LiteralType"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "map"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the name variant of hydra.go.syntax.LiteralType+literalTypeName :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.LiteralType+literalTypeName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.LiteralType"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slice variant of hydra.go.syntax.LiteralType+literalTypeSlice :: Typed.TypedTerm Syntax.SliceType -> Typed.TypedTerm Syntax.LiteralType+literalTypeSlice x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.LiteralType"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slice"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the struct variant of hydra.go.syntax.LiteralType+literalTypeStruct :: Typed.TypedTerm Syntax.StructType -> Typed.TypedTerm Syntax.LiteralType+literalTypeStruct x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.LiteralType"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "struct"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.LiteralValue wrapper+literalValue :: Typed.TypedTerm [Syntax.KeyedElement] -> Typed.TypedTerm Syntax.LiteralValue+literalValue x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.LiteralValue"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.MapType+mapType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.MapType+mapType key value =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MapType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "key"),+          Core.fieldTerm = (Typed.unTypedTerm key)},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm value)}]}))++-- | DSL accessor for the key field of hydra.go.syntax.MapType+mapTypeKey :: Typed.TypedTerm Syntax.MapType -> Typed.TypedTerm Syntax.Type+mapTypeKey x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MapType"),+        Core.projectionFieldName = (Core.Name "key")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the value field of hydra.go.syntax.MapType+mapTypeValue :: Typed.TypedTerm Syntax.MapType -> Typed.TypedTerm Syntax.Type+mapTypeValue x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MapType"),+        Core.projectionFieldName = (Core.Name "value")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the key field of hydra.go.syntax.MapType+mapTypeWithKey :: Typed.TypedTerm Syntax.MapType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.MapType+mapTypeWithKey original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MapType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "key"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MapType"),+              Core.projectionFieldName = (Core.Name "value")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the value field of hydra.go.syntax.MapType+mapTypeWithValue :: Typed.TypedTerm Syntax.MapType -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.MapType+mapTypeWithValue original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MapType"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "key"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MapType"),+              Core.projectionFieldName = (Core.Name "key")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.MethodDecl+methodDecl :: Typed.TypedTerm Syntax.Receiver -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm (Maybe Syntax.FunctionBody) -> Typed.TypedTerm Syntax.MethodDecl+methodDecl receiver name signature body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "receiver"),+          Core.fieldTerm = (Typed.unTypedTerm receiver)},+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Typed.unTypedTerm signature)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the body field of hydra.go.syntax.MethodDecl+methodDeclBody :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm (Maybe Syntax.FunctionBody)+methodDeclBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.go.syntax.MethodDecl+methodDeclName :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm Syntax.Identifier+methodDeclName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the receiver field of hydra.go.syntax.MethodDecl+methodDeclReceiver :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm Syntax.Receiver+methodDeclReceiver x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+        Core.projectionFieldName = (Core.Name "receiver")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the signature field of hydra.go.syntax.MethodDecl+methodDeclSignature :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm Syntax.Signature+methodDeclSignature x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+        Core.projectionFieldName = (Core.Name "signature")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.go.syntax.MethodDecl+methodDeclWithBody :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm (Maybe Syntax.FunctionBody) -> Typed.TypedTerm Syntax.MethodDecl+methodDeclWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "receiver"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "receiver")})),+            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.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "signature")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.go.syntax.MethodDecl+methodDeclWithName :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodDecl+methodDeclWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "receiver"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "receiver")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "signature")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the receiver field of hydra.go.syntax.MethodDecl+methodDeclWithReceiver :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm Syntax.Receiver -> Typed.TypedTerm Syntax.MethodDecl+methodDeclWithReceiver original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "receiver"),+          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.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "signature")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the signature field of hydra.go.syntax.MethodDecl+methodDeclWithSignature :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.MethodDecl+methodDeclWithSignature original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "receiver"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "receiver")})),+            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.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodDecl"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.MethodElem+methodElem :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.MethodElem+methodElem name signature =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodElem"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Typed.unTypedTerm signature)}]}))++-- | DSL accessor for the name field of hydra.go.syntax.MethodElem+methodElemName :: Typed.TypedTerm Syntax.MethodElem -> Typed.TypedTerm Syntax.Identifier+methodElemName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodElem"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the signature field of hydra.go.syntax.MethodElem+methodElemSignature :: Typed.TypedTerm Syntax.MethodElem -> Typed.TypedTerm Syntax.Signature+methodElemSignature x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodElem"),+        Core.projectionFieldName = (Core.Name "signature")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.go.syntax.MethodElem+methodElemWithName :: Typed.TypedTerm Syntax.MethodElem -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodElem+methodElemWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodElem"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodElem"),+              Core.projectionFieldName = (Core.Name "signature")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the signature field of hydra.go.syntax.MethodElem+methodElemWithSignature :: Typed.TypedTerm Syntax.MethodElem -> Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.MethodElem+methodElemWithSignature original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodElem"),+      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.go.syntax.MethodElem"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "signature"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.MethodExpr+methodExpr :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodExpr+methodExpr receiver method =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "receiver"),+          Core.fieldTerm = (Typed.unTypedTerm receiver)},+        Core.Field {+          Core.fieldName = (Core.Name "method"),+          Core.fieldTerm = (Typed.unTypedTerm method)}]}))++-- | DSL accessor for the method field of hydra.go.syntax.MethodExpr+methodExprMethod :: Typed.TypedTerm Syntax.MethodExpr -> Typed.TypedTerm Syntax.Identifier+methodExprMethod x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodExpr"),+        Core.projectionFieldName = (Core.Name "method")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the receiver field of hydra.go.syntax.MethodExpr+methodExprReceiver :: Typed.TypedTerm Syntax.MethodExpr -> Typed.TypedTerm Syntax.Type+methodExprReceiver x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodExpr"),+        Core.projectionFieldName = (Core.Name "receiver")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the method field of hydra.go.syntax.MethodExpr+methodExprWithMethod :: Typed.TypedTerm Syntax.MethodExpr -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.MethodExpr+methodExprWithMethod original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "receiver"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodExpr"),+              Core.projectionFieldName = (Core.Name "receiver")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "method"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the receiver field of hydra.go.syntax.MethodExpr+methodExprWithReceiver :: Typed.TypedTerm Syntax.MethodExpr -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.MethodExpr+methodExprWithReceiver original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.MethodExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "receiver"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "method"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.MethodExpr"),+              Core.projectionFieldName = (Core.Name "method")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.Module+module_ :: Typed.TypedTerm Syntax.PackageClause -> Typed.TypedTerm [Syntax.ImportDecl] -> Typed.TypedTerm [Syntax.TopLevelDecl] -> Typed.TypedTerm Syntax.Module+module_ package imports declarations =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Module"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Typed.unTypedTerm package)},+        Core.Field {+          Core.fieldName = (Core.Name "imports"),+          Core.fieldTerm = (Typed.unTypedTerm imports)},+        Core.Field {+          Core.fieldName = (Core.Name "declarations"),+          Core.fieldTerm = (Typed.unTypedTerm declarations)}]}))++-- | DSL accessor for the declarations field of hydra.go.syntax.Module+moduleDeclarations :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.TopLevelDecl]+moduleDeclarations x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Module"),+        Core.projectionFieldName = (Core.Name "declarations")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the imports field of hydra.go.syntax.Module+moduleImports :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.ImportDecl]+moduleImports x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Module"),+        Core.projectionFieldName = (Core.Name "imports")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the package field of hydra.go.syntax.Module+modulePackage :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm Syntax.PackageClause+modulePackage x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Module"),+        Core.projectionFieldName = (Core.Name "package")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the declarations field of hydra.go.syntax.Module+moduleWithDeclarations :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.TopLevelDecl] -> Typed.TypedTerm Syntax.Module+moduleWithDeclarations original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Module"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Module"),+              Core.projectionFieldName = (Core.Name "package")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "imports"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.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 imports field of hydra.go.syntax.Module+moduleWithImports :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [Syntax.ImportDecl] -> Typed.TypedTerm Syntax.Module+moduleWithImports original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Module"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Module"),+              Core.projectionFieldName = (Core.Name "package")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "imports"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "declarations"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Module"),+              Core.projectionFieldName = (Core.Name "declarations")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the package field of hydra.go.syntax.Module+moduleWithPackage :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm Syntax.PackageClause -> Typed.TypedTerm Syntax.Module+moduleWithPackage original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Module"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "imports"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.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.go.syntax.Module"),+              Core.projectionFieldName = (Core.Name "declarations")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the bitClear variant of hydra.go.syntax.MulOp+mulOpBitClear :: Typed.TypedTerm Syntax.MulOp+mulOpBitClear =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.MulOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bitClear"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the bitwiseAnd variant of hydra.go.syntax.MulOp+mulOpBitwiseAnd :: Typed.TypedTerm Syntax.MulOp+mulOpBitwiseAnd =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.MulOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bitwiseAnd"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the divide variant of hydra.go.syntax.MulOp+mulOpDivide :: Typed.TypedTerm Syntax.MulOp+mulOpDivide =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.MulOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "divide"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the leftShift variant of hydra.go.syntax.MulOp+mulOpLeftShift :: Typed.TypedTerm Syntax.MulOp+mulOpLeftShift =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.MulOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "leftShift"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the multiply variant of hydra.go.syntax.MulOp+mulOpMultiply :: Typed.TypedTerm Syntax.MulOp+mulOpMultiply =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.MulOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "multiply"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the remainder variant of hydra.go.syntax.MulOp+mulOpRemainder :: Typed.TypedTerm Syntax.MulOp+mulOpRemainder =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.MulOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "remainder"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the rightShift variant of hydra.go.syntax.MulOp+mulOpRightShift :: Typed.TypedTerm Syntax.MulOp+mulOpRightShift =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.MulOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "rightShift"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.go.syntax.NamedField+namedField :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm (Maybe Syntax.Tag) -> Typed.TypedTerm Syntax.NamedField+namedField names type_ tag =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.NamedField"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm names)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)},+        Core.Field {+          Core.fieldName = (Core.Name "tag"),+          Core.fieldTerm = (Typed.unTypedTerm tag)}]}))++-- | DSL accessor for the names field of hydra.go.syntax.NamedField+namedFieldNames :: Typed.TypedTerm Syntax.NamedField -> Typed.TypedTerm [Syntax.Identifier]+namedFieldNames x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.NamedField"),+        Core.projectionFieldName = (Core.Name "names")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the tag field of hydra.go.syntax.NamedField+namedFieldTag :: Typed.TypedTerm Syntax.NamedField -> Typed.TypedTerm (Maybe Syntax.Tag)+namedFieldTag x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.NamedField"),+        Core.projectionFieldName = (Core.Name "tag")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.NamedField+namedFieldType :: Typed.TypedTerm Syntax.NamedField -> Typed.TypedTerm Syntax.Type+namedFieldType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.NamedField"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the names field of hydra.go.syntax.NamedField+namedFieldWithNames :: Typed.TypedTerm Syntax.NamedField -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.NamedField+namedFieldWithNames original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.NamedField"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          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.go.syntax.NamedField"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "tag"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.NamedField"),+              Core.projectionFieldName = (Core.Name "tag")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the tag field of hydra.go.syntax.NamedField+namedFieldWithTag :: Typed.TypedTerm Syntax.NamedField -> Typed.TypedTerm (Maybe Syntax.Tag) -> Typed.TypedTerm Syntax.NamedField+namedFieldWithTag original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.NamedField"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.NamedField"),+              Core.projectionFieldName = (Core.Name "names")})),+            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.go.syntax.NamedField"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "tag"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the type field of hydra.go.syntax.NamedField+namedFieldWithType :: Typed.TypedTerm Syntax.NamedField -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.NamedField+namedFieldWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.NamedField"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.NamedField"),+              Core.projectionFieldName = (Core.Name "names")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "tag"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.NamedField"),+              Core.projectionFieldName = (Core.Name "tag")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the literal variant of hydra.go.syntax.Operand+operandLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.Operand+operandLiteral x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Operand"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "literal"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the name variant of hydra.go.syntax.Operand+operandName :: Typed.TypedTerm Syntax.OperandName -> Typed.TypedTerm Syntax.Operand+operandName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Operand"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.OperandName+operandName2 :: Typed.TypedTerm Syntax.QualifiedIdent -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.OperandName+operandName2 name typeArgs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.OperandName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "typeArgs"),+          Core.fieldTerm = (Typed.unTypedTerm typeArgs)}]}))++-- | DSL accessor for the name field of hydra.go.syntax.OperandName+operandNameName :: Typed.TypedTerm Syntax.OperandName -> Typed.TypedTerm Syntax.QualifiedIdent+operandNameName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.OperandName"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeArgs field of hydra.go.syntax.OperandName+operandNameTypeArgs :: Typed.TypedTerm Syntax.OperandName -> Typed.TypedTerm [Syntax.Type]+operandNameTypeArgs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.OperandName"),+        Core.projectionFieldName = (Core.Name "typeArgs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.go.syntax.OperandName+operandNameWithName :: Typed.TypedTerm Syntax.OperandName -> Typed.TypedTerm Syntax.QualifiedIdent -> Typed.TypedTerm Syntax.OperandName+operandNameWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.OperandName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeArgs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.OperandName"),+              Core.projectionFieldName = (Core.Name "typeArgs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeArgs field of hydra.go.syntax.OperandName+operandNameWithTypeArgs :: Typed.TypedTerm Syntax.OperandName -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.OperandName+operandNameWithTypeArgs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.OperandName"),+      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.go.syntax.OperandName"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeArgs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the paren variant of hydra.go.syntax.Operand+operandParen :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Operand+operandParen x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Operand"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "paren"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.PackageClause wrapper+packageClause :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.PackageClause+packageClause x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.PackageClause"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.ParameterDecl+parameterDecl :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ParameterDecl+parameterDecl names variadic type_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm names)},+        Core.Field {+          Core.fieldName = (Core.Name "variadic"),+          Core.fieldTerm = (Typed.unTypedTerm variadic)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))++-- | DSL accessor for the names field of hydra.go.syntax.ParameterDecl+parameterDeclNames :: Typed.TypedTerm Syntax.ParameterDecl -> Typed.TypedTerm [Syntax.Identifier]+parameterDeclNames x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+        Core.projectionFieldName = (Core.Name "names")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.ParameterDecl+parameterDeclType :: Typed.TypedTerm Syntax.ParameterDecl -> Typed.TypedTerm Syntax.Type+parameterDeclType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the variadic field of hydra.go.syntax.ParameterDecl+parameterDeclVariadic :: Typed.TypedTerm Syntax.ParameterDecl -> Typed.TypedTerm Bool+parameterDeclVariadic x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+        Core.projectionFieldName = (Core.Name "variadic")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the names field of hydra.go.syntax.ParameterDecl+parameterDeclWithNames :: Typed.TypedTerm Syntax.ParameterDecl -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.ParameterDecl+parameterDeclWithNames original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "variadic"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+              Core.projectionFieldName = (Core.Name "variadic")})),+            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.go.syntax.ParameterDecl"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the type field of hydra.go.syntax.ParameterDecl+parameterDeclWithType :: Typed.TypedTerm Syntax.ParameterDecl -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.ParameterDecl+parameterDeclWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+              Core.projectionFieldName = (Core.Name "names")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "variadic"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+              Core.projectionFieldName = (Core.Name "variadic")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the variadic field of hydra.go.syntax.ParameterDecl+parameterDeclWithVariadic :: Typed.TypedTerm Syntax.ParameterDecl -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ParameterDecl+parameterDeclWithVariadic original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ParameterDecl"),+              Core.projectionFieldName = (Core.Name "names")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "variadic"),+          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.go.syntax.ParameterDecl"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.go.syntax.Parameters wrapper+parameters :: Typed.TypedTerm [Syntax.ParameterDecl] -> Typed.TypedTerm Syntax.Parameters+parameters x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.Parameters"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.PointerType wrapper+pointerType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.PointerType+pointerType x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.PointerType"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the call variant of hydra.go.syntax.PrimaryExpr+primaryExprCall :: Typed.TypedTerm Syntax.CallExpr -> Typed.TypedTerm Syntax.PrimaryExpr+primaryExprCall x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.PrimaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "call"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the conversion variant of hydra.go.syntax.PrimaryExpr+primaryExprConversion :: Typed.TypedTerm Syntax.Conversion -> Typed.TypedTerm Syntax.PrimaryExpr+primaryExprConversion x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.PrimaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "conversion"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the index variant of hydra.go.syntax.PrimaryExpr+primaryExprIndex :: Typed.TypedTerm Syntax.IndexExpr -> Typed.TypedTerm Syntax.PrimaryExpr+primaryExprIndex x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.PrimaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "index"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the methodExpr variant of hydra.go.syntax.PrimaryExpr+primaryExprMethodExpr :: Typed.TypedTerm Syntax.MethodExpr -> Typed.TypedTerm Syntax.PrimaryExpr+primaryExprMethodExpr x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.PrimaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "methodExpr"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the operand variant of hydra.go.syntax.PrimaryExpr+primaryExprOperand :: Typed.TypedTerm Syntax.Operand -> Typed.TypedTerm Syntax.PrimaryExpr+primaryExprOperand x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.PrimaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "operand"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the selector variant of hydra.go.syntax.PrimaryExpr+primaryExprSelector :: Typed.TypedTerm Syntax.SelectorExpr -> Typed.TypedTerm Syntax.PrimaryExpr+primaryExprSelector x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.PrimaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "selector"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slice variant of hydra.go.syntax.PrimaryExpr+primaryExprSlice :: Typed.TypedTerm Syntax.SliceExpr -> Typed.TypedTerm Syntax.PrimaryExpr+primaryExprSlice x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.PrimaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slice"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the typeAssertion variant of hydra.go.syntax.PrimaryExpr+primaryExprTypeAssertion :: Typed.TypedTerm Syntax.TypeAssertionExpr -> Typed.TypedTerm Syntax.PrimaryExpr+primaryExprTypeAssertion x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.PrimaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "typeAssertion"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.QualifiedIdent+qualifiedIdent :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.QualifiedIdent+qualifiedIdent package name =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.QualifiedIdent"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Typed.unTypedTerm package)},+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)}]}))++-- | DSL accessor for the name field of hydra.go.syntax.QualifiedIdent+qualifiedIdentName :: Typed.TypedTerm Syntax.QualifiedIdent -> Typed.TypedTerm Syntax.Identifier+qualifiedIdentName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.QualifiedIdent"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the package field of hydra.go.syntax.QualifiedIdent+qualifiedIdentPackage :: Typed.TypedTerm Syntax.QualifiedIdent -> Typed.TypedTerm (Maybe Syntax.Identifier)+qualifiedIdentPackage x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.QualifiedIdent"),+        Core.projectionFieldName = (Core.Name "package")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.go.syntax.QualifiedIdent+qualifiedIdentWithName :: Typed.TypedTerm Syntax.QualifiedIdent -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.QualifiedIdent+qualifiedIdentWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.QualifiedIdent"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.QualifiedIdent"),+              Core.projectionFieldName = (Core.Name "package")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the package field of hydra.go.syntax.QualifiedIdent+qualifiedIdentWithPackage :: Typed.TypedTerm Syntax.QualifiedIdent -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.QualifiedIdent+qualifiedIdentWithPackage original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.QualifiedIdent"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          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.go.syntax.QualifiedIdent"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.RangeClause+rangeClause :: Typed.TypedTerm (Maybe Syntax.RangeVars) -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.RangeClause+rangeClause vars expression =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.RangeClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "vars"),+          Core.fieldTerm = (Typed.unTypedTerm vars)},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))++-- | DSL accessor for the expression field of hydra.go.syntax.RangeClause+rangeClauseExpression :: Typed.TypedTerm Syntax.RangeClause -> Typed.TypedTerm Syntax.Expression+rangeClauseExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.RangeClause"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the vars field of hydra.go.syntax.RangeClause+rangeClauseVars :: Typed.TypedTerm Syntax.RangeClause -> Typed.TypedTerm (Maybe Syntax.RangeVars)+rangeClauseVars x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.RangeClause"),+        Core.projectionFieldName = (Core.Name "vars")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.go.syntax.RangeClause+rangeClauseWithExpression :: Typed.TypedTerm Syntax.RangeClause -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.RangeClause+rangeClauseWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.RangeClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "vars"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.RangeClause"),+              Core.projectionFieldName = (Core.Name "vars")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the vars field of hydra.go.syntax.RangeClause+rangeClauseWithVars :: Typed.TypedTerm Syntax.RangeClause -> Typed.TypedTerm (Maybe Syntax.RangeVars) -> Typed.TypedTerm Syntax.RangeClause+rangeClauseWithVars original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.RangeClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "vars"),+          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.go.syntax.RangeClause"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the assign variant of hydra.go.syntax.RangeVars+rangeVarsAssign :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.RangeVars+rangeVarsAssign x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.RangeVars"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "assign"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the declare variant of hydra.go.syntax.RangeVars+rangeVarsDeclare :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.RangeVars+rangeVarsDeclare x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.RangeVars"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "declare"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.RawStringLit wrapper+rawStringLit :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.RawStringLit+rawStringLit x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.RawStringLit"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.ReceiveCase+receiveCase :: Typed.TypedTerm (Maybe Syntax.RangeVars) -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ReceiveCase+receiveCase vars expression =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ReceiveCase"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "vars"),+          Core.fieldTerm = (Typed.unTypedTerm vars)},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))++-- | DSL accessor for the expression field of hydra.go.syntax.ReceiveCase+receiveCaseExpression :: Typed.TypedTerm Syntax.ReceiveCase -> Typed.TypedTerm Syntax.Expression+receiveCaseExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ReceiveCase"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the vars field of hydra.go.syntax.ReceiveCase+receiveCaseVars :: Typed.TypedTerm Syntax.ReceiveCase -> Typed.TypedTerm (Maybe Syntax.RangeVars)+receiveCaseVars x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ReceiveCase"),+        Core.projectionFieldName = (Core.Name "vars")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.go.syntax.ReceiveCase+receiveCaseWithExpression :: Typed.TypedTerm Syntax.ReceiveCase -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ReceiveCase+receiveCaseWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ReceiveCase"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "vars"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ReceiveCase"),+              Core.projectionFieldName = (Core.Name "vars")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the vars field of hydra.go.syntax.ReceiveCase+receiveCaseWithVars :: Typed.TypedTerm Syntax.ReceiveCase -> Typed.TypedTerm (Maybe Syntax.RangeVars) -> Typed.TypedTerm Syntax.ReceiveCase+receiveCaseWithVars original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ReceiveCase"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "vars"),+          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.go.syntax.ReceiveCase"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.Receiver+receiver :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Receiver+receiver name type_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Receiver"),+      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.go.syntax.Receiver+receiverName :: Typed.TypedTerm Syntax.Receiver -> Typed.TypedTerm (Maybe Syntax.Identifier)+receiverName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Receiver"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.Receiver+receiverType :: Typed.TypedTerm Syntax.Receiver -> Typed.TypedTerm Syntax.Type+receiverType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Receiver"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.go.syntax.Receiver+receiverWithName :: Typed.TypedTerm Syntax.Receiver -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.Receiver+receiverWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Receiver"),+      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.go.syntax.Receiver"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the type field of hydra.go.syntax.Receiver+receiverWithType :: Typed.TypedTerm Syntax.Receiver -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Receiver+receiverWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Receiver"),+      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.go.syntax.Receiver"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the equal variant of hydra.go.syntax.RelOp+relOpEqual :: Typed.TypedTerm Syntax.RelOp+relOpEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.RelOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "equal"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the greater variant of hydra.go.syntax.RelOp+relOpGreater :: Typed.TypedTerm Syntax.RelOp+relOpGreater =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.RelOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "greater"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the greaterEqual variant of hydra.go.syntax.RelOp+relOpGreaterEqual :: Typed.TypedTerm Syntax.RelOp+relOpGreaterEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.RelOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "greaterEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the less variant of hydra.go.syntax.RelOp+relOpLess :: Typed.TypedTerm Syntax.RelOp+relOpLess =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.RelOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "less"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the lessEqual variant of hydra.go.syntax.RelOp+relOpLessEqual :: Typed.TypedTerm Syntax.RelOp+relOpLessEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.RelOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "lessEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the notEqual variant of hydra.go.syntax.RelOp+relOpNotEqual :: Typed.TypedTerm Syntax.RelOp+relOpNotEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.RelOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "notEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the parameters variant of hydra.go.syntax.Result+resultParameters :: Typed.TypedTerm Syntax.Parameters -> Typed.TypedTerm Syntax.Result+resultParameters x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Result"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "parameters"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the type variant of hydra.go.syntax.Result+resultType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Result+resultType x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Result"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "type"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.ReturnStmt wrapper+returnStmt :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ReturnStmt+returnStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.ReturnStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.RuneLit wrapper+runeLit :: Typed.TypedTerm Int -> Typed.TypedTerm Syntax.RuneLit+runeLit x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.RuneLit"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.SelectStmt wrapper+selectStmt :: Typed.TypedTerm [Syntax.CommClause] -> Typed.TypedTerm Syntax.SelectStmt+selectStmt x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.SelectStmt"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.Selector wrapper+selector :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Selector+selector x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.Selector"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.SelectorExpr+selectorExpr :: Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.SelectorExpr+selectorExpr expr selector =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SelectorExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Typed.unTypedTerm expr)},+        Core.Field {+          Core.fieldName = (Core.Name "selector"),+          Core.fieldTerm = (Typed.unTypedTerm selector)}]}))++-- | DSL accessor for the expr field of hydra.go.syntax.SelectorExpr+selectorExprExpr :: Typed.TypedTerm Syntax.SelectorExpr -> Typed.TypedTerm Syntax.PrimaryExpr+selectorExprExpr x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SelectorExpr"),+        Core.projectionFieldName = (Core.Name "expr")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the selector field of hydra.go.syntax.SelectorExpr+selectorExprSelector :: Typed.TypedTerm Syntax.SelectorExpr -> Typed.TypedTerm Syntax.Identifier+selectorExprSelector x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SelectorExpr"),+        Core.projectionFieldName = (Core.Name "selector")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expr field of hydra.go.syntax.SelectorExpr+selectorExprWithExpr :: Typed.TypedTerm Syntax.SelectorExpr -> Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.SelectorExpr+selectorExprWithExpr original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SelectorExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "selector"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SelectorExpr"),+              Core.projectionFieldName = (Core.Name "selector")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the selector field of hydra.go.syntax.SelectorExpr+selectorExprWithSelector :: Typed.TypedTerm Syntax.SelectorExpr -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.SelectorExpr+selectorExprWithSelector original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SelectorExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SelectorExpr"),+              Core.projectionFieldName = (Core.Name "expr")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "selector"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.SendStmt+sendStmt :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SendStmt+sendStmt channel value =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SendStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "channel"),+          Core.fieldTerm = (Typed.unTypedTerm channel)},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm value)}]}))++-- | DSL accessor for the channel field of hydra.go.syntax.SendStmt+sendStmtChannel :: Typed.TypedTerm Syntax.SendStmt -> Typed.TypedTerm Syntax.Expression+sendStmtChannel x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SendStmt"),+        Core.projectionFieldName = (Core.Name "channel")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the value field of hydra.go.syntax.SendStmt+sendStmtValue :: Typed.TypedTerm Syntax.SendStmt -> Typed.TypedTerm Syntax.Expression+sendStmtValue x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SendStmt"),+        Core.projectionFieldName = (Core.Name "value")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the channel field of hydra.go.syntax.SendStmt+sendStmtWithChannel :: Typed.TypedTerm Syntax.SendStmt -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SendStmt+sendStmtWithChannel original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SendStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "channel"),+          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.go.syntax.SendStmt"),+              Core.projectionFieldName = (Core.Name "value")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the value field of hydra.go.syntax.SendStmt+sendStmtWithValue :: Typed.TypedTerm Syntax.SendStmt -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SendStmt+sendStmtWithValue original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SendStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "channel"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SendStmt"),+              Core.projectionFieldName = (Core.Name "channel")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.ShortVarDecl+shortVarDecl :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ShortVarDecl+shortVarDecl names values =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ShortVarDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm names)},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Typed.unTypedTerm values)}]}))++-- | DSL accessor for the names field of hydra.go.syntax.ShortVarDecl+shortVarDeclNames :: Typed.TypedTerm Syntax.ShortVarDecl -> Typed.TypedTerm [Syntax.Identifier]+shortVarDeclNames x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ShortVarDecl"),+        Core.projectionFieldName = (Core.Name "names")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the values field of hydra.go.syntax.ShortVarDecl+shortVarDeclValues :: Typed.TypedTerm Syntax.ShortVarDecl -> Typed.TypedTerm [Syntax.Expression]+shortVarDeclValues x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.ShortVarDecl"),+        Core.projectionFieldName = (Core.Name "values")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the names field of hydra.go.syntax.ShortVarDecl+shortVarDeclWithNames :: Typed.TypedTerm Syntax.ShortVarDecl -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.ShortVarDecl+shortVarDeclWithNames original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ShortVarDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ShortVarDecl"),+              Core.projectionFieldName = (Core.Name "values")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the values field of hydra.go.syntax.ShortVarDecl+shortVarDeclWithValues :: Typed.TypedTerm Syntax.ShortVarDecl -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.ShortVarDecl+shortVarDeclWithValues original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.ShortVarDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.ShortVarDecl"),+              Core.projectionFieldName = (Core.Name "names")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.Signature+signature :: Typed.TypedTerm Syntax.Parameters -> Typed.TypedTerm (Maybe Syntax.Result) -> Typed.TypedTerm Syntax.Signature+signature parameters result =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Signature"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "parameters"),+          Core.fieldTerm = (Typed.unTypedTerm parameters)},+        Core.Field {+          Core.fieldName = (Core.Name "result"),+          Core.fieldTerm = (Typed.unTypedTerm result)}]}))++-- | DSL accessor for the parameters field of hydra.go.syntax.Signature+signatureParameters :: Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.Parameters+signatureParameters x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Signature"),+        Core.projectionFieldName = (Core.Name "parameters")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the result field of hydra.go.syntax.Signature+signatureResult :: Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm (Maybe Syntax.Result)+signatureResult x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.Signature"),+        Core.projectionFieldName = (Core.Name "result")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the parameters field of hydra.go.syntax.Signature+signatureWithParameters :: Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm Syntax.Parameters -> Typed.TypedTerm Syntax.Signature+signatureWithParameters original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Signature"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "parameters"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "result"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Signature"),+              Core.projectionFieldName = (Core.Name "result")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the result field of hydra.go.syntax.Signature+signatureWithResult :: Typed.TypedTerm Syntax.Signature -> Typed.TypedTerm (Maybe Syntax.Result) -> Typed.TypedTerm Syntax.Signature+signatureWithResult original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.Signature"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "parameters"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.Signature"),+              Core.projectionFieldName = (Core.Name "parameters")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "result"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.SimpleSlice+simpleSlice :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SimpleSlice+simpleSlice low high =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SimpleSlice"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "low"),+          Core.fieldTerm = (Typed.unTypedTerm low)},+        Core.Field {+          Core.fieldName = (Core.Name "high"),+          Core.fieldTerm = (Typed.unTypedTerm high)}]}))++-- | DSL accessor for the high field of hydra.go.syntax.SimpleSlice+simpleSliceHigh :: Typed.TypedTerm Syntax.SimpleSlice -> Typed.TypedTerm (Maybe Syntax.Expression)+simpleSliceHigh x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SimpleSlice"),+        Core.projectionFieldName = (Core.Name "high")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the low field of hydra.go.syntax.SimpleSlice+simpleSliceLow :: Typed.TypedTerm Syntax.SimpleSlice -> Typed.TypedTerm (Maybe Syntax.Expression)+simpleSliceLow x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SimpleSlice"),+        Core.projectionFieldName = (Core.Name "low")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the high field of hydra.go.syntax.SimpleSlice+simpleSliceWithHigh :: Typed.TypedTerm Syntax.SimpleSlice -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SimpleSlice+simpleSliceWithHigh original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SimpleSlice"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "low"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SimpleSlice"),+              Core.projectionFieldName = (Core.Name "low")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "high"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the low field of hydra.go.syntax.SimpleSlice+simpleSliceWithLow :: Typed.TypedTerm Syntax.SimpleSlice -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SimpleSlice+simpleSliceWithLow original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SimpleSlice"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "low"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "high"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SimpleSlice"),+              Core.projectionFieldName = (Core.Name "high")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the assignment variant of hydra.go.syntax.SimpleStmt+simpleStmtAssignment :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.SimpleStmt+simpleStmtAssignment x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.SimpleStmt"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "assignment"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the empty variant of hydra.go.syntax.SimpleStmt+simpleStmtEmpty :: Typed.TypedTerm Syntax.EmptyStmt -> Typed.TypedTerm Syntax.SimpleStmt+simpleStmtEmpty x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.SimpleStmt"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "empty"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the expression variant of hydra.go.syntax.SimpleStmt+simpleStmtExpression :: Typed.TypedTerm Syntax.ExpressionStmt -> Typed.TypedTerm Syntax.SimpleStmt+simpleStmtExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.SimpleStmt"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "expression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the incDec variant of hydra.go.syntax.SimpleStmt+simpleStmtIncDec :: Typed.TypedTerm Syntax.IncDecStmt -> Typed.TypedTerm Syntax.SimpleStmt+simpleStmtIncDec x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.SimpleStmt"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "incDec"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the send variant of hydra.go.syntax.SimpleStmt+simpleStmtSend :: Typed.TypedTerm Syntax.SendStmt -> Typed.TypedTerm Syntax.SimpleStmt+simpleStmtSend x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.SimpleStmt"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "send"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the shortVarDecl variant of hydra.go.syntax.SimpleStmt+simpleStmtShortVarDecl :: Typed.TypedTerm Syntax.ShortVarDecl -> Typed.TypedTerm Syntax.SimpleStmt+simpleStmtShortVarDecl x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.SimpleStmt"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "shortVarDecl"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.SliceExpr+sliceExpr :: Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.Slice -> Typed.TypedTerm Syntax.SliceExpr+sliceExpr expr slice =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SliceExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Typed.unTypedTerm expr)},+        Core.Field {+          Core.fieldName = (Core.Name "slice"),+          Core.fieldTerm = (Typed.unTypedTerm slice)}]}))++-- | DSL accessor for the expr field of hydra.go.syntax.SliceExpr+sliceExprExpr :: Typed.TypedTerm Syntax.SliceExpr -> Typed.TypedTerm Syntax.PrimaryExpr+sliceExprExpr x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SliceExpr"),+        Core.projectionFieldName = (Core.Name "expr")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the slice field of hydra.go.syntax.SliceExpr+sliceExprSlice :: Typed.TypedTerm Syntax.SliceExpr -> Typed.TypedTerm Syntax.Slice+sliceExprSlice x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SliceExpr"),+        Core.projectionFieldName = (Core.Name "slice")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expr field of hydra.go.syntax.SliceExpr+sliceExprWithExpr :: Typed.TypedTerm Syntax.SliceExpr -> Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.SliceExpr+sliceExprWithExpr original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SliceExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "slice"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SliceExpr"),+              Core.projectionFieldName = (Core.Name "slice")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the slice field of hydra.go.syntax.SliceExpr+sliceExprWithSlice :: Typed.TypedTerm Syntax.SliceExpr -> Typed.TypedTerm Syntax.Slice -> Typed.TypedTerm Syntax.SliceExpr+sliceExprWithSlice original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SliceExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SliceExpr"),+              Core.projectionFieldName = (Core.Name "expr")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "slice"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the full variant of hydra.go.syntax.Slice+sliceFull :: Typed.TypedTerm Syntax.FullSlice -> Typed.TypedTerm Syntax.Slice+sliceFull x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Slice"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "full"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.go.syntax.Slice+sliceSimple :: Typed.TypedTerm Syntax.SimpleSlice -> Typed.TypedTerm Syntax.Slice+sliceSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Slice"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.SliceType wrapper+sliceType :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.SliceType+sliceType x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.SliceType"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.SourceFile+sourceFile :: Typed.TypedTerm Syntax.PackageClause -> Typed.TypedTerm [Syntax.ImportDecl] -> Typed.TypedTerm [Syntax.TopLevelDecl] -> Typed.TypedTerm Syntax.SourceFile+sourceFile package imports declarations =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Typed.unTypedTerm package)},+        Core.Field {+          Core.fieldName = (Core.Name "imports"),+          Core.fieldTerm = (Typed.unTypedTerm imports)},+        Core.Field {+          Core.fieldName = (Core.Name "declarations"),+          Core.fieldTerm = (Typed.unTypedTerm declarations)}]}))++-- | DSL accessor for the declarations field of hydra.go.syntax.SourceFile+sourceFileDeclarations :: Typed.TypedTerm Syntax.SourceFile -> Typed.TypedTerm [Syntax.TopLevelDecl]+sourceFileDeclarations x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+        Core.projectionFieldName = (Core.Name "declarations")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the imports field of hydra.go.syntax.SourceFile+sourceFileImports :: Typed.TypedTerm Syntax.SourceFile -> Typed.TypedTerm [Syntax.ImportDecl]+sourceFileImports x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+        Core.projectionFieldName = (Core.Name "imports")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the package field of hydra.go.syntax.SourceFile+sourceFilePackage :: Typed.TypedTerm Syntax.SourceFile -> Typed.TypedTerm Syntax.PackageClause+sourceFilePackage x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+        Core.projectionFieldName = (Core.Name "package")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the declarations field of hydra.go.syntax.SourceFile+sourceFileWithDeclarations :: Typed.TypedTerm Syntax.SourceFile -> Typed.TypedTerm [Syntax.TopLevelDecl] -> Typed.TypedTerm Syntax.SourceFile+sourceFileWithDeclarations original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+              Core.projectionFieldName = (Core.Name "package")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "imports"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+              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 imports field of hydra.go.syntax.SourceFile+sourceFileWithImports :: Typed.TypedTerm Syntax.SourceFile -> Typed.TypedTerm [Syntax.ImportDecl] -> Typed.TypedTerm Syntax.SourceFile+sourceFileWithImports original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+              Core.projectionFieldName = (Core.Name "package")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "imports"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "declarations"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+              Core.projectionFieldName = (Core.Name "declarations")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the package field of hydra.go.syntax.SourceFile+sourceFileWithPackage :: Typed.TypedTerm Syntax.SourceFile -> Typed.TypedTerm Syntax.PackageClause -> Typed.TypedTerm Syntax.SourceFile+sourceFileWithPackage original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "package"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "imports"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.SourceFile"),+              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.go.syntax.SourceFile"),+              Core.projectionFieldName = (Core.Name "declarations")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the block variant of hydra.go.syntax.Statement+statementBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.Statement+statementBlock x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "block"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the break variant of hydra.go.syntax.Statement+statementBreak :: Typed.TypedTerm Syntax.BreakStmt -> Typed.TypedTerm Syntax.Statement+statementBreak x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "break"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the continue variant of hydra.go.syntax.Statement+statementContinue :: Typed.TypedTerm Syntax.ContinueStmt -> Typed.TypedTerm Syntax.Statement+statementContinue x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "continue"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the declaration variant of hydra.go.syntax.Statement+statementDeclaration :: Typed.TypedTerm Syntax.Declaration -> Typed.TypedTerm Syntax.Statement+statementDeclaration x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "declaration"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the defer variant of hydra.go.syntax.Statement+statementDefer :: Typed.TypedTerm Syntax.DeferStmt -> Typed.TypedTerm Syntax.Statement+statementDefer x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "defer"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the fallthrough variant of hydra.go.syntax.Statement+statementFallthrough :: Typed.TypedTerm Syntax.FallthroughStmt -> Typed.TypedTerm Syntax.Statement+statementFallthrough x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "fallthrough"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the for variant of hydra.go.syntax.Statement+statementFor :: Typed.TypedTerm Syntax.ForStmt -> Typed.TypedTerm Syntax.Statement+statementFor x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "for"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the go variant of hydra.go.syntax.Statement+statementGo :: Typed.TypedTerm Syntax.GoStmt -> Typed.TypedTerm Syntax.Statement+statementGo x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "go"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the goto variant of hydra.go.syntax.Statement+statementGoto :: Typed.TypedTerm Syntax.GotoStmt -> Typed.TypedTerm Syntax.Statement+statementGoto x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "goto"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the if variant of hydra.go.syntax.Statement+statementIf :: Typed.TypedTerm Syntax.IfStmt -> Typed.TypedTerm Syntax.Statement+statementIf x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "if"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the labeled variant of hydra.go.syntax.Statement+statementLabeled :: Typed.TypedTerm Syntax.LabeledStmt -> Typed.TypedTerm Syntax.Statement+statementLabeled x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "labeled"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the return variant of hydra.go.syntax.Statement+statementReturn :: Typed.TypedTerm Syntax.ReturnStmt -> Typed.TypedTerm Syntax.Statement+statementReturn x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "return"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the select variant of hydra.go.syntax.Statement+statementSelect :: Typed.TypedTerm Syntax.SelectStmt -> Typed.TypedTerm Syntax.Statement+statementSelect x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "select"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.go.syntax.Statement+statementSimple :: Typed.TypedTerm Syntax.SimpleStmt -> Typed.TypedTerm Syntax.Statement+statementSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the switch variant of hydra.go.syntax.Statement+statementSwitch :: Typed.TypedTerm Syntax.SwitchStmt -> Typed.TypedTerm Syntax.Statement+statementSwitch x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "switch"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the interpreted variant of hydra.go.syntax.StringLit+stringLitInterpreted :: Typed.TypedTerm Syntax.InterpretedStringLit -> Typed.TypedTerm Syntax.StringLit+stringLitInterpreted x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.StringLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "interpreted"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the raw variant of hydra.go.syntax.StringLit+stringLitRaw :: Typed.TypedTerm Syntax.RawStringLit -> Typed.TypedTerm Syntax.StringLit+stringLitRaw x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.StringLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "raw"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.StructType wrapper+structType :: Typed.TypedTerm [Syntax.FieldDecl] -> Typed.TypedTerm Syntax.StructType+structType x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.StructType"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the expression variant of hydra.go.syntax.SwitchStmt+switchStmtExpression :: Typed.TypedTerm Syntax.ExprSwitchStmt -> Typed.TypedTerm Syntax.SwitchStmt+switchStmtExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.SwitchStmt"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "expression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the type variant of hydra.go.syntax.SwitchStmt+switchStmtType :: Typed.TypedTerm Syntax.TypeSwitchStmt -> Typed.TypedTerm Syntax.SwitchStmt+switchStmtType x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.SwitchStmt"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "type"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.Tag wrapper+tag :: Typed.TypedTerm Syntax.StringLit -> Typed.TypedTerm Syntax.Tag+tag x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.Tag"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the declaration variant of hydra.go.syntax.TopLevelDecl+topLevelDeclDeclaration :: Typed.TypedTerm Syntax.Declaration -> Typed.TypedTerm Syntax.TopLevelDecl+topLevelDeclDeclaration x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TopLevelDecl"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "declaration"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the function variant of hydra.go.syntax.TopLevelDecl+topLevelDeclFunction :: Typed.TypedTerm Syntax.FunctionDecl -> Typed.TypedTerm Syntax.TopLevelDecl+topLevelDeclFunction x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TopLevelDecl"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "function"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the method variant of hydra.go.syntax.TopLevelDecl+topLevelDeclMethod :: Typed.TypedTerm Syntax.MethodDecl -> Typed.TypedTerm Syntax.TopLevelDecl+topLevelDeclMethod x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TopLevelDecl"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "method"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.go.syntax.TypeAssertion wrapper+typeAssertion :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeAssertion+typeAssertion x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.TypeAssertion"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.TypeAssertionExpr+typeAssertionExpr :: Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeAssertionExpr+typeAssertionExpr expr type_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeAssertionExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Typed.unTypedTerm expr)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))++-- | DSL accessor for the expr field of hydra.go.syntax.TypeAssertionExpr+typeAssertionExprExpr :: Typed.TypedTerm Syntax.TypeAssertionExpr -> Typed.TypedTerm Syntax.PrimaryExpr+typeAssertionExprExpr x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeAssertionExpr"),+        Core.projectionFieldName = (Core.Name "expr")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.TypeAssertionExpr+typeAssertionExprType :: Typed.TypedTerm Syntax.TypeAssertionExpr -> Typed.TypedTerm Syntax.Type+typeAssertionExprType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeAssertionExpr"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expr field of hydra.go.syntax.TypeAssertionExpr+typeAssertionExprWithExpr :: Typed.TypedTerm Syntax.TypeAssertionExpr -> Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.TypeAssertionExpr+typeAssertionExprWithExpr original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeAssertionExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          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.go.syntax.TypeAssertionExpr"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the type field of hydra.go.syntax.TypeAssertionExpr+typeAssertionExprWithType :: Typed.TypedTerm Syntax.TypeAssertionExpr -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeAssertionExpr+typeAssertionExprWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeAssertionExpr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expr"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeAssertionExpr"),+              Core.projectionFieldName = (Core.Name "expr")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.TypeCaseClause+typeCaseClause :: Typed.TypedTerm (Maybe [Syntax.Type]) -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.TypeCaseClause+typeCaseClause case_ statements =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeCaseClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "case"),+          Core.fieldTerm = (Typed.unTypedTerm case_)},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Typed.unTypedTerm statements)}]}))++-- | DSL accessor for the case field of hydra.go.syntax.TypeCaseClause+typeCaseClauseCase :: Typed.TypedTerm Syntax.TypeCaseClause -> Typed.TypedTerm (Maybe [Syntax.Type])+typeCaseClauseCase x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeCaseClause"),+        Core.projectionFieldName = (Core.Name "case")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the statements field of hydra.go.syntax.TypeCaseClause+typeCaseClauseStatements :: Typed.TypedTerm Syntax.TypeCaseClause -> Typed.TypedTerm [Syntax.Statement]+typeCaseClauseStatements x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeCaseClause"),+        Core.projectionFieldName = (Core.Name "statements")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the case field of hydra.go.syntax.TypeCaseClause+typeCaseClauseWithCase :: Typed.TypedTerm Syntax.TypeCaseClause -> Typed.TypedTerm (Maybe [Syntax.Type]) -> Typed.TypedTerm Syntax.TypeCaseClause+typeCaseClauseWithCase original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeCaseClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "case"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeCaseClause"),+              Core.projectionFieldName = (Core.Name "statements")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the statements field of hydra.go.syntax.TypeCaseClause+typeCaseClauseWithStatements :: Typed.TypedTerm Syntax.TypeCaseClause -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.TypeCaseClause+typeCaseClauseWithStatements original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeCaseClause"),+      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.go.syntax.TypeCaseClause"),+              Core.projectionFieldName = (Core.Name "case")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "statements"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.go.syntax.TypeConstraint wrapper+typeConstraint :: Typed.TypedTerm Syntax.TypeElem -> Typed.TypedTerm Syntax.TypeConstraint+typeConstraint x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.TypeConstraint"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.go.syntax.TypeDecl wrapper+typeDecl :: Typed.TypedTerm [Syntax.TypeSpec] -> Typed.TypedTerm Syntax.TypeDecl+typeDecl x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.TypeDecl"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.TypeDef+typeDef :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.TypeParameters) -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeDef+typeDef name typeParams type_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          Core.fieldTerm = (Typed.unTypedTerm typeParams)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))++-- | DSL accessor for the name field of hydra.go.syntax.TypeDef+typeDefName :: Typed.TypedTerm Syntax.TypeDef -> Typed.TypedTerm Syntax.Identifier+typeDefName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.TypeDef+typeDefType :: Typed.TypedTerm Syntax.TypeDef -> Typed.TypedTerm Syntax.Type+typeDefType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeParams field of hydra.go.syntax.TypeDef+typeDefTypeParams :: Typed.TypedTerm Syntax.TypeDef -> Typed.TypedTerm (Maybe Syntax.TypeParameters)+typeDefTypeParams x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+        Core.projectionFieldName = (Core.Name "typeParams")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.go.syntax.TypeDef+typeDefWithName :: Typed.TypedTerm Syntax.TypeDef -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeDef+typeDefWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            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.go.syntax.TypeDef"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the type field of hydra.go.syntax.TypeDef+typeDefWithType :: Typed.TypedTerm Syntax.TypeDef -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeDef+typeDefWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+      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.go.syntax.TypeDef"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the typeParams field of hydra.go.syntax.TypeDef+typeDefWithTypeParams :: Typed.TypedTerm Syntax.TypeDef -> Typed.TypedTerm (Maybe Syntax.TypeParameters) -> Typed.TypedTerm Syntax.TypeDef+typeDefWithTypeParams original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeDef"),+      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.go.syntax.TypeDef"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeParams"),+          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.go.syntax.TypeDef"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.go.syntax.TypeElem wrapper+typeElem :: Typed.TypedTerm [Syntax.TypeTerm] -> Typed.TypedTerm Syntax.TypeElem+typeElem x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.TypeElem"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the array variant of hydra.go.syntax.TypeLit+typeLitArray :: Typed.TypedTerm Syntax.ArrayType -> Typed.TypedTerm Syntax.TypeLit+typeLitArray x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "array"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the channel variant of hydra.go.syntax.TypeLit+typeLitChannel :: Typed.TypedTerm Syntax.ChannelType -> Typed.TypedTerm Syntax.TypeLit+typeLitChannel x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "channel"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the function variant of hydra.go.syntax.TypeLit+typeLitFunction :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.TypeLit+typeLitFunction x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "function"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the interface variant of hydra.go.syntax.TypeLit+typeLitInterface :: Typed.TypedTerm Syntax.InterfaceType -> Typed.TypedTerm Syntax.TypeLit+typeLitInterface x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "interface"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the map variant of hydra.go.syntax.TypeLit+typeLitMap :: Typed.TypedTerm Syntax.MapType -> Typed.TypedTerm Syntax.TypeLit+typeLitMap x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "map"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the pointer variant of hydra.go.syntax.TypeLit+typeLitPointer :: Typed.TypedTerm Syntax.PointerType -> Typed.TypedTerm Syntax.TypeLit+typeLitPointer x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "pointer"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slice variant of hydra.go.syntax.TypeLit+typeLitSlice :: Typed.TypedTerm Syntax.SliceType -> Typed.TypedTerm Syntax.TypeLit+typeLitSlice x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slice"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the struct variant of hydra.go.syntax.TypeLit+typeLitStruct :: Typed.TypedTerm Syntax.StructType -> Typed.TypedTerm Syntax.TypeLit+typeLitStruct x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeLit"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "struct"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the literal variant of hydra.go.syntax.Type+typeLiteral :: Typed.TypedTerm Syntax.TypeLit -> Typed.TypedTerm Syntax.Type+typeLiteral x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Type"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "literal"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the name variant of hydra.go.syntax.Type+typeName :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.Type+typeName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Type"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.TypeName+typeName2 :: Typed.TypedTerm Syntax.QualifiedIdent -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.TypeName+typeName2 name typeArgs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "typeArgs"),+          Core.fieldTerm = (Typed.unTypedTerm typeArgs)}]}))++-- | DSL accessor for the name field of hydra.go.syntax.TypeName+typeNameName :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.QualifiedIdent+typeNameName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeName"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeArgs field of hydra.go.syntax.TypeName+typeNameTypeArgs :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm [Syntax.Type]+typeNameTypeArgs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeName"),+        Core.projectionFieldName = (Core.Name "typeArgs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.go.syntax.TypeName+typeNameWithName :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm Syntax.QualifiedIdent -> Typed.TypedTerm Syntax.TypeName+typeNameWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeArgs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeName"),+              Core.projectionFieldName = (Core.Name "typeArgs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeArgs field of hydra.go.syntax.TypeName+typeNameWithTypeArgs :: Typed.TypedTerm Syntax.TypeName -> Typed.TypedTerm [Syntax.Type] -> Typed.TypedTerm Syntax.TypeName+typeNameWithTypeArgs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeName"),+      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.go.syntax.TypeName"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeArgs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.go.syntax.TypeParamDecl+typeParamDecl :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.TypeConstraint -> Typed.TypedTerm Syntax.TypeParamDecl+typeParamDecl names constraint =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeParamDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm names)},+        Core.Field {+          Core.fieldName = (Core.Name "constraint"),+          Core.fieldTerm = (Typed.unTypedTerm constraint)}]}))++-- | DSL accessor for the constraint field of hydra.go.syntax.TypeParamDecl+typeParamDeclConstraint :: Typed.TypedTerm Syntax.TypeParamDecl -> Typed.TypedTerm Syntax.TypeConstraint+typeParamDeclConstraint x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeParamDecl"),+        Core.projectionFieldName = (Core.Name "constraint")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the names field of hydra.go.syntax.TypeParamDecl+typeParamDeclNames :: Typed.TypedTerm Syntax.TypeParamDecl -> Typed.TypedTerm [Syntax.Identifier]+typeParamDeclNames x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeParamDecl"),+        Core.projectionFieldName = (Core.Name "names")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the constraint field of hydra.go.syntax.TypeParamDecl+typeParamDeclWithConstraint :: Typed.TypedTerm Syntax.TypeParamDecl -> Typed.TypedTerm Syntax.TypeConstraint -> Typed.TypedTerm Syntax.TypeParamDecl+typeParamDeclWithConstraint original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeParamDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeParamDecl"),+              Core.projectionFieldName = (Core.Name "names")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "constraint"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the names field of hydra.go.syntax.TypeParamDecl+typeParamDeclWithNames :: Typed.TypedTerm Syntax.TypeParamDecl -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.TypeParamDecl+typeParamDeclWithNames original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeParamDecl"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "constraint"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeParamDecl"),+              Core.projectionFieldName = (Core.Name "constraint")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.go.syntax.TypeParameters wrapper+typeParameters :: Typed.TypedTerm [Syntax.TypeParamDecl] -> Typed.TypedTerm Syntax.TypeParameters+typeParameters x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.TypeParameters"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the paren variant of hydra.go.syntax.Type+typeParen :: Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.Type+typeParen x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.Type"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "paren"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the alias variant of hydra.go.syntax.TypeSpec+typeSpecAlias :: Typed.TypedTerm Syntax.AliasDecl -> Typed.TypedTerm Syntax.TypeSpec+typeSpecAlias x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeSpec"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "alias"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the definition variant of hydra.go.syntax.TypeSpec+typeSpecDefinition :: Typed.TypedTerm Syntax.TypeDef -> Typed.TypedTerm Syntax.TypeSpec+typeSpecDefinition x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.TypeSpec"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "definition"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.go.syntax.TypeSwitchGuard+typeSwitchGuard :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.TypeSwitchGuard+typeSwitchGuard name expression =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeSwitchGuard"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))++-- | DSL accessor for the expression field of hydra.go.syntax.TypeSwitchGuard+typeSwitchGuardExpression :: Typed.TypedTerm Syntax.TypeSwitchGuard -> Typed.TypedTerm Syntax.PrimaryExpr+typeSwitchGuardExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchGuard"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.go.syntax.TypeSwitchGuard+typeSwitchGuardName :: Typed.TypedTerm Syntax.TypeSwitchGuard -> Typed.TypedTerm (Maybe Syntax.Identifier)+typeSwitchGuardName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchGuard"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.go.syntax.TypeSwitchGuard+typeSwitchGuardWithExpression :: Typed.TypedTerm Syntax.TypeSwitchGuard -> Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.TypeSwitchGuard+typeSwitchGuardWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeSwitchGuard"),+      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.go.syntax.TypeSwitchGuard"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.go.syntax.TypeSwitchGuard+typeSwitchGuardWithName :: Typed.TypedTerm Syntax.TypeSwitchGuard -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.TypeSwitchGuard+typeSwitchGuardWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeSwitchGuard"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          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.go.syntax.TypeSwitchGuard"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.TypeSwitchStmt+typeSwitchStmt :: Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm Syntax.TypeSwitchGuard -> Typed.TypedTerm [Syntax.TypeCaseClause] -> Typed.TypedTerm Syntax.TypeSwitchStmt+typeSwitchStmt init guard cases =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Typed.unTypedTerm init)},+        Core.Field {+          Core.fieldName = (Core.Name "guard"),+          Core.fieldTerm = (Typed.unTypedTerm guard)},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Typed.unTypedTerm cases)}]}))++-- | DSL accessor for the cases field of hydra.go.syntax.TypeSwitchStmt+typeSwitchStmtCases :: Typed.TypedTerm Syntax.TypeSwitchStmt -> Typed.TypedTerm [Syntax.TypeCaseClause]+typeSwitchStmtCases x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+        Core.projectionFieldName = (Core.Name "cases")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the guard field of hydra.go.syntax.TypeSwitchStmt+typeSwitchStmtGuard :: Typed.TypedTerm Syntax.TypeSwitchStmt -> Typed.TypedTerm Syntax.TypeSwitchGuard+typeSwitchStmtGuard x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+        Core.projectionFieldName = (Core.Name "guard")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the init field of hydra.go.syntax.TypeSwitchStmt+typeSwitchStmtInit :: Typed.TypedTerm Syntax.TypeSwitchStmt -> Typed.TypedTerm (Maybe Syntax.SimpleStmt)+typeSwitchStmtInit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+        Core.projectionFieldName = (Core.Name "init")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the cases field of hydra.go.syntax.TypeSwitchStmt+typeSwitchStmtWithCases :: Typed.TypedTerm Syntax.TypeSwitchStmt -> Typed.TypedTerm [Syntax.TypeCaseClause] -> Typed.TypedTerm Syntax.TypeSwitchStmt+typeSwitchStmtWithCases original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "guard"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+              Core.projectionFieldName = (Core.Name "guard")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the guard field of hydra.go.syntax.TypeSwitchStmt+typeSwitchStmtWithGuard :: Typed.TypedTerm Syntax.TypeSwitchStmt -> Typed.TypedTerm Syntax.TypeSwitchGuard -> Typed.TypedTerm Syntax.TypeSwitchStmt+typeSwitchStmtWithGuard original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+              Core.projectionFieldName = (Core.Name "init")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "guard"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+              Core.projectionFieldName = (Core.Name "cases")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the init field of hydra.go.syntax.TypeSwitchStmt+typeSwitchStmtWithInit :: Typed.TypedTerm Syntax.TypeSwitchStmt -> Typed.TypedTerm (Maybe Syntax.SimpleStmt) -> Typed.TypedTerm Syntax.TypeSwitchStmt+typeSwitchStmtWithInit original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "init"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "guard"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+              Core.projectionFieldName = (Core.Name "guard")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeSwitchStmt"),+              Core.projectionFieldName = (Core.Name "cases")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.go.syntax.TypeTerm+typeTerm :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeTerm+typeTerm underlying type_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeTerm"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "underlying"),+          Core.fieldTerm = (Typed.unTypedTerm underlying)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))++-- | DSL accessor for the type field of hydra.go.syntax.TypeTerm+typeTermType :: Typed.TypedTerm Syntax.TypeTerm -> Typed.TypedTerm Syntax.Type+typeTermType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeTerm"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the underlying field of hydra.go.syntax.TypeTerm+typeTermUnderlying :: Typed.TypedTerm Syntax.TypeTerm -> Typed.TypedTerm Bool+typeTermUnderlying x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeTerm"),+        Core.projectionFieldName = (Core.Name "underlying")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the type field of hydra.go.syntax.TypeTerm+typeTermWithType :: Typed.TypedTerm Syntax.TypeTerm -> Typed.TypedTerm Syntax.Type -> Typed.TypedTerm Syntax.TypeTerm+typeTermWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeTerm"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "underlying"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.TypeTerm"),+              Core.projectionFieldName = (Core.Name "underlying")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the underlying field of hydra.go.syntax.TypeTerm+typeTermWithUnderlying :: Typed.TypedTerm Syntax.TypeTerm -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.TypeTerm+typeTermWithUnderlying original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.TypeTerm"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "underlying"),+          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.go.syntax.TypeTerm"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL accessor for the body of hydra.go.syntax.Block+unBlock :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm [Syntax.Statement]+unBlock x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.Block")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.BreakStmt+unBreakStmt :: Typed.TypedTerm Syntax.BreakStmt -> Typed.TypedTerm (Maybe Syntax.Identifier)+unBreakStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.BreakStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.ConstDecl+unConstDecl :: Typed.TypedTerm Syntax.ConstDecl -> Typed.TypedTerm [Syntax.ConstSpec]+unConstDecl x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.ConstDecl")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.ContinueStmt+unContinueStmt :: Typed.TypedTerm Syntax.ContinueStmt -> Typed.TypedTerm (Maybe Syntax.Identifier)+unContinueStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.ContinueStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.DeferStmt+unDeferStmt :: Typed.TypedTerm Syntax.DeferStmt -> Typed.TypedTerm Syntax.Expression+unDeferStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.DeferStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.ElementList+unElementList :: Typed.TypedTerm Syntax.ElementList -> Typed.TypedTerm [Syntax.KeyedElement]+unElementList x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.ElementList")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.EmptyStmt+unEmptyStmt :: Typed.TypedTerm Syntax.EmptyStmt -> Typed.TypedTerm ()+unEmptyStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.EmptyStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.ExpressionStmt+unExpressionStmt :: Typed.TypedTerm Syntax.ExpressionStmt -> Typed.TypedTerm Syntax.Expression+unExpressionStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.ExpressionStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.FallthroughStmt+unFallthroughStmt :: Typed.TypedTerm Syntax.FallthroughStmt -> Typed.TypedTerm ()+unFallthroughStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.FallthroughStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.FloatLit+unFloatLit :: Typed.TypedTerm Syntax.FloatLit -> Typed.TypedTerm Double+unFloatLit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.FloatLit")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.FunctionBody+unFunctionBody :: Typed.TypedTerm Syntax.FunctionBody -> Typed.TypedTerm Syntax.Block+unFunctionBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.FunctionBody")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.FunctionType+unFunctionType :: Typed.TypedTerm Syntax.FunctionType -> Typed.TypedTerm Syntax.Signature+unFunctionType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.FunctionType")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.GoStmt+unGoStmt :: Typed.TypedTerm Syntax.GoStmt -> Typed.TypedTerm Syntax.Expression+unGoStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.GoStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.GotoStmt+unGotoStmt :: Typed.TypedTerm Syntax.GotoStmt -> Typed.TypedTerm Syntax.Identifier+unGotoStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.GotoStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.Identifier+unIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm String+unIdentifier x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.Identifier")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.ImaginaryLit+unImaginaryLit :: Typed.TypedTerm Syntax.ImaginaryLit -> Typed.TypedTerm Double+unImaginaryLit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.ImaginaryLit")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.ImportDecl+unImportDecl :: Typed.TypedTerm Syntax.ImportDecl -> Typed.TypedTerm [Syntax.ImportSpec]+unImportDecl x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.ImportDecl")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.ImportPath+unImportPath :: Typed.TypedTerm Syntax.ImportPath -> Typed.TypedTerm Syntax.StringLit+unImportPath x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.ImportPath")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.Index+unIndex :: Typed.TypedTerm Syntax.Index -> Typed.TypedTerm [Syntax.Expression]+unIndex x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.Index")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.IntLit+unIntLit :: Typed.TypedTerm Syntax.IntLit -> Typed.TypedTerm Integer+unIntLit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.IntLit")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.InterfaceType+unInterfaceType :: Typed.TypedTerm Syntax.InterfaceType -> Typed.TypedTerm [Syntax.InterfaceElem]+unInterfaceType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.InterfaceType")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.InterpretedStringLit+unInterpretedStringLit :: Typed.TypedTerm Syntax.InterpretedStringLit -> Typed.TypedTerm String+unInterpretedStringLit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.InterpretedStringLit")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.LiteralValue+unLiteralValue :: Typed.TypedTerm Syntax.LiteralValue -> Typed.TypedTerm [Syntax.KeyedElement]+unLiteralValue x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.LiteralValue")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.PackageClause+unPackageClause :: Typed.TypedTerm Syntax.PackageClause -> Typed.TypedTerm Syntax.Identifier+unPackageClause x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.PackageClause")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.Parameters+unParameters :: Typed.TypedTerm Syntax.Parameters -> Typed.TypedTerm [Syntax.ParameterDecl]+unParameters x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.Parameters")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.PointerType+unPointerType :: Typed.TypedTerm Syntax.PointerType -> Typed.TypedTerm Syntax.Type+unPointerType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.PointerType")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.RawStringLit+unRawStringLit :: Typed.TypedTerm Syntax.RawStringLit -> Typed.TypedTerm String+unRawStringLit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.RawStringLit")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.ReturnStmt+unReturnStmt :: Typed.TypedTerm Syntax.ReturnStmt -> Typed.TypedTerm [Syntax.Expression]+unReturnStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.ReturnStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.RuneLit+unRuneLit :: Typed.TypedTerm Syntax.RuneLit -> Typed.TypedTerm Int+unRuneLit x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.RuneLit")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.SelectStmt+unSelectStmt :: Typed.TypedTerm Syntax.SelectStmt -> Typed.TypedTerm [Syntax.CommClause]+unSelectStmt x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.SelectStmt")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.Selector+unSelector :: Typed.TypedTerm Syntax.Selector -> Typed.TypedTerm Syntax.Identifier+unSelector x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.Selector")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.SliceType+unSliceType :: Typed.TypedTerm Syntax.SliceType -> Typed.TypedTerm Syntax.Type+unSliceType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.SliceType")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.StructType+unStructType :: Typed.TypedTerm Syntax.StructType -> Typed.TypedTerm [Syntax.FieldDecl]+unStructType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.StructType")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.Tag+unTag :: Typed.TypedTerm Syntax.Tag -> Typed.TypedTerm Syntax.StringLit+unTag x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.Tag")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.TypeAssertion+unTypeAssertion :: Typed.TypedTerm Syntax.TypeAssertion -> Typed.TypedTerm Syntax.Type+unTypeAssertion x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.TypeAssertion")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.TypeConstraint+unTypeConstraint :: Typed.TypedTerm Syntax.TypeConstraint -> Typed.TypedTerm Syntax.TypeElem+unTypeConstraint x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.TypeConstraint")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.TypeDecl+unTypeDecl :: Typed.TypedTerm Syntax.TypeDecl -> Typed.TypedTerm [Syntax.TypeSpec]+unTypeDecl x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.TypeDecl")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.TypeElem+unTypeElem :: Typed.TypedTerm Syntax.TypeElem -> Typed.TypedTerm [Syntax.TypeTerm]+unTypeElem x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.TypeElem")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.TypeParameters+unTypeParameters :: Typed.TypedTerm Syntax.TypeParameters -> Typed.TypedTerm [Syntax.TypeParamDecl]+unTypeParameters x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.TypeParameters")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.go.syntax.VarDecl+unVarDecl :: Typed.TypedTerm Syntax.VarDecl -> Typed.TypedTerm [Syntax.VarSpec]+unVarDecl x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.go.syntax.VarDecl")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL injection for the op variant of hydra.go.syntax.UnaryExpr+unaryExprOp :: Typed.TypedTerm Syntax.UnaryOperation -> Typed.TypedTerm Syntax.UnaryExpr+unaryExprOp x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "op"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the primary variant of hydra.go.syntax.UnaryExpr+unaryExprPrimary :: Typed.TypedTerm Syntax.PrimaryExpr -> Typed.TypedTerm Syntax.UnaryExpr+unaryExprPrimary x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryExpr"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primary"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the addressOf variant of hydra.go.syntax.UnaryOp+unaryOpAddressOf :: Typed.TypedTerm Syntax.UnaryOp+unaryOpAddressOf =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "addressOf"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the deref variant of hydra.go.syntax.UnaryOp+unaryOpDeref :: Typed.TypedTerm Syntax.UnaryOp+unaryOpDeref =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "deref"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the minus variant of hydra.go.syntax.UnaryOp+unaryOpMinus :: Typed.TypedTerm Syntax.UnaryOp+unaryOpMinus =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "minus"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the not variant of hydra.go.syntax.UnaryOp+unaryOpNot :: Typed.TypedTerm Syntax.UnaryOp+unaryOpNot =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "not"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the plus variant of hydra.go.syntax.UnaryOp+unaryOpPlus :: Typed.TypedTerm Syntax.UnaryOp+unaryOpPlus =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "plus"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the receive variant of hydra.go.syntax.UnaryOp+unaryOpReceive :: Typed.TypedTerm Syntax.UnaryOp+unaryOpReceive =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "receive"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the xor variant of hydra.go.syntax.UnaryOp+unaryOpXor :: Typed.TypedTerm Syntax.UnaryOp+unaryOpXor =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.go.syntax.UnaryOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "xor"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.go.syntax.UnaryOperation+unaryOperation :: Typed.TypedTerm Syntax.UnaryOp -> Typed.TypedTerm Syntax.UnaryExpr -> Typed.TypedTerm Syntax.UnaryOperation+unaryOperation op operand =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.UnaryOperation"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Typed.unTypedTerm op)},+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Typed.unTypedTerm operand)}]}))++-- | DSL accessor for the op field of hydra.go.syntax.UnaryOperation+unaryOperationOp :: Typed.TypedTerm Syntax.UnaryOperation -> Typed.TypedTerm Syntax.UnaryOp+unaryOperationOp x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.UnaryOperation"),+        Core.projectionFieldName = (Core.Name "op")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the operand field of hydra.go.syntax.UnaryOperation+unaryOperationOperand :: Typed.TypedTerm Syntax.UnaryOperation -> Typed.TypedTerm Syntax.UnaryExpr+unaryOperationOperand x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.UnaryOperation"),+        Core.projectionFieldName = (Core.Name "operand")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the op field of hydra.go.syntax.UnaryOperation+unaryOperationWithOp :: Typed.TypedTerm Syntax.UnaryOperation -> Typed.TypedTerm Syntax.UnaryOp -> Typed.TypedTerm Syntax.UnaryOperation+unaryOperationWithOp original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.UnaryOperation"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          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.go.syntax.UnaryOperation"),+              Core.projectionFieldName = (Core.Name "operand")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the operand field of hydra.go.syntax.UnaryOperation+unaryOperationWithOperand :: Typed.TypedTerm Syntax.UnaryOperation -> Typed.TypedTerm Syntax.UnaryExpr -> Typed.TypedTerm Syntax.UnaryOperation+unaryOperationWithOperand original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.UnaryOperation"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "op"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.UnaryOperation"),+              Core.projectionFieldName = (Core.Name "op")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.go.syntax.VarDecl wrapper+varDecl :: Typed.TypedTerm [Syntax.VarSpec] -> Typed.TypedTerm Syntax.VarDecl+varDecl x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.go.syntax.VarDecl"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.go.syntax.VarSpec+varSpec :: Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm (Maybe Syntax.Type) -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.VarSpec+varSpec names type_ values =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Typed.unTypedTerm names)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Typed.unTypedTerm values)}]}))++-- | DSL accessor for the names field of hydra.go.syntax.VarSpec+varSpecNames :: Typed.TypedTerm Syntax.VarSpec -> Typed.TypedTerm [Syntax.Identifier]+varSpecNames x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+        Core.projectionFieldName = (Core.Name "names")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.go.syntax.VarSpec+varSpecType :: Typed.TypedTerm Syntax.VarSpec -> Typed.TypedTerm (Maybe Syntax.Type)+varSpecType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the values field of hydra.go.syntax.VarSpec+varSpecValues :: Typed.TypedTerm Syntax.VarSpec -> Typed.TypedTerm [Syntax.Expression]+varSpecValues x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+        Core.projectionFieldName = (Core.Name "values")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the names field of hydra.go.syntax.VarSpec+varSpecWithNames :: Typed.TypedTerm Syntax.VarSpec -> Typed.TypedTerm [Syntax.Identifier] -> Typed.TypedTerm Syntax.VarSpec+varSpecWithNames original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          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.go.syntax.VarSpec"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+              Core.projectionFieldName = (Core.Name "values")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the type field of hydra.go.syntax.VarSpec+varSpecWithType :: Typed.TypedTerm Syntax.VarSpec -> Typed.TypedTerm (Maybe Syntax.Type) -> Typed.TypedTerm Syntax.VarSpec+varSpecWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+              Core.projectionFieldName = (Core.Name "names")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+              Core.projectionFieldName = (Core.Name "values")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the values field of hydra.go.syntax.VarSpec+varSpecWithValues :: Typed.TypedTerm Syntax.VarSpec -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.VarSpec+varSpecWithValues original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "names"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.go.syntax.VarSpec"),+              Core.projectionFieldName = (Core.Name "names")})),+            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.go.syntax.VarSpec"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "values"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+ src/main/haskell/Hydra/Go/Language.hs view
@@ -0,0 +1,228 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Language constraints and reserved words for Go 1.22+++module Hydra.Go.Language where++import qualified Hydra.Ast as Ast+import qualified Hydra.Coders as Coders+import qualified Hydra.Core as Core+import qualified Hydra.Docs as Docs+import qualified Hydra.Error.Checking as Checking+import qualified Hydra.Error.Core as ErrorCore+import qualified Hydra.Error.File as ErrorFile+import qualified Hydra.Error.Packaging as ErrorPackaging+import qualified Hydra.Error.System as ErrorSystem+import qualified Hydra.Errors as Errors+import qualified Hydra.File as File+import qualified Hydra.Graph as Graph+import qualified Hydra.Json.Model as Model+import qualified Hydra.Lexical as Lexical+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Query as Query+import qualified Hydra.Relational as Relational+import qualified Hydra.System as System+import qualified Hydra.Tabular as Tabular+import qualified Hydra.Testing as Testing+import qualified Hydra.Time as Time+import qualified Hydra.Topology as Topology+import qualified Hydra.Typed as Typed+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import qualified Hydra.Validation as Validation+import qualified Hydra.Variants as Variants+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci+import qualified Data.Set as S++-- | Language constraints for Go 1.22++goLanguage :: Coders.Language+goLanguage =+    Coders.Language {+      Coders.languageName = (Coders.LanguageName "hydra.go"),+      Coders.languageConstraints = Coders.LanguageConstraints {+        Coders.languageConstraintsLiteralVariants = literalVariants,+        Coders.languageConstraintsFloatTypes = floatTypes,+        Coders.languageConstraintsIntegerTypes = integerTypes,+        Coders.languageConstraintsTermVariants = termVariants,+        Coders.languageConstraintsTypeVariants = typeVariants,+        Coders.languageConstraintsTypes = typePredicate},+      Coders.languageSupportedFeatures = (Sets.fromList [+        Coders.LanguageFeaturePartialApplication,+        Coders.LanguageFeatureNestedCaseStatements,+        Coders.LanguageFeatureNestedPolymorphicLetBindings]),+      Coders.languageCaseConventions = Coders.CaseConventions {+        Coders.caseConventionsConstant = Util.CaseConventionUpperSnake,+        Coders.caseConventionsDirectory = Util.CaseConventionLowerSnake,+        Coders.caseConventionsEnumValue = Util.CaseConventionPascal,+        Coders.caseConventionsField = Util.CaseConventionCamel,+        Coders.caseConventionsFile = Util.CaseConventionLowerSnake,+        Coders.caseConventionsModule = Util.CaseConventionLowerSnake,+        Coders.caseConventionsTerm = Util.CaseConventionCamel,+        Coders.caseConventionsTermVariable = Util.CaseConventionCamel,+        Coders.caseConventionsType = Util.CaseConventionPascal,+        Coders.caseConventionsTypeVariable = Util.CaseConventionPascal},+      Coders.languageDefaultFileExtension = (File.FileExtension "go")}+  where+    literalVariants =+        Sets.fromList [+          Variants.LiteralVariantBinary,+          Variants.LiteralVariantBoolean,+          Variants.LiteralVariantFloat,+          Variants.LiteralVariantInteger,+          Variants.LiteralVariantString]+    floatTypes =+        Sets.fromList [+          Core.FloatTypeFloat32,+          Core.FloatTypeFloat64]+    integerTypes =+        Sets.fromList [+          Core.IntegerTypeBigint,+          Core.IntegerTypeInt8,+          Core.IntegerTypeInt16,+          Core.IntegerTypeInt32,+          Core.IntegerTypeInt64,+          Core.IntegerTypeUint8,+          Core.IntegerTypeUint16,+          Core.IntegerTypeUint32,+          Core.IntegerTypeUint64]+    termVariants =+        Sets.fromList [+          Variants.TermVariantAnnotated,+          Variants.TermVariantApplication,+          Variants.TermVariantEither,+          Variants.TermVariantCases,+          Variants.TermVariantLambda,+          Variants.TermVariantProject,+          Variants.TermVariantUnwrap,+          Variants.TermVariantLet,+          Variants.TermVariantList,+          Variants.TermVariantLiteral,+          Variants.TermVariantMap,+          Variants.TermVariantOptional,+          Variants.TermVariantPair,+          Variants.TermVariantRecord,+          Variants.TermVariantSet,+          Variants.TermVariantTypeApplication,+          Variants.TermVariantTypeLambda,+          Variants.TermVariantInject,+          Variants.TermVariantUnit,+          Variants.TermVariantVariable,+          Variants.TermVariantWrap]+    typeVariants =+        Sets.fromList [+          Variants.TypeVariantAnnotated,+          Variants.TypeVariantApplication,+          Variants.TypeVariantEither,+          Variants.TypeVariantFunction,+          Variants.TypeVariantForall,+          Variants.TypeVariantList,+          Variants.TypeVariantLiteral,+          Variants.TypeVariantMap,+          Variants.TypeVariantOptional,+          Variants.TypeVariantPair,+          Variants.TypeVariantRecord,+          Variants.TypeVariantSet,+          Variants.TypeVariantUnion,+          Variants.TypeVariantUnit,+          Variants.TypeVariantVariable,+          Variants.TypeVariantVoid,+          Variants.TypeVariantWrap]+    typePredicate = \_ -> True++-- | A set of reserved words in Go+goReservedWords :: S.Set String+goReservedWords =+    Sets.fromList (Lists.concat [+      goKeywords,+      goPredeclaredIdentifiers,+      hydraGoKeywords])+  where+    goKeywords =+        [+          "break",+          "case",+          "chan",+          "const",+          "continue",+          "default",+          "defer",+          "else",+          "fallthrough",+          "for",+          "func",+          "go",+          "goto",+          "if",+          "import",+          "interface",+          "map",+          "package",+          "range",+          "return",+          "select",+          "struct",+          "switch",+          "type",+          "var"]+    goPredeclaredIdentifiers =+        [+          "any",+          "bool",+          "byte",+          "comparable",+          "complex64",+          "complex128",+          "error",+          "float32",+          "float64",+          "int",+          "int8",+          "int16",+          "int32",+          "int64",+          "rune",+          "string",+          "uint",+          "uint8",+          "uint16",+          "uint32",+          "uint64",+          "uintptr",+          "true",+          "false",+          "iota",+          "nil",+          "append",+          "cap",+          "clear",+          "close",+          "complex",+          "copy",+          "delete",+          "imag",+          "len",+          "make",+          "max",+          "min",+          "new",+          "panic",+          "print",+          "println",+          "real",+          "recover"]+    hydraGoKeywords =+        [+          "Node",+          "Maybe",+          "Either",+          "Left",+          "Right",+          "Just",+          "Nothing",+          "Unit",+          "Pair"]
+ src/main/haskell/Hydra/Go/Syntax.hs view
@@ -0,0 +1,1623 @@+-- Note: this is an automatically generated file. Do not edit.++-- | A Go syntax model, based on the Go Language Specification retrieved on 2025-02-05 from https://go.dev/ref/spec++module Hydra.Go.Syntax where++import qualified Hydra.Core as Core+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++data AnnotatedDeclaration =+  AnnotatedDeclaration {+    annotatedDeclarationComment :: String,+    annotatedDeclarationDeclaration :: TopLevelDecl}+  deriving (Eq, Ord, Read, Show)++_AnnotatedDeclaration = Core.Name "hydra.go.syntax.AnnotatedDeclaration"++_AnnotatedDeclaration_comment = Core.Name "comment"++_AnnotatedDeclaration_declaration = Core.Name "declaration"++data Module =+  Module {+    modulePackage :: PackageClause,+    moduleImports :: [ImportDecl],+    moduleDeclarations :: [TopLevelDecl]}+  deriving (Eq, Ord, Read, Show)++_Module = Core.Name "hydra.go.syntax.Module"++_Module_package = Core.Name "package"++_Module_imports = Core.Name "imports"++_Module_declarations = Core.Name "declarations"++newtype Identifier =+  Identifier {+    unIdentifier :: String}+  deriving (Eq, Ord, Read, Show)++_Identifier = Core.Name "hydra.go.syntax.Identifier"++newtype IntLit =+  IntLit {+    unIntLit :: Integer}+  deriving (Eq, Ord, Read, Show)++_IntLit = Core.Name "hydra.go.syntax.IntLit"++newtype FloatLit =+  FloatLit {+    unFloatLit :: Double}+  deriving (Eq, Ord, Read, Show)++_FloatLit = Core.Name "hydra.go.syntax.FloatLit"++newtype ImaginaryLit =+  ImaginaryLit {+    unImaginaryLit :: Double}+  deriving (Eq, Ord, Read, Show)++_ImaginaryLit = Core.Name "hydra.go.syntax.ImaginaryLit"++newtype RuneLit =+  RuneLit {+    unRuneLit :: Int}+  deriving (Eq, Ord, Read, Show)++_RuneLit = Core.Name "hydra.go.syntax.RuneLit"++data StringLit =+  StringLitRaw RawStringLit |+  StringLitInterpreted InterpretedStringLit+  deriving (Eq, Ord, Read, Show)++_StringLit = Core.Name "hydra.go.syntax.StringLit"++_StringLit_raw = Core.Name "raw"++_StringLit_interpreted = Core.Name "interpreted"++newtype RawStringLit =+  RawStringLit {+    unRawStringLit :: String}+  deriving (Eq, Ord, Read, Show)++_RawStringLit = Core.Name "hydra.go.syntax.RawStringLit"++newtype InterpretedStringLit =+  InterpretedStringLit {+    unInterpretedStringLit :: String}+  deriving (Eq, Ord, Read, Show)++_InterpretedStringLit = Core.Name "hydra.go.syntax.InterpretedStringLit"++data SourceFile =+  SourceFile {+    sourceFilePackage :: PackageClause,+    sourceFileImports :: [ImportDecl],+    sourceFileDeclarations :: [TopLevelDecl]}+  deriving (Eq, Ord, Read, Show)++_SourceFile = Core.Name "hydra.go.syntax.SourceFile"++_SourceFile_package = Core.Name "package"++_SourceFile_imports = Core.Name "imports"++_SourceFile_declarations = Core.Name "declarations"++newtype PackageClause =+  PackageClause {+    unPackageClause :: Identifier}+  deriving (Eq, Ord, Read, Show)++_PackageClause = Core.Name "hydra.go.syntax.PackageClause"++newtype ImportDecl =+  ImportDecl {+    unImportDecl :: [ImportSpec]}+  deriving (Eq, Ord, Read, Show)++_ImportDecl = Core.Name "hydra.go.syntax.ImportDecl"++data ImportSpec =+  ImportSpec {+    importSpecAlias :: (Maybe ImportAlias),+    importSpecPath :: ImportPath}+  deriving (Eq, Ord, Read, Show)++_ImportSpec = Core.Name "hydra.go.syntax.ImportSpec"++_ImportSpec_alias = Core.Name "alias"++_ImportSpec_path = Core.Name "path"++data ImportAlias =+  ImportAliasDot |+  ImportAliasName Identifier+  deriving (Eq, Ord, Read, Show)++_ImportAlias = Core.Name "hydra.go.syntax.ImportAlias"++_ImportAlias_dot = Core.Name "dot"++_ImportAlias_name = Core.Name "name"++newtype ImportPath =+  ImportPath {+    unImportPath :: StringLit}+  deriving (Eq, Ord, Read, Show)++_ImportPath = Core.Name "hydra.go.syntax.ImportPath"++data Declaration =+  DeclarationConst ConstDecl |+  DeclarationType TypeDecl |+  DeclarationVar VarDecl+  deriving (Eq, Ord, Read, Show)++_Declaration = Core.Name "hydra.go.syntax.Declaration"++_Declaration_const = Core.Name "const"++_Declaration_type = Core.Name "type"++_Declaration_var = Core.Name "var"++data TopLevelDecl =+  TopLevelDeclDeclaration Declaration |+  TopLevelDeclFunction FunctionDecl |+  TopLevelDeclMethod MethodDecl+  deriving (Eq, Ord, Read, Show)++_TopLevelDecl = Core.Name "hydra.go.syntax.TopLevelDecl"++_TopLevelDecl_declaration = Core.Name "declaration"++_TopLevelDecl_function = Core.Name "function"++_TopLevelDecl_method = Core.Name "method"++newtype ConstDecl =+  ConstDecl {+    unConstDecl :: [ConstSpec]}+  deriving (Eq, Ord, Read, Show)++_ConstDecl = Core.Name "hydra.go.syntax.ConstDecl"++data ConstSpec =+  ConstSpec {+    constSpecNames :: [Identifier],+    constSpecType :: (Maybe Type),+    constSpecValues :: [Expression]}+  deriving (Eq, Ord, Read, Show)++_ConstSpec = Core.Name "hydra.go.syntax.ConstSpec"++_ConstSpec_names = Core.Name "names"++_ConstSpec_type = Core.Name "type"++_ConstSpec_values = Core.Name "values"++newtype VarDecl =+  VarDecl {+    unVarDecl :: [VarSpec]}+  deriving (Eq, Ord, Read, Show)++_VarDecl = Core.Name "hydra.go.syntax.VarDecl"++data VarSpec =+  VarSpec {+    varSpecNames :: [Identifier],+    varSpecType :: (Maybe Type),+    varSpecValues :: [Expression]}+  deriving (Eq, Ord, Read, Show)++_VarSpec = Core.Name "hydra.go.syntax.VarSpec"++_VarSpec_names = Core.Name "names"++_VarSpec_type = Core.Name "type"++_VarSpec_values = Core.Name "values"++data ShortVarDecl =+  ShortVarDecl {+    shortVarDeclNames :: [Identifier],+    shortVarDeclValues :: [Expression]}+  deriving (Eq, Ord, Read, Show)++_ShortVarDecl = Core.Name "hydra.go.syntax.ShortVarDecl"++_ShortVarDecl_names = Core.Name "names"++_ShortVarDecl_values = Core.Name "values"++newtype TypeDecl =+  TypeDecl {+    unTypeDecl :: [TypeSpec]}+  deriving (Eq, Ord, Read, Show)++_TypeDecl = Core.Name "hydra.go.syntax.TypeDecl"++data TypeSpec =+  TypeSpecAlias AliasDecl |+  TypeSpecDefinition TypeDef+  deriving (Eq, Ord, Read, Show)++_TypeSpec = Core.Name "hydra.go.syntax.TypeSpec"++_TypeSpec_alias = Core.Name "alias"++_TypeSpec_definition = Core.Name "definition"++data AliasDecl =+  AliasDecl {+    aliasDeclName :: Identifier,+    aliasDeclType :: Type}+  deriving (Eq, Ord, Read, Show)++_AliasDecl = Core.Name "hydra.go.syntax.AliasDecl"++_AliasDecl_name = Core.Name "name"++_AliasDecl_type = Core.Name "type"++data TypeDef =+  TypeDef {+    typeDefName :: Identifier,+    typeDefTypeParams :: (Maybe TypeParameters),+    typeDefType :: Type}+  deriving (Eq, Ord, Read, Show)++_TypeDef = Core.Name "hydra.go.syntax.TypeDef"++_TypeDef_name = Core.Name "name"++_TypeDef_typeParams = Core.Name "typeParams"++_TypeDef_type = Core.Name "type"++newtype TypeParameters =+  TypeParameters {+    unTypeParameters :: [TypeParamDecl]}+  deriving (Eq, Ord, Read, Show)++_TypeParameters = Core.Name "hydra.go.syntax.TypeParameters"++data TypeParamDecl =+  TypeParamDecl {+    typeParamDeclNames :: [Identifier],+    typeParamDeclConstraint :: TypeConstraint}+  deriving (Eq, Ord, Read, Show)++_TypeParamDecl = Core.Name "hydra.go.syntax.TypeParamDecl"++_TypeParamDecl_names = Core.Name "names"++_TypeParamDecl_constraint = Core.Name "constraint"++newtype TypeConstraint =+  TypeConstraint {+    unTypeConstraint :: TypeElem}+  deriving (Eq, Ord, Read, Show)++_TypeConstraint = Core.Name "hydra.go.syntax.TypeConstraint"++data FunctionDecl =+  FunctionDecl {+    functionDeclName :: Identifier,+    functionDeclTypeParams :: (Maybe TypeParameters),+    functionDeclSignature :: Signature,+    functionDeclBody :: (Maybe FunctionBody)}+  deriving (Eq, Ord, Read, Show)++_FunctionDecl = Core.Name "hydra.go.syntax.FunctionDecl"++_FunctionDecl_name = Core.Name "name"++_FunctionDecl_typeParams = Core.Name "typeParams"++_FunctionDecl_signature = Core.Name "signature"++_FunctionDecl_body = Core.Name "body"++newtype FunctionBody =+  FunctionBody {+    unFunctionBody :: Block}+  deriving (Eq, Ord, Read, Show)++_FunctionBody = Core.Name "hydra.go.syntax.FunctionBody"++data MethodDecl =+  MethodDecl {+    methodDeclReceiver :: Receiver,+    methodDeclName :: Identifier,+    methodDeclSignature :: Signature,+    methodDeclBody :: (Maybe FunctionBody)}+  deriving (Eq, Ord, Read, Show)++_MethodDecl = Core.Name "hydra.go.syntax.MethodDecl"++_MethodDecl_receiver = Core.Name "receiver"++_MethodDecl_name = Core.Name "name"++_MethodDecl_signature = Core.Name "signature"++_MethodDecl_body = Core.Name "body"++data Receiver =+  Receiver {+    receiverName :: (Maybe Identifier),+    receiverType :: Type}+  deriving (Eq, Ord, Read, Show)++_Receiver = Core.Name "hydra.go.syntax.Receiver"++_Receiver_name = Core.Name "name"++_Receiver_type = Core.Name "type"++data Type =+  TypeName_ TypeName |+  TypeLiteral TypeLit |+  TypeParen Type+  deriving (Eq, Ord, Read, Show)++_Type = Core.Name "hydra.go.syntax.Type"++_Type_name = Core.Name "name"++_Type_literal = Core.Name "literal"++_Type_paren = Core.Name "paren"++data TypeName =+  TypeName {+    typeNameName :: QualifiedIdent,+    typeNameTypeArgs :: [Type]}+  deriving (Eq, Ord, Read, Show)++_TypeName = Core.Name "hydra.go.syntax.TypeName"++_TypeName_name = Core.Name "name"++_TypeName_typeArgs = Core.Name "typeArgs"++data QualifiedIdent =+  QualifiedIdent {+    qualifiedIdentPackage :: (Maybe Identifier),+    qualifiedIdentName :: Identifier}+  deriving (Eq, Ord, Read, Show)++_QualifiedIdent = Core.Name "hydra.go.syntax.QualifiedIdent"++_QualifiedIdent_package = Core.Name "package"++_QualifiedIdent_name = Core.Name "name"++data TypeLit =+  TypeLitArray ArrayType |+  TypeLitStruct StructType |+  TypeLitPointer PointerType |+  TypeLitFunction FunctionType |+  TypeLitInterface InterfaceType |+  TypeLitSlice SliceType |+  TypeLitMap MapType |+  TypeLitChannel ChannelType+  deriving (Eq, Ord, Read, Show)++_TypeLit = Core.Name "hydra.go.syntax.TypeLit"++_TypeLit_array = Core.Name "array"++_TypeLit_struct = Core.Name "struct"++_TypeLit_pointer = Core.Name "pointer"++_TypeLit_function = Core.Name "function"++_TypeLit_interface = Core.Name "interface"++_TypeLit_slice = Core.Name "slice"++_TypeLit_map = Core.Name "map"++_TypeLit_channel = Core.Name "channel"++data ArrayType =+  ArrayType {+    arrayTypeLength :: Expression,+    arrayTypeElement :: Type}+  deriving (Eq, Ord, Read, Show)++_ArrayType = Core.Name "hydra.go.syntax.ArrayType"++_ArrayType_length = Core.Name "length"++_ArrayType_element = Core.Name "element"++newtype SliceType =+  SliceType {+    unSliceType :: Type}+  deriving (Eq, Ord, Read, Show)++_SliceType = Core.Name "hydra.go.syntax.SliceType"++newtype StructType =+  StructType {+    unStructType :: [FieldDecl]}+  deriving (Eq, Ord, Read, Show)++_StructType = Core.Name "hydra.go.syntax.StructType"++data FieldDecl =+  FieldDeclNamed NamedField |+  FieldDeclEmbedded EmbeddedField+  deriving (Eq, Ord, Read, Show)++_FieldDecl = Core.Name "hydra.go.syntax.FieldDecl"++_FieldDecl_named = Core.Name "named"++_FieldDecl_embedded = Core.Name "embedded"++data NamedField =+  NamedField {+    namedFieldNames :: [Identifier],+    namedFieldType :: Type,+    namedFieldTag :: (Maybe Tag)}+  deriving (Eq, Ord, Read, Show)++_NamedField = Core.Name "hydra.go.syntax.NamedField"++_NamedField_names = Core.Name "names"++_NamedField_type = Core.Name "type"++_NamedField_tag = Core.Name "tag"++data EmbeddedField =+  EmbeddedField {+    embeddedFieldPointer :: Bool,+    embeddedFieldType :: TypeName,+    embeddedFieldTag :: (Maybe Tag)}+  deriving (Eq, Ord, Read, Show)++_EmbeddedField = Core.Name "hydra.go.syntax.EmbeddedField"++_EmbeddedField_pointer = Core.Name "pointer"++_EmbeddedField_type = Core.Name "type"++_EmbeddedField_tag = Core.Name "tag"++newtype Tag =+  Tag {+    unTag :: StringLit}+  deriving (Eq, Ord, Read, Show)++_Tag = Core.Name "hydra.go.syntax.Tag"++newtype PointerType =+  PointerType {+    unPointerType :: Type}+  deriving (Eq, Ord, Read, Show)++_PointerType = Core.Name "hydra.go.syntax.PointerType"++newtype FunctionType =+  FunctionType {+    unFunctionType :: Signature}+  deriving (Eq, Ord, Read, Show)++_FunctionType = Core.Name "hydra.go.syntax.FunctionType"++data Signature =+  Signature {+    signatureParameters :: Parameters,+    signatureResult :: (Maybe Result)}+  deriving (Eq, Ord, Read, Show)++_Signature = Core.Name "hydra.go.syntax.Signature"++_Signature_parameters = Core.Name "parameters"++_Signature_result = Core.Name "result"++data Result =+  ResultParameters Parameters |+  ResultType Type+  deriving (Eq, Ord, Read, Show)++_Result = Core.Name "hydra.go.syntax.Result"++_Result_parameters = Core.Name "parameters"++_Result_type = Core.Name "type"++newtype Parameters =+  Parameters {+    unParameters :: [ParameterDecl]}+  deriving (Eq, Ord, Read, Show)++_Parameters = Core.Name "hydra.go.syntax.Parameters"++data ParameterDecl =+  ParameterDecl {+    parameterDeclNames :: [Identifier],+    parameterDeclVariadic :: Bool,+    parameterDeclType :: Type}+  deriving (Eq, Ord, Read, Show)++_ParameterDecl = Core.Name "hydra.go.syntax.ParameterDecl"++_ParameterDecl_names = Core.Name "names"++_ParameterDecl_variadic = Core.Name "variadic"++_ParameterDecl_type = Core.Name "type"++newtype InterfaceType =+  InterfaceType {+    unInterfaceType :: [InterfaceElem]}+  deriving (Eq, Ord, Read, Show)++_InterfaceType = Core.Name "hydra.go.syntax.InterfaceType"++data InterfaceElem =+  InterfaceElemMethod MethodElem |+  InterfaceElemType TypeElem+  deriving (Eq, Ord, Read, Show)++_InterfaceElem = Core.Name "hydra.go.syntax.InterfaceElem"++_InterfaceElem_method = Core.Name "method"++_InterfaceElem_type = Core.Name "type"++data MethodElem =+  MethodElem {+    methodElemName :: Identifier,+    methodElemSignature :: Signature}+  deriving (Eq, Ord, Read, Show)++_MethodElem = Core.Name "hydra.go.syntax.MethodElem"++_MethodElem_name = Core.Name "name"++_MethodElem_signature = Core.Name "signature"++newtype TypeElem =+  TypeElem {+    unTypeElem :: [TypeTerm]}+  deriving (Eq, Ord, Read, Show)++_TypeElem = Core.Name "hydra.go.syntax.TypeElem"++data TypeTerm =+  TypeTerm {+    typeTermUnderlying :: Bool,+    typeTermType :: Type}+  deriving (Eq, Ord, Read, Show)++_TypeTerm = Core.Name "hydra.go.syntax.TypeTerm"++_TypeTerm_underlying = Core.Name "underlying"++_TypeTerm_type = Core.Name "type"++data MapType =+  MapType {+    mapTypeKey :: Type,+    mapTypeValue :: Type}+  deriving (Eq, Ord, Read, Show)++_MapType = Core.Name "hydra.go.syntax.MapType"++_MapType_key = Core.Name "key"++_MapType_value = Core.Name "value"++data ChannelType =+  ChannelType {+    channelTypeDirection :: ChannelDirection,+    channelTypeElement :: Type}+  deriving (Eq, Ord, Read, Show)++_ChannelType = Core.Name "hydra.go.syntax.ChannelType"++_ChannelType_direction = Core.Name "direction"++_ChannelType_element = Core.Name "element"++data ChannelDirection =+  ChannelDirectionBidirectional |+  ChannelDirectionSend |+  ChannelDirectionReceive+  deriving (Eq, Ord, Read, Show)++_ChannelDirection = Core.Name "hydra.go.syntax.ChannelDirection"++_ChannelDirection_bidirectional = Core.Name "bidirectional"++_ChannelDirection_send = Core.Name "send"++_ChannelDirection_receive = Core.Name "receive"++data Expression =+  ExpressionUnary UnaryExpr |+  ExpressionBinary BinaryExpr+  deriving (Eq, Ord, Read, Show)++_Expression = Core.Name "hydra.go.syntax.Expression"++_Expression_unary = Core.Name "unary"++_Expression_binary = Core.Name "binary"++data UnaryExpr =+  UnaryExprPrimary PrimaryExpr |+  UnaryExprOp UnaryOperation+  deriving (Eq, Ord, Read, Show)++_UnaryExpr = Core.Name "hydra.go.syntax.UnaryExpr"++_UnaryExpr_primary = Core.Name "primary"++_UnaryExpr_op = Core.Name "op"++data UnaryOperation =+  UnaryOperation {+    unaryOperationOp :: UnaryOp,+    unaryOperationOperand :: UnaryExpr}+  deriving (Eq, Ord, Read, Show)++_UnaryOperation = Core.Name "hydra.go.syntax.UnaryOperation"++_UnaryOperation_op = Core.Name "op"++_UnaryOperation_operand = Core.Name "operand"++data BinaryExpr =+  BinaryExpr {+    binaryExprLeft :: Expression,+    binaryExprOp :: BinaryOp,+    binaryExprRight :: Expression}+  deriving (Eq, Ord, Read, Show)++_BinaryExpr = Core.Name "hydra.go.syntax.BinaryExpr"++_BinaryExpr_left = Core.Name "left"++_BinaryExpr_op = Core.Name "op"++_BinaryExpr_right = Core.Name "right"++data BinaryOp =+  BinaryOpOr |+  BinaryOpAnd |+  BinaryOpEqual |+  BinaryOpNotEqual |+  BinaryOpLess |+  BinaryOpLessEqual |+  BinaryOpGreater |+  BinaryOpGreaterEqual |+  BinaryOpAdd |+  BinaryOpSubtract |+  BinaryOpBitwiseOr |+  BinaryOpBitwiseXor |+  BinaryOpMultiply |+  BinaryOpDivide |+  BinaryOpRemainder |+  BinaryOpLeftShift |+  BinaryOpRightShift |+  BinaryOpBitwiseAnd |+  BinaryOpBitClear+  deriving (Eq, Ord, Read, Show)++_BinaryOp = Core.Name "hydra.go.syntax.BinaryOp"++_BinaryOp_or = Core.Name "or"++_BinaryOp_and = Core.Name "and"++_BinaryOp_equal = Core.Name "equal"++_BinaryOp_notEqual = Core.Name "notEqual"++_BinaryOp_less = Core.Name "less"++_BinaryOp_lessEqual = Core.Name "lessEqual"++_BinaryOp_greater = Core.Name "greater"++_BinaryOp_greaterEqual = Core.Name "greaterEqual"++_BinaryOp_add = Core.Name "add"++_BinaryOp_subtract = Core.Name "subtract"++_BinaryOp_bitwiseOr = Core.Name "bitwiseOr"++_BinaryOp_bitwiseXor = Core.Name "bitwiseXor"++_BinaryOp_multiply = Core.Name "multiply"++_BinaryOp_divide = Core.Name "divide"++_BinaryOp_remainder = Core.Name "remainder"++_BinaryOp_leftShift = Core.Name "leftShift"++_BinaryOp_rightShift = Core.Name "rightShift"++_BinaryOp_bitwiseAnd = Core.Name "bitwiseAnd"++_BinaryOp_bitClear = Core.Name "bitClear"++data PrimaryExpr =+  PrimaryExprOperand Operand |+  PrimaryExprConversion Conversion |+  PrimaryExprMethodExpr MethodExpr |+  PrimaryExprSelector SelectorExpr |+  PrimaryExprIndex IndexExpr |+  PrimaryExprSlice SliceExpr |+  PrimaryExprTypeAssertion TypeAssertionExpr |+  PrimaryExprCall CallExpr+  deriving (Eq, Ord, Read, Show)++_PrimaryExpr = Core.Name "hydra.go.syntax.PrimaryExpr"++_PrimaryExpr_operand = Core.Name "operand"++_PrimaryExpr_conversion = Core.Name "conversion"++_PrimaryExpr_methodExpr = Core.Name "methodExpr"++_PrimaryExpr_selector = Core.Name "selector"++_PrimaryExpr_index = Core.Name "index"++_PrimaryExpr_slice = Core.Name "slice"++_PrimaryExpr_typeAssertion = Core.Name "typeAssertion"++_PrimaryExpr_call = Core.Name "call"++data SelectorExpr =+  SelectorExpr {+    selectorExprExpr :: PrimaryExpr,+    selectorExprSelector :: Identifier}+  deriving (Eq, Ord, Read, Show)++_SelectorExpr = Core.Name "hydra.go.syntax.SelectorExpr"++_SelectorExpr_expr = Core.Name "expr"++_SelectorExpr_selector = Core.Name "selector"++data IndexExpr =+  IndexExpr {+    indexExprExpr :: PrimaryExpr,+    indexExprIndex :: Expression}+  deriving (Eq, Ord, Read, Show)++_IndexExpr = Core.Name "hydra.go.syntax.IndexExpr"++_IndexExpr_expr = Core.Name "expr"++_IndexExpr_index = Core.Name "index"++data SliceExpr =+  SliceExpr {+    sliceExprExpr :: PrimaryExpr,+    sliceExprSlice :: Slice}+  deriving (Eq, Ord, Read, Show)++_SliceExpr = Core.Name "hydra.go.syntax.SliceExpr"++_SliceExpr_expr = Core.Name "expr"++_SliceExpr_slice = Core.Name "slice"++data TypeAssertionExpr =+  TypeAssertionExpr {+    typeAssertionExprExpr :: PrimaryExpr,+    typeAssertionExprType :: Type}+  deriving (Eq, Ord, Read, Show)++_TypeAssertionExpr = Core.Name "hydra.go.syntax.TypeAssertionExpr"++_TypeAssertionExpr_expr = Core.Name "expr"++_TypeAssertionExpr_type = Core.Name "type"++data CallExpr =+  CallExpr {+    callExprFunction :: PrimaryExpr,+    callExprArguments :: Arguments}+  deriving (Eq, Ord, Read, Show)++_CallExpr = Core.Name "hydra.go.syntax.CallExpr"++_CallExpr_function = Core.Name "function"++_CallExpr_arguments = Core.Name "arguments"++data Operand =+  OperandLiteral Literal |+  OperandName_ OperandName |+  OperandParen Expression+  deriving (Eq, Ord, Read, Show)++_Operand = Core.Name "hydra.go.syntax.Operand"++_Operand_literal = Core.Name "literal"++_Operand_name = Core.Name "name"++_Operand_paren = Core.Name "paren"++data OperandName =+  OperandName {+    operandNameName :: QualifiedIdent,+    operandNameTypeArgs :: [Type]}+  deriving (Eq, Ord, Read, Show)++_OperandName = Core.Name "hydra.go.syntax.OperandName"++_OperandName_name = Core.Name "name"++_OperandName_typeArgs = Core.Name "typeArgs"++data Literal =+  LiteralBasic BasicLit |+  LiteralComposite CompositeLit |+  LiteralFunction FunctionLit+  deriving (Eq, Ord, Read, Show)++_Literal = Core.Name "hydra.go.syntax.Literal"++_Literal_basic = Core.Name "basic"++_Literal_composite = Core.Name "composite"++_Literal_function = Core.Name "function"++data BasicLit =+  BasicLitInt IntLit |+  BasicLitFloat FloatLit |+  BasicLitImaginary ImaginaryLit |+  BasicLitRune RuneLit |+  BasicLitString StringLit+  deriving (Eq, Ord, Read, Show)++_BasicLit = Core.Name "hydra.go.syntax.BasicLit"++_BasicLit_int = Core.Name "int"++_BasicLit_float = Core.Name "float"++_BasicLit_imaginary = Core.Name "imaginary"++_BasicLit_rune = Core.Name "rune"++_BasicLit_string = Core.Name "string"++data CompositeLit =+  CompositeLit {+    compositeLitType :: LiteralType,+    compositeLitValue :: LiteralValue}+  deriving (Eq, Ord, Read, Show)++_CompositeLit = Core.Name "hydra.go.syntax.CompositeLit"++_CompositeLit_type = Core.Name "type"++_CompositeLit_value = Core.Name "value"++data LiteralType =+  LiteralTypeStruct StructType |+  LiteralTypeArray ArrayType |+  LiteralTypeInferredArray Type |+  LiteralTypeSlice SliceType |+  LiteralTypeMap MapType |+  LiteralTypeName TypeName+  deriving (Eq, Ord, Read, Show)++_LiteralType = Core.Name "hydra.go.syntax.LiteralType"++_LiteralType_struct = Core.Name "struct"++_LiteralType_array = Core.Name "array"++_LiteralType_inferredArray = Core.Name "inferredArray"++_LiteralType_slice = Core.Name "slice"++_LiteralType_map = Core.Name "map"++_LiteralType_name = Core.Name "name"++newtype LiteralValue =+  LiteralValue {+    unLiteralValue :: [KeyedElement]}+  deriving (Eq, Ord, Read, Show)++_LiteralValue = Core.Name "hydra.go.syntax.LiteralValue"++newtype ElementList =+  ElementList {+    unElementList :: [KeyedElement]}+  deriving (Eq, Ord, Read, Show)++_ElementList = Core.Name "hydra.go.syntax.ElementList"++data KeyedElement =+  KeyedElement {+    keyedElementKey :: (Maybe Key),+    keyedElementElement :: Element}+  deriving (Eq, Ord, Read, Show)++_KeyedElement = Core.Name "hydra.go.syntax.KeyedElement"++_KeyedElement_key = Core.Name "key"++_KeyedElement_element = Core.Name "element"++data Key =+  KeyField Identifier |+  KeyExpression Expression |+  KeyLiteral LiteralValue+  deriving (Eq, Ord, Read, Show)++_Key = Core.Name "hydra.go.syntax.Key"++_Key_field = Core.Name "field"++_Key_expression = Core.Name "expression"++_Key_literal = Core.Name "literal"++data Element =+  ElementExpression Expression |+  ElementLiteral LiteralValue+  deriving (Eq, Ord, Read, Show)++_Element = Core.Name "hydra.go.syntax.Element"++_Element_expression = Core.Name "expression"++_Element_literal = Core.Name "literal"++data FunctionLit =+  FunctionLit {+    functionLitSignature :: Signature,+    functionLitBody :: FunctionBody}+  deriving (Eq, Ord, Read, Show)++_FunctionLit = Core.Name "hydra.go.syntax.FunctionLit"++_FunctionLit_signature = Core.Name "signature"++_FunctionLit_body = Core.Name "body"++newtype Selector =+  Selector {+    unSelector :: Identifier}+  deriving (Eq, Ord, Read, Show)++_Selector = Core.Name "hydra.go.syntax.Selector"++newtype Index =+  Index {+    unIndex :: [Expression]}+  deriving (Eq, Ord, Read, Show)++_Index = Core.Name "hydra.go.syntax.Index"++data Slice =+  SliceSimple SimpleSlice |+  SliceFull FullSlice+  deriving (Eq, Ord, Read, Show)++_Slice = Core.Name "hydra.go.syntax.Slice"++_Slice_simple = Core.Name "simple"++_Slice_full = Core.Name "full"++data SimpleSlice =+  SimpleSlice {+    simpleSliceLow :: (Maybe Expression),+    simpleSliceHigh :: (Maybe Expression)}+  deriving (Eq, Ord, Read, Show)++_SimpleSlice = Core.Name "hydra.go.syntax.SimpleSlice"++_SimpleSlice_low = Core.Name "low"++_SimpleSlice_high = Core.Name "high"++data FullSlice =+  FullSlice {+    fullSliceLow :: (Maybe Expression),+    fullSliceHigh :: Expression,+    fullSliceMax :: Expression}+  deriving (Eq, Ord, Read, Show)++_FullSlice = Core.Name "hydra.go.syntax.FullSlice"++_FullSlice_low = Core.Name "low"++_FullSlice_high = Core.Name "high"++_FullSlice_max = Core.Name "max"++newtype TypeAssertion =+  TypeAssertion {+    unTypeAssertion :: Type}+  deriving (Eq, Ord, Read, Show)++_TypeAssertion = Core.Name "hydra.go.syntax.TypeAssertion"++data Arguments =+  Arguments {+    argumentsTypeArg :: (Maybe Type),+    argumentsExpressions :: [Expression],+    argumentsEllipsis :: Bool}+  deriving (Eq, Ord, Read, Show)++_Arguments = Core.Name "hydra.go.syntax.Arguments"++_Arguments_typeArg = Core.Name "typeArg"++_Arguments_expressions = Core.Name "expressions"++_Arguments_ellipsis = Core.Name "ellipsis"++data MethodExpr =+  MethodExpr {+    methodExprReceiver :: Type,+    methodExprMethod :: Identifier}+  deriving (Eq, Ord, Read, Show)++_MethodExpr = Core.Name "hydra.go.syntax.MethodExpr"++_MethodExpr_receiver = Core.Name "receiver"++_MethodExpr_method = Core.Name "method"++data Conversion =+  Conversion {+    conversionType :: Type,+    conversionExpression :: Expression}+  deriving (Eq, Ord, Read, Show)++_Conversion = Core.Name "hydra.go.syntax.Conversion"++_Conversion_type = Core.Name "type"++_Conversion_expression = Core.Name "expression"++data Statement =+  StatementDeclaration Declaration |+  StatementLabeled LabeledStmt |+  StatementSimple SimpleStmt |+  StatementGo GoStmt |+  StatementReturn ReturnStmt |+  StatementBreak BreakStmt |+  StatementContinue ContinueStmt |+  StatementGoto GotoStmt |+  StatementFallthrough FallthroughStmt |+  StatementBlock Block |+  StatementIf IfStmt |+  StatementSwitch SwitchStmt |+  StatementSelect SelectStmt |+  StatementFor ForStmt |+  StatementDefer DeferStmt+  deriving (Eq, Ord, Read, Show)++_Statement = Core.Name "hydra.go.syntax.Statement"++_Statement_declaration = Core.Name "declaration"++_Statement_labeled = Core.Name "labeled"++_Statement_simple = Core.Name "simple"++_Statement_go = Core.Name "go"++_Statement_return = Core.Name "return"++_Statement_break = Core.Name "break"++_Statement_continue = Core.Name "continue"++_Statement_goto = Core.Name "goto"++_Statement_fallthrough = Core.Name "fallthrough"++_Statement_block = Core.Name "block"++_Statement_if = Core.Name "if"++_Statement_switch = Core.Name "switch"++_Statement_select = Core.Name "select"++_Statement_for = Core.Name "for"++_Statement_defer = Core.Name "defer"++data SimpleStmt =+  SimpleStmtEmpty EmptyStmt |+  SimpleStmtExpression ExpressionStmt |+  SimpleStmtSend SendStmt |+  SimpleStmtIncDec IncDecStmt |+  SimpleStmtAssignment Assignment |+  SimpleStmtShortVarDecl ShortVarDecl+  deriving (Eq, Ord, Read, Show)++_SimpleStmt = Core.Name "hydra.go.syntax.SimpleStmt"++_SimpleStmt_empty = Core.Name "empty"++_SimpleStmt_expression = Core.Name "expression"++_SimpleStmt_send = Core.Name "send"++_SimpleStmt_incDec = Core.Name "incDec"++_SimpleStmt_assignment = Core.Name "assignment"++_SimpleStmt_shortVarDecl = Core.Name "shortVarDecl"++newtype EmptyStmt =+  EmptyStmt {+    unEmptyStmt :: ()}+  deriving (Eq, Ord, Read, Show)++_EmptyStmt = Core.Name "hydra.go.syntax.EmptyStmt"++data LabeledStmt =+  LabeledStmt {+    labeledStmtLabel :: Identifier,+    labeledStmtStatement :: Statement}+  deriving (Eq, Ord, Read, Show)++_LabeledStmt = Core.Name "hydra.go.syntax.LabeledStmt"++_LabeledStmt_label = Core.Name "label"++_LabeledStmt_statement = Core.Name "statement"++newtype ExpressionStmt =+  ExpressionStmt {+    unExpressionStmt :: Expression}+  deriving (Eq, Ord, Read, Show)++_ExpressionStmt = Core.Name "hydra.go.syntax.ExpressionStmt"++data SendStmt =+  SendStmt {+    sendStmtChannel :: Expression,+    sendStmtValue :: Expression}+  deriving (Eq, Ord, Read, Show)++_SendStmt = Core.Name "hydra.go.syntax.SendStmt"++_SendStmt_channel = Core.Name "channel"++_SendStmt_value = Core.Name "value"++data IncDecStmt =+  IncDecStmt {+    incDecStmtExpression :: Expression,+    incDecStmtIncrement :: Bool}+  deriving (Eq, Ord, Read, Show)++_IncDecStmt = Core.Name "hydra.go.syntax.IncDecStmt"++_IncDecStmt_expression = Core.Name "expression"++_IncDecStmt_increment = Core.Name "increment"++data Assignment =+  Assignment {+    assignmentLhs :: [Expression],+    assignmentOp :: AssignOp,+    assignmentRhs :: [Expression]}+  deriving (Eq, Ord, Read, Show)++_Assignment = Core.Name "hydra.go.syntax.Assignment"++_Assignment_lhs = Core.Name "lhs"++_Assignment_op = Core.Name "op"++_Assignment_rhs = Core.Name "rhs"++data AssignOp =+  AssignOpSimple |+  AssignOpAdd AddOp |+  AssignOpMul MulOp+  deriving (Eq, Ord, Read, Show)++_AssignOp = Core.Name "hydra.go.syntax.AssignOp"++_AssignOp_simple = Core.Name "simple"++_AssignOp_add = Core.Name "add"++_AssignOp_mul = Core.Name "mul"++data IfStmt =+  IfStmt {+    ifStmtInit :: (Maybe SimpleStmt),+    ifStmtCondition :: Expression,+    ifStmtThen :: Block,+    ifStmtElse :: (Maybe ElseClause)}+  deriving (Eq, Ord, Read, Show)++_IfStmt = Core.Name "hydra.go.syntax.IfStmt"++_IfStmt_init = Core.Name "init"++_IfStmt_condition = Core.Name "condition"++_IfStmt_then = Core.Name "then"++_IfStmt_else = Core.Name "else"++data ElseClause =+  ElseClauseIf IfStmt |+  ElseClauseBlock Block+  deriving (Eq, Ord, Read, Show)++_ElseClause = Core.Name "hydra.go.syntax.ElseClause"++_ElseClause_if = Core.Name "if"++_ElseClause_block = Core.Name "block"++data SwitchStmt =+  SwitchStmtExpression ExprSwitchStmt |+  SwitchStmtType TypeSwitchStmt+  deriving (Eq, Ord, Read, Show)++_SwitchStmt = Core.Name "hydra.go.syntax.SwitchStmt"++_SwitchStmt_expression = Core.Name "expression"++_SwitchStmt_type = Core.Name "type"++data ExprSwitchStmt =+  ExprSwitchStmt {+    exprSwitchStmtInit :: (Maybe SimpleStmt),+    exprSwitchStmtExpression :: (Maybe Expression),+    exprSwitchStmtCases :: [ExprCaseClause]}+  deriving (Eq, Ord, Read, Show)++_ExprSwitchStmt = Core.Name "hydra.go.syntax.ExprSwitchStmt"++_ExprSwitchStmt_init = Core.Name "init"++_ExprSwitchStmt_expression = Core.Name "expression"++_ExprSwitchStmt_cases = Core.Name "cases"++data ExprCaseClause =+  ExprCaseClause {+    exprCaseClauseCase :: (Maybe [Expression]),+    exprCaseClauseStatements :: [Statement]}+  deriving (Eq, Ord, Read, Show)++_ExprCaseClause = Core.Name "hydra.go.syntax.ExprCaseClause"++_ExprCaseClause_case = Core.Name "case"++_ExprCaseClause_statements = Core.Name "statements"++data TypeSwitchStmt =+  TypeSwitchStmt {+    typeSwitchStmtInit :: (Maybe SimpleStmt),+    typeSwitchStmtGuard :: TypeSwitchGuard,+    typeSwitchStmtCases :: [TypeCaseClause]}+  deriving (Eq, Ord, Read, Show)++_TypeSwitchStmt = Core.Name "hydra.go.syntax.TypeSwitchStmt"++_TypeSwitchStmt_init = Core.Name "init"++_TypeSwitchStmt_guard = Core.Name "guard"++_TypeSwitchStmt_cases = Core.Name "cases"++data TypeSwitchGuard =+  TypeSwitchGuard {+    typeSwitchGuardName :: (Maybe Identifier),+    typeSwitchGuardExpression :: PrimaryExpr}+  deriving (Eq, Ord, Read, Show)++_TypeSwitchGuard = Core.Name "hydra.go.syntax.TypeSwitchGuard"++_TypeSwitchGuard_name = Core.Name "name"++_TypeSwitchGuard_expression = Core.Name "expression"++data TypeCaseClause =+  TypeCaseClause {+    typeCaseClauseCase :: (Maybe [Type]),+    typeCaseClauseStatements :: [Statement]}+  deriving (Eq, Ord, Read, Show)++_TypeCaseClause = Core.Name "hydra.go.syntax.TypeCaseClause"++_TypeCaseClause_case = Core.Name "case"++_TypeCaseClause_statements = Core.Name "statements"++data ForStmt =+  ForStmt {+    forStmtClause :: (Maybe ForClauseOrRange),+    forStmtBody :: Block}+  deriving (Eq, Ord, Read, Show)++_ForStmt = Core.Name "hydra.go.syntax.ForStmt"++_ForStmt_clause = Core.Name "clause"++_ForStmt_body = Core.Name "body"++data ForClauseOrRange =+  ForClauseOrRangeCondition Expression |+  ForClauseOrRangeClause ForClause |+  ForClauseOrRangeRange RangeClause+  deriving (Eq, Ord, Read, Show)++_ForClauseOrRange = Core.Name "hydra.go.syntax.ForClauseOrRange"++_ForClauseOrRange_condition = Core.Name "condition"++_ForClauseOrRange_clause = Core.Name "clause"++_ForClauseOrRange_range = Core.Name "range"++data ForClause =+  ForClause {+    forClauseInit :: (Maybe SimpleStmt),+    forClauseCondition :: (Maybe Expression),+    forClausePost :: (Maybe SimpleStmt)}+  deriving (Eq, Ord, Read, Show)++_ForClause = Core.Name "hydra.go.syntax.ForClause"++_ForClause_init = Core.Name "init"++_ForClause_condition = Core.Name "condition"++_ForClause_post = Core.Name "post"++data RangeClause =+  RangeClause {+    rangeClauseVars :: (Maybe RangeVars),+    rangeClauseExpression :: Expression}+  deriving (Eq, Ord, Read, Show)++_RangeClause = Core.Name "hydra.go.syntax.RangeClause"++_RangeClause_vars = Core.Name "vars"++_RangeClause_expression = Core.Name "expression"++data RangeVars =+  RangeVarsAssign [Expression] |+  RangeVarsDeclare [Identifier]+  deriving (Eq, Ord, Read, Show)++_RangeVars = Core.Name "hydra.go.syntax.RangeVars"++_RangeVars_assign = Core.Name "assign"++_RangeVars_declare = Core.Name "declare"++newtype GoStmt =+  GoStmt {+    unGoStmt :: Expression}+  deriving (Eq, Ord, Read, Show)++_GoStmt = Core.Name "hydra.go.syntax.GoStmt"++newtype SelectStmt =+  SelectStmt {+    unSelectStmt :: [CommClause]}+  deriving (Eq, Ord, Read, Show)++_SelectStmt = Core.Name "hydra.go.syntax.SelectStmt"++data CommClause =+  CommClause {+    commClauseCase :: CommCase,+    commClauseStatements :: [Statement]}+  deriving (Eq, Ord, Read, Show)++_CommClause = Core.Name "hydra.go.syntax.CommClause"++_CommClause_case = Core.Name "case"++_CommClause_statements = Core.Name "statements"++data CommCase =+  CommCaseSend SendStmt |+  CommCaseReceive ReceiveCase |+  CommCaseDefault+  deriving (Eq, Ord, Read, Show)++_CommCase = Core.Name "hydra.go.syntax.CommCase"++_CommCase_send = Core.Name "send"++_CommCase_receive = Core.Name "receive"++_CommCase_default = Core.Name "default"++data ReceiveCase =+  ReceiveCase {+    receiveCaseVars :: (Maybe RangeVars),+    receiveCaseExpression :: Expression}+  deriving (Eq, Ord, Read, Show)++_ReceiveCase = Core.Name "hydra.go.syntax.ReceiveCase"++_ReceiveCase_vars = Core.Name "vars"++_ReceiveCase_expression = Core.Name "expression"++newtype ReturnStmt =+  ReturnStmt {+    unReturnStmt :: [Expression]}+  deriving (Eq, Ord, Read, Show)++_ReturnStmt = Core.Name "hydra.go.syntax.ReturnStmt"++newtype BreakStmt =+  BreakStmt {+    unBreakStmt :: (Maybe Identifier)}+  deriving (Eq, Ord, Read, Show)++_BreakStmt = Core.Name "hydra.go.syntax.BreakStmt"++newtype ContinueStmt =+  ContinueStmt {+    unContinueStmt :: (Maybe Identifier)}+  deriving (Eq, Ord, Read, Show)++_ContinueStmt = Core.Name "hydra.go.syntax.ContinueStmt"++newtype GotoStmt =+  GotoStmt {+    unGotoStmt :: Identifier}+  deriving (Eq, Ord, Read, Show)++_GotoStmt = Core.Name "hydra.go.syntax.GotoStmt"++newtype FallthroughStmt =+  FallthroughStmt {+    unFallthroughStmt :: ()}+  deriving (Eq, Ord, Read, Show)++_FallthroughStmt = Core.Name "hydra.go.syntax.FallthroughStmt"++newtype DeferStmt =+  DeferStmt {+    unDeferStmt :: Expression}+  deriving (Eq, Ord, Read, Show)++_DeferStmt = Core.Name "hydra.go.syntax.DeferStmt"++newtype Block =+  Block {+    unBlock :: [Statement]}+  deriving (Eq, Ord, Read, Show)++_Block = Core.Name "hydra.go.syntax.Block"++data UnaryOp =+  UnaryOpPlus |+  UnaryOpMinus |+  UnaryOpNot |+  UnaryOpXor |+  UnaryOpDeref |+  UnaryOpAddressOf |+  UnaryOpReceive+  deriving (Eq, Ord, Read, Show)++_UnaryOp = Core.Name "hydra.go.syntax.UnaryOp"++_UnaryOp_plus = Core.Name "plus"++_UnaryOp_minus = Core.Name "minus"++_UnaryOp_not = Core.Name "not"++_UnaryOp_xor = Core.Name "xor"++_UnaryOp_deref = Core.Name "deref"++_UnaryOp_addressOf = Core.Name "addressOf"++_UnaryOp_receive = Core.Name "receive"++data MulOp =+  MulOpMultiply |+  MulOpDivide |+  MulOpRemainder |+  MulOpLeftShift |+  MulOpRightShift |+  MulOpBitwiseAnd |+  MulOpBitClear+  deriving (Eq, Ord, Read, Show)++_MulOp = Core.Name "hydra.go.syntax.MulOp"++_MulOp_multiply = Core.Name "multiply"++_MulOp_divide = Core.Name "divide"++_MulOp_remainder = Core.Name "remainder"++_MulOp_leftShift = Core.Name "leftShift"++_MulOp_rightShift = Core.Name "rightShift"++_MulOp_bitwiseAnd = Core.Name "bitwiseAnd"++_MulOp_bitClear = Core.Name "bitClear"++data AddOp =+  AddOpAdd |+  AddOpSubtract |+  AddOpBitwiseOr |+  AddOpBitwiseXor+  deriving (Eq, Ord, Read, Show)++_AddOp = Core.Name "hydra.go.syntax.AddOp"++_AddOp_add = Core.Name "add"++_AddOp_subtract = Core.Name "subtract"++_AddOp_bitwiseOr = Core.Name "bitwiseOr"++_AddOp_bitwiseXor = Core.Name "bitwiseXor"++data RelOp =+  RelOpEqual |+  RelOpNotEqual |+  RelOpLess |+  RelOpLessEqual |+  RelOpGreater |+  RelOpGreaterEqual+  deriving (Eq, Ord, Read, Show)++_RelOp = Core.Name "hydra.go.syntax.RelOp"++_RelOp_equal = Core.Name "equal"++_RelOp_notEqual = Core.Name "notEqual"++_RelOp_less = Core.Name "less"++_RelOp_lessEqual = Core.Name "lessEqual"++_RelOp_greater = Core.Name "greater"++_RelOp_greaterEqual = Core.Name "greaterEqual"