packages feed

hydra-python (empty) → 0.17.0

raw patch · 14 files changed

+25151/−0 lines, 14 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-python.cabal view
@@ -0,0 +1,49 @@+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-python+version:        0.17.0+synopsis:       Hydra's Python coder: emit Python 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". Python 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.Python.Environment+      Hydra.Dsl.Python.Syntax+      Hydra.Python.Coder+      Hydra.Python.Environment+      Hydra.Python.Language+      Hydra.Python.Names+      Hydra.Python.Serde+      Hydra.Python.Syntax+      Hydra.Python.Testing+      Hydra.Python.Utils+  other-modules:+      Paths_hydra_python+  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/Python/Environment.hs view
@@ -0,0 +1,4617 @@+-- Note: this is an automatically generated file. Do not edit.++-- | DSL functions for hydra.python.environment++module Hydra.Dsl.Python.Environment where++import qualified Hydra.Core as Core+import qualified Hydra.Dsl.Core as DslCore+import qualified Hydra.Dsl.Graph as DslGraph+import qualified Hydra.Dsl.Packaging as DslPackaging+import qualified Hydra.Dsl.Python.Syntax as PythonSyntax+import qualified Hydra.Dsl.Typing as DslTyping+import qualified Hydra.Dsl.Util as DslUtil+import qualified Hydra.Graph as Graph+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Python.Environment as Environment+import qualified Hydra.Python.Syntax as Syntax+import qualified Hydra.Typed as Typed+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci+import qualified Data.Map as M+import qualified Data.Set as S++-- | DSL constructor for hydra.python.environment.PyGraph+pyGraph :: Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Environment.PyGraph+pyGraph graph metadata =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PyGraph"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Typed.unTypedTerm graph)},+        Core.Field {+          Core.fieldName = (Core.Name "metadata"),+          Core.fieldTerm = (Typed.unTypedTerm metadata)}]}))++-- | DSL accessor for the graph field of hydra.python.environment.PyGraph+pyGraphGraph :: Typed.TypedTerm Environment.PyGraph -> Typed.TypedTerm Graph.Graph+pyGraphGraph x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PyGraph"),+        Core.projectionFieldName = (Core.Name "graph")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the metadata field of hydra.python.environment.PyGraph+pyGraphMetadata :: Typed.TypedTerm Environment.PyGraph -> Typed.TypedTerm Environment.PythonModuleMetadata+pyGraphMetadata x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PyGraph"),+        Core.projectionFieldName = (Core.Name "metadata")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the graph field of hydra.python.environment.PyGraph+pyGraphWithGraph :: Typed.TypedTerm Environment.PyGraph -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Environment.PyGraph+pyGraphWithGraph original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PyGraph"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "metadata"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PyGraph"),+              Core.projectionFieldName = (Core.Name "metadata")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the metadata field of hydra.python.environment.PyGraph+pyGraphWithMetadata :: Typed.TypedTerm Environment.PyGraph -> Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Environment.PyGraph+pyGraphWithMetadata original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PyGraph"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PyGraph"),+              Core.projectionFieldName = (Core.Name "graph")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "metadata"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.environment.PythonEnvironment+pythonEnvironment :: Typed.TypedTerm (Util.ModuleNames Syntax.DottedName) -> Typed.TypedTerm ([Core.Name], (M.Map Core.Name Syntax.Name)) -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.PythonVersion -> Typed.TypedTerm Bool -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.PythonEnvironment+pythonEnvironment namespaces boundTypeVariables graph nullaryBindings version skipCasts inlineVariables =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Typed.unTypedTerm namespaces)},+        Core.Field {+          Core.fieldName = (Core.Name "boundTypeVariables"),+          Core.fieldTerm = (Typed.unTypedTerm boundTypeVariables)},+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Typed.unTypedTerm graph)},+        Core.Field {+          Core.fieldName = (Core.Name "nullaryBindings"),+          Core.fieldTerm = (Typed.unTypedTerm nullaryBindings)},+        Core.Field {+          Core.fieldName = (Core.Name "version"),+          Core.fieldTerm = (Typed.unTypedTerm version)},+        Core.Field {+          Core.fieldName = (Core.Name "skipCasts"),+          Core.fieldTerm = (Typed.unTypedTerm skipCasts)},+        Core.Field {+          Core.fieldName = (Core.Name "inlineVariables"),+          Core.fieldTerm = (Typed.unTypedTerm inlineVariables)}]}))++-- | DSL accessor for the boundTypeVariables field of hydra.python.environment.PythonEnvironment+pythonEnvironmentBoundTypeVariables :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm ([Core.Name], (M.Map Core.Name Syntax.Name))+pythonEnvironmentBoundTypeVariables x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+        Core.projectionFieldName = (Core.Name "boundTypeVariables")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the graph field of hydra.python.environment.PythonEnvironment+pythonEnvironmentGraph :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm Graph.Graph+pythonEnvironmentGraph x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+        Core.projectionFieldName = (Core.Name "graph")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the inlineVariables field of hydra.python.environment.PythonEnvironment+pythonEnvironmentInlineVariables :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm (S.Set Core.Name)+pythonEnvironmentInlineVariables x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+        Core.projectionFieldName = (Core.Name "inlineVariables")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the namespaces field of hydra.python.environment.PythonEnvironment+pythonEnvironmentNamespaces :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm (Util.ModuleNames Syntax.DottedName)+pythonEnvironmentNamespaces x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+        Core.projectionFieldName = (Core.Name "namespaces")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the nullaryBindings field of hydra.python.environment.PythonEnvironment+pythonEnvironmentNullaryBindings :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm (S.Set Core.Name)+pythonEnvironmentNullaryBindings x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+        Core.projectionFieldName = (Core.Name "nullaryBindings")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the skipCasts field of hydra.python.environment.PythonEnvironment+pythonEnvironmentSkipCasts :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm Bool+pythonEnvironmentSkipCasts x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+        Core.projectionFieldName = (Core.Name "skipCasts")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the version field of hydra.python.environment.PythonEnvironment+pythonEnvironmentVersion :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm Environment.PythonVersion+pythonEnvironmentVersion x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+        Core.projectionFieldName = (Core.Name "version")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the boundTypeVariables field of hydra.python.environment.PythonEnvironment+pythonEnvironmentWithBoundTypeVariables :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm ([Core.Name], (M.Map Core.Name Syntax.Name)) -> Typed.TypedTerm Environment.PythonEnvironment+pythonEnvironmentWithBoundTypeVariables original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "boundTypeVariables"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "graph")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "nullaryBindings"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "nullaryBindings")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "version"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "version")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "skipCasts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "skipCasts")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "inlineVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "inlineVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the graph field of hydra.python.environment.PythonEnvironment+pythonEnvironmentWithGraph :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Environment.PythonEnvironment+pythonEnvironmentWithGraph original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "boundTypeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "boundTypeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "nullaryBindings"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "nullaryBindings")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "version"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "version")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "skipCasts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "skipCasts")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "inlineVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "inlineVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the inlineVariables field of hydra.python.environment.PythonEnvironment+pythonEnvironmentWithInlineVariables :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.PythonEnvironment+pythonEnvironmentWithInlineVariables original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "boundTypeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "boundTypeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "graph")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "nullaryBindings"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "nullaryBindings")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "version"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "version")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "skipCasts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "skipCasts")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "inlineVariables"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the namespaces field of hydra.python.environment.PythonEnvironment+pythonEnvironmentWithNamespaces :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm (Util.ModuleNames Syntax.DottedName) -> Typed.TypedTerm Environment.PythonEnvironment+pythonEnvironmentWithNamespaces original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "boundTypeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "boundTypeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "graph")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "nullaryBindings"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "nullaryBindings")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "version"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "version")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "skipCasts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "skipCasts")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "inlineVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "inlineVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the nullaryBindings field of hydra.python.environment.PythonEnvironment+pythonEnvironmentWithNullaryBindings :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.PythonEnvironment+pythonEnvironmentWithNullaryBindings original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "boundTypeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "boundTypeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "graph")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "nullaryBindings"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "version"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "version")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "skipCasts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "skipCasts")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "inlineVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "inlineVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the skipCasts field of hydra.python.environment.PythonEnvironment+pythonEnvironmentWithSkipCasts :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonEnvironment+pythonEnvironmentWithSkipCasts original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "boundTypeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "boundTypeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "graph")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "nullaryBindings"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "nullaryBindings")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "version"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "version")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "skipCasts"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "inlineVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "inlineVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the version field of hydra.python.environment.PythonEnvironment+pythonEnvironmentWithVersion :: Typed.TypedTerm Environment.PythonEnvironment -> Typed.TypedTerm Environment.PythonVersion -> Typed.TypedTerm Environment.PythonEnvironment+pythonEnvironmentWithVersion original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "boundTypeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "boundTypeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "graph"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "graph")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "nullaryBindings"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "nullaryBindings")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "version"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "skipCasts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "skipCasts")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "inlineVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonEnvironment"),+              Core.projectionFieldName = (Core.Name "inlineVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.environment.PythonModuleMetadata+pythonModuleMetadata :: Typed.TypedTerm (Util.ModuleNames Syntax.DottedName) -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadata namespaces typeVariables usesAnnotated usesCallable usesCast usesLruCache usesTypeAlias usesDataclass usesDecimal usesEither usesEnum usesFrozenDict usesFrozenList usesFrozenSet usesGeneric usesJust usesLeft usesMaybe usesName usesNode usesNothing usesRight usesTypeVar =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Typed.unTypedTerm namespaces)},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Typed.unTypedTerm typeVariables)},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Typed.unTypedTerm usesAnnotated)},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Typed.unTypedTerm usesCallable)},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Typed.unTypedTerm usesCast)},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Typed.unTypedTerm usesLruCache)},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Typed.unTypedTerm usesTypeAlias)},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Typed.unTypedTerm usesDataclass)},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Typed.unTypedTerm usesDecimal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Typed.unTypedTerm usesEither)},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Typed.unTypedTerm usesEnum)},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Typed.unTypedTerm usesFrozenDict)},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Typed.unTypedTerm usesFrozenList)},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Typed.unTypedTerm usesFrozenSet)},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Typed.unTypedTerm usesGeneric)},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Typed.unTypedTerm usesJust)},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Typed.unTypedTerm usesLeft)},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Typed.unTypedTerm usesMaybe)},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Typed.unTypedTerm usesName)},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Typed.unTypedTerm usesNode)},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Typed.unTypedTerm usesNothing)},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Typed.unTypedTerm usesRight)},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Typed.unTypedTerm usesTypeVar)}]}))++-- | DSL accessor for the namespaces field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataNamespaces :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm (Util.ModuleNames Syntax.DottedName)+pythonModuleMetadataNamespaces x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "namespaces")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeVariables field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataTypeVariables :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm (S.Set Core.Name)+pythonModuleMetadataTypeVariables x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "typeVariables")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesAnnotated field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesAnnotated :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesAnnotated x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesAnnotated")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesCallable field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesCallable :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesCallable x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesCallable")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesCast field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesCast :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesCast x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesCast")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesDataclass field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesDataclass :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesDataclass x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesDataclass")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesDecimal field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesDecimal :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesDecimal x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesDecimal")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesEither field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesEither :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesEither x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesEither")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesEnum field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesEnum :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesEnum x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesEnum")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesFrozenDict field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesFrozenDict :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesFrozenDict x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesFrozenList field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesFrozenList :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesFrozenList x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesFrozenList")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesFrozenSet field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesFrozenSet :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesFrozenSet x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesGeneric field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesGeneric :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesGeneric x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesGeneric")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesJust field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesJust :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesJust x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesJust")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesLeft field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesLeft :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesLeft x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesLeft")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesLruCache field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesLruCache :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesLruCache x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesLruCache")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesMaybe field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesMaybe :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesMaybe x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesMaybe")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesName field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesName :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesName")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesNode field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesNode :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesNode x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesNode")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesNothing field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesNothing :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesNothing x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesNothing")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesRight field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesRight :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesRight x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesRight")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesTypeAlias field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesTypeAlias :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesTypeAlias x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the usesTypeVar field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataUsesTypeVar :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool+pythonModuleMetadataUsesTypeVar x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+        Core.projectionFieldName = (Core.Name "usesTypeVar")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the namespaces field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithNamespaces :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm (Util.ModuleNames Syntax.DottedName) -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithNamespaces original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeVariables field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithTypeVariables :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm (S.Set Core.Name) -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithTypeVariables original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesAnnotated field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesAnnotated :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesAnnotated original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesCallable field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesCallable :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesCallable original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesCast field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesCast :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesCast original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesDataclass field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesDataclass :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesDataclass original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesDecimal field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesDecimal :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesDecimal original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesEither field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesEither :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesEither original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesEnum field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesEnum :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesEnum original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesFrozenDict field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesFrozenDict :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesFrozenDict original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesFrozenList field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesFrozenList :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesFrozenList original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesFrozenSet field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesFrozenSet :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesFrozenSet original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesGeneric field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesGeneric :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesGeneric original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesJust field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesJust :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesJust original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesLeft field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesLeft :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesLeft original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesLruCache field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesLruCache :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesLruCache original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesMaybe field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesMaybe :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesMaybe original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesName field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesName :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesNode field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesNode :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesNode original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesNothing field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesNothing :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesNothing original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesRight field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesRight :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesRight original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesTypeAlias field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesTypeAlias :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesTypeAlias original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeVar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the usesTypeVar field of hydra.python.environment.PythonModuleMetadata+pythonModuleMetadataWithUsesTypeVar :: Typed.TypedTerm Environment.PythonModuleMetadata -> Typed.TypedTerm Bool -> Typed.TypedTerm Environment.PythonModuleMetadata+pythonModuleMetadataWithUsesTypeVar original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "namespaces"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "namespaces")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeVariables"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "typeVariables")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesAnnotated"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesAnnotated")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCallable"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCallable")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesCast"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesCast")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLruCache"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLruCache")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeAlias"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesTypeAlias")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDataclass"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDataclass")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesDecimal"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesDecimal")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEither"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEither")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesEnum"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesEnum")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenDict"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenDict")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenList"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenList")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesFrozenSet"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesFrozenSet")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesGeneric"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesGeneric")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesJust"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesJust")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesLeft"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesLeft")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesMaybe"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesMaybe")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNode"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNode")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesNothing"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesNothing")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesRight"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.environment.PythonModuleMetadata"),+              Core.projectionFieldName = (Core.Name "usesRight")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "usesTypeVar"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the python310 variant of hydra.python.environment.PythonVersion+pythonVersionPython310 :: Typed.TypedTerm Environment.PythonVersion+pythonVersionPython310 =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.environment.PythonVersion"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "python310"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the python312 variant of hydra.python.environment.PythonVersion+pythonVersionPython312 :: Typed.TypedTerm Environment.PythonVersion+pythonVersionPython312 =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.environment.PythonVersion"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "python312"),+        Core.fieldTerm = Core.TermUnit}}))
+ src/main/haskell/Hydra/Dsl/Python/Syntax.hs view
@@ -0,0 +1,10946 @@+-- Note: this is an automatically generated file. Do not edit.++-- | DSL functions for hydra.python.syntax++module Hydra.Dsl.Python.Syntax where++import qualified Hydra.Core as Core+import qualified Hydra.Dsl.Core as DslCore+import qualified Hydra.Python.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 star variant of hydra.python.syntax.AnnotatedRhs+annotatedRhsStar :: Typed.TypedTerm [Syntax.StarExpression] -> Typed.TypedTerm Syntax.AnnotatedRhs+annotatedRhsStar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AnnotatedRhs"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "star"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the yield variant of hydra.python.syntax.AnnotatedRhs+annotatedRhsYield :: Typed.TypedTerm Syntax.YieldExpression -> Typed.TypedTerm Syntax.AnnotatedRhs+annotatedRhsYield x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AnnotatedRhs"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "yield"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.AnnotatedStatement+annotatedStatement :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.AnnotatedStatement+annotatedStatement comment statement =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AnnotatedStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "comment"),+          Core.fieldTerm = (Typed.unTypedTerm comment)},+        Core.Field {+          Core.fieldName = (Core.Name "statement"),+          Core.fieldTerm = (Typed.unTypedTerm statement)}]}))++-- | DSL accessor for the comment field of hydra.python.syntax.AnnotatedStatement+annotatedStatementComment :: Typed.TypedTerm Syntax.AnnotatedStatement -> Typed.TypedTerm String+annotatedStatementComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AnnotatedStatement"),+        Core.projectionFieldName = (Core.Name "comment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the statement field of hydra.python.syntax.AnnotatedStatement+annotatedStatementStatement :: Typed.TypedTerm Syntax.AnnotatedStatement -> Typed.TypedTerm Syntax.Statement+annotatedStatementStatement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AnnotatedStatement"),+        Core.projectionFieldName = (Core.Name "statement")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the comment field of hydra.python.syntax.AnnotatedStatement+annotatedStatementWithComment :: Typed.TypedTerm Syntax.AnnotatedStatement -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.AnnotatedStatement+annotatedStatementWithComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AnnotatedStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "comment"),+          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.python.syntax.AnnotatedStatement"),+              Core.projectionFieldName = (Core.Name "statement")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the statement field of hydra.python.syntax.AnnotatedStatement+annotatedStatementWithStatement :: Typed.TypedTerm Syntax.AnnotatedStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.AnnotatedStatement+annotatedStatementWithStatement original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AnnotatedStatement"),+      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.python.syntax.AnnotatedStatement"),+              Core.projectionFieldName = (Core.Name "comment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "statement"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.python.syntax.Annotation wrapper+annotation :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Annotation+annotation x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Annotation"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.Args+args :: Typed.TypedTerm [Syntax.PosArg] -> Typed.TypedTerm [Syntax.KwargOrStarred] -> Typed.TypedTerm [Syntax.KwargOrDoubleStarred] -> Typed.TypedTerm Syntax.Args+args positional kwargOrStarred kwargOrDoubleStarred =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Args"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "positional"),+          Core.fieldTerm = (Typed.unTypedTerm positional)},+        Core.Field {+          Core.fieldName = (Core.Name "kwargOrStarred"),+          Core.fieldTerm = (Typed.unTypedTerm kwargOrStarred)},+        Core.Field {+          Core.fieldName = (Core.Name "kwargOrDoubleStarred"),+          Core.fieldTerm = (Typed.unTypedTerm kwargOrDoubleStarred)}]}))++-- | DSL accessor for the kwargOrDoubleStarred field of hydra.python.syntax.Args+argsKwargOrDoubleStarred :: Typed.TypedTerm Syntax.Args -> Typed.TypedTerm [Syntax.KwargOrDoubleStarred]+argsKwargOrDoubleStarred x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+        Core.projectionFieldName = (Core.Name "kwargOrDoubleStarred")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the kwargOrStarred field of hydra.python.syntax.Args+argsKwargOrStarred :: Typed.TypedTerm Syntax.Args -> Typed.TypedTerm [Syntax.KwargOrStarred]+argsKwargOrStarred x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+        Core.projectionFieldName = (Core.Name "kwargOrStarred")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the positional field of hydra.python.syntax.Args+argsPositional :: Typed.TypedTerm Syntax.Args -> Typed.TypedTerm [Syntax.PosArg]+argsPositional x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+        Core.projectionFieldName = (Core.Name "positional")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the kwargOrDoubleStarred field of hydra.python.syntax.Args+argsWithKwargOrDoubleStarred :: Typed.TypedTerm Syntax.Args -> Typed.TypedTerm [Syntax.KwargOrDoubleStarred] -> Typed.TypedTerm Syntax.Args+argsWithKwargOrDoubleStarred original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Args"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "positional"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+              Core.projectionFieldName = (Core.Name "positional")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "kwargOrStarred"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+              Core.projectionFieldName = (Core.Name "kwargOrStarred")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "kwargOrDoubleStarred"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the kwargOrStarred field of hydra.python.syntax.Args+argsWithKwargOrStarred :: Typed.TypedTerm Syntax.Args -> Typed.TypedTerm [Syntax.KwargOrStarred] -> Typed.TypedTerm Syntax.Args+argsWithKwargOrStarred original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Args"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "positional"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+              Core.projectionFieldName = (Core.Name "positional")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "kwargOrStarred"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "kwargOrDoubleStarred"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+              Core.projectionFieldName = (Core.Name "kwargOrDoubleStarred")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the positional field of hydra.python.syntax.Args+argsWithPositional :: Typed.TypedTerm Syntax.Args -> Typed.TypedTerm [Syntax.PosArg] -> Typed.TypedTerm Syntax.Args+argsWithPositional original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Args"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "positional"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "kwargOrStarred"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+              Core.projectionFieldName = (Core.Name "kwargOrStarred")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "kwargOrDoubleStarred"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Args"),+              Core.projectionFieldName = (Core.Name "kwargOrDoubleStarred")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.AsPattern+asPattern :: Typed.TypedTerm Syntax.OrPattern -> Typed.TypedTerm Syntax.PatternCaptureTarget -> Typed.TypedTerm Syntax.AsPattern+asPattern pattern as =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AsPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "pattern"),+          Core.fieldTerm = (Typed.unTypedTerm pattern)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm as)}]}))++-- | DSL accessor for the as field of hydra.python.syntax.AsPattern+asPatternAs :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.PatternCaptureTarget+asPatternAs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AsPattern"),+        Core.projectionFieldName = (Core.Name "as")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the pattern field of hydra.python.syntax.AsPattern+asPatternPattern :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.OrPattern+asPatternPattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AsPattern"),+        Core.projectionFieldName = (Core.Name "pattern")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the as field of hydra.python.syntax.AsPattern+asPatternWithAs :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.PatternCaptureTarget -> Typed.TypedTerm Syntax.AsPattern+asPatternWithAs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AsPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "pattern"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.AsPattern"),+              Core.projectionFieldName = (Core.Name "pattern")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the pattern field of hydra.python.syntax.AsPattern+asPatternWithPattern :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.OrPattern -> Typed.TypedTerm Syntax.AsPattern+asPatternWithPattern original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AsPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "pattern"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.AsPattern"),+              Core.projectionFieldName = (Core.Name "as")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.AssertStatement+assertStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.AssertStatement+assertStatement expression1 expression2 =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AssertStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression1"),+          Core.fieldTerm = (Typed.unTypedTerm expression1)},+        Core.Field {+          Core.fieldName = (Core.Name "expression2"),+          Core.fieldTerm = (Typed.unTypedTerm expression2)}]}))++-- | DSL accessor for the expression1 field of hydra.python.syntax.AssertStatement+assertStatementExpression1 :: Typed.TypedTerm Syntax.AssertStatement -> Typed.TypedTerm Syntax.Expression+assertStatementExpression1 x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AssertStatement"),+        Core.projectionFieldName = (Core.Name "expression1")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the expression2 field of hydra.python.syntax.AssertStatement+assertStatementExpression2 :: Typed.TypedTerm Syntax.AssertStatement -> Typed.TypedTerm (Maybe Syntax.Expression)+assertStatementExpression2 x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AssertStatement"),+        Core.projectionFieldName = (Core.Name "expression2")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression1 field of hydra.python.syntax.AssertStatement+assertStatementWithExpression1 :: Typed.TypedTerm Syntax.AssertStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssertStatement+assertStatementWithExpression1 original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AssertStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression1"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "expression2"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.AssertStatement"),+              Core.projectionFieldName = (Core.Name "expression2")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the expression2 field of hydra.python.syntax.AssertStatement+assertStatementWithExpression2 :: Typed.TypedTerm Syntax.AssertStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.AssertStatement+assertStatementWithExpression2 original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AssertStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression1"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.AssertStatement"),+              Core.projectionFieldName = (Core.Name "expression1")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expression2"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the aug variant of hydra.python.syntax.Assignment+assignmentAug :: Typed.TypedTerm Syntax.AugAssignment -> Typed.TypedTerm Syntax.Assignment+assignmentAug x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Assignment"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "aug"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.AssignmentExpression+assignmentExpression :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentExpression+assignmentExpression name expression =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AssignmentExpression"),+      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.python.syntax.AssignmentExpression+assignmentExpressionExpression :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression+assignmentExpressionExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AssignmentExpression"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.AssignmentExpression+assignmentExpressionName :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Name+assignmentExpressionName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AssignmentExpression"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.python.syntax.AssignmentExpression+assignmentExpressionWithExpression :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentExpression+assignmentExpressionWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AssignmentExpression"),+      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.python.syntax.AssignmentExpression"),+              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.python.syntax.AssignmentExpression+assignmentExpressionWithName :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.AssignmentExpression+assignmentExpressionWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AssignmentExpression"),+      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.python.syntax.AssignmentExpression"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the typed variant of hydra.python.syntax.Assignment+assignmentTyped :: Typed.TypedTerm Syntax.TypedAssignment -> Typed.TypedTerm Syntax.Assignment+assignmentTyped x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Assignment"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "typed"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the untyped variant of hydra.python.syntax.Assignment+assignmentUntyped :: Typed.TypedTerm Syntax.UntypedAssignment -> Typed.TypedTerm Syntax.Assignment+assignmentUntyped x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Assignment"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "untyped"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the dict variant of hydra.python.syntax.Atom+atomDict :: Typed.TypedTerm Syntax.Dict -> Typed.TypedTerm Syntax.Atom+atomDict x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "dict"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the dictcomp variant of hydra.python.syntax.Atom+atomDictcomp :: Typed.TypedTerm Syntax.Dictcomp -> Typed.TypedTerm Syntax.Atom+atomDictcomp x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "dictcomp"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the ellipsis variant of hydra.python.syntax.Atom+atomEllipsis :: Typed.TypedTerm Syntax.Atom+atomEllipsis =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "ellipsis"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the false variant of hydra.python.syntax.Atom+atomFalse :: Typed.TypedTerm Syntax.Atom+atomFalse =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "false"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the genexp variant of hydra.python.syntax.Atom+atomGenexp :: Typed.TypedTerm Syntax.Genexp -> Typed.TypedTerm Syntax.Atom+atomGenexp x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "genexp"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the group variant of hydra.python.syntax.Atom+atomGroup :: Typed.TypedTerm Syntax.Group -> Typed.TypedTerm Syntax.Atom+atomGroup x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "group"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the list variant of hydra.python.syntax.Atom+atomList :: Typed.TypedTerm Syntax.List -> Typed.TypedTerm Syntax.Atom+atomList x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "list"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the listcomp variant of hydra.python.syntax.Atom+atomListcomp :: Typed.TypedTerm Syntax.Listcomp -> Typed.TypedTerm Syntax.Atom+atomListcomp x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "listcomp"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the name variant of hydra.python.syntax.Atom+atomName :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Atom+atomName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the none variant of hydra.python.syntax.Atom+atomNone :: Typed.TypedTerm Syntax.Atom+atomNone =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "none"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the number variant of hydra.python.syntax.Atom+atomNumber :: Typed.TypedTerm Syntax.Number -> Typed.TypedTerm Syntax.Atom+atomNumber x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "number"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the set variant of hydra.python.syntax.Atom+atomSet :: Typed.TypedTerm Syntax.Set -> Typed.TypedTerm Syntax.Atom+atomSet x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "set"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the setcomp variant of hydra.python.syntax.Atom+atomSetcomp :: Typed.TypedTerm Syntax.Setcomp -> Typed.TypedTerm Syntax.Atom+atomSetcomp x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "setcomp"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the string variant of hydra.python.syntax.Atom+atomString :: Typed.TypedTerm Syntax.String_ -> Typed.TypedTerm Syntax.Atom+atomString x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "string"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the true variant of hydra.python.syntax.Atom+atomTrue :: Typed.TypedTerm Syntax.Atom+atomTrue =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "true"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the tuple variant of hydra.python.syntax.Atom+atomTuple :: Typed.TypedTerm Syntax.Tuple -> Typed.TypedTerm Syntax.Atom+atomTuple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Atom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "tuple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.Attribute wrapper+attribute :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.Attribute+attribute x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Attribute"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the ampersandEqual variant of hydra.python.syntax.AugAssign+augAssignAmpersandEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignAmpersandEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "ampersandEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the atEqual variant of hydra.python.syntax.AugAssign+augAssignAtEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignAtEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "atEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the barEqual variant of hydra.python.syntax.AugAssign+augAssignBarEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignBarEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "barEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the caretEqual variant of hydra.python.syntax.AugAssign+augAssignCaretEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignCaretEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "caretEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the doubleSlashEqual variant of hydra.python.syntax.AugAssign+augAssignDoubleSlashEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignDoubleSlashEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "doubleSlashEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the leftShiftEqual variant of hydra.python.syntax.AugAssign+augAssignLeftShiftEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignLeftShiftEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "leftShiftEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the minusEqual variant of hydra.python.syntax.AugAssign+augAssignMinusEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignMinusEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "minusEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the percentEqual variant of hydra.python.syntax.AugAssign+augAssignPercentEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignPercentEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "percentEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the plusEqual variant of hydra.python.syntax.AugAssign+augAssignPlusEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignPlusEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "plusEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the rightShiftEqual variant of hydra.python.syntax.AugAssign+augAssignRightShiftEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignRightShiftEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "rightShiftEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the slashEqual variant of hydra.python.syntax.AugAssign+augAssignSlashEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignSlashEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slashEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the starStarEqual variant of hydra.python.syntax.AugAssign+augAssignStarStarEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignStarStarEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starStarEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the timesEqual variant of hydra.python.syntax.AugAssign+augAssignTimesEqual :: Typed.TypedTerm Syntax.AugAssign+augAssignTimesEqual =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.AugAssign"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "timesEqual"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.python.syntax.AugAssignment+augAssignment :: Typed.TypedTerm Syntax.SingleTarget -> Typed.TypedTerm Syntax.AugAssign -> Typed.TypedTerm Syntax.AnnotatedRhs -> Typed.TypedTerm Syntax.AugAssignment+augAssignment lhs augassign rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "augassign"),+          Core.fieldTerm = (Typed.unTypedTerm augassign)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the augassign field of hydra.python.syntax.AugAssignment+augAssignmentAugassign :: Typed.TypedTerm Syntax.AugAssignment -> Typed.TypedTerm Syntax.AugAssign+augAssignmentAugassign x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+        Core.projectionFieldName = (Core.Name "augassign")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the lhs field of hydra.python.syntax.AugAssignment+augAssignmentLhs :: Typed.TypedTerm Syntax.AugAssignment -> Typed.TypedTerm Syntax.SingleTarget+augAssignmentLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.AugAssignment+augAssignmentRhs :: Typed.TypedTerm Syntax.AugAssignment -> Typed.TypedTerm Syntax.AnnotatedRhs+augAssignmentRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the augassign field of hydra.python.syntax.AugAssignment+augAssignmentWithAugassign :: Typed.TypedTerm Syntax.AugAssignment -> Typed.TypedTerm Syntax.AugAssign -> Typed.TypedTerm Syntax.AugAssignment+augAssignmentWithAugassign original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+      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.python.syntax.AugAssignment"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "augassign"),+          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.python.syntax.AugAssignment"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the lhs field of hydra.python.syntax.AugAssignment+augAssignmentWithLhs :: Typed.TypedTerm Syntax.AugAssignment -> Typed.TypedTerm Syntax.SingleTarget -> Typed.TypedTerm Syntax.AugAssignment+augAssignmentWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "augassign"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+              Core.projectionFieldName = (Core.Name "augassign")})),+            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.python.syntax.AugAssignment"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.AugAssignment+augAssignmentWithRhs :: Typed.TypedTerm Syntax.AugAssignment -> Typed.TypedTerm Syntax.AnnotatedRhs -> Typed.TypedTerm Syntax.AugAssignment+augAssignmentWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+      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.python.syntax.AugAssignment"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "augassign"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.AugAssignment"),+              Core.projectionFieldName = (Core.Name "augassign")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.AwaitPrimary+awaitPrimary :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.AwaitPrimary+awaitPrimary await primary =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AwaitPrimary"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "await"),+          Core.fieldTerm = (Typed.unTypedTerm await)},+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm primary)}]}))++-- | DSL accessor for the await field of hydra.python.syntax.AwaitPrimary+awaitPrimaryAwait :: Typed.TypedTerm Syntax.AwaitPrimary -> Typed.TypedTerm Bool+awaitPrimaryAwait x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AwaitPrimary"),+        Core.projectionFieldName = (Core.Name "await")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the primary field of hydra.python.syntax.AwaitPrimary+awaitPrimaryPrimary :: Typed.TypedTerm Syntax.AwaitPrimary -> Typed.TypedTerm Syntax.Primary+awaitPrimaryPrimary x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.AwaitPrimary"),+        Core.projectionFieldName = (Core.Name "primary")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the await field of hydra.python.syntax.AwaitPrimary+awaitPrimaryWithAwait :: Typed.TypedTerm Syntax.AwaitPrimary -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.AwaitPrimary+awaitPrimaryWithAwait original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AwaitPrimary"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "await"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.AwaitPrimary"),+              Core.projectionFieldName = (Core.Name "primary")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the primary field of hydra.python.syntax.AwaitPrimary+awaitPrimaryWithPrimary :: Typed.TypedTerm Syntax.AwaitPrimary -> Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.AwaitPrimary+awaitPrimaryWithPrimary original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.AwaitPrimary"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "await"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.AwaitPrimary"),+              Core.projectionFieldName = (Core.Name "await")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.BitwiseAnd+bitwiseAnd :: Typed.TypedTerm (Maybe Syntax.BitwiseAnd) -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.BitwiseAnd+bitwiseAnd lhs rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseAnd"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.BitwiseAnd+bitwiseAndLhs :: Typed.TypedTerm Syntax.BitwiseAnd -> Typed.TypedTerm (Maybe Syntax.BitwiseAnd)+bitwiseAndLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseAnd"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.BitwiseAnd+bitwiseAndRhs :: Typed.TypedTerm Syntax.BitwiseAnd -> Typed.TypedTerm Syntax.ShiftExpression+bitwiseAndRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseAnd"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.BitwiseAnd+bitwiseAndWithLhs :: Typed.TypedTerm Syntax.BitwiseAnd -> Typed.TypedTerm (Maybe Syntax.BitwiseAnd) -> Typed.TypedTerm Syntax.BitwiseAnd+bitwiseAndWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseAnd"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseAnd"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.BitwiseAnd+bitwiseAndWithRhs :: Typed.TypedTerm Syntax.BitwiseAnd -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.BitwiseAnd+bitwiseAndWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseAnd"),+      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.python.syntax.BitwiseAnd"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.BitwiseOr+bitwiseOr :: Typed.TypedTerm (Maybe Syntax.BitwiseOr) -> Typed.TypedTerm Syntax.BitwiseXor -> Typed.TypedTerm Syntax.BitwiseOr+bitwiseOr lhs rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseOr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.BitwiseOr+bitwiseOrLhs :: Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm (Maybe Syntax.BitwiseOr)+bitwiseOrLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseOr"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.BitwiseOr+bitwiseOrRhs :: Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm Syntax.BitwiseXor+bitwiseOrRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseOr"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.BitwiseOr+bitwiseOrWithLhs :: Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm (Maybe Syntax.BitwiseOr) -> Typed.TypedTerm Syntax.BitwiseOr+bitwiseOrWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseOr"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseOr"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.BitwiseOr+bitwiseOrWithRhs :: Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm Syntax.BitwiseXor -> Typed.TypedTerm Syntax.BitwiseOr+bitwiseOrWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseOr"),+      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.python.syntax.BitwiseOr"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.BitwiseXor+bitwiseXor :: Typed.TypedTerm (Maybe Syntax.BitwiseXor) -> Typed.TypedTerm Syntax.BitwiseAnd -> Typed.TypedTerm Syntax.BitwiseXor+bitwiseXor lhs rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseXor"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.BitwiseXor+bitwiseXorLhs :: Typed.TypedTerm Syntax.BitwiseXor -> Typed.TypedTerm (Maybe Syntax.BitwiseXor)+bitwiseXorLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseXor"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.BitwiseXor+bitwiseXorRhs :: Typed.TypedTerm Syntax.BitwiseXor -> Typed.TypedTerm Syntax.BitwiseAnd+bitwiseXorRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseXor"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.BitwiseXor+bitwiseXorWithLhs :: Typed.TypedTerm Syntax.BitwiseXor -> Typed.TypedTerm (Maybe Syntax.BitwiseXor) -> Typed.TypedTerm Syntax.BitwiseXor+bitwiseXorWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseXor"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.BitwiseXor"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.BitwiseXor+bitwiseXorWithRhs :: Typed.TypedTerm Syntax.BitwiseXor -> Typed.TypedTerm Syntax.BitwiseAnd -> Typed.TypedTerm Syntax.BitwiseXor+bitwiseXorWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.BitwiseXor"),+      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.python.syntax.BitwiseXor"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the indented variant of hydra.python.syntax.Block+blockIndented :: Typed.TypedTerm [[Syntax.Statement]] -> Typed.TypedTerm Syntax.Block+blockIndented x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Block"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "indented"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.Block+blockSimple :: Typed.TypedTerm [Syntax.SimpleStatement] -> Typed.TypedTerm Syntax.Block+blockSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Block"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.CapturePattern wrapper+capturePattern :: Typed.TypedTerm Syntax.PatternCaptureTarget -> Typed.TypedTerm Syntax.CapturePattern+capturePattern x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.CapturePattern"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.CaseBlock+caseBlock :: Typed.TypedTerm Syntax.Patterns -> Typed.TypedTerm (Maybe Syntax.Guard) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.CaseBlock+caseBlock patterns guard body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "patterns"),+          Core.fieldTerm = (Typed.unTypedTerm patterns)},+        Core.Field {+          Core.fieldName = (Core.Name "guard"),+          Core.fieldTerm = (Typed.unTypedTerm guard)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.CaseBlock+caseBlockBody :: Typed.TypedTerm Syntax.CaseBlock -> Typed.TypedTerm Syntax.Block+caseBlockBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the guard field of hydra.python.syntax.CaseBlock+caseBlockGuard :: Typed.TypedTerm Syntax.CaseBlock -> Typed.TypedTerm (Maybe Syntax.Guard)+caseBlockGuard x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+        Core.projectionFieldName = (Core.Name "guard")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the patterns field of hydra.python.syntax.CaseBlock+caseBlockPatterns :: Typed.TypedTerm Syntax.CaseBlock -> Typed.TypedTerm Syntax.Patterns+caseBlockPatterns x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+        Core.projectionFieldName = (Core.Name "patterns")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.python.syntax.CaseBlock+caseBlockWithBody :: Typed.TypedTerm Syntax.CaseBlock -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.CaseBlock+caseBlockWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "patterns"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+              Core.projectionFieldName = (Core.Name "patterns")})),+            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.python.syntax.CaseBlock"),+              Core.projectionFieldName = (Core.Name "guard")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the guard field of hydra.python.syntax.CaseBlock+caseBlockWithGuard :: Typed.TypedTerm Syntax.CaseBlock -> Typed.TypedTerm (Maybe Syntax.Guard) -> Typed.TypedTerm Syntax.CaseBlock+caseBlockWithGuard original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "patterns"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+              Core.projectionFieldName = (Core.Name "patterns")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "guard"),+          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.python.syntax.CaseBlock"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the patterns field of hydra.python.syntax.CaseBlock+caseBlockWithPatterns :: Typed.TypedTerm Syntax.CaseBlock -> Typed.TypedTerm Syntax.Patterns -> Typed.TypedTerm Syntax.CaseBlock+caseBlockWithPatterns original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CaseBlock"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "patterns"),+          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.python.syntax.CaseBlock"),+              Core.projectionFieldName = (Core.Name "guard")})),+            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.python.syntax.CaseBlock"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.ClassDefinition+classDefinition :: Typed.TypedTerm (Maybe Syntax.Decorators) -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm (Maybe Syntax.Args) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ClassDefinition+classDefinition decorators name typeParams arguments body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          Core.fieldTerm = (Typed.unTypedTerm decorators)},+        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 "arguments"),+          Core.fieldTerm = (Typed.unTypedTerm arguments)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the arguments field of hydra.python.syntax.ClassDefinition+classDefinitionArguments :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm (Maybe Syntax.Args)+classDefinitionArguments x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+        Core.projectionFieldName = (Core.Name "arguments")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body field of hydra.python.syntax.ClassDefinition+classDefinitionBody :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm Syntax.Block+classDefinitionBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the decorators field of hydra.python.syntax.ClassDefinition+classDefinitionDecorators :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm (Maybe Syntax.Decorators)+classDefinitionDecorators x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+        Core.projectionFieldName = (Core.Name "decorators")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.ClassDefinition+classDefinitionName :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm Syntax.Name+classDefinitionName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeParams field of hydra.python.syntax.ClassDefinition+classDefinitionTypeParams :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm [Syntax.TypeParameter]+classDefinitionTypeParams x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+        Core.projectionFieldName = (Core.Name "typeParams")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the arguments field of hydra.python.syntax.ClassDefinition+classDefinitionWithArguments :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm (Maybe Syntax.Args) -> Typed.TypedTerm Syntax.ClassDefinition+classDefinitionWithArguments original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "decorators")})),+            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.python.syntax.ClassDefinition"),+              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.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the body field of hydra.python.syntax.ClassDefinition+classDefinitionWithBody :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ClassDefinition+classDefinitionWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "decorators")})),+            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.python.syntax.ClassDefinition"),+              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.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "arguments")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the decorators field of hydra.python.syntax.ClassDefinition+classDefinitionWithDecorators :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm (Maybe Syntax.Decorators) -> Typed.TypedTerm Syntax.ClassDefinition+classDefinitionWithDecorators original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          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.python.syntax.ClassDefinition"),+              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.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "arguments")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the name field of hydra.python.syntax.ClassDefinition+classDefinitionWithName :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.ClassDefinition+classDefinitionWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "decorators")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        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.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "arguments")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeParams field of hydra.python.syntax.ClassDefinition+classDefinitionWithTypeParams :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.ClassDefinition+classDefinitionWithTypeParams original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "decorators")})),+            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.python.syntax.ClassDefinition"),+              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 "arguments"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "arguments")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassDefinition"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.ClassPattern+classPattern :: Typed.TypedTerm Syntax.NameOrAttribute -> Typed.TypedTerm (Maybe Syntax.PositionalPatterns) -> Typed.TypedTerm (Maybe Syntax.KeywordPatterns) -> Typed.TypedTerm Syntax.ClassPattern+classPattern nameOrAttribute positionalPatterns keywordPatterns =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "nameOrAttribute"),+          Core.fieldTerm = (Typed.unTypedTerm nameOrAttribute)},+        Core.Field {+          Core.fieldName = (Core.Name "positionalPatterns"),+          Core.fieldTerm = (Typed.unTypedTerm positionalPatterns)},+        Core.Field {+          Core.fieldName = (Core.Name "keywordPatterns"),+          Core.fieldTerm = (Typed.unTypedTerm keywordPatterns)}]}))++-- | DSL accessor for the keywordPatterns field of hydra.python.syntax.ClassPattern+classPatternKeywordPatterns :: Typed.TypedTerm Syntax.ClassPattern -> Typed.TypedTerm (Maybe Syntax.KeywordPatterns)+classPatternKeywordPatterns x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+        Core.projectionFieldName = (Core.Name "keywordPatterns")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the nameOrAttribute field of hydra.python.syntax.ClassPattern+classPatternNameOrAttribute :: Typed.TypedTerm Syntax.ClassPattern -> Typed.TypedTerm Syntax.NameOrAttribute+classPatternNameOrAttribute x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+        Core.projectionFieldName = (Core.Name "nameOrAttribute")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the positionalPatterns field of hydra.python.syntax.ClassPattern+classPatternPositionalPatterns :: Typed.TypedTerm Syntax.ClassPattern -> Typed.TypedTerm (Maybe Syntax.PositionalPatterns)+classPatternPositionalPatterns x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+        Core.projectionFieldName = (Core.Name "positionalPatterns")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the keywordPatterns field of hydra.python.syntax.ClassPattern+classPatternWithKeywordPatterns :: Typed.TypedTerm Syntax.ClassPattern -> Typed.TypedTerm (Maybe Syntax.KeywordPatterns) -> Typed.TypedTerm Syntax.ClassPattern+classPatternWithKeywordPatterns original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "nameOrAttribute"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+              Core.projectionFieldName = (Core.Name "nameOrAttribute")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "positionalPatterns"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+              Core.projectionFieldName = (Core.Name "positionalPatterns")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "keywordPatterns"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the nameOrAttribute field of hydra.python.syntax.ClassPattern+classPatternWithNameOrAttribute :: Typed.TypedTerm Syntax.ClassPattern -> Typed.TypedTerm Syntax.NameOrAttribute -> Typed.TypedTerm Syntax.ClassPattern+classPatternWithNameOrAttribute original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "nameOrAttribute"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "positionalPatterns"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+              Core.projectionFieldName = (Core.Name "positionalPatterns")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "keywordPatterns"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+              Core.projectionFieldName = (Core.Name "keywordPatterns")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the positionalPatterns field of hydra.python.syntax.ClassPattern+classPatternWithPositionalPatterns :: Typed.TypedTerm Syntax.ClassPattern -> Typed.TypedTerm (Maybe Syntax.PositionalPatterns) -> Typed.TypedTerm Syntax.ClassPattern+classPatternWithPositionalPatterns original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "nameOrAttribute"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+              Core.projectionFieldName = (Core.Name "nameOrAttribute")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "positionalPatterns"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "keywordPatterns"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ClassPattern"),+              Core.projectionFieldName = (Core.Name "keywordPatterns")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the capture variant of hydra.python.syntax.ClosedPattern+closedPatternCapture :: Typed.TypedTerm Syntax.CapturePattern -> Typed.TypedTerm Syntax.ClosedPattern+closedPatternCapture x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ClosedPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "capture"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the class variant of hydra.python.syntax.ClosedPattern+closedPatternClass :: Typed.TypedTerm Syntax.ClassPattern -> Typed.TypedTerm Syntax.ClosedPattern+closedPatternClass x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ClosedPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "class"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the group variant of hydra.python.syntax.ClosedPattern+closedPatternGroup :: Typed.TypedTerm Syntax.GroupPattern -> Typed.TypedTerm Syntax.ClosedPattern+closedPatternGroup x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ClosedPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "group"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the literal variant of hydra.python.syntax.ClosedPattern+closedPatternLiteral :: Typed.TypedTerm Syntax.LiteralExpression -> Typed.TypedTerm Syntax.ClosedPattern+closedPatternLiteral x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ClosedPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "literal"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the mapping variant of hydra.python.syntax.ClosedPattern+closedPatternMapping :: Typed.TypedTerm Syntax.MappingPattern -> Typed.TypedTerm Syntax.ClosedPattern+closedPatternMapping x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ClosedPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "mapping"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the sequence variant of hydra.python.syntax.ClosedPattern+closedPatternSequence :: Typed.TypedTerm Syntax.SequencePattern -> Typed.TypedTerm Syntax.ClosedPattern+closedPatternSequence x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ClosedPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "sequence"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the value variant of hydra.python.syntax.ClosedPattern+closedPatternValue :: Typed.TypedTerm Syntax.ValuePattern -> Typed.TypedTerm Syntax.ClosedPattern+closedPatternValue x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ClosedPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "value"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the wildcard variant of hydra.python.syntax.ClosedPattern+closedPatternWildcard :: Typed.TypedTerm Syntax.ClosedPattern+closedPatternWildcard =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ClosedPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "wildcard"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.python.syntax.CommaStarEtc+commaStarEtc :: Typed.TypedTerm [Syntax.ParamMaybeDefault] -> Typed.TypedTerm (Maybe Syntax.Keywords) -> Typed.TypedTerm Syntax.CommaStarEtc+commaStarEtc paramMaybeDefault keywords =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CommaStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramMaybeDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Typed.unTypedTerm keywords)}]}))++-- | DSL accessor for the keywords field of hydra.python.syntax.CommaStarEtc+commaStarEtcKeywords :: Typed.TypedTerm Syntax.CommaStarEtc -> Typed.TypedTerm (Maybe Syntax.Keywords)+commaStarEtcKeywords x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.CommaStarEtc"),+        Core.projectionFieldName = (Core.Name "keywords")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramMaybeDefault field of hydra.python.syntax.CommaStarEtc+commaStarEtcParamMaybeDefault :: Typed.TypedTerm Syntax.CommaStarEtc -> Typed.TypedTerm [Syntax.ParamMaybeDefault]+commaStarEtcParamMaybeDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.CommaStarEtc"),+        Core.projectionFieldName = (Core.Name "paramMaybeDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the keywords field of hydra.python.syntax.CommaStarEtc+commaStarEtcWithKeywords :: Typed.TypedTerm Syntax.CommaStarEtc -> Typed.TypedTerm (Maybe Syntax.Keywords) -> Typed.TypedTerm Syntax.CommaStarEtc+commaStarEtcWithKeywords original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CommaStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.CommaStarEtc"),+              Core.projectionFieldName = (Core.Name "paramMaybeDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the paramMaybeDefault field of hydra.python.syntax.CommaStarEtc+commaStarEtcWithParamMaybeDefault :: Typed.TypedTerm Syntax.CommaStarEtc -> Typed.TypedTerm [Syntax.ParamMaybeDefault] -> Typed.TypedTerm Syntax.CommaStarEtc+commaStarEtcWithParamMaybeDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CommaStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.CommaStarEtc"),+              Core.projectionFieldName = (Core.Name "keywords")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.CompareOpBitwiseOrPair+compareOpBitwiseOrPair :: Typed.TypedTerm Syntax.CompareOp -> Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm Syntax.CompareOpBitwiseOrPair+compareOpBitwiseOrPair operator rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Typed.unTypedTerm operator)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the operator field of hydra.python.syntax.CompareOpBitwiseOrPair+compareOpBitwiseOrPairOperator :: Typed.TypedTerm Syntax.CompareOpBitwiseOrPair -> Typed.TypedTerm Syntax.CompareOp+compareOpBitwiseOrPairOperator x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"),+        Core.projectionFieldName = (Core.Name "operator")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.CompareOpBitwiseOrPair+compareOpBitwiseOrPairRhs :: Typed.TypedTerm Syntax.CompareOpBitwiseOrPair -> Typed.TypedTerm Syntax.BitwiseOr+compareOpBitwiseOrPairRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the operator field of hydra.python.syntax.CompareOpBitwiseOrPair+compareOpBitwiseOrPairWithOperator :: Typed.TypedTerm Syntax.CompareOpBitwiseOrPair -> Typed.TypedTerm Syntax.CompareOp -> Typed.TypedTerm Syntax.CompareOpBitwiseOrPair+compareOpBitwiseOrPairWithOperator original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.CompareOpBitwiseOrPair+compareOpBitwiseOrPairWithRhs :: Typed.TypedTerm Syntax.CompareOpBitwiseOrPair -> Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm Syntax.CompareOpBitwiseOrPair+compareOpBitwiseOrPairWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"),+              Core.projectionFieldName = (Core.Name "operator")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the eq variant of hydra.python.syntax.CompareOp+compareOpEq :: Typed.TypedTerm Syntax.CompareOp+compareOpEq =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "eq"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the gt variant of hydra.python.syntax.CompareOp+compareOpGt :: Typed.TypedTerm Syntax.CompareOp+compareOpGt =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "gt"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the gte variant of hydra.python.syntax.CompareOp+compareOpGte :: Typed.TypedTerm Syntax.CompareOp+compareOpGte =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "gte"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the in variant of hydra.python.syntax.CompareOp+compareOpIn :: Typed.TypedTerm Syntax.CompareOp+compareOpIn =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "in"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the is variant of hydra.python.syntax.CompareOp+compareOpIs :: Typed.TypedTerm Syntax.CompareOp+compareOpIs =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "is"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the isnot variant of hydra.python.syntax.CompareOp+compareOpIsnot :: Typed.TypedTerm Syntax.CompareOp+compareOpIsnot =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "isnot"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the lt variant of hydra.python.syntax.CompareOp+compareOpLt :: Typed.TypedTerm Syntax.CompareOp+compareOpLt =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "lt"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the lte variant of hydra.python.syntax.CompareOp+compareOpLte :: Typed.TypedTerm Syntax.CompareOp+compareOpLte =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "lte"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the noteq variant of hydra.python.syntax.CompareOp+compareOpNoteq :: Typed.TypedTerm Syntax.CompareOp+compareOpNoteq =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "noteq"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the notin variant of hydra.python.syntax.CompareOp+compareOpNotin :: Typed.TypedTerm Syntax.CompareOp+compareOpNotin =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompareOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "notin"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.python.syntax.Comparison+comparison :: Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm [Syntax.CompareOpBitwiseOrPair] -> Typed.TypedTerm Syntax.Comparison+comparison lhs rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Comparison"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.Comparison+comparisonLhs :: Typed.TypedTerm Syntax.Comparison -> Typed.TypedTerm Syntax.BitwiseOr+comparisonLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Comparison"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.Comparison+comparisonRhs :: Typed.TypedTerm Syntax.Comparison -> Typed.TypedTerm [Syntax.CompareOpBitwiseOrPair]+comparisonRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Comparison"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.Comparison+comparisonWithLhs :: Typed.TypedTerm Syntax.Comparison -> Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm Syntax.Comparison+comparisonWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Comparison"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Comparison"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.Comparison+comparisonWithRhs :: Typed.TypedTerm Syntax.Comparison -> Typed.TypedTerm [Syntax.CompareOpBitwiseOrPair] -> Typed.TypedTerm Syntax.Comparison+comparisonWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Comparison"),+      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.python.syntax.Comparison"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.ComplexNumber+complexNumber :: Typed.TypedTerm Syntax.SignedRealNumber -> Typed.TypedTerm Syntax.PlusOrMinus -> Typed.TypedTerm Syntax.ImaginaryNumber -> Typed.TypedTerm Syntax.ComplexNumber+complexNumber real plusOrMinus imaginary =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "real"),+          Core.fieldTerm = (Typed.unTypedTerm real)},+        Core.Field {+          Core.fieldName = (Core.Name "plusOrMinus"),+          Core.fieldTerm = (Typed.unTypedTerm plusOrMinus)},+        Core.Field {+          Core.fieldName = (Core.Name "imaginary"),+          Core.fieldTerm = (Typed.unTypedTerm imaginary)}]}))++-- | DSL accessor for the imaginary field of hydra.python.syntax.ComplexNumber+complexNumberImaginary :: Typed.TypedTerm Syntax.ComplexNumber -> Typed.TypedTerm Syntax.ImaginaryNumber+complexNumberImaginary x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+        Core.projectionFieldName = (Core.Name "imaginary")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the plusOrMinus field of hydra.python.syntax.ComplexNumber+complexNumberPlusOrMinus :: Typed.TypedTerm Syntax.ComplexNumber -> Typed.TypedTerm Syntax.PlusOrMinus+complexNumberPlusOrMinus x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+        Core.projectionFieldName = (Core.Name "plusOrMinus")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the real field of hydra.python.syntax.ComplexNumber+complexNumberReal :: Typed.TypedTerm Syntax.ComplexNumber -> Typed.TypedTerm Syntax.SignedRealNumber+complexNumberReal x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+        Core.projectionFieldName = (Core.Name "real")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the imaginary field of hydra.python.syntax.ComplexNumber+complexNumberWithImaginary :: Typed.TypedTerm Syntax.ComplexNumber -> Typed.TypedTerm Syntax.ImaginaryNumber -> Typed.TypedTerm Syntax.ComplexNumber+complexNumberWithImaginary original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "real"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+              Core.projectionFieldName = (Core.Name "real")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "plusOrMinus"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+              Core.projectionFieldName = (Core.Name "plusOrMinus")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "imaginary"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the plusOrMinus field of hydra.python.syntax.ComplexNumber+complexNumberWithPlusOrMinus :: Typed.TypedTerm Syntax.ComplexNumber -> Typed.TypedTerm Syntax.PlusOrMinus -> Typed.TypedTerm Syntax.ComplexNumber+complexNumberWithPlusOrMinus original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "real"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+              Core.projectionFieldName = (Core.Name "real")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "plusOrMinus"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "imaginary"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+              Core.projectionFieldName = (Core.Name "imaginary")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the real field of hydra.python.syntax.ComplexNumber+complexNumberWithReal :: Typed.TypedTerm Syntax.ComplexNumber -> Typed.TypedTerm Syntax.SignedRealNumber -> Typed.TypedTerm Syntax.ComplexNumber+complexNumberWithReal original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "real"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "plusOrMinus"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+              Core.projectionFieldName = (Core.Name "plusOrMinus")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "imaginary"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ComplexNumber"),+              Core.projectionFieldName = (Core.Name "imaginary")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the classDef variant of hydra.python.syntax.CompoundStatement+compoundStatementClassDef :: Typed.TypedTerm Syntax.ClassDefinition -> Typed.TypedTerm Syntax.CompoundStatement+compoundStatementClassDef x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompoundStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "classDef"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the for variant of hydra.python.syntax.CompoundStatement+compoundStatementFor :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.CompoundStatement+compoundStatementFor x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompoundStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "for"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the function variant of hydra.python.syntax.CompoundStatement+compoundStatementFunction :: Typed.TypedTerm Syntax.FunctionDefinition -> Typed.TypedTerm Syntax.CompoundStatement+compoundStatementFunction x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompoundStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "function"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the if variant of hydra.python.syntax.CompoundStatement+compoundStatementIf :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.CompoundStatement+compoundStatementIf x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompoundStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "if"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the match variant of hydra.python.syntax.CompoundStatement+compoundStatementMatch :: Typed.TypedTerm Syntax.MatchStatement -> Typed.TypedTerm Syntax.CompoundStatement+compoundStatementMatch x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompoundStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "match"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the try variant of hydra.python.syntax.CompoundStatement+compoundStatementTry :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.CompoundStatement+compoundStatementTry x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompoundStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "try"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the while variant of hydra.python.syntax.CompoundStatement+compoundStatementWhile :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.CompoundStatement+compoundStatementWhile x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompoundStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "while"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the with variant of hydra.python.syntax.CompoundStatement+compoundStatementWith :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm Syntax.CompoundStatement+compoundStatementWith x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.CompoundStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "with"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.Conditional+conditional :: Typed.TypedTerm Syntax.Disjunction -> Typed.TypedTerm Syntax.Disjunction -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Conditional+conditional body if_ else_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Conditional"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)},+        Core.Field {+          Core.fieldName = (Core.Name "if"),+          Core.fieldTerm = (Typed.unTypedTerm if_)},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm else_)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.Conditional+conditionalBody :: Typed.TypedTerm Syntax.Conditional -> Typed.TypedTerm Syntax.Disjunction+conditionalBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Conditional"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the else field of hydra.python.syntax.Conditional+conditionalElse :: Typed.TypedTerm Syntax.Conditional -> Typed.TypedTerm Syntax.Expression+conditionalElse x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Conditional"),+        Core.projectionFieldName = (Core.Name "else")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the if field of hydra.python.syntax.Conditional+conditionalIf :: Typed.TypedTerm Syntax.Conditional -> Typed.TypedTerm Syntax.Disjunction+conditionalIf x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Conditional"),+        Core.projectionFieldName = (Core.Name "if")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.python.syntax.Conditional+conditionalWithBody :: Typed.TypedTerm Syntax.Conditional -> Typed.TypedTerm Syntax.Disjunction -> Typed.TypedTerm Syntax.Conditional+conditionalWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Conditional"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "if"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Conditional"),+              Core.projectionFieldName = (Core.Name "if")})),+            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.python.syntax.Conditional"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the else field of hydra.python.syntax.Conditional+conditionalWithElse :: Typed.TypedTerm Syntax.Conditional -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Conditional+conditionalWithElse original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Conditional"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Conditional"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "if"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Conditional"),+              Core.projectionFieldName = (Core.Name "if")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the if field of hydra.python.syntax.Conditional+conditionalWithIf :: Typed.TypedTerm Syntax.Conditional -> Typed.TypedTerm Syntax.Disjunction -> Typed.TypedTerm Syntax.Conditional+conditionalWithIf original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Conditional"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Conditional"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "if"),+          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.python.syntax.Conditional"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.Conjunction wrapper+conjunction :: Typed.TypedTerm [Syntax.Inversion] -> Typed.TypedTerm Syntax.Conjunction+conjunction x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Conjunction"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.Decorators wrapper+decorators :: Typed.TypedTerm [Syntax.NamedExpression] -> Typed.TypedTerm Syntax.Decorators+decorators x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Decorators"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.Default wrapper+default_ :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Default+default_ x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Default"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.DelStatement wrapper+delStatement :: Typed.TypedTerm Syntax.DelTargets -> Typed.TypedTerm Syntax.DelStatement+delStatement x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.DelStatement"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the name variant of hydra.python.syntax.DelTAtom+delTAtomName :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.DelTAtom+delTAtomName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.DelTAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the target variant of hydra.python.syntax.DelTAtom+delTAtomTarget :: Typed.TypedTerm Syntax.DelTarget -> Typed.TypedTerm Syntax.DelTAtom+delTAtomTarget x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.DelTAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "target"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the targets variant of hydra.python.syntax.DelTAtom+delTAtomTargets :: Typed.TypedTerm Syntax.DelTargets -> Typed.TypedTerm Syntax.DelTAtom+delTAtomTargets x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.DelTAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "targets"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the delTAtom variant of hydra.python.syntax.DelTarget+delTargetDelTAtom :: Typed.TypedTerm Syntax.DelTAtom -> Typed.TypedTerm Syntax.DelTarget+delTargetDelTAtom x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.DelTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "delTAtom"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the primaryAndName variant of hydra.python.syntax.DelTarget+delTargetPrimaryAndName :: Typed.TypedTerm Syntax.TPrimaryAndName -> Typed.TypedTerm Syntax.DelTarget+delTargetPrimaryAndName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.DelTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primaryAndName"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the primaryAndSlices variant of hydra.python.syntax.DelTarget+delTargetPrimaryAndSlices :: Typed.TypedTerm Syntax.TPrimaryAndSlices -> Typed.TypedTerm Syntax.DelTarget+delTargetPrimaryAndSlices x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.DelTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primaryAndSlices"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.DelTargets wrapper+delTargets :: Typed.TypedTerm [Syntax.DelTarget] -> Typed.TypedTerm Syntax.DelTargets+delTargets x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.DelTargets"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.Dict wrapper+dict :: Typed.TypedTerm [Syntax.DoubleStarredKvpair] -> Typed.TypedTerm Syntax.Dict+dict x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Dict"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.Dictcomp+dictcomp :: Typed.TypedTerm Syntax.Kvpair -> Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm Syntax.Dictcomp+dictcomp kvpair forIfClauses =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Dictcomp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "kvpair"),+          Core.fieldTerm = (Typed.unTypedTerm kvpair)},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Typed.unTypedTerm forIfClauses)}]}))++-- | DSL accessor for the forIfClauses field of hydra.python.syntax.Dictcomp+dictcompForIfClauses :: Typed.TypedTerm Syntax.Dictcomp -> Typed.TypedTerm Syntax.ForIfClauses+dictcompForIfClauses x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Dictcomp"),+        Core.projectionFieldName = (Core.Name "forIfClauses")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the kvpair field of hydra.python.syntax.Dictcomp+dictcompKvpair :: Typed.TypedTerm Syntax.Dictcomp -> Typed.TypedTerm Syntax.Kvpair+dictcompKvpair x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Dictcomp"),+        Core.projectionFieldName = (Core.Name "kvpair")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the forIfClauses field of hydra.python.syntax.Dictcomp+dictcompWithForIfClauses :: Typed.TypedTerm Syntax.Dictcomp -> Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm Syntax.Dictcomp+dictcompWithForIfClauses original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Dictcomp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "kvpair"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Dictcomp"),+              Core.projectionFieldName = (Core.Name "kvpair")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the kvpair field of hydra.python.syntax.Dictcomp+dictcompWithKvpair :: Typed.TypedTerm Syntax.Dictcomp -> Typed.TypedTerm Syntax.Kvpair -> Typed.TypedTerm Syntax.Dictcomp+dictcompWithKvpair original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Dictcomp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "kvpair"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Dictcomp"),+              Core.projectionFieldName = (Core.Name "forIfClauses")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.Disjunction wrapper+disjunction :: Typed.TypedTerm [Syntax.Conjunction] -> Typed.TypedTerm Syntax.Disjunction+disjunction x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Disjunction"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.DottedAsName+dottedAsName :: Typed.TypedTerm Syntax.DottedName -> Typed.TypedTerm (Maybe Syntax.Name) -> Typed.TypedTerm Syntax.DottedAsName+dottedAsName name as =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.DottedAsName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm as)}]}))++-- | DSL accessor for the as field of hydra.python.syntax.DottedAsName+dottedAsNameAs :: Typed.TypedTerm Syntax.DottedAsName -> Typed.TypedTerm (Maybe Syntax.Name)+dottedAsNameAs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.DottedAsName"),+        Core.projectionFieldName = (Core.Name "as")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.DottedAsName+dottedAsNameName :: Typed.TypedTerm Syntax.DottedAsName -> Typed.TypedTerm Syntax.DottedName+dottedAsNameName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.DottedAsName"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the as field of hydra.python.syntax.DottedAsName+dottedAsNameWithAs :: Typed.TypedTerm Syntax.DottedAsName -> Typed.TypedTerm (Maybe Syntax.Name) -> Typed.TypedTerm Syntax.DottedAsName+dottedAsNameWithAs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.DottedAsName"),+      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.python.syntax.DottedAsName"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.python.syntax.DottedAsName+dottedAsNameWithName :: Typed.TypedTerm Syntax.DottedAsName -> Typed.TypedTerm Syntax.DottedName -> Typed.TypedTerm Syntax.DottedAsName+dottedAsNameWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.DottedAsName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.DottedAsName"),+              Core.projectionFieldName = (Core.Name "as")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.DottedName wrapper+dottedName :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.DottedName+dottedName x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.DottedName"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.DoubleStarPattern wrapper+doubleStarPattern :: Typed.TypedTerm Syntax.PatternCaptureTarget -> Typed.TypedTerm Syntax.DoubleStarPattern+doubleStarPattern x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.DoubleStarPattern"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.DoubleStarTypeParameter+doubleStarTypeParameter :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.DoubleStarTypeParameter+doubleStarTypeParameter name default_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.DoubleStarTypeParameter"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm default_)}]}))++-- | DSL accessor for the default field of hydra.python.syntax.DoubleStarTypeParameter+doubleStarTypeParameterDefault :: Typed.TypedTerm Syntax.DoubleStarTypeParameter -> Typed.TypedTerm (Maybe Syntax.Expression)+doubleStarTypeParameterDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.DoubleStarTypeParameter"),+        Core.projectionFieldName = (Core.Name "default")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.DoubleStarTypeParameter+doubleStarTypeParameterName :: Typed.TypedTerm Syntax.DoubleStarTypeParameter -> Typed.TypedTerm Syntax.Name+doubleStarTypeParameterName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.DoubleStarTypeParameter"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the default field of hydra.python.syntax.DoubleStarTypeParameter+doubleStarTypeParameterWithDefault :: Typed.TypedTerm Syntax.DoubleStarTypeParameter -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.DoubleStarTypeParameter+doubleStarTypeParameterWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.DoubleStarTypeParameter"),+      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.python.syntax.DoubleStarTypeParameter"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.python.syntax.DoubleStarTypeParameter+doubleStarTypeParameterWithName :: Typed.TypedTerm Syntax.DoubleStarTypeParameter -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.DoubleStarTypeParameter+doubleStarTypeParameterWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.DoubleStarTypeParameter"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.DoubleStarTypeParameter"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the pair variant of hydra.python.syntax.DoubleStarredKvpair+doubleStarredKvpairPair :: Typed.TypedTerm Syntax.Kvpair -> Typed.TypedTerm Syntax.DoubleStarredKvpair+doubleStarredKvpairPair x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.DoubleStarredKvpair"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "pair"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starred variant of hydra.python.syntax.DoubleStarredKvpair+doubleStarredKvpairStarred :: Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm Syntax.DoubleStarredKvpair+doubleStarredKvpairStarred x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.DoubleStarredKvpair"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starred"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.Eval wrapper+eval :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Eval+eval x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Eval"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.ExceptBlock+exceptBlock :: Typed.TypedTerm (Maybe Syntax.ExceptExpression) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ExceptBlock+exceptBlock expression body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptBlock"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.ExceptBlock+exceptBlockBody :: Typed.TypedTerm Syntax.ExceptBlock -> Typed.TypedTerm Syntax.Block+exceptBlockBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptBlock"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the expression field of hydra.python.syntax.ExceptBlock+exceptBlockExpression :: Typed.TypedTerm Syntax.ExceptBlock -> Typed.TypedTerm (Maybe Syntax.ExceptExpression)+exceptBlockExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptBlock"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.python.syntax.ExceptBlock+exceptBlockWithBody :: Typed.TypedTerm Syntax.ExceptBlock -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ExceptBlock+exceptBlockWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptBlock"),+      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.python.syntax.ExceptBlock"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the expression field of hydra.python.syntax.ExceptBlock+exceptBlockWithExpression :: Typed.TypedTerm Syntax.ExceptBlock -> Typed.TypedTerm (Maybe Syntax.ExceptExpression) -> Typed.TypedTerm Syntax.ExceptBlock+exceptBlockWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptBlock"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          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.python.syntax.ExceptBlock"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.ExceptExpression+exceptExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm (Maybe Syntax.Name) -> Typed.TypedTerm Syntax.ExceptExpression+exceptExpression expression as =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm as)}]}))++-- | DSL accessor for the as field of hydra.python.syntax.ExceptExpression+exceptExpressionAs :: Typed.TypedTerm Syntax.ExceptExpression -> Typed.TypedTerm (Maybe Syntax.Name)+exceptExpressionAs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptExpression"),+        Core.projectionFieldName = (Core.Name "as")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the expression field of hydra.python.syntax.ExceptExpression+exceptExpressionExpression :: Typed.TypedTerm Syntax.ExceptExpression -> Typed.TypedTerm Syntax.Expression+exceptExpressionExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptExpression"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the as field of hydra.python.syntax.ExceptExpression+exceptExpressionWithAs :: Typed.TypedTerm Syntax.ExceptExpression -> Typed.TypedTerm (Maybe Syntax.Name) -> Typed.TypedTerm Syntax.ExceptExpression+exceptExpressionWithAs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptExpression"),+      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.python.syntax.ExceptExpression"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the expression field of hydra.python.syntax.ExceptExpression+exceptExpressionWithExpression :: Typed.TypedTerm Syntax.ExceptExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ExceptExpression+exceptExpressionWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptExpression"),+              Core.projectionFieldName = (Core.Name "as")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.ExceptStarBlock+exceptStarBlock :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm (Maybe Syntax.Name) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ExceptStarBlock+exceptStarBlock expression as body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm as)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the as field of hydra.python.syntax.ExceptStarBlock+exceptStarBlockAs :: Typed.TypedTerm Syntax.ExceptStarBlock -> Typed.TypedTerm (Maybe Syntax.Name)+exceptStarBlockAs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+        Core.projectionFieldName = (Core.Name "as")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body field of hydra.python.syntax.ExceptStarBlock+exceptStarBlockBody :: Typed.TypedTerm Syntax.ExceptStarBlock -> Typed.TypedTerm Syntax.Block+exceptStarBlockBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the expression field of hydra.python.syntax.ExceptStarBlock+exceptStarBlockExpression :: Typed.TypedTerm Syntax.ExceptStarBlock -> Typed.TypedTerm Syntax.Expression+exceptStarBlockExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the as field of hydra.python.syntax.ExceptStarBlock+exceptStarBlockWithAs :: Typed.TypedTerm Syntax.ExceptStarBlock -> Typed.TypedTerm (Maybe Syntax.Name) -> Typed.TypedTerm Syntax.ExceptStarBlock+exceptStarBlockWithAs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+      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.python.syntax.ExceptStarBlock"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          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.python.syntax.ExceptStarBlock"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the body field of hydra.python.syntax.ExceptStarBlock+exceptStarBlockWithBody :: Typed.TypedTerm Syntax.ExceptStarBlock -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ExceptStarBlock+exceptStarBlockWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+      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.python.syntax.ExceptStarBlock"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+              Core.projectionFieldName = (Core.Name "as")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the expression field of hydra.python.syntax.ExceptStarBlock+exceptStarBlockWithExpression :: Typed.TypedTerm Syntax.ExceptStarBlock -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ExceptStarBlock+exceptStarBlockWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ExceptStarBlock"),+              Core.projectionFieldName = (Core.Name "as")})),+            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.python.syntax.ExceptStarBlock"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the conditional variant of hydra.python.syntax.Expression+expressionConditional :: Typed.TypedTerm Syntax.Conditional -> Typed.TypedTerm Syntax.Expression+expressionConditional x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Expression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "conditional"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the lambda variant of hydra.python.syntax.Expression+expressionLambda :: Typed.TypedTerm Syntax.Lambda -> Typed.TypedTerm Syntax.Expression+expressionLambda x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Expression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "lambda"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.Expression+expressionSimple :: Typed.TypedTerm Syntax.Disjunction -> Typed.TypedTerm Syntax.Expression+expressionSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Expression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the complement variant of hydra.python.syntax.Factor+factorComplement :: Typed.TypedTerm Syntax.Factor -> Typed.TypedTerm Syntax.Factor+factorComplement x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Factor"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "complement"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the negative variant of hydra.python.syntax.Factor+factorNegative :: Typed.TypedTerm Syntax.Factor -> Typed.TypedTerm Syntax.Factor+factorNegative x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Factor"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "negative"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the positive variant of hydra.python.syntax.Factor+factorPositive :: Typed.TypedTerm Syntax.Factor -> Typed.TypedTerm Syntax.Factor+factorPositive x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Factor"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "positive"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.Factor+factorSimple :: Typed.TypedTerm Syntax.Power -> Typed.TypedTerm Syntax.Factor+factorSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Factor"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.File wrapper+file :: Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.File+file x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.File"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.ForIfClause+forIfClause :: Typed.TypedTerm Bool -> Typed.TypedTerm [Syntax.StarTarget] -> Typed.TypedTerm Syntax.Disjunction -> Typed.TypedTerm [Syntax.Disjunction] -> Typed.TypedTerm Syntax.ForIfClause+forIfClause async targets in_ ifs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Typed.unTypedTerm async)},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Typed.unTypedTerm targets)},+        Core.Field {+          Core.fieldName = (Core.Name "in"),+          Core.fieldTerm = (Typed.unTypedTerm in_)},+        Core.Field {+          Core.fieldName = (Core.Name "ifs"),+          Core.fieldTerm = (Typed.unTypedTerm ifs)}]}))++-- | DSL accessor for the async field of hydra.python.syntax.ForIfClause+forIfClauseAsync :: Typed.TypedTerm Syntax.ForIfClause -> Typed.TypedTerm Bool+forIfClauseAsync x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+        Core.projectionFieldName = (Core.Name "async")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the ifs field of hydra.python.syntax.ForIfClause+forIfClauseIfs :: Typed.TypedTerm Syntax.ForIfClause -> Typed.TypedTerm [Syntax.Disjunction]+forIfClauseIfs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+        Core.projectionFieldName = (Core.Name "ifs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the in field of hydra.python.syntax.ForIfClause+forIfClauseIn :: Typed.TypedTerm Syntax.ForIfClause -> Typed.TypedTerm Syntax.Disjunction+forIfClauseIn x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+        Core.projectionFieldName = (Core.Name "in")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the targets field of hydra.python.syntax.ForIfClause+forIfClauseTargets :: Typed.TypedTerm Syntax.ForIfClause -> Typed.TypedTerm [Syntax.StarTarget]+forIfClauseTargets x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+        Core.projectionFieldName = (Core.Name "targets")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the async field of hydra.python.syntax.ForIfClause+forIfClauseWithAsync :: Typed.TypedTerm Syntax.ForIfClause -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ForIfClause+forIfClauseWithAsync original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "targets")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "in"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "in")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "ifs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "ifs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the ifs field of hydra.python.syntax.ForIfClause+forIfClauseWithIfs :: Typed.TypedTerm Syntax.ForIfClause -> Typed.TypedTerm [Syntax.Disjunction] -> Typed.TypedTerm Syntax.ForIfClause+forIfClauseWithIfs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "targets")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "in"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "in")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "ifs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the in field of hydra.python.syntax.ForIfClause+forIfClauseWithIn :: Typed.TypedTerm Syntax.ForIfClause -> Typed.TypedTerm Syntax.Disjunction -> Typed.TypedTerm Syntax.ForIfClause+forIfClauseWithIn original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "targets")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "in"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "ifs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "ifs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the targets field of hydra.python.syntax.ForIfClause+forIfClauseWithTargets :: Typed.TypedTerm Syntax.ForIfClause -> Typed.TypedTerm [Syntax.StarTarget] -> Typed.TypedTerm Syntax.ForIfClause+forIfClauseWithTargets original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "in"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "in")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "ifs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForIfClause"),+              Core.projectionFieldName = (Core.Name "ifs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.ForIfClauses wrapper+forIfClauses :: Typed.TypedTerm [Syntax.ForIfClause] -> Typed.TypedTerm Syntax.ForIfClauses+forIfClauses x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.ForIfClauses"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.ForStatement+forStatement :: Typed.TypedTerm Bool -> Typed.TypedTerm [Syntax.StarTarget] -> Typed.TypedTerm [Syntax.StarExpression] -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.ForStatement+forStatement async targets expressions typeComment body else_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Typed.unTypedTerm async)},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Typed.unTypedTerm targets)},+        Core.Field {+          Core.fieldName = (Core.Name "expressions"),+          Core.fieldTerm = (Typed.unTypedTerm expressions)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm typeComment)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm else_)}]}))++-- | DSL accessor for the async field of hydra.python.syntax.ForStatement+forStatementAsync :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Bool+forStatementAsync x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+        Core.projectionFieldName = (Core.Name "async")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body field of hydra.python.syntax.ForStatement+forStatementBody :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Block+forStatementBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the else field of hydra.python.syntax.ForStatement+forStatementElse :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Block)+forStatementElse x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+        Core.projectionFieldName = (Core.Name "else")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the expressions field of hydra.python.syntax.ForStatement+forStatementExpressions :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm [Syntax.StarExpression]+forStatementExpressions x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+        Core.projectionFieldName = (Core.Name "expressions")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the targets field of hydra.python.syntax.ForStatement+forStatementTargets :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm [Syntax.StarTarget]+forStatementTargets x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+        Core.projectionFieldName = (Core.Name "targets")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeComment field of hydra.python.syntax.ForStatement+forStatementTypeComment :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.TypeComment)+forStatementTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+        Core.projectionFieldName = (Core.Name "typeComment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the async field of hydra.python.syntax.ForStatement+forStatementWithAsync :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ForStatement+forStatementWithAsync original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "targets")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "expressions")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the body field of hydra.python.syntax.ForStatement+forStatementWithBody :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.ForStatement+forStatementWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "targets")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "expressions")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the else field of hydra.python.syntax.ForStatement+forStatementWithElse :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.ForStatement+forStatementWithElse original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "targets")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "expressions")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the expressions field of hydra.python.syntax.ForStatement+forStatementWithExpressions :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm [Syntax.StarExpression] -> Typed.TypedTerm Syntax.ForStatement+forStatementWithExpressions original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "targets")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "expressions"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the targets field of hydra.python.syntax.ForStatement+forStatementWithTargets :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm [Syntax.StarTarget] -> Typed.TypedTerm Syntax.ForStatement+forStatementWithTargets original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "expressions")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeComment field of hydra.python.syntax.ForStatement+forStatementWithTypeComment :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ForStatement+forStatementWithTypeComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "targets")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "expressions")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            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.python.syntax.ForStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.FuncTypeComment wrapper+funcTypeComment :: Typed.TypedTerm Syntax.TypeComment -> Typed.TypedTerm Syntax.FuncTypeComment+funcTypeComment x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.FuncTypeComment"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.FunctionDefRaw+functionDefRaw :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm (Maybe Syntax.Parameters) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.FuncTypeComment) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefRaw async name typeParams params returnType funcTypeComment block =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Typed.unTypedTerm async)},+        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 "params"),+          Core.fieldTerm = (Typed.unTypedTerm params)},+        Core.Field {+          Core.fieldName = (Core.Name "returnType"),+          Core.fieldTerm = (Typed.unTypedTerm returnType)},+        Core.Field {+          Core.fieldName = (Core.Name "funcTypeComment"),+          Core.fieldTerm = (Typed.unTypedTerm funcTypeComment)},+        Core.Field {+          Core.fieldName = (Core.Name "block"),+          Core.fieldTerm = (Typed.unTypedTerm block)}]}))++-- | DSL accessor for the async field of hydra.python.syntax.FunctionDefRaw+functionDefRawAsync :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm Bool+functionDefRawAsync x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+        Core.projectionFieldName = (Core.Name "async")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the block field of hydra.python.syntax.FunctionDefRaw+functionDefRawBlock :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm Syntax.Block+functionDefRawBlock x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+        Core.projectionFieldName = (Core.Name "block")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the funcTypeComment field of hydra.python.syntax.FunctionDefRaw+functionDefRawFuncTypeComment :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm (Maybe Syntax.FuncTypeComment)+functionDefRawFuncTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+        Core.projectionFieldName = (Core.Name "funcTypeComment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.FunctionDefRaw+functionDefRawName :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm Syntax.Name+functionDefRawName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the params field of hydra.python.syntax.FunctionDefRaw+functionDefRawParams :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm (Maybe Syntax.Parameters)+functionDefRawParams x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+        Core.projectionFieldName = (Core.Name "params")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the returnType field of hydra.python.syntax.FunctionDefRaw+functionDefRawReturnType :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm (Maybe Syntax.Expression)+functionDefRawReturnType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+        Core.projectionFieldName = (Core.Name "returnType")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeParams field of hydra.python.syntax.FunctionDefRaw+functionDefRawTypeParams :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm [Syntax.TypeParameter]+functionDefRawTypeParams x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+        Core.projectionFieldName = (Core.Name "typeParams")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the async field of hydra.python.syntax.FunctionDefRaw+functionDefRawWithAsync :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefRawWithAsync original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          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.python.syntax.FunctionDefRaw"),+              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.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "params")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "returnType"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "returnType")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "funcTypeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "funcTypeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "block"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "block")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the block field of hydra.python.syntax.FunctionDefRaw+functionDefRawWithBlock :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefRawWithBlock original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "async")})),+            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.python.syntax.FunctionDefRaw"),+              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.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "params")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "returnType"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "returnType")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "funcTypeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "funcTypeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "block"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the funcTypeComment field of hydra.python.syntax.FunctionDefRaw+functionDefRawWithFuncTypeComment :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm (Maybe Syntax.FuncTypeComment) -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefRawWithFuncTypeComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "async")})),+            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.python.syntax.FunctionDefRaw"),+              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.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "params")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "returnType"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "returnType")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "funcTypeComment"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "block"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "block")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the name field of hydra.python.syntax.FunctionDefRaw+functionDefRawWithName :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefRawWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        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.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "params")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "returnType"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "returnType")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "funcTypeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "funcTypeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "block"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "block")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the params field of hydra.python.syntax.FunctionDefRaw+functionDefRawWithParams :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm (Maybe Syntax.Parameters) -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefRawWithParams original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "async")})),+            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.python.syntax.FunctionDefRaw"),+              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.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "returnType"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "returnType")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "funcTypeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "funcTypeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "block"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "block")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the returnType field of hydra.python.syntax.FunctionDefRaw+functionDefRawWithReturnType :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefRawWithReturnType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "async")})),+            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.python.syntax.FunctionDefRaw"),+              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.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "params")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "returnType"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "funcTypeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "funcTypeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "block"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "block")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeParams field of hydra.python.syntax.FunctionDefRaw+functionDefRawWithTypeParams :: Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefRawWithTypeParams original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "async")})),+            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.python.syntax.FunctionDefRaw"),+              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 "params"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "params")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "returnType"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "returnType")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "funcTypeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "funcTypeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "block"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefRaw"),+              Core.projectionFieldName = (Core.Name "block")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.FunctionDefinition+functionDefinition :: Typed.TypedTerm (Maybe Syntax.Decorators) -> Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm Syntax.FunctionDefinition+functionDefinition decorators raw =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          Core.fieldTerm = (Typed.unTypedTerm decorators)},+        Core.Field {+          Core.fieldName = (Core.Name "raw"),+          Core.fieldTerm = (Typed.unTypedTerm raw)}]}))++-- | DSL accessor for the decorators field of hydra.python.syntax.FunctionDefinition+functionDefinitionDecorators :: Typed.TypedTerm Syntax.FunctionDefinition -> Typed.TypedTerm (Maybe Syntax.Decorators)+functionDefinitionDecorators x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefinition"),+        Core.projectionFieldName = (Core.Name "decorators")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the raw field of hydra.python.syntax.FunctionDefinition+functionDefinitionRaw :: Typed.TypedTerm Syntax.FunctionDefinition -> Typed.TypedTerm Syntax.FunctionDefRaw+functionDefinitionRaw x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefinition"),+        Core.projectionFieldName = (Core.Name "raw")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the decorators field of hydra.python.syntax.FunctionDefinition+functionDefinitionWithDecorators :: Typed.TypedTerm Syntax.FunctionDefinition -> Typed.TypedTerm (Maybe Syntax.Decorators) -> Typed.TypedTerm Syntax.FunctionDefinition+functionDefinitionWithDecorators original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "raw"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefinition"),+              Core.projectionFieldName = (Core.Name "raw")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the raw field of hydra.python.syntax.FunctionDefinition+functionDefinitionWithRaw :: Typed.TypedTerm Syntax.FunctionDefinition -> Typed.TypedTerm Syntax.FunctionDefRaw -> Typed.TypedTerm Syntax.FunctionDefinition+functionDefinitionWithRaw original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.FunctionDefinition"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "decorators"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.FunctionDefinition"),+              Core.projectionFieldName = (Core.Name "decorators")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "raw"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.Genexp+genexp :: Typed.TypedTerm Syntax.GenexpHead -> Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm Syntax.Genexp+genexp head tail =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Genexp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Typed.unTypedTerm head)},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Typed.unTypedTerm tail)}]}))++-- | DSL accessor for the head field of hydra.python.syntax.Genexp+genexpHead :: Typed.TypedTerm Syntax.Genexp -> Typed.TypedTerm Syntax.GenexpHead+genexpHead x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Genexp"),+        Core.projectionFieldName = (Core.Name "head")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL injection for the assignment variant of hydra.python.syntax.GenexpHead+genexpHeadAssignment :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.GenexpHead+genexpHeadAssignment x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.GenexpHead"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "assignment"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the expression variant of hydra.python.syntax.GenexpHead+genexpHeadExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.GenexpHead+genexpHeadExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.GenexpHead"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "expression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL accessor for the tail field of hydra.python.syntax.Genexp+genexpTail :: Typed.TypedTerm Syntax.Genexp -> Typed.TypedTerm Syntax.ForIfClauses+genexpTail x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Genexp"),+        Core.projectionFieldName = (Core.Name "tail")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the head field of hydra.python.syntax.Genexp+genexpWithHead :: Typed.TypedTerm Syntax.Genexp -> Typed.TypedTerm Syntax.GenexpHead -> Typed.TypedTerm Syntax.Genexp+genexpWithHead original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Genexp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Genexp"),+              Core.projectionFieldName = (Core.Name "tail")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the tail field of hydra.python.syntax.Genexp+genexpWithTail :: Typed.TypedTerm Syntax.Genexp -> Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm Syntax.Genexp+genexpWithTail original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Genexp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Genexp"),+              Core.projectionFieldName = (Core.Name "head")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the expression variant of hydra.python.syntax.Group+groupExpression :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.Group+groupExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Group"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "expression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.GroupPattern wrapper+groupPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.GroupPattern+groupPattern x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.GroupPattern"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the yield variant of hydra.python.syntax.Group+groupYield :: Typed.TypedTerm Syntax.YieldExpression -> Typed.TypedTerm Syntax.Group+groupYield x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Group"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "yield"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.Guard wrapper+guard :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.Guard+guard x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Guard"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.IfStatement+ifStatement :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm (Maybe Syntax.IfTail) -> Typed.TypedTerm Syntax.IfStatement+ifStatement condition body continuation =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Typed.unTypedTerm condition)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)},+        Core.Field {+          Core.fieldName = (Core.Name "continuation"),+          Core.fieldTerm = (Typed.unTypedTerm continuation)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.IfStatement+ifStatementBody :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Block+ifStatementBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the condition field of hydra.python.syntax.IfStatement+ifStatementCondition :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.NamedExpression+ifStatementCondition x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+        Core.projectionFieldName = (Core.Name "condition")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the continuation field of hydra.python.syntax.IfStatement+ifStatementContinuation :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm (Maybe Syntax.IfTail)+ifStatementContinuation x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+        Core.projectionFieldName = (Core.Name "continuation")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.python.syntax.IfStatement+ifStatementWithBody :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.IfStatement+ifStatementWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+              Core.projectionFieldName = (Core.Name "condition")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "continuation"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+              Core.projectionFieldName = (Core.Name "continuation")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the condition field of hydra.python.syntax.IfStatement+ifStatementWithCondition :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.IfStatement+ifStatementWithCondition original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          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.python.syntax.IfStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "continuation"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+              Core.projectionFieldName = (Core.Name "continuation")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the continuation field of hydra.python.syntax.IfStatement+ifStatementWithContinuation :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm (Maybe Syntax.IfTail) -> Typed.TypedTerm Syntax.IfStatement+ifStatementWithContinuation original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.IfStatement"),+              Core.projectionFieldName = (Core.Name "condition")})),+            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.python.syntax.IfStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "continuation"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the elif variant of hydra.python.syntax.IfTail+ifTailElif :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.IfTail+ifTailElif x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.IfTail"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "elif"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the else variant of hydra.python.syntax.IfTail+ifTailElse :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.IfTail+ifTailElse x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.IfTail"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "else"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.ImaginaryNumber wrapper+imaginaryNumber :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.ImaginaryNumber+imaginaryNumber x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.ImaginaryNumber"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.ImportFrom+importFrom :: Typed.TypedTerm [Syntax.RelativeImportPrefix] -> Typed.TypedTerm (Maybe Syntax.DottedName) -> Typed.TypedTerm Syntax.ImportFromTargets -> Typed.TypedTerm Syntax.ImportFrom+importFrom prefixes dottedName targets =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "prefixes"),+          Core.fieldTerm = (Typed.unTypedTerm prefixes)},+        Core.Field {+          Core.fieldName = (Core.Name "dottedName"),+          Core.fieldTerm = (Typed.unTypedTerm dottedName)},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Typed.unTypedTerm targets)}]}))++-- | DSL constructor for hydra.python.syntax.ImportFromAsName+importFromAsName :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.Name) -> Typed.TypedTerm Syntax.ImportFromAsName+importFromAsName name as =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ImportFromAsName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm as)}]}))++-- | DSL accessor for the as field of hydra.python.syntax.ImportFromAsName+importFromAsNameAs :: Typed.TypedTerm Syntax.ImportFromAsName -> Typed.TypedTerm (Maybe Syntax.Name)+importFromAsNameAs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFromAsName"),+        Core.projectionFieldName = (Core.Name "as")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.ImportFromAsName+importFromAsNameName :: Typed.TypedTerm Syntax.ImportFromAsName -> Typed.TypedTerm Syntax.Name+importFromAsNameName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFromAsName"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the as field of hydra.python.syntax.ImportFromAsName+importFromAsNameWithAs :: Typed.TypedTerm Syntax.ImportFromAsName -> Typed.TypedTerm (Maybe Syntax.Name) -> Typed.TypedTerm Syntax.ImportFromAsName+importFromAsNameWithAs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ImportFromAsName"),+      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.python.syntax.ImportFromAsName"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.python.syntax.ImportFromAsName+importFromAsNameWithName :: Typed.TypedTerm Syntax.ImportFromAsName -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.ImportFromAsName+importFromAsNameWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ImportFromAsName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFromAsName"),+              Core.projectionFieldName = (Core.Name "as")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL accessor for the dottedName field of hydra.python.syntax.ImportFrom+importFromDottedName :: Typed.TypedTerm Syntax.ImportFrom -> Typed.TypedTerm (Maybe Syntax.DottedName)+importFromDottedName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+        Core.projectionFieldName = (Core.Name "dottedName")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the prefixes field of hydra.python.syntax.ImportFrom+importFromPrefixes :: Typed.TypedTerm Syntax.ImportFrom -> Typed.TypedTerm [Syntax.RelativeImportPrefix]+importFromPrefixes x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+        Core.projectionFieldName = (Core.Name "prefixes")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the targets field of hydra.python.syntax.ImportFrom+importFromTargets :: Typed.TypedTerm Syntax.ImportFrom -> Typed.TypedTerm Syntax.ImportFromTargets+importFromTargets x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+        Core.projectionFieldName = (Core.Name "targets")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL injection for the parens variant of hydra.python.syntax.ImportFromTargets+importFromTargetsParens :: Typed.TypedTerm [Syntax.ImportFromAsName] -> Typed.TypedTerm Syntax.ImportFromTargets+importFromTargetsParens x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ImportFromTargets"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "parens"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.ImportFromTargets+importFromTargetsSimple :: Typed.TypedTerm [Syntax.ImportFromAsName] -> Typed.TypedTerm Syntax.ImportFromTargets+importFromTargetsSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ImportFromTargets"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the star variant of hydra.python.syntax.ImportFromTargets+importFromTargetsStar :: Typed.TypedTerm Syntax.ImportFromTargets+importFromTargetsStar =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ImportFromTargets"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "star"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL updater for the dottedName field of hydra.python.syntax.ImportFrom+importFromWithDottedName :: Typed.TypedTerm Syntax.ImportFrom -> Typed.TypedTerm (Maybe Syntax.DottedName) -> Typed.TypedTerm Syntax.ImportFrom+importFromWithDottedName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "prefixes"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+              Core.projectionFieldName = (Core.Name "prefixes")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "dottedName"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+              Core.projectionFieldName = (Core.Name "targets")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the prefixes field of hydra.python.syntax.ImportFrom+importFromWithPrefixes :: Typed.TypedTerm Syntax.ImportFrom -> Typed.TypedTerm [Syntax.RelativeImportPrefix] -> Typed.TypedTerm Syntax.ImportFrom+importFromWithPrefixes original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "prefixes"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "dottedName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+              Core.projectionFieldName = (Core.Name "dottedName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+              Core.projectionFieldName = (Core.Name "targets")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the targets field of hydra.python.syntax.ImportFrom+importFromWithTargets :: Typed.TypedTerm Syntax.ImportFrom -> Typed.TypedTerm Syntax.ImportFromTargets -> Typed.TypedTerm Syntax.ImportFrom+importFromWithTargets original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "prefixes"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+              Core.projectionFieldName = (Core.Name "prefixes")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "dottedName"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ImportFrom"),+              Core.projectionFieldName = (Core.Name "dottedName")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.python.syntax.ImportName wrapper+importName :: Typed.TypedTerm [Syntax.DottedAsName] -> Typed.TypedTerm Syntax.ImportName+importName x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.ImportName"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the from variant of hydra.python.syntax.ImportStatement+importStatementFrom :: Typed.TypedTerm Syntax.ImportFrom -> Typed.TypedTerm Syntax.ImportStatement+importStatementFrom x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ImportStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "from"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the name variant of hydra.python.syntax.ImportStatement+importStatementName :: Typed.TypedTerm Syntax.ImportName -> Typed.TypedTerm Syntax.ImportStatement+importStatementName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ImportStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.Interactive wrapper+interactive :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.Interactive+interactive x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Interactive"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the not variant of hydra.python.syntax.Inversion+inversionNot :: Typed.TypedTerm Syntax.Inversion -> Typed.TypedTerm Syntax.Inversion+inversionNot x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Inversion"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "not"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.Inversion+inversionSimple :: Typed.TypedTerm Syntax.Comparison -> Typed.TypedTerm Syntax.Inversion+inversionSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Inversion"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.ItemsPattern wrapper+itemsPattern :: Typed.TypedTerm [Syntax.KeyValuePattern] -> Typed.TypedTerm Syntax.ItemsPattern+itemsPattern x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.ItemsPattern"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.KeyValuePattern+keyValuePattern :: Typed.TypedTerm Syntax.LiteralExpressionOrAttribute -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.KeyValuePattern+keyValuePattern key value =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.KeyValuePattern"),+      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.python.syntax.KeyValuePattern+keyValuePatternKey :: Typed.TypedTerm Syntax.KeyValuePattern -> Typed.TypedTerm Syntax.LiteralExpressionOrAttribute+keyValuePatternKey x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.KeyValuePattern"),+        Core.projectionFieldName = (Core.Name "key")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the value field of hydra.python.syntax.KeyValuePattern+keyValuePatternValue :: Typed.TypedTerm Syntax.KeyValuePattern -> Typed.TypedTerm Syntax.Pattern+keyValuePatternValue x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.KeyValuePattern"),+        Core.projectionFieldName = (Core.Name "value")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the key field of hydra.python.syntax.KeyValuePattern+keyValuePatternWithKey :: Typed.TypedTerm Syntax.KeyValuePattern -> Typed.TypedTerm Syntax.LiteralExpressionOrAttribute -> Typed.TypedTerm Syntax.KeyValuePattern+keyValuePatternWithKey original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.KeyValuePattern"),+      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.python.syntax.KeyValuePattern"),+              Core.projectionFieldName = (Core.Name "value")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the value field of hydra.python.syntax.KeyValuePattern+keyValuePatternWithValue :: Typed.TypedTerm Syntax.KeyValuePattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.KeyValuePattern+keyValuePatternWithValue original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.KeyValuePattern"),+      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.python.syntax.KeyValuePattern"),+              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.python.syntax.KeywordPattern+keywordPattern :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.KeywordPattern+keywordPattern name pattern =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.KeywordPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "pattern"),+          Core.fieldTerm = (Typed.unTypedTerm pattern)}]}))++-- | DSL accessor for the name field of hydra.python.syntax.KeywordPattern+keywordPatternName :: Typed.TypedTerm Syntax.KeywordPattern -> Typed.TypedTerm Syntax.Name+keywordPatternName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.KeywordPattern"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the pattern field of hydra.python.syntax.KeywordPattern+keywordPatternPattern :: Typed.TypedTerm Syntax.KeywordPattern -> Typed.TypedTerm Syntax.Pattern+keywordPatternPattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.KeywordPattern"),+        Core.projectionFieldName = (Core.Name "pattern")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.python.syntax.KeywordPattern+keywordPatternWithName :: Typed.TypedTerm Syntax.KeywordPattern -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.KeywordPattern+keywordPatternWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.KeywordPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "pattern"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.KeywordPattern"),+              Core.projectionFieldName = (Core.Name "pattern")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the pattern field of hydra.python.syntax.KeywordPattern+keywordPatternWithPattern :: Typed.TypedTerm Syntax.KeywordPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.KeywordPattern+keywordPatternWithPattern original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.KeywordPattern"),+      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.python.syntax.KeywordPattern"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "pattern"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.python.syntax.KeywordPatterns wrapper+keywordPatterns :: Typed.TypedTerm [Syntax.KeywordPattern] -> Typed.TypedTerm Syntax.KeywordPatterns+keywordPatterns x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.KeywordPatterns"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.Keywords wrapper+keywords :: Typed.TypedTerm Syntax.ParamNoDefault -> Typed.TypedTerm Syntax.Keywords+keywords x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Keywords"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.Kvpair+kvpair :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Kvpair+kvpair key value =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Kvpair"),+      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.python.syntax.Kvpair+kvpairKey :: Typed.TypedTerm Syntax.Kvpair -> Typed.TypedTerm Syntax.Expression+kvpairKey x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Kvpair"),+        Core.projectionFieldName = (Core.Name "key")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the value field of hydra.python.syntax.Kvpair+kvpairValue :: Typed.TypedTerm Syntax.Kvpair -> Typed.TypedTerm Syntax.Expression+kvpairValue x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Kvpair"),+        Core.projectionFieldName = (Core.Name "value")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the key field of hydra.python.syntax.Kvpair+kvpairWithKey :: Typed.TypedTerm Syntax.Kvpair -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Kvpair+kvpairWithKey original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Kvpair"),+      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.python.syntax.Kvpair"),+              Core.projectionFieldName = (Core.Name "value")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the value field of hydra.python.syntax.Kvpair+kvpairWithValue :: Typed.TypedTerm Syntax.Kvpair -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Kvpair+kvpairWithValue original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Kvpair"),+      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.python.syntax.Kvpair"),+              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.python.syntax.Kwarg+kwarg :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Kwarg+kwarg name value =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Kwarg"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm value)}]}))++-- | DSL accessor for the name field of hydra.python.syntax.Kwarg+kwargName :: Typed.TypedTerm Syntax.Kwarg -> Typed.TypedTerm Syntax.Name+kwargName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Kwarg"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL injection for the doubleStarred variant of hydra.python.syntax.KwargOrDoubleStarred+kwargOrDoubleStarredDoubleStarred :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.KwargOrDoubleStarred+kwargOrDoubleStarredDoubleStarred x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.KwargOrDoubleStarred"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "doubleStarred"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the kwarg variant of hydra.python.syntax.KwargOrDoubleStarred+kwargOrDoubleStarredKwarg :: Typed.TypedTerm Syntax.Kwarg -> Typed.TypedTerm Syntax.KwargOrDoubleStarred+kwargOrDoubleStarredKwarg x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.KwargOrDoubleStarred"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "kwarg"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the kwarg variant of hydra.python.syntax.KwargOrStarred+kwargOrStarredKwarg :: Typed.TypedTerm Syntax.Kwarg -> Typed.TypedTerm Syntax.KwargOrStarred+kwargOrStarredKwarg x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.KwargOrStarred"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "kwarg"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starred variant of hydra.python.syntax.KwargOrStarred+kwargOrStarredStarred :: Typed.TypedTerm Syntax.StarredExpression -> Typed.TypedTerm Syntax.KwargOrStarred+kwargOrStarredStarred x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.KwargOrStarred"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starred"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL accessor for the value field of hydra.python.syntax.Kwarg+kwargValue :: Typed.TypedTerm Syntax.Kwarg -> Typed.TypedTerm Syntax.Expression+kwargValue x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Kwarg"),+        Core.projectionFieldName = (Core.Name "value")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.python.syntax.Kwarg+kwargWithName :: Typed.TypedTerm Syntax.Kwarg -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Kwarg+kwargWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Kwarg"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Kwarg"),+              Core.projectionFieldName = (Core.Name "value")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the value field of hydra.python.syntax.Kwarg+kwargWithValue :: Typed.TypedTerm Syntax.Kwarg -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Kwarg+kwargWithValue original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Kwarg"),+      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.python.syntax.Kwarg"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.Lambda+lambda :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Lambda+lambda params body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Lambda"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Typed.unTypedTerm params)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.Lambda+lambdaBody :: Typed.TypedTerm Syntax.Lambda -> Typed.TypedTerm Syntax.Expression+lambdaBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Lambda"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.LambdaKwds wrapper+lambdaKwds :: Typed.TypedTerm Syntax.LambdaParamNoDefault -> Typed.TypedTerm Syntax.LambdaKwds+lambdaKwds x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.LambdaKwds"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.LambdaParamMaybeDefault+lambdaParamMaybeDefault :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.Default) -> Typed.TypedTerm Syntax.LambdaParamMaybeDefault+lambdaParamMaybeDefault param default_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm param)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm default_)}]}))++-- | DSL accessor for the default field of hydra.python.syntax.LambdaParamMaybeDefault+lambdaParamMaybeDefaultDefault :: Typed.TypedTerm Syntax.LambdaParamMaybeDefault -> Typed.TypedTerm (Maybe Syntax.Default)+lambdaParamMaybeDefaultDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"),+        Core.projectionFieldName = (Core.Name "default")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the param field of hydra.python.syntax.LambdaParamMaybeDefault+lambdaParamMaybeDefaultParam :: Typed.TypedTerm Syntax.LambdaParamMaybeDefault -> Typed.TypedTerm Syntax.Name+lambdaParamMaybeDefaultParam x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"),+        Core.projectionFieldName = (Core.Name "param")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the default field of hydra.python.syntax.LambdaParamMaybeDefault+lambdaParamMaybeDefaultWithDefault :: Typed.TypedTerm Syntax.LambdaParamMaybeDefault -> Typed.TypedTerm (Maybe Syntax.Default) -> Typed.TypedTerm Syntax.LambdaParamMaybeDefault+lambdaParamMaybeDefaultWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"),+              Core.projectionFieldName = (Core.Name "param")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the param field of hydra.python.syntax.LambdaParamMaybeDefault+lambdaParamMaybeDefaultWithParam :: Typed.TypedTerm Syntax.LambdaParamMaybeDefault -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.LambdaParamMaybeDefault+lambdaParamMaybeDefaultWithParam original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.LambdaParamNoDefault wrapper+lambdaParamNoDefault :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.LambdaParamNoDefault+lambdaParamNoDefault x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.LambdaParamNoDefault"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.LambdaParamWithDefault+lambdaParamWithDefault :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.Default) -> Typed.TypedTerm Syntax.LambdaParamWithDefault+lambdaParamWithDefault param default_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParamWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm param)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm default_)}]}))++-- | DSL accessor for the default field of hydra.python.syntax.LambdaParamWithDefault+lambdaParamWithDefaultDefault :: Typed.TypedTerm Syntax.LambdaParamWithDefault -> Typed.TypedTerm (Maybe Syntax.Default)+lambdaParamWithDefaultDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParamWithDefault"),+        Core.projectionFieldName = (Core.Name "default")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the param field of hydra.python.syntax.LambdaParamWithDefault+lambdaParamWithDefaultParam :: Typed.TypedTerm Syntax.LambdaParamWithDefault -> Typed.TypedTerm Syntax.Name+lambdaParamWithDefaultParam x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParamWithDefault"),+        Core.projectionFieldName = (Core.Name "param")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the default field of hydra.python.syntax.LambdaParamWithDefault+lambdaParamWithDefaultWithDefault :: Typed.TypedTerm Syntax.LambdaParamWithDefault -> Typed.TypedTerm (Maybe Syntax.Default) -> Typed.TypedTerm Syntax.LambdaParamWithDefault+lambdaParamWithDefaultWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParamWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParamWithDefault"),+              Core.projectionFieldName = (Core.Name "param")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the param field of hydra.python.syntax.LambdaParamWithDefault+lambdaParamWithDefaultWithParam :: Typed.TypedTerm Syntax.LambdaParamWithDefault -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.LambdaParamWithDefault+lambdaParamWithDefaultWithParam original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParamWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParamWithDefault"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.LambdaParameters+lambdaParameters :: Typed.TypedTerm (Maybe Syntax.LambdaSlashNoDefault) -> Typed.TypedTerm [Syntax.LambdaParamNoDefault] -> Typed.TypedTerm [Syntax.LambdaParamWithDefault] -> Typed.TypedTerm (Maybe Syntax.LambdaStarEtc) -> Typed.TypedTerm Syntax.LambdaParameters+lambdaParameters slashNoDefault paramNoDefault paramWithDefault starEtc =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slashNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm slashNoDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramNoDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramWithDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm starEtc)}]}))++-- | DSL accessor for the paramNoDefault field of hydra.python.syntax.LambdaParameters+lambdaParametersParamNoDefault :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm [Syntax.LambdaParamNoDefault]+lambdaParametersParamNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+        Core.projectionFieldName = (Core.Name "paramNoDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramWithDefault field of hydra.python.syntax.LambdaParameters+lambdaParametersParamWithDefault :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm [Syntax.LambdaParamWithDefault]+lambdaParametersParamWithDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+        Core.projectionFieldName = (Core.Name "paramWithDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the slashNoDefault field of hydra.python.syntax.LambdaParameters+lambdaParametersSlashNoDefault :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm (Maybe Syntax.LambdaSlashNoDefault)+lambdaParametersSlashNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+        Core.projectionFieldName = (Core.Name "slashNoDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the starEtc field of hydra.python.syntax.LambdaParameters+lambdaParametersStarEtc :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm (Maybe Syntax.LambdaStarEtc)+lambdaParametersStarEtc x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+        Core.projectionFieldName = (Core.Name "starEtc")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the paramNoDefault field of hydra.python.syntax.LambdaParameters+lambdaParametersWithParamNoDefault :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm [Syntax.LambdaParamNoDefault] -> Typed.TypedTerm Syntax.LambdaParameters+lambdaParametersWithParamNoDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slashNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "slashNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the paramWithDefault field of hydra.python.syntax.LambdaParameters+lambdaParametersWithParamWithDefault :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm [Syntax.LambdaParamWithDefault] -> Typed.TypedTerm Syntax.LambdaParameters+lambdaParametersWithParamWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slashNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "slashNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the slashNoDefault field of hydra.python.syntax.LambdaParameters+lambdaParametersWithSlashNoDefault :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm (Maybe Syntax.LambdaSlashNoDefault) -> Typed.TypedTerm Syntax.LambdaParameters+lambdaParametersWithSlashNoDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slashNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the starEtc field of hydra.python.syntax.LambdaParameters+lambdaParametersWithStarEtc :: Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm (Maybe Syntax.LambdaStarEtc) -> Typed.TypedTerm Syntax.LambdaParameters+lambdaParametersWithStarEtc original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slashNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "slashNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL accessor for the params field of hydra.python.syntax.Lambda+lambdaParams :: Typed.TypedTerm Syntax.Lambda -> Typed.TypedTerm Syntax.LambdaParameters+lambdaParams x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Lambda"),+        Core.projectionFieldName = (Core.Name "params")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.LambdaSlashNoDefault+lambdaSlashNoDefault :: Typed.TypedTerm [Syntax.LambdaParamNoDefault] -> Typed.TypedTerm Syntax.LambdaSlashNoDefault+lambdaSlashNoDefault parameters =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaSlashNoDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "parameters"),+          Core.fieldTerm = (Typed.unTypedTerm parameters)}]}))++-- | DSL accessor for the parameters field of hydra.python.syntax.LambdaSlashNoDefault+lambdaSlashNoDefaultParameters :: Typed.TypedTerm Syntax.LambdaSlashNoDefault -> Typed.TypedTerm [Syntax.LambdaParamNoDefault]+lambdaSlashNoDefaultParameters x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaSlashNoDefault"),+        Core.projectionFieldName = (Core.Name "parameters")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the parameters field of hydra.python.syntax.LambdaSlashNoDefault+lambdaSlashNoDefaultWithParameters :: Typed.TypedTerm Syntax.LambdaSlashNoDefault -> Typed.TypedTerm [Syntax.LambdaParamNoDefault] -> Typed.TypedTerm Syntax.LambdaSlashNoDefault+lambdaSlashNoDefaultWithParameters original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaSlashNoDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "parameters"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.LambdaSlashWithDefault+lambdaSlashWithDefault :: Typed.TypedTerm [Syntax.LambdaParamNoDefault] -> Typed.TypedTerm [Syntax.LambdaParamWithDefault] -> Typed.TypedTerm Syntax.LambdaSlashWithDefault+lambdaSlashWithDefault paramNoDefault paramWithDefault =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaSlashWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramNoDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramWithDefault)}]}))++-- | DSL accessor for the paramNoDefault field of hydra.python.syntax.LambdaSlashWithDefault+lambdaSlashWithDefaultParamNoDefault :: Typed.TypedTerm Syntax.LambdaSlashWithDefault -> Typed.TypedTerm [Syntax.LambdaParamNoDefault]+lambdaSlashWithDefaultParamNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaSlashWithDefault"),+        Core.projectionFieldName = (Core.Name "paramNoDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramWithDefault field of hydra.python.syntax.LambdaSlashWithDefault+lambdaSlashWithDefaultParamWithDefault :: Typed.TypedTerm Syntax.LambdaSlashWithDefault -> Typed.TypedTerm [Syntax.LambdaParamWithDefault]+lambdaSlashWithDefaultParamWithDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaSlashWithDefault"),+        Core.projectionFieldName = (Core.Name "paramWithDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the paramNoDefault field of hydra.python.syntax.LambdaSlashWithDefault+lambdaSlashWithDefaultWithParamNoDefault :: Typed.TypedTerm Syntax.LambdaSlashWithDefault -> Typed.TypedTerm [Syntax.LambdaParamNoDefault] -> Typed.TypedTerm Syntax.LambdaSlashWithDefault+lambdaSlashWithDefaultWithParamNoDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaSlashWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaSlashWithDefault"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the paramWithDefault field of hydra.python.syntax.LambdaSlashWithDefault+lambdaSlashWithDefaultWithParamWithDefault :: Typed.TypedTerm Syntax.LambdaSlashWithDefault -> Typed.TypedTerm [Syntax.LambdaParamWithDefault] -> Typed.TypedTerm Syntax.LambdaSlashWithDefault+lambdaSlashWithDefaultWithParamWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.LambdaSlashWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.LambdaSlashWithDefault"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the kwds variant of hydra.python.syntax.LambdaStarEtc+lambdaStarEtcKwds :: Typed.TypedTerm Syntax.LambdaKwds -> Typed.TypedTerm Syntax.LambdaStarEtc+lambdaStarEtcKwds x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LambdaStarEtc"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "kwds"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the paramMaybeDefault variant of hydra.python.syntax.LambdaStarEtc+lambdaStarEtcParamMaybeDefault :: Typed.TypedTerm [Syntax.LambdaParamMaybeDefault] -> Typed.TypedTerm Syntax.LambdaStarEtc+lambdaStarEtcParamMaybeDefault x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LambdaStarEtc"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "paramMaybeDefault"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the paramNoDefault variant of hydra.python.syntax.LambdaStarEtc+lambdaStarEtcParamNoDefault :: Typed.TypedTerm Syntax.LambdaParamNoDefault -> Typed.TypedTerm Syntax.LambdaStarEtc+lambdaStarEtcParamNoDefault x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LambdaStarEtc"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "paramNoDefault"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the star variant of hydra.python.syntax.LambdaStarEtc+lambdaStarEtcStar :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.LambdaStarEtc+lambdaStarEtcStar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LambdaStarEtc"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "star"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL updater for the body field of hydra.python.syntax.Lambda+lambdaWithBody :: Typed.TypedTerm Syntax.Lambda -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Lambda+lambdaWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Lambda"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Lambda"),+              Core.projectionFieldName = (Core.Name "params")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the params field of hydra.python.syntax.Lambda+lambdaWithParams :: Typed.TypedTerm Syntax.Lambda -> Typed.TypedTerm Syntax.LambdaParameters -> Typed.TypedTerm Syntax.Lambda+lambdaWithParams original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Lambda"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "params"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Lambda"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.List wrapper+list :: Typed.TypedTerm [Syntax.StarNamedExpression] -> Typed.TypedTerm Syntax.List+list x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.List"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.Listcomp+listcomp :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm Syntax.Listcomp+listcomp expression forIfClauses =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Listcomp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Typed.unTypedTerm forIfClauses)}]}))++-- | DSL accessor for the expression field of hydra.python.syntax.Listcomp+listcompExpression :: Typed.TypedTerm Syntax.Listcomp -> Typed.TypedTerm Syntax.NamedExpression+listcompExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Listcomp"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the forIfClauses field of hydra.python.syntax.Listcomp+listcompForIfClauses :: Typed.TypedTerm Syntax.Listcomp -> Typed.TypedTerm Syntax.ForIfClauses+listcompForIfClauses x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Listcomp"),+        Core.projectionFieldName = (Core.Name "forIfClauses")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.python.syntax.Listcomp+listcompWithExpression :: Typed.TypedTerm Syntax.Listcomp -> Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.Listcomp+listcompWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Listcomp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Listcomp"),+              Core.projectionFieldName = (Core.Name "forIfClauses")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the forIfClauses field of hydra.python.syntax.Listcomp+listcompWithForIfClauses :: Typed.TypedTerm Syntax.Listcomp -> Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm Syntax.Listcomp+listcompWithForIfClauses original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Listcomp"),+      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.python.syntax.Listcomp"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the complex variant of hydra.python.syntax.LiteralExpression+literalExpressionComplex :: Typed.TypedTerm Syntax.ComplexNumber -> Typed.TypedTerm Syntax.LiteralExpression+literalExpressionComplex x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LiteralExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "complex"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the false variant of hydra.python.syntax.LiteralExpression+literalExpressionFalse :: Typed.TypedTerm Syntax.LiteralExpression+literalExpressionFalse =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LiteralExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "false"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the none variant of hydra.python.syntax.LiteralExpression+literalExpressionNone :: Typed.TypedTerm Syntax.LiteralExpression+literalExpressionNone =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LiteralExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "none"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the number variant of hydra.python.syntax.LiteralExpression+literalExpressionNumber :: Typed.TypedTerm Syntax.SignedNumber -> Typed.TypedTerm Syntax.LiteralExpression+literalExpressionNumber x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LiteralExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "number"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the attribute variant of hydra.python.syntax.LiteralExpressionOrAttribute+literalExpressionOrAttributeAttribute :: Typed.TypedTerm Syntax.Attribute -> Typed.TypedTerm Syntax.LiteralExpressionOrAttribute+literalExpressionOrAttributeAttribute x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LiteralExpressionOrAttribute"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "attribute"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the literal variant of hydra.python.syntax.LiteralExpressionOrAttribute+literalExpressionOrAttributeLiteral :: Typed.TypedTerm Syntax.LiteralExpression -> Typed.TypedTerm Syntax.LiteralExpressionOrAttribute+literalExpressionOrAttributeLiteral x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LiteralExpressionOrAttribute"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "literal"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the string variant of hydra.python.syntax.LiteralExpression+literalExpressionString :: Typed.TypedTerm Syntax.String_ -> Typed.TypedTerm Syntax.LiteralExpression+literalExpressionString x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LiteralExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "string"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the true variant of hydra.python.syntax.LiteralExpression+literalExpressionTrue :: Typed.TypedTerm Syntax.LiteralExpression+literalExpressionTrue =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.LiteralExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "true"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.python.syntax.MappingPattern+mappingPattern :: Typed.TypedTerm (Maybe Syntax.ItemsPattern) -> Typed.TypedTerm (Maybe Syntax.DoubleStarPattern) -> Typed.TypedTerm Syntax.MappingPattern+mappingPattern items doubleStar =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.MappingPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "items"),+          Core.fieldTerm = (Typed.unTypedTerm items)},+        Core.Field {+          Core.fieldName = (Core.Name "doubleStar"),+          Core.fieldTerm = (Typed.unTypedTerm doubleStar)}]}))++-- | DSL accessor for the doubleStar field of hydra.python.syntax.MappingPattern+mappingPatternDoubleStar :: Typed.TypedTerm Syntax.MappingPattern -> Typed.TypedTerm (Maybe Syntax.DoubleStarPattern)+mappingPatternDoubleStar x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.MappingPattern"),+        Core.projectionFieldName = (Core.Name "doubleStar")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the items field of hydra.python.syntax.MappingPattern+mappingPatternItems :: Typed.TypedTerm Syntax.MappingPattern -> Typed.TypedTerm (Maybe Syntax.ItemsPattern)+mappingPatternItems x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.MappingPattern"),+        Core.projectionFieldName = (Core.Name "items")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the doubleStar field of hydra.python.syntax.MappingPattern+mappingPatternWithDoubleStar :: Typed.TypedTerm Syntax.MappingPattern -> Typed.TypedTerm (Maybe Syntax.DoubleStarPattern) -> Typed.TypedTerm Syntax.MappingPattern+mappingPatternWithDoubleStar original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.MappingPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "items"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.MappingPattern"),+              Core.projectionFieldName = (Core.Name "items")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "doubleStar"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the items field of hydra.python.syntax.MappingPattern+mappingPatternWithItems :: Typed.TypedTerm Syntax.MappingPattern -> Typed.TypedTerm (Maybe Syntax.ItemsPattern) -> Typed.TypedTerm Syntax.MappingPattern+mappingPatternWithItems original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.MappingPattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "items"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "doubleStar"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.MappingPattern"),+              Core.projectionFieldName = (Core.Name "doubleStar")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.MatchStatement+matchStatement :: Typed.TypedTerm Syntax.SubjectExpression -> Typed.TypedTerm [Syntax.CaseBlock] -> Typed.TypedTerm Syntax.MatchStatement+matchStatement subject cases =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.MatchStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "subject"),+          Core.fieldTerm = (Typed.unTypedTerm subject)},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Typed.unTypedTerm cases)}]}))++-- | DSL accessor for the cases field of hydra.python.syntax.MatchStatement+matchStatementCases :: Typed.TypedTerm Syntax.MatchStatement -> Typed.TypedTerm [Syntax.CaseBlock]+matchStatementCases x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.MatchStatement"),+        Core.projectionFieldName = (Core.Name "cases")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the subject field of hydra.python.syntax.MatchStatement+matchStatementSubject :: Typed.TypedTerm Syntax.MatchStatement -> Typed.TypedTerm Syntax.SubjectExpression+matchStatementSubject x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.MatchStatement"),+        Core.projectionFieldName = (Core.Name "subject")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the cases field of hydra.python.syntax.MatchStatement+matchStatementWithCases :: Typed.TypedTerm Syntax.MatchStatement -> Typed.TypedTerm [Syntax.CaseBlock] -> Typed.TypedTerm Syntax.MatchStatement+matchStatementWithCases original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.MatchStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "subject"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.MatchStatement"),+              Core.projectionFieldName = (Core.Name "subject")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "cases"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the subject field of hydra.python.syntax.MatchStatement+matchStatementWithSubject :: Typed.TypedTerm Syntax.MatchStatement -> Typed.TypedTerm Syntax.SubjectExpression -> Typed.TypedTerm Syntax.MatchStatement+matchStatementWithSubject original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.MatchStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "subject"),+          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.python.syntax.MatchStatement"),+              Core.projectionFieldName = (Core.Name "cases")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.MaybeSequencePattern wrapper+maybeSequencePattern :: Typed.TypedTerm [Syntax.MaybeStarPattern] -> Typed.TypedTerm Syntax.MaybeSequencePattern+maybeSequencePattern x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.MaybeSequencePattern"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the pattern variant of hydra.python.syntax.MaybeStarPattern+maybeStarPatternPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.MaybeStarPattern+maybeStarPatternPattern x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.MaybeStarPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "pattern"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the star variant of hydra.python.syntax.MaybeStarPattern+maybeStarPatternStar :: Typed.TypedTerm Syntax.StarPattern -> Typed.TypedTerm Syntax.MaybeStarPattern+maybeStarPatternStar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.MaybeStarPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "star"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.Module wrapper+module_ :: Typed.TypedTerm [[Syntax.Statement]] -> Typed.TypedTerm Syntax.Module+module_ x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Module"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.Name wrapper+name :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Name+name x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Name"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.NameOrAttribute wrapper+nameOrAttribute :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.NameOrAttribute+nameOrAttribute x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.NameOrAttribute"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the assignment variant of hydra.python.syntax.NamedExpression+namedExpressionAssignment :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.NamedExpression+namedExpressionAssignment x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.NamedExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "assignment"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.NamedExpression+namedExpressionSimple :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.NamedExpression+namedExpressionSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.NamedExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtc :: Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation -> Typed.TypedTerm [Syntax.ParamMaybeDefault] -> Typed.TypedTerm (Maybe Syntax.Keywords) -> Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtc paramNoDefaultStarAnnotation paramMaybeDefault keywords =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefaultStarAnnotation"),+          Core.fieldTerm = (Typed.unTypedTerm paramNoDefaultStarAnnotation)},+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramMaybeDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Typed.unTypedTerm keywords)}]}))++-- | DSL accessor for the keywords field of hydra.python.syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcKeywords :: Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc -> Typed.TypedTerm (Maybe Syntax.Keywords)+noDefaultStarAnnotationStarEtcKeywords x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+        Core.projectionFieldName = (Core.Name "keywords")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramMaybeDefault field of hydra.python.syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcParamMaybeDefault :: Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc -> Typed.TypedTerm [Syntax.ParamMaybeDefault]+noDefaultStarAnnotationStarEtcParamMaybeDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+        Core.projectionFieldName = (Core.Name "paramMaybeDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramNoDefaultStarAnnotation field of hydra.python.syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcParamNoDefaultStarAnnotation :: Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc -> Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation+noDefaultStarAnnotationStarEtcParamNoDefaultStarAnnotation x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+        Core.projectionFieldName = (Core.Name "paramNoDefaultStarAnnotation")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the keywords field of hydra.python.syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcWithKeywords :: Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc -> Typed.TypedTerm (Maybe Syntax.Keywords) -> Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcWithKeywords original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefaultStarAnnotation"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+              Core.projectionFieldName = (Core.Name "paramNoDefaultStarAnnotation")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+              Core.projectionFieldName = (Core.Name "paramMaybeDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the paramMaybeDefault field of hydra.python.syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcWithParamMaybeDefault :: Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc -> Typed.TypedTerm [Syntax.ParamMaybeDefault] -> Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcWithParamMaybeDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefaultStarAnnotation"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+              Core.projectionFieldName = (Core.Name "paramNoDefaultStarAnnotation")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+              Core.projectionFieldName = (Core.Name "keywords")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the paramNoDefaultStarAnnotation field of hydra.python.syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcWithParamNoDefaultStarAnnotation :: Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc -> Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation -> Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc+noDefaultStarAnnotationStarEtcWithParamNoDefaultStarAnnotation original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefaultStarAnnotation"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+              Core.projectionFieldName = (Core.Name "paramMaybeDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"),+              Core.projectionFieldName = (Core.Name "keywords")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.NoDefaultStarEtc+noDefaultStarEtc :: Typed.TypedTerm Syntax.ParamNoDefault -> Typed.TypedTerm [Syntax.ParamMaybeDefault] -> Typed.TypedTerm (Maybe Syntax.Keywords) -> Typed.TypedTerm Syntax.NoDefaultStarEtc+noDefaultStarEtc paramNoDefault paramMaybeDefault keywords =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramNoDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramMaybeDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Typed.unTypedTerm keywords)}]}))++-- | DSL accessor for the keywords field of hydra.python.syntax.NoDefaultStarEtc+noDefaultStarEtcKeywords :: Typed.TypedTerm Syntax.NoDefaultStarEtc -> Typed.TypedTerm (Maybe Syntax.Keywords)+noDefaultStarEtcKeywords x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+        Core.projectionFieldName = (Core.Name "keywords")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramMaybeDefault field of hydra.python.syntax.NoDefaultStarEtc+noDefaultStarEtcParamMaybeDefault :: Typed.TypedTerm Syntax.NoDefaultStarEtc -> Typed.TypedTerm [Syntax.ParamMaybeDefault]+noDefaultStarEtcParamMaybeDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+        Core.projectionFieldName = (Core.Name "paramMaybeDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramNoDefault field of hydra.python.syntax.NoDefaultStarEtc+noDefaultStarEtcParamNoDefault :: Typed.TypedTerm Syntax.NoDefaultStarEtc -> Typed.TypedTerm Syntax.ParamNoDefault+noDefaultStarEtcParamNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+        Core.projectionFieldName = (Core.Name "paramNoDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the keywords field of hydra.python.syntax.NoDefaultStarEtc+noDefaultStarEtcWithKeywords :: Typed.TypedTerm Syntax.NoDefaultStarEtc -> Typed.TypedTerm (Maybe Syntax.Keywords) -> Typed.TypedTerm Syntax.NoDefaultStarEtc+noDefaultStarEtcWithKeywords original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+              Core.projectionFieldName = (Core.Name "paramMaybeDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the paramMaybeDefault field of hydra.python.syntax.NoDefaultStarEtc+noDefaultStarEtcWithParamMaybeDefault :: Typed.TypedTerm Syntax.NoDefaultStarEtc -> Typed.TypedTerm [Syntax.ParamMaybeDefault] -> Typed.TypedTerm Syntax.NoDefaultStarEtc+noDefaultStarEtcWithParamMaybeDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+              Core.projectionFieldName = (Core.Name "keywords")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the paramNoDefault field of hydra.python.syntax.NoDefaultStarEtc+noDefaultStarEtcWithParamNoDefault :: Typed.TypedTerm Syntax.NoDefaultStarEtc -> Typed.TypedTerm Syntax.ParamNoDefault -> Typed.TypedTerm Syntax.NoDefaultStarEtc+noDefaultStarEtcWithParamNoDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramMaybeDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+              Core.projectionFieldName = (Core.Name "paramMaybeDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "keywords"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.NoDefaultStarEtc"),+              Core.projectionFieldName = (Core.Name "keywords")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the float variant of hydra.python.syntax.Number+numberFloat :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.Number+numberFloat x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Number"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "float"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the imaginary variant of hydra.python.syntax.Number+numberImaginary :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.Number+numberImaginary x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Number"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "imaginary"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the integer variant of hydra.python.syntax.Number+numberInteger :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.Number+numberInteger x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Number"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "integer"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.OpenSequencePattern+openSequencePattern :: Typed.TypedTerm Syntax.MaybeStarPattern -> Typed.TypedTerm (Maybe Syntax.MaybeSequencePattern) -> Typed.TypedTerm Syntax.OpenSequencePattern+openSequencePattern head tail =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.OpenSequencePattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Typed.unTypedTerm head)},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Typed.unTypedTerm tail)}]}))++-- | DSL accessor for the head field of hydra.python.syntax.OpenSequencePattern+openSequencePatternHead :: Typed.TypedTerm Syntax.OpenSequencePattern -> Typed.TypedTerm Syntax.MaybeStarPattern+openSequencePatternHead x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.OpenSequencePattern"),+        Core.projectionFieldName = (Core.Name "head")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the tail field of hydra.python.syntax.OpenSequencePattern+openSequencePatternTail :: Typed.TypedTerm Syntax.OpenSequencePattern -> Typed.TypedTerm (Maybe Syntax.MaybeSequencePattern)+openSequencePatternTail x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.OpenSequencePattern"),+        Core.projectionFieldName = (Core.Name "tail")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the head field of hydra.python.syntax.OpenSequencePattern+openSequencePatternWithHead :: Typed.TypedTerm Syntax.OpenSequencePattern -> Typed.TypedTerm Syntax.MaybeStarPattern -> Typed.TypedTerm Syntax.OpenSequencePattern+openSequencePatternWithHead original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.OpenSequencePattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.OpenSequencePattern"),+              Core.projectionFieldName = (Core.Name "tail")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the tail field of hydra.python.syntax.OpenSequencePattern+openSequencePatternWithTail :: Typed.TypedTerm Syntax.OpenSequencePattern -> Typed.TypedTerm (Maybe Syntax.MaybeSequencePattern) -> Typed.TypedTerm Syntax.OpenSequencePattern+openSequencePatternWithTail original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.OpenSequencePattern"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.OpenSequencePattern"),+              Core.projectionFieldName = (Core.Name "head")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.python.syntax.OrPattern wrapper+orPattern :: Typed.TypedTerm [Syntax.ClosedPattern] -> Typed.TypedTerm Syntax.OrPattern+orPattern x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.OrPattern"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.Param+param :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.Annotation) -> Typed.TypedTerm Syntax.Param+param name annotation =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Param"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "annotation"),+          Core.fieldTerm = (Typed.unTypedTerm annotation)}]}))++-- | DSL accessor for the annotation field of hydra.python.syntax.Param+paramAnnotation :: Typed.TypedTerm Syntax.Param -> Typed.TypedTerm (Maybe Syntax.Annotation)+paramAnnotation x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Param"),+        Core.projectionFieldName = (Core.Name "annotation")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.ParamMaybeDefault+paramMaybeDefault :: Typed.TypedTerm Syntax.Param -> Typed.TypedTerm (Maybe Syntax.Default) -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ParamMaybeDefault+paramMaybeDefault param default_ typeComment =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm param)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm default_)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm typeComment)}]}))++-- | DSL accessor for the default field of hydra.python.syntax.ParamMaybeDefault+paramMaybeDefaultDefault :: Typed.TypedTerm Syntax.ParamMaybeDefault -> Typed.TypedTerm (Maybe Syntax.Default)+paramMaybeDefaultDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+        Core.projectionFieldName = (Core.Name "default")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the param field of hydra.python.syntax.ParamMaybeDefault+paramMaybeDefaultParam :: Typed.TypedTerm Syntax.ParamMaybeDefault -> Typed.TypedTerm Syntax.Param+paramMaybeDefaultParam x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+        Core.projectionFieldName = (Core.Name "param")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeComment field of hydra.python.syntax.ParamMaybeDefault+paramMaybeDefaultTypeComment :: Typed.TypedTerm Syntax.ParamMaybeDefault -> Typed.TypedTerm (Maybe Syntax.TypeComment)+paramMaybeDefaultTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+        Core.projectionFieldName = (Core.Name "typeComment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the default field of hydra.python.syntax.ParamMaybeDefault+paramMaybeDefaultWithDefault :: Typed.TypedTerm Syntax.ParamMaybeDefault -> Typed.TypedTerm (Maybe Syntax.Default) -> Typed.TypedTerm Syntax.ParamMaybeDefault+paramMaybeDefaultWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+              Core.projectionFieldName = (Core.Name "param")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the param field of hydra.python.syntax.ParamMaybeDefault+paramMaybeDefaultWithParam :: Typed.TypedTerm Syntax.ParamMaybeDefault -> Typed.TypedTerm Syntax.Param -> Typed.TypedTerm Syntax.ParamMaybeDefault+paramMaybeDefaultWithParam original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeComment field of hydra.python.syntax.ParamMaybeDefault+paramMaybeDefaultWithTypeComment :: Typed.TypedTerm Syntax.ParamMaybeDefault -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ParamMaybeDefault+paramMaybeDefaultWithTypeComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+              Core.projectionFieldName = (Core.Name "param")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamMaybeDefault"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL accessor for the name field of hydra.python.syntax.Param+paramName :: Typed.TypedTerm Syntax.Param -> Typed.TypedTerm Syntax.Name+paramName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Param"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.ParamNoDefault+paramNoDefault :: Typed.TypedTerm Syntax.Param -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ParamNoDefault+paramNoDefault param typeComment =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm param)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm typeComment)}]}))++-- | DSL accessor for the param field of hydra.python.syntax.ParamNoDefault+paramNoDefaultParam :: Typed.TypedTerm Syntax.ParamNoDefault -> Typed.TypedTerm Syntax.Param+paramNoDefaultParam x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefault"),+        Core.projectionFieldName = (Core.Name "param")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.ParamNoDefaultParameters+paramNoDefaultParameters :: Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm (Maybe Syntax.StarEtc) -> Typed.TypedTerm Syntax.ParamNoDefaultParameters+paramNoDefaultParameters paramNoDefault paramWithDefault starEtc =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramNoDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramWithDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm starEtc)}]}))++-- | DSL accessor for the paramNoDefault field of hydra.python.syntax.ParamNoDefaultParameters+paramNoDefaultParametersParamNoDefault :: Typed.TypedTerm Syntax.ParamNoDefaultParameters -> Typed.TypedTerm [Syntax.ParamNoDefault]+paramNoDefaultParametersParamNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+        Core.projectionFieldName = (Core.Name "paramNoDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramWithDefault field of hydra.python.syntax.ParamNoDefaultParameters+paramNoDefaultParametersParamWithDefault :: Typed.TypedTerm Syntax.ParamNoDefaultParameters -> Typed.TypedTerm [Syntax.ParamWithDefault]+paramNoDefaultParametersParamWithDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+        Core.projectionFieldName = (Core.Name "paramWithDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the starEtc field of hydra.python.syntax.ParamNoDefaultParameters+paramNoDefaultParametersStarEtc :: Typed.TypedTerm Syntax.ParamNoDefaultParameters -> Typed.TypedTerm (Maybe Syntax.StarEtc)+paramNoDefaultParametersStarEtc x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+        Core.projectionFieldName = (Core.Name "starEtc")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the paramNoDefault field of hydra.python.syntax.ParamNoDefaultParameters+paramNoDefaultParametersWithParamNoDefault :: Typed.TypedTerm Syntax.ParamNoDefaultParameters -> Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm Syntax.ParamNoDefaultParameters+paramNoDefaultParametersWithParamNoDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the paramWithDefault field of hydra.python.syntax.ParamNoDefaultParameters+paramNoDefaultParametersWithParamWithDefault :: Typed.TypedTerm Syntax.ParamNoDefaultParameters -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm Syntax.ParamNoDefaultParameters+paramNoDefaultParametersWithParamWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the starEtc field of hydra.python.syntax.ParamNoDefaultParameters+paramNoDefaultParametersWithStarEtc :: Typed.TypedTerm Syntax.ParamNoDefaultParameters -> Typed.TypedTerm (Maybe Syntax.StarEtc) -> Typed.TypedTerm Syntax.ParamNoDefaultParameters+paramNoDefaultParametersWithStarEtc original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.ParamNoDefaultStarAnnotation+paramNoDefaultStarAnnotation :: Typed.TypedTerm Syntax.ParamStarAnnotation -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation+paramNoDefaultStarAnnotation paramStarAnnotation typeComment =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramStarAnnotation"),+          Core.fieldTerm = (Typed.unTypedTerm paramStarAnnotation)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm typeComment)}]}))++-- | DSL accessor for the paramStarAnnotation field of hydra.python.syntax.ParamNoDefaultStarAnnotation+paramNoDefaultStarAnnotationParamStarAnnotation :: Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation -> Typed.TypedTerm Syntax.ParamStarAnnotation+paramNoDefaultStarAnnotationParamStarAnnotation x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"),+        Core.projectionFieldName = (Core.Name "paramStarAnnotation")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeComment field of hydra.python.syntax.ParamNoDefaultStarAnnotation+paramNoDefaultStarAnnotationTypeComment :: Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation -> Typed.TypedTerm (Maybe Syntax.TypeComment)+paramNoDefaultStarAnnotationTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"),+        Core.projectionFieldName = (Core.Name "typeComment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the paramStarAnnotation field of hydra.python.syntax.ParamNoDefaultStarAnnotation+paramNoDefaultStarAnnotationWithParamStarAnnotation :: Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation -> Typed.TypedTerm Syntax.ParamStarAnnotation -> Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation+paramNoDefaultStarAnnotationWithParamStarAnnotation original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramStarAnnotation"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeComment field of hydra.python.syntax.ParamNoDefaultStarAnnotation+paramNoDefaultStarAnnotationWithTypeComment :: Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ParamNoDefaultStarAnnotation+paramNoDefaultStarAnnotationWithTypeComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramStarAnnotation"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"),+              Core.projectionFieldName = (Core.Name "paramStarAnnotation")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL accessor for the typeComment field of hydra.python.syntax.ParamNoDefault+paramNoDefaultTypeComment :: Typed.TypedTerm Syntax.ParamNoDefault -> Typed.TypedTerm (Maybe Syntax.TypeComment)+paramNoDefaultTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefault"),+        Core.projectionFieldName = (Core.Name "typeComment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the param field of hydra.python.syntax.ParamNoDefault+paramNoDefaultWithParam :: Typed.TypedTerm Syntax.ParamNoDefault -> Typed.TypedTerm Syntax.Param -> Typed.TypedTerm Syntax.ParamNoDefault+paramNoDefaultWithParam original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefault"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeComment field of hydra.python.syntax.ParamNoDefault+paramNoDefaultWithTypeComment :: Typed.TypedTerm Syntax.ParamNoDefault -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ParamNoDefault+paramNoDefaultWithTypeComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamNoDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamNoDefault"),+              Core.projectionFieldName = (Core.Name "param")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.ParamStarAnnotation+paramStarAnnotation :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.StarAnnotation -> Typed.TypedTerm Syntax.ParamStarAnnotation+paramStarAnnotation name annotation =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamStarAnnotation"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "annotation"),+          Core.fieldTerm = (Typed.unTypedTerm annotation)}]}))++-- | DSL accessor for the annotation field of hydra.python.syntax.ParamStarAnnotation+paramStarAnnotationAnnotation :: Typed.TypedTerm Syntax.ParamStarAnnotation -> Typed.TypedTerm Syntax.StarAnnotation+paramStarAnnotationAnnotation x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamStarAnnotation"),+        Core.projectionFieldName = (Core.Name "annotation")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.ParamStarAnnotation+paramStarAnnotationName :: Typed.TypedTerm Syntax.ParamStarAnnotation -> Typed.TypedTerm Syntax.Name+paramStarAnnotationName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamStarAnnotation"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the annotation field of hydra.python.syntax.ParamStarAnnotation+paramStarAnnotationWithAnnotation :: Typed.TypedTerm Syntax.ParamStarAnnotation -> Typed.TypedTerm Syntax.StarAnnotation -> Typed.TypedTerm Syntax.ParamStarAnnotation+paramStarAnnotationWithAnnotation original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamStarAnnotation"),+      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.python.syntax.ParamStarAnnotation"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "annotation"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.python.syntax.ParamStarAnnotation+paramStarAnnotationWithName :: Typed.TypedTerm Syntax.ParamStarAnnotation -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.ParamStarAnnotation+paramStarAnnotationWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamStarAnnotation"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "annotation"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamStarAnnotation"),+              Core.projectionFieldName = (Core.Name "annotation")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the annotation field of hydra.python.syntax.Param+paramWithAnnotation :: Typed.TypedTerm Syntax.Param -> Typed.TypedTerm (Maybe Syntax.Annotation) -> Typed.TypedTerm Syntax.Param+paramWithAnnotation original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Param"),+      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.python.syntax.Param"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "annotation"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.ParamWithDefault+paramWithDefault :: Typed.TypedTerm Syntax.Param -> Typed.TypedTerm Syntax.Default -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ParamWithDefault+paramWithDefault param default_ typeComment =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm param)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm default_)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm typeComment)}]}))++-- | DSL accessor for the default field of hydra.python.syntax.ParamWithDefault+paramWithDefaultDefault :: Typed.TypedTerm Syntax.ParamWithDefault -> Typed.TypedTerm Syntax.Default+paramWithDefaultDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+        Core.projectionFieldName = (Core.Name "default")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the param field of hydra.python.syntax.ParamWithDefault+paramWithDefaultParam :: Typed.TypedTerm Syntax.ParamWithDefault -> Typed.TypedTerm Syntax.Param+paramWithDefaultParam x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+        Core.projectionFieldName = (Core.Name "param")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.ParamWithDefaultParameters+paramWithDefaultParameters :: Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm (Maybe Syntax.StarEtc) -> Typed.TypedTerm Syntax.ParamWithDefaultParameters+paramWithDefaultParameters paramWithDefault starEtc =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamWithDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramWithDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm starEtc)}]}))++-- | DSL accessor for the paramWithDefault field of hydra.python.syntax.ParamWithDefaultParameters+paramWithDefaultParametersParamWithDefault :: Typed.TypedTerm Syntax.ParamWithDefaultParameters -> Typed.TypedTerm [Syntax.ParamWithDefault]+paramWithDefaultParametersParamWithDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefaultParameters"),+        Core.projectionFieldName = (Core.Name "paramWithDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the starEtc field of hydra.python.syntax.ParamWithDefaultParameters+paramWithDefaultParametersStarEtc :: Typed.TypedTerm Syntax.ParamWithDefaultParameters -> Typed.TypedTerm (Maybe Syntax.StarEtc)+paramWithDefaultParametersStarEtc x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefaultParameters"),+        Core.projectionFieldName = (Core.Name "starEtc")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the paramWithDefault field of hydra.python.syntax.ParamWithDefaultParameters+paramWithDefaultParametersWithParamWithDefault :: Typed.TypedTerm Syntax.ParamWithDefaultParameters -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm Syntax.ParamWithDefaultParameters+paramWithDefaultParametersWithParamWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamWithDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefaultParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the starEtc field of hydra.python.syntax.ParamWithDefaultParameters+paramWithDefaultParametersWithStarEtc :: Typed.TypedTerm Syntax.ParamWithDefaultParameters -> Typed.TypedTerm (Maybe Syntax.StarEtc) -> Typed.TypedTerm Syntax.ParamWithDefaultParameters+paramWithDefaultParametersWithStarEtc original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamWithDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL accessor for the typeComment field of hydra.python.syntax.ParamWithDefault+paramWithDefaultTypeComment :: Typed.TypedTerm Syntax.ParamWithDefault -> Typed.TypedTerm (Maybe Syntax.TypeComment)+paramWithDefaultTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+        Core.projectionFieldName = (Core.Name "typeComment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the default field of hydra.python.syntax.ParamWithDefault+paramWithDefaultWithDefault :: Typed.TypedTerm Syntax.ParamWithDefault -> Typed.TypedTerm Syntax.Default -> Typed.TypedTerm Syntax.ParamWithDefault+paramWithDefaultWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+              Core.projectionFieldName = (Core.Name "param")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the param field of hydra.python.syntax.ParamWithDefault+paramWithDefaultWithParam :: Typed.TypedTerm Syntax.ParamWithDefault -> Typed.TypedTerm Syntax.Param -> Typed.TypedTerm Syntax.ParamWithDefault+paramWithDefaultWithParam original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeComment field of hydra.python.syntax.ParamWithDefault+paramWithDefaultWithTypeComment :: Typed.TypedTerm Syntax.ParamWithDefault -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.ParamWithDefault+paramWithDefaultWithTypeComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "param"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+              Core.projectionFieldName = (Core.Name "param")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ParamWithDefault"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.python.syntax.Param+paramWithName :: Typed.TypedTerm Syntax.Param -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.Param+paramWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Param"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "annotation"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Param"),+              Core.projectionFieldName = (Core.Name "annotation")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the paramNoDefault variant of hydra.python.syntax.Parameters+parametersParamNoDefault :: Typed.TypedTerm Syntax.ParamNoDefaultParameters -> Typed.TypedTerm Syntax.Parameters+parametersParamNoDefault x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Parameters"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "paramNoDefault"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the paramWithDefault variant of hydra.python.syntax.Parameters+parametersParamWithDefault :: Typed.TypedTerm Syntax.ParamWithDefaultParameters -> Typed.TypedTerm Syntax.Parameters+parametersParamWithDefault x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Parameters"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "paramWithDefault"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slashNoDefault variant of hydra.python.syntax.Parameters+parametersSlashNoDefault :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm Syntax.Parameters+parametersSlashNoDefault x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Parameters"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slashNoDefault"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slashWithDefault variant of hydra.python.syntax.Parameters+parametersSlashWithDefault :: Typed.TypedTerm Syntax.SlashWithDefaultParameters -> Typed.TypedTerm Syntax.Parameters+parametersSlashWithDefault x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Parameters"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slashWithDefault"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starEtc variant of hydra.python.syntax.Parameters+parametersStarEtc :: Typed.TypedTerm Syntax.StarEtc -> Typed.TypedTerm Syntax.Parameters+parametersStarEtc x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Parameters"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starEtc"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the as variant of hydra.python.syntax.Pattern+patternAs :: Typed.TypedTerm Syntax.AsPattern -> Typed.TypedTerm Syntax.Pattern+patternAs x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Pattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "as"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.PatternCaptureTarget wrapper+patternCaptureTarget :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.PatternCaptureTarget+patternCaptureTarget x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.PatternCaptureTarget"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the or variant of hydra.python.syntax.Pattern+patternOr :: Typed.TypedTerm Syntax.OrPattern -> Typed.TypedTerm Syntax.Pattern+patternOr x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Pattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "or"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the pattern variant of hydra.python.syntax.Patterns+patternsPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Patterns+patternsPattern x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Patterns"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "pattern"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the sequence variant of hydra.python.syntax.Patterns+patternsSequence :: Typed.TypedTerm Syntax.OpenSequencePattern -> Typed.TypedTerm Syntax.Patterns+patternsSequence x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Patterns"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "sequence"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the minus variant of hydra.python.syntax.PlusOrMinus+plusOrMinusMinus :: Typed.TypedTerm Syntax.PlusOrMinus+plusOrMinusMinus =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PlusOrMinus"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "minus"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the plus variant of hydra.python.syntax.PlusOrMinus+plusOrMinusPlus :: Typed.TypedTerm Syntax.PlusOrMinus+plusOrMinusPlus =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PlusOrMinus"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "plus"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the assignment variant of hydra.python.syntax.PosArg+posArgAssignment :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.PosArg+posArgAssignment x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PosArg"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "assignment"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the expression variant of hydra.python.syntax.PosArg+posArgExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.PosArg+posArgExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PosArg"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "expression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starred variant of hydra.python.syntax.PosArg+posArgStarred :: Typed.TypedTerm Syntax.StarredExpression -> Typed.TypedTerm Syntax.PosArg+posArgStarred x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PosArg"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starred"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.PositionalPatterns wrapper+positionalPatterns :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.PositionalPatterns+positionalPatterns x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.PositionalPatterns"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.Power+power :: Typed.TypedTerm Syntax.AwaitPrimary -> Typed.TypedTerm (Maybe Syntax.Factor) -> Typed.TypedTerm Syntax.Power+power lhs rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Power"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.Power+powerLhs :: Typed.TypedTerm Syntax.Power -> Typed.TypedTerm Syntax.AwaitPrimary+powerLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Power"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.Power+powerRhs :: Typed.TypedTerm Syntax.Power -> Typed.TypedTerm (Maybe Syntax.Factor)+powerRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Power"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.Power+powerWithLhs :: Typed.TypedTerm Syntax.Power -> Typed.TypedTerm Syntax.AwaitPrimary -> Typed.TypedTerm Syntax.Power+powerWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Power"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Power"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.Power+powerWithRhs :: Typed.TypedTerm Syntax.Power -> Typed.TypedTerm (Maybe Syntax.Factor) -> Typed.TypedTerm Syntax.Power+powerWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Power"),+      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.python.syntax.Power"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the compound variant of hydra.python.syntax.Primary+primaryCompound :: Typed.TypedTerm Syntax.PrimaryWithRhs -> Typed.TypedTerm Syntax.Primary+primaryCompound x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Primary"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "compound"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the call variant of hydra.python.syntax.PrimaryRhs+primaryRhsCall :: Typed.TypedTerm Syntax.Args -> Typed.TypedTerm Syntax.PrimaryRhs+primaryRhsCall x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PrimaryRhs"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "call"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the genexp variant of hydra.python.syntax.PrimaryRhs+primaryRhsGenexp :: Typed.TypedTerm Syntax.Genexp -> Typed.TypedTerm Syntax.PrimaryRhs+primaryRhsGenexp x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PrimaryRhs"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "genexp"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the project variant of hydra.python.syntax.PrimaryRhs+primaryRhsProject :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.PrimaryRhs+primaryRhsProject x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PrimaryRhs"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "project"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slices variant of hydra.python.syntax.PrimaryRhs+primaryRhsSlices :: Typed.TypedTerm Syntax.Slices -> Typed.TypedTerm Syntax.PrimaryRhs+primaryRhsSlices x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.PrimaryRhs"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slices"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.Primary+primarySimple :: Typed.TypedTerm Syntax.Atom -> Typed.TypedTerm Syntax.Primary+primarySimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Primary"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.PrimaryWithRhs+primaryWithRhs :: Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.PrimaryRhs -> Typed.TypedTerm Syntax.PrimaryWithRhs+primaryWithRhs primary rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.PrimaryWithRhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm primary)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the primary field of hydra.python.syntax.PrimaryWithRhs+primaryWithRhsPrimary :: Typed.TypedTerm Syntax.PrimaryWithRhs -> Typed.TypedTerm Syntax.Primary+primaryWithRhsPrimary x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.PrimaryWithRhs"),+        Core.projectionFieldName = (Core.Name "primary")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.PrimaryWithRhs+primaryWithRhsRhs :: Typed.TypedTerm Syntax.PrimaryWithRhs -> Typed.TypedTerm Syntax.PrimaryRhs+primaryWithRhsRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.PrimaryWithRhs"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the primary field of hydra.python.syntax.PrimaryWithRhs+primaryWithRhsWithPrimary :: Typed.TypedTerm Syntax.PrimaryWithRhs -> Typed.TypedTerm Syntax.Primary -> Typed.TypedTerm Syntax.PrimaryWithRhs+primaryWithRhsWithPrimary original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.PrimaryWithRhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          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.python.syntax.PrimaryWithRhs"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.PrimaryWithRhs+primaryWithRhsWithRhs :: Typed.TypedTerm Syntax.PrimaryWithRhs -> Typed.TypedTerm Syntax.PrimaryRhs -> Typed.TypedTerm Syntax.PrimaryWithRhs+primaryWithRhsWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.PrimaryWithRhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.PrimaryWithRhs"),+              Core.projectionFieldName = (Core.Name "primary")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the double variant of hydra.python.syntax.QuoteStyle+quoteStyleDouble :: Typed.TypedTerm Syntax.QuoteStyle+quoteStyleDouble =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.QuoteStyle"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "double"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the single variant of hydra.python.syntax.QuoteStyle+quoteStyleSingle :: Typed.TypedTerm Syntax.QuoteStyle+quoteStyleSingle =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.QuoteStyle"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "single"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the tripleDouble variant of hydra.python.syntax.QuoteStyle+quoteStyleTripleDouble :: Typed.TypedTerm Syntax.QuoteStyle+quoteStyleTripleDouble =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.QuoteStyle"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "tripleDouble"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the tripleSingle variant of hydra.python.syntax.QuoteStyle+quoteStyleTripleSingle :: Typed.TypedTerm Syntax.QuoteStyle+quoteStyleTripleSingle =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.QuoteStyle"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "tripleSingle"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for hydra.python.syntax.RaiseExpression+raiseExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.RaiseExpression+raiseExpression expression from =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.RaiseExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "from"),+          Core.fieldTerm = (Typed.unTypedTerm from)}]}))++-- | DSL accessor for the expression field of hydra.python.syntax.RaiseExpression+raiseExpressionExpression :: Typed.TypedTerm Syntax.RaiseExpression -> Typed.TypedTerm Syntax.Expression+raiseExpressionExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.RaiseExpression"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the from field of hydra.python.syntax.RaiseExpression+raiseExpressionFrom :: Typed.TypedTerm Syntax.RaiseExpression -> Typed.TypedTerm (Maybe Syntax.Expression)+raiseExpressionFrom x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.RaiseExpression"),+        Core.projectionFieldName = (Core.Name "from")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.python.syntax.RaiseExpression+raiseExpressionWithExpression :: Typed.TypedTerm Syntax.RaiseExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.RaiseExpression+raiseExpressionWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.RaiseExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "from"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.RaiseExpression"),+              Core.projectionFieldName = (Core.Name "from")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the from field of hydra.python.syntax.RaiseExpression+raiseExpressionWithFrom :: Typed.TypedTerm Syntax.RaiseExpression -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.RaiseExpression+raiseExpressionWithFrom original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.RaiseExpression"),+      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.python.syntax.RaiseExpression"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "from"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.python.syntax.RaiseStatement wrapper+raiseStatement :: Typed.TypedTerm (Maybe Syntax.RaiseExpression) -> Typed.TypedTerm Syntax.RaiseStatement+raiseStatement x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.RaiseStatement"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the float variant of hydra.python.syntax.RealNumber+realNumberFloat :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.RealNumber+realNumberFloat x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.RealNumber"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "float"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the integer variant of hydra.python.syntax.RealNumber+realNumberInteger :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.RealNumber+realNumberInteger x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.RealNumber"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "integer"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the dot variant of hydra.python.syntax.RelativeImportPrefix+relativeImportPrefixDot :: Typed.TypedTerm Syntax.RelativeImportPrefix+relativeImportPrefixDot =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.RelativeImportPrefix"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "dot"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the ellipsis variant of hydra.python.syntax.RelativeImportPrefix+relativeImportPrefixEllipsis :: Typed.TypedTerm Syntax.RelativeImportPrefix+relativeImportPrefixEllipsis =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.RelativeImportPrefix"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "ellipsis"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL constructor for the hydra.python.syntax.ReturnStatement wrapper+returnStatement :: Typed.TypedTerm [Syntax.StarExpression] -> Typed.TypedTerm Syntax.ReturnStatement+returnStatement x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.ReturnStatement"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the list variant of hydra.python.syntax.SequencePattern+sequencePatternList :: Typed.TypedTerm (Maybe Syntax.MaybeSequencePattern) -> Typed.TypedTerm Syntax.SequencePattern+sequencePatternList x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SequencePattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "list"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the tuple variant of hydra.python.syntax.SequencePattern+sequencePatternTuple :: Typed.TypedTerm (Maybe Syntax.OpenSequencePattern) -> Typed.TypedTerm Syntax.SequencePattern+sequencePatternTuple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SequencePattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "tuple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.Set wrapper+set :: Typed.TypedTerm [Syntax.StarNamedExpression] -> Typed.TypedTerm Syntax.Set+set x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Set"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.Setcomp+setcomp :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm Syntax.Setcomp+setcomp expression forIfClauses =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Setcomp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Typed.unTypedTerm forIfClauses)}]}))++-- | DSL accessor for the expression field of hydra.python.syntax.Setcomp+setcompExpression :: Typed.TypedTerm Syntax.Setcomp -> Typed.TypedTerm Syntax.NamedExpression+setcompExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Setcomp"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the forIfClauses field of hydra.python.syntax.Setcomp+setcompForIfClauses :: Typed.TypedTerm Syntax.Setcomp -> Typed.TypedTerm Syntax.ForIfClauses+setcompForIfClauses x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Setcomp"),+        Core.projectionFieldName = (Core.Name "forIfClauses")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.python.syntax.Setcomp+setcompWithExpression :: Typed.TypedTerm Syntax.Setcomp -> Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.Setcomp+setcompWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Setcomp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Setcomp"),+              Core.projectionFieldName = (Core.Name "forIfClauses")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the forIfClauses field of hydra.python.syntax.Setcomp+setcompWithForIfClauses :: Typed.TypedTerm Syntax.Setcomp -> Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm Syntax.Setcomp+setcompWithForIfClauses original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Setcomp"),+      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.python.syntax.Setcomp"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "forIfClauses"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.ShiftExpression+shiftExpression :: Typed.TypedTerm (Maybe Syntax.ShiftLhs) -> Typed.TypedTerm Syntax.Sum -> Typed.TypedTerm Syntax.ShiftExpression+shiftExpression lhs rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ShiftExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.ShiftExpression+shiftExpressionLhs :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm (Maybe Syntax.ShiftLhs)+shiftExpressionLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ShiftExpression"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.ShiftExpression+shiftExpressionRhs :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.Sum+shiftExpressionRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ShiftExpression"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.ShiftExpression+shiftExpressionWithLhs :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm (Maybe Syntax.ShiftLhs) -> Typed.TypedTerm Syntax.ShiftExpression+shiftExpressionWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ShiftExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ShiftExpression"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.ShiftExpression+shiftExpressionWithRhs :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.Sum -> Typed.TypedTerm Syntax.ShiftExpression+shiftExpressionWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ShiftExpression"),+      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.python.syntax.ShiftExpression"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.ShiftLhs+shiftLhs :: Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.ShiftOp -> Typed.TypedTerm Syntax.ShiftLhs+shiftLhs operand operator =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ShiftLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Typed.unTypedTerm operand)},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Typed.unTypedTerm operator)}]}))++-- | DSL accessor for the operand field of hydra.python.syntax.ShiftLhs+shiftLhsOperand :: Typed.TypedTerm Syntax.ShiftLhs -> Typed.TypedTerm Syntax.ShiftExpression+shiftLhsOperand x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ShiftLhs"),+        Core.projectionFieldName = (Core.Name "operand")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the operator field of hydra.python.syntax.ShiftLhs+shiftLhsOperator :: Typed.TypedTerm Syntax.ShiftLhs -> Typed.TypedTerm Syntax.ShiftOp+shiftLhsOperator x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.ShiftLhs"),+        Core.projectionFieldName = (Core.Name "operator")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the operand field of hydra.python.syntax.ShiftLhs+shiftLhsWithOperand :: Typed.TypedTerm Syntax.ShiftLhs -> Typed.TypedTerm Syntax.ShiftExpression -> Typed.TypedTerm Syntax.ShiftLhs+shiftLhsWithOperand original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ShiftLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ShiftLhs"),+              Core.projectionFieldName = (Core.Name "operator")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the operator field of hydra.python.syntax.ShiftLhs+shiftLhsWithOperator :: Typed.TypedTerm Syntax.ShiftLhs -> Typed.TypedTerm Syntax.ShiftOp -> Typed.TypedTerm Syntax.ShiftLhs+shiftLhsWithOperator original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.ShiftLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.ShiftLhs"),+              Core.projectionFieldName = (Core.Name "operand")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the left variant of hydra.python.syntax.ShiftOp+shiftOpLeft :: Typed.TypedTerm Syntax.ShiftOp+shiftOpLeft =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ShiftOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "left"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the right variant of hydra.python.syntax.ShiftOp+shiftOpRight :: Typed.TypedTerm Syntax.ShiftOp+shiftOpRight =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.ShiftOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "right"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the number variant of hydra.python.syntax.SignedNumber+signedNumberNumber :: Typed.TypedTerm Syntax.Number -> Typed.TypedTerm Syntax.SignedNumber+signedNumberNumber x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SignedNumber"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "number"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the sign variant of hydra.python.syntax.SignedNumber+signedNumberSign :: Typed.TypedTerm Syntax.PlusOrMinus -> Typed.TypedTerm Syntax.SignedNumber+signedNumberSign x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SignedNumber"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "sign"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the number variant of hydra.python.syntax.SignedRealNumber+signedRealNumberNumber :: Typed.TypedTerm Syntax.RealNumber -> Typed.TypedTerm Syntax.SignedRealNumber+signedRealNumberNumber x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SignedRealNumber"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "number"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the sign variant of hydra.python.syntax.SignedRealNumber+signedRealNumberSign :: Typed.TypedTerm Syntax.PlusOrMinus -> Typed.TypedTerm Syntax.SignedRealNumber+signedRealNumberSign x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SignedRealNumber"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "sign"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the assert variant of hydra.python.syntax.SimpleStatement+simpleStatementAssert :: Typed.TypedTerm Syntax.AssertStatement -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementAssert x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "assert"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the assignment variant of hydra.python.syntax.SimpleStatement+simpleStatementAssignment :: Typed.TypedTerm Syntax.Assignment -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementAssignment x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "assignment"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the break variant of hydra.python.syntax.SimpleStatement+simpleStatementBreak :: Typed.TypedTerm Syntax.SimpleStatement+simpleStatementBreak =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "break"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the continue variant of hydra.python.syntax.SimpleStatement+simpleStatementContinue :: Typed.TypedTerm Syntax.SimpleStatement+simpleStatementContinue =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "continue"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the del variant of hydra.python.syntax.SimpleStatement+simpleStatementDel :: Typed.TypedTerm Syntax.DelStatement -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementDel x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "del"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the global variant of hydra.python.syntax.SimpleStatement+simpleStatementGlobal :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementGlobal x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "global"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the import variant of hydra.python.syntax.SimpleStatement+simpleStatementImport :: Typed.TypedTerm Syntax.ImportStatement -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementImport x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "import"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the nonlocal variant of hydra.python.syntax.SimpleStatement+simpleStatementNonlocal :: Typed.TypedTerm [Syntax.Name] -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementNonlocal x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "nonlocal"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the pass variant of hydra.python.syntax.SimpleStatement+simpleStatementPass :: Typed.TypedTerm Syntax.SimpleStatement+simpleStatementPass =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "pass"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the raise variant of hydra.python.syntax.SimpleStatement+simpleStatementRaise :: Typed.TypedTerm Syntax.RaiseStatement -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementRaise x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "raise"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the return variant of hydra.python.syntax.SimpleStatement+simpleStatementReturn :: Typed.TypedTerm Syntax.ReturnStatement -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementReturn x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "return"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starExpressions variant of hydra.python.syntax.SimpleStatement+simpleStatementStarExpressions :: Typed.TypedTerm [Syntax.StarExpression] -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementStarExpressions x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starExpressions"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the typeAlias variant of hydra.python.syntax.SimpleStatement+simpleStatementTypeAlias :: Typed.TypedTerm Syntax.TypeAlias -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementTypeAlias x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "typeAlias"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the yield variant of hydra.python.syntax.SimpleStatement+simpleStatementYield :: Typed.TypedTerm Syntax.YieldStatement -> Typed.TypedTerm Syntax.SimpleStatement+simpleStatementYield x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SimpleStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "yield"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.SimpleTypeParameter+simpleTypeParameter :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SimpleTypeParameter+simpleTypeParameter name bound default_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "bound"),+          Core.fieldTerm = (Typed.unTypedTerm bound)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm default_)}]}))++-- | DSL accessor for the bound field of hydra.python.syntax.SimpleTypeParameter+simpleTypeParameterBound :: Typed.TypedTerm Syntax.SimpleTypeParameter -> Typed.TypedTerm (Maybe Syntax.Expression)+simpleTypeParameterBound x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+        Core.projectionFieldName = (Core.Name "bound")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the default field of hydra.python.syntax.SimpleTypeParameter+simpleTypeParameterDefault :: Typed.TypedTerm Syntax.SimpleTypeParameter -> Typed.TypedTerm (Maybe Syntax.Expression)+simpleTypeParameterDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+        Core.projectionFieldName = (Core.Name "default")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.SimpleTypeParameter+simpleTypeParameterName :: Typed.TypedTerm Syntax.SimpleTypeParameter -> Typed.TypedTerm Syntax.Name+simpleTypeParameterName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the bound field of hydra.python.syntax.SimpleTypeParameter+simpleTypeParameterWithBound :: Typed.TypedTerm Syntax.SimpleTypeParameter -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SimpleTypeParameter+simpleTypeParameterWithBound original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+      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.python.syntax.SimpleTypeParameter"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "bound"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the default field of hydra.python.syntax.SimpleTypeParameter+simpleTypeParameterWithDefault :: Typed.TypedTerm Syntax.SimpleTypeParameter -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SimpleTypeParameter+simpleTypeParameterWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+      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.python.syntax.SimpleTypeParameter"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "bound"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+              Core.projectionFieldName = (Core.Name "bound")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.python.syntax.SimpleTypeParameter+simpleTypeParameterWithName :: Typed.TypedTerm Syntax.SimpleTypeParameter -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.SimpleTypeParameter+simpleTypeParameterWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "bound"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+              Core.projectionFieldName = (Core.Name "bound")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SimpleTypeParameter"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the primaryAndName variant of hydra.python.syntax.SingleSubscriptAttributeTarget+singleSubscriptAttributeTargetPrimaryAndName :: Typed.TypedTerm Syntax.TPrimaryAndName -> Typed.TypedTerm Syntax.SingleSubscriptAttributeTarget+singleSubscriptAttributeTargetPrimaryAndName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SingleSubscriptAttributeTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primaryAndName"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the primaryAndSlices variant of hydra.python.syntax.SingleSubscriptAttributeTarget+singleSubscriptAttributeTargetPrimaryAndSlices :: Typed.TypedTerm Syntax.TPrimaryAndSlices -> Typed.TypedTerm Syntax.SingleSubscriptAttributeTarget+singleSubscriptAttributeTargetPrimaryAndSlices x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SingleSubscriptAttributeTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primaryAndSlices"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the name variant of hydra.python.syntax.SingleTarget+singleTargetName :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.SingleTarget+singleTargetName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SingleTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the parens variant of hydra.python.syntax.SingleTarget+singleTargetParens :: Typed.TypedTerm Syntax.SingleTarget -> Typed.TypedTerm Syntax.SingleTarget+singleTargetParens x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SingleTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "parens"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the subscriptAttributeTarget variant of hydra.python.syntax.SingleTarget+singleTargetSubscriptAttributeTarget :: Typed.TypedTerm Syntax.SingleSubscriptAttributeTarget -> Typed.TypedTerm Syntax.SingleTarget+singleTargetSubscriptAttributeTarget x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SingleTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "subscriptAttributeTarget"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.SlashNoDefault wrapper+slashNoDefault :: Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm Syntax.SlashNoDefault+slashNoDefault x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.SlashNoDefault"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParameters :: Typed.TypedTerm Syntax.SlashNoDefault -> Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm (Maybe Syntax.StarEtc) -> Typed.TypedTerm Syntax.SlashNoDefaultParameters+slashNoDefaultParameters slash paramNoDefault paramWithDefault starEtc =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slash"),+          Core.fieldTerm = (Typed.unTypedTerm slash)},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramNoDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramWithDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm starEtc)}]}))++-- | DSL accessor for the paramNoDefault field of hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParametersParamNoDefault :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm [Syntax.ParamNoDefault]+slashNoDefaultParametersParamNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+        Core.projectionFieldName = (Core.Name "paramNoDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramWithDefault field of hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParametersParamWithDefault :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm [Syntax.ParamWithDefault]+slashNoDefaultParametersParamWithDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+        Core.projectionFieldName = (Core.Name "paramWithDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the slash field of hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParametersSlash :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm Syntax.SlashNoDefault+slashNoDefaultParametersSlash x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+        Core.projectionFieldName = (Core.Name "slash")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the starEtc field of hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParametersStarEtc :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm (Maybe Syntax.StarEtc)+slashNoDefaultParametersStarEtc x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+        Core.projectionFieldName = (Core.Name "starEtc")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the paramNoDefault field of hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParametersWithParamNoDefault :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm Syntax.SlashNoDefaultParameters+slashNoDefaultParametersWithParamNoDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slash"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "slash")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the paramWithDefault field of hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParametersWithParamWithDefault :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm Syntax.SlashNoDefaultParameters+slashNoDefaultParametersWithParamWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slash"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "slash")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the slash field of hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParametersWithSlash :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm Syntax.SlashNoDefault -> Typed.TypedTerm Syntax.SlashNoDefaultParameters+slashNoDefaultParametersWithSlash original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slash"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the starEtc field of hydra.python.syntax.SlashNoDefaultParameters+slashNoDefaultParametersWithStarEtc :: Typed.TypedTerm Syntax.SlashNoDefaultParameters -> Typed.TypedTerm (Maybe Syntax.StarEtc) -> Typed.TypedTerm Syntax.SlashNoDefaultParameters+slashNoDefaultParametersWithStarEtc original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "slash"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "slash")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashNoDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.SlashWithDefault+slashWithDefault :: Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm Syntax.SlashWithDefault+slashWithDefault paramNoDefault paramWithDefault =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramNoDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramWithDefault)}]}))++-- | DSL accessor for the paramNoDefault field of hydra.python.syntax.SlashWithDefault+slashWithDefaultParamNoDefault :: Typed.TypedTerm Syntax.SlashWithDefault -> Typed.TypedTerm [Syntax.ParamNoDefault]+slashWithDefaultParamNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefault"),+        Core.projectionFieldName = (Core.Name "paramNoDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramWithDefault field of hydra.python.syntax.SlashWithDefault+slashWithDefaultParamWithDefault :: Typed.TypedTerm Syntax.SlashWithDefault -> Typed.TypedTerm [Syntax.ParamWithDefault]+slashWithDefaultParamWithDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefault"),+        Core.projectionFieldName = (Core.Name "paramWithDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.SlashWithDefaultParameters+slashWithDefaultParameters :: Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm (Maybe Syntax.StarEtc) -> Typed.TypedTerm Syntax.SlashWithDefaultParameters+slashWithDefaultParameters paramNoDefault paramWithDefault starEtc =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramNoDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm paramWithDefault)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm starEtc)}]}))++-- | DSL accessor for the paramNoDefault field of hydra.python.syntax.SlashWithDefaultParameters+slashWithDefaultParametersParamNoDefault :: Typed.TypedTerm Syntax.SlashWithDefaultParameters -> Typed.TypedTerm [Syntax.ParamNoDefault]+slashWithDefaultParametersParamNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+        Core.projectionFieldName = (Core.Name "paramNoDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the paramWithDefault field of hydra.python.syntax.SlashWithDefaultParameters+slashWithDefaultParametersParamWithDefault :: Typed.TypedTerm Syntax.SlashWithDefaultParameters -> Typed.TypedTerm [Syntax.ParamWithDefault]+slashWithDefaultParametersParamWithDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+        Core.projectionFieldName = (Core.Name "paramWithDefault")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the starEtc field of hydra.python.syntax.SlashWithDefaultParameters+slashWithDefaultParametersStarEtc :: Typed.TypedTerm Syntax.SlashWithDefaultParameters -> Typed.TypedTerm (Maybe Syntax.StarEtc)+slashWithDefaultParametersStarEtc x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+        Core.projectionFieldName = (Core.Name "starEtc")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the paramNoDefault field of hydra.python.syntax.SlashWithDefaultParameters+slashWithDefaultParametersWithParamNoDefault :: Typed.TypedTerm Syntax.SlashWithDefaultParameters -> Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm Syntax.SlashWithDefaultParameters+slashWithDefaultParametersWithParamNoDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the paramWithDefault field of hydra.python.syntax.SlashWithDefaultParameters+slashWithDefaultParametersWithParamWithDefault :: Typed.TypedTerm Syntax.SlashWithDefaultParameters -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm Syntax.SlashWithDefaultParameters+slashWithDefaultParametersWithParamWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+              Core.projectionFieldName = (Core.Name "starEtc")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the starEtc field of hydra.python.syntax.SlashWithDefaultParameters+slashWithDefaultParametersWithStarEtc :: Typed.TypedTerm Syntax.SlashWithDefaultParameters -> Typed.TypedTerm (Maybe Syntax.StarEtc) -> Typed.TypedTerm Syntax.SlashWithDefaultParameters+slashWithDefaultParametersWithStarEtc original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefaultParameters"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "starEtc"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the paramNoDefault field of hydra.python.syntax.SlashWithDefault+slashWithDefaultWithParamNoDefault :: Typed.TypedTerm Syntax.SlashWithDefault -> Typed.TypedTerm [Syntax.ParamNoDefault] -> Typed.TypedTerm Syntax.SlashWithDefault+slashWithDefaultWithParamNoDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefault"),+              Core.projectionFieldName = (Core.Name "paramWithDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the paramWithDefault field of hydra.python.syntax.SlashWithDefault+slashWithDefaultWithParamWithDefault :: Typed.TypedTerm Syntax.SlashWithDefault -> Typed.TypedTerm [Syntax.ParamWithDefault] -> Typed.TypedTerm Syntax.SlashWithDefault+slashWithDefaultWithParamWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SlashWithDefault"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "paramNoDefault"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SlashWithDefault"),+              Core.projectionFieldName = (Core.Name "paramNoDefault")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "paramWithDefault"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.SliceExpression+sliceExpression :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SliceExpression+sliceExpression start stop step =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "start"),+          Core.fieldTerm = (Typed.unTypedTerm start)},+        Core.Field {+          Core.fieldName = (Core.Name "stop"),+          Core.fieldTerm = (Typed.unTypedTerm stop)},+        Core.Field {+          Core.fieldName = (Core.Name "step"),+          Core.fieldTerm = (Typed.unTypedTerm step)}]}))++-- | DSL accessor for the start field of hydra.python.syntax.SliceExpression+sliceExpressionStart :: Typed.TypedTerm Syntax.SliceExpression -> Typed.TypedTerm (Maybe Syntax.Expression)+sliceExpressionStart x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+        Core.projectionFieldName = (Core.Name "start")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the step field of hydra.python.syntax.SliceExpression+sliceExpressionStep :: Typed.TypedTerm Syntax.SliceExpression -> Typed.TypedTerm (Maybe Syntax.Expression)+sliceExpressionStep x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+        Core.projectionFieldName = (Core.Name "step")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the stop field of hydra.python.syntax.SliceExpression+sliceExpressionStop :: Typed.TypedTerm Syntax.SliceExpression -> Typed.TypedTerm (Maybe Syntax.Expression)+sliceExpressionStop x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+        Core.projectionFieldName = (Core.Name "stop")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the start field of hydra.python.syntax.SliceExpression+sliceExpressionWithStart :: Typed.TypedTerm Syntax.SliceExpression -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SliceExpression+sliceExpressionWithStart original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "start"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "stop"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+              Core.projectionFieldName = (Core.Name "stop")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "step"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+              Core.projectionFieldName = (Core.Name "step")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the step field of hydra.python.syntax.SliceExpression+sliceExpressionWithStep :: Typed.TypedTerm Syntax.SliceExpression -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SliceExpression+sliceExpressionWithStep original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "start"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+              Core.projectionFieldName = (Core.Name "start")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "stop"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+              Core.projectionFieldName = (Core.Name "stop")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "step"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the stop field of hydra.python.syntax.SliceExpression+sliceExpressionWithStop :: Typed.TypedTerm Syntax.SliceExpression -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SliceExpression+sliceExpressionWithStop original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "start"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+              Core.projectionFieldName = (Core.Name "start")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "stop"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "step"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SliceExpression"),+              Core.projectionFieldName = (Core.Name "step")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the named variant of hydra.python.syntax.Slice+sliceNamed :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.Slice+sliceNamed x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Slice"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "named"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slice variant of hydra.python.syntax.SliceOrStarredExpression+sliceOrStarredExpressionSlice :: Typed.TypedTerm Syntax.Slice -> Typed.TypedTerm Syntax.SliceOrStarredExpression+sliceOrStarredExpressionSlice x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SliceOrStarredExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slice"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starred variant of hydra.python.syntax.SliceOrStarredExpression+sliceOrStarredExpressionStarred :: Typed.TypedTerm Syntax.StarredExpression -> Typed.TypedTerm Syntax.SliceOrStarredExpression+sliceOrStarredExpressionStarred x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SliceOrStarredExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starred"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slice_ variant of hydra.python.syntax.Slice+sliceSlice_ :: Typed.TypedTerm Syntax.SliceExpression -> Typed.TypedTerm Syntax.Slice+sliceSlice_ x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Slice"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slice_"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.Slices+slices :: Typed.TypedTerm Syntax.Slice -> Typed.TypedTerm [Syntax.SliceOrStarredExpression] -> Typed.TypedTerm Syntax.Slices+slices head tail =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Slices"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Typed.unTypedTerm head)},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Typed.unTypedTerm tail)}]}))++-- | DSL accessor for the head field of hydra.python.syntax.Slices+slicesHead :: Typed.TypedTerm Syntax.Slices -> Typed.TypedTerm Syntax.Slice+slicesHead x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Slices"),+        Core.projectionFieldName = (Core.Name "head")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the tail field of hydra.python.syntax.Slices+slicesTail :: Typed.TypedTerm Syntax.Slices -> Typed.TypedTerm [Syntax.SliceOrStarredExpression]+slicesTail x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Slices"),+        Core.projectionFieldName = (Core.Name "tail")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the head field of hydra.python.syntax.Slices+slicesWithHead :: Typed.TypedTerm Syntax.Slices -> Typed.TypedTerm Syntax.Slice -> Typed.TypedTerm Syntax.Slices+slicesWithHead original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Slices"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Slices"),+              Core.projectionFieldName = (Core.Name "tail")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the tail field of hydra.python.syntax.Slices+slicesWithTail :: Typed.TypedTerm Syntax.Slices -> Typed.TypedTerm [Syntax.SliceOrStarredExpression] -> Typed.TypedTerm Syntax.Slices+slicesWithTail original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Slices"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "head"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Slices"),+              Core.projectionFieldName = (Core.Name "head")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "tail"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.python.syntax.StarAnnotation wrapper+starAnnotation :: Typed.TypedTerm Syntax.StarExpression -> Typed.TypedTerm Syntax.StarAnnotation+starAnnotation x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.StarAnnotation"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the name variant of hydra.python.syntax.StarAtom+starAtomName :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.StarAtom+starAtomName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "name"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starTargetsListSeq variant of hydra.python.syntax.StarAtom+starAtomStarTargetsListSeq :: Typed.TypedTerm (Maybe Syntax.StarTargetsListSeq) -> Typed.TypedTerm Syntax.StarAtom+starAtomStarTargetsListSeq x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starTargetsListSeq"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starTargetsTupleSeq variant of hydra.python.syntax.StarAtom+starAtomStarTargetsTupleSeq :: Typed.TypedTerm (Maybe Syntax.StarTargetsTupleSeq) -> Typed.TypedTerm Syntax.StarAtom+starAtomStarTargetsTupleSeq x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starTargetsTupleSeq"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the targetWithStarAtom variant of hydra.python.syntax.StarAtom+starAtomTargetWithStarAtom :: Typed.TypedTerm Syntax.TargetWithStarAtom -> Typed.TypedTerm Syntax.StarAtom+starAtomTargetWithStarAtom x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "targetWithStarAtom"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the keywords variant of hydra.python.syntax.StarEtc+starEtcKeywords :: Typed.TypedTerm Syntax.Keywords -> Typed.TypedTerm Syntax.StarEtc+starEtcKeywords x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarEtc"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "keywords"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starComma variant of hydra.python.syntax.StarEtc+starEtcStarComma :: Typed.TypedTerm Syntax.CommaStarEtc -> Typed.TypedTerm Syntax.StarEtc+starEtcStarComma x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarEtc"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starComma"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starNoDefault variant of hydra.python.syntax.StarEtc+starEtcStarNoDefault :: Typed.TypedTerm Syntax.NoDefaultStarEtc -> Typed.TypedTerm Syntax.StarEtc+starEtcStarNoDefault x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarEtc"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starNoDefault"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starNoDefaultStarAnnotation variant of hydra.python.syntax.StarEtc+starEtcStarNoDefaultStarAnnotation :: Typed.TypedTerm Syntax.NoDefaultStarAnnotationStarEtc -> Typed.TypedTerm Syntax.StarEtc+starEtcStarNoDefaultStarAnnotation x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarEtc"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starNoDefaultStarAnnotation"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.StarExpression+starExpressionSimple :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.StarExpression+starExpressionSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the star variant of hydra.python.syntax.StarExpression+starExpressionStar :: Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm Syntax.StarExpression+starExpressionStar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "star"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.StarNamedExpression+starNamedExpressionSimple :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.StarNamedExpression+starNamedExpressionSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarNamedExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the star variant of hydra.python.syntax.StarNamedExpression+starNamedExpressionStar :: Typed.TypedTerm Syntax.BitwiseOr -> Typed.TypedTerm Syntax.StarNamedExpression+starNamedExpressionStar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarNamedExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "star"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.StarNamedExpressions wrapper+starNamedExpressions :: Typed.TypedTerm [Syntax.StarNamedExpression] -> Typed.TypedTerm Syntax.StarNamedExpressions+starNamedExpressions x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.StarNamedExpressions"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the capture variant of hydra.python.syntax.StarPattern+starPatternCapture :: Typed.TypedTerm Syntax.PatternCaptureTarget -> Typed.TypedTerm Syntax.StarPattern+starPatternCapture x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "capture"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the wildcard variant of hydra.python.syntax.StarPattern+starPatternWildcard :: Typed.TypedTerm Syntax.StarPattern+starPatternWildcard =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarPattern"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "wildcard"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the starred variant of hydra.python.syntax.StarTarget+starTargetStarred :: Typed.TypedTerm Syntax.StarTarget -> Typed.TypedTerm Syntax.StarTarget+starTargetStarred x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starred"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the unstarred variant of hydra.python.syntax.StarTarget+starTargetUnstarred :: Typed.TypedTerm Syntax.TargetWithStarAtom -> Typed.TypedTerm Syntax.StarTarget+starTargetUnstarred x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StarTarget"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "unstarred"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.StarTargetsListSeq wrapper+starTargetsListSeq :: Typed.TypedTerm [Syntax.StarTarget] -> Typed.TypedTerm Syntax.StarTargetsListSeq+starTargetsListSeq x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.StarTargetsListSeq"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for the hydra.python.syntax.StarTargetsTupleSeq wrapper+starTargetsTupleSeq :: Typed.TypedTerm [Syntax.StarTarget] -> Typed.TypedTerm Syntax.StarTargetsTupleSeq+starTargetsTupleSeq x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.StarTargetsTupleSeq"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.StarTypeParameter+starTypeParameter :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm (Maybe Syntax.StarExpression) -> Typed.TypedTerm Syntax.StarTypeParameter+starTypeParameter name default_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.StarTypeParameter"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm default_)}]}))++-- | DSL accessor for the default field of hydra.python.syntax.StarTypeParameter+starTypeParameterDefault :: Typed.TypedTerm Syntax.StarTypeParameter -> Typed.TypedTerm (Maybe Syntax.StarExpression)+starTypeParameterDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.StarTypeParameter"),+        Core.projectionFieldName = (Core.Name "default")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.StarTypeParameter+starTypeParameterName :: Typed.TypedTerm Syntax.StarTypeParameter -> Typed.TypedTerm Syntax.Name+starTypeParameterName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.StarTypeParameter"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the default field of hydra.python.syntax.StarTypeParameter+starTypeParameterWithDefault :: Typed.TypedTerm Syntax.StarTypeParameter -> Typed.TypedTerm (Maybe Syntax.StarExpression) -> Typed.TypedTerm Syntax.StarTypeParameter+starTypeParameterWithDefault original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.StarTypeParameter"),+      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.python.syntax.StarTypeParameter"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the name field of hydra.python.syntax.StarTypeParameter+starTypeParameterWithName :: Typed.TypedTerm Syntax.StarTypeParameter -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.StarTypeParameter+starTypeParameterWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.StarTypeParameter"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "default"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.StarTypeParameter"),+              Core.projectionFieldName = (Core.Name "default")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.StarredExpression wrapper+starredExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.StarredExpression+starredExpression x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.StarredExpression"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the annotated variant of hydra.python.syntax.Statement+statementAnnotated :: Typed.TypedTerm Syntax.AnnotatedStatement -> Typed.TypedTerm Syntax.Statement+statementAnnotated x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "annotated"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the compound variant of hydra.python.syntax.Statement+statementCompound :: Typed.TypedTerm Syntax.CompoundStatement -> Typed.TypedTerm Syntax.Statement+statementCompound x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "compound"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.Statement+statementSimple :: Typed.TypedTerm [Syntax.SimpleStatement] -> Typed.TypedTerm Syntax.Statement+statementSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.Statement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.String+string :: Typed.TypedTerm String -> Typed.TypedTerm (Maybe Syntax.StringPrefix) -> Typed.TypedTerm Syntax.QuoteStyle -> Typed.TypedTerm Syntax.String_+string value prefix quoteStyle =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.String"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm value)},+        Core.Field {+          Core.fieldName = (Core.Name "prefix"),+          Core.fieldTerm = (Typed.unTypedTerm prefix)},+        Core.Field {+          Core.fieldName = (Core.Name "quoteStyle"),+          Core.fieldTerm = (Typed.unTypedTerm quoteStyle)}]}))++-- | DSL accessor for the prefix field of hydra.python.syntax.String+stringPrefix :: Typed.TypedTerm Syntax.String_ -> Typed.TypedTerm (Maybe Syntax.StringPrefix)+stringPrefix x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+        Core.projectionFieldName = (Core.Name "prefix")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL injection for the bytes variant of hydra.python.syntax.StringPrefix+stringPrefixBytes :: Typed.TypedTerm Syntax.StringPrefix+stringPrefixBytes =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StringPrefix"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "bytes"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the raw variant of hydra.python.syntax.StringPrefix+stringPrefixRaw :: Typed.TypedTerm Syntax.StringPrefix+stringPrefixRaw =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StringPrefix"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "raw"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the rawBytes variant of hydra.python.syntax.StringPrefix+stringPrefixRawBytes :: Typed.TypedTerm Syntax.StringPrefix+stringPrefixRawBytes =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StringPrefix"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "rawBytes"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the unicode variant of hydra.python.syntax.StringPrefix+stringPrefixUnicode :: Typed.TypedTerm Syntax.StringPrefix+stringPrefixUnicode =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.StringPrefix"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "unicode"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL accessor for the quoteStyle field of hydra.python.syntax.String+stringQuoteStyle :: Typed.TypedTerm Syntax.String_ -> Typed.TypedTerm Syntax.QuoteStyle+stringQuoteStyle x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+        Core.projectionFieldName = (Core.Name "quoteStyle")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the value field of hydra.python.syntax.String+stringValue :: Typed.TypedTerm Syntax.String_ -> Typed.TypedTerm String+stringValue x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+        Core.projectionFieldName = (Core.Name "value")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the prefix field of hydra.python.syntax.String+stringWithPrefix :: Typed.TypedTerm Syntax.String_ -> Typed.TypedTerm (Maybe Syntax.StringPrefix) -> Typed.TypedTerm Syntax.String_+stringWithPrefix original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.String"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+              Core.projectionFieldName = (Core.Name "value")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "prefix"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "quoteStyle"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+              Core.projectionFieldName = (Core.Name "quoteStyle")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the quoteStyle field of hydra.python.syntax.String+stringWithQuoteStyle :: Typed.TypedTerm Syntax.String_ -> Typed.TypedTerm Syntax.QuoteStyle -> Typed.TypedTerm Syntax.String_+stringWithQuoteStyle original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.String"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+              Core.projectionFieldName = (Core.Name "value")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "prefix"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+              Core.projectionFieldName = (Core.Name "prefix")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "quoteStyle"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the value field of hydra.python.syntax.String+stringWithValue :: Typed.TypedTerm Syntax.String_ -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.String_+stringWithValue original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.String"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "value"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "prefix"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+              Core.projectionFieldName = (Core.Name "prefix")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "quoteStyle"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.String"),+              Core.projectionFieldName = (Core.Name "quoteStyle")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the simple variant of hydra.python.syntax.SubjectExpression+subjectExpressionSimple :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.SubjectExpression+subjectExpressionSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SubjectExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the tuple variant of hydra.python.syntax.SubjectExpression+subjectExpressionTuple :: Typed.TypedTerm [Syntax.StarNamedExpression] -> Typed.TypedTerm Syntax.SubjectExpression+subjectExpressionTuple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SubjectExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "tuple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.Sum+sum :: Typed.TypedTerm (Maybe Syntax.SumLhs) -> Typed.TypedTerm Syntax.Term -> Typed.TypedTerm Syntax.Sum+sum lhs rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Sum"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.Sum+sumLhs :: Typed.TypedTerm Syntax.Sum -> Typed.TypedTerm (Maybe Syntax.SumLhs)+sumLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Sum"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.SumLhs+sumLhs2 :: Typed.TypedTerm Syntax.Sum -> Typed.TypedTerm Syntax.SumOp -> Typed.TypedTerm Syntax.SumLhs+sumLhs2 operand operator =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SumLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Typed.unTypedTerm operand)},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Typed.unTypedTerm operator)}]}))++-- | DSL accessor for the operand field of hydra.python.syntax.SumLhs+sumLhsOperand :: Typed.TypedTerm Syntax.SumLhs -> Typed.TypedTerm Syntax.Sum+sumLhsOperand x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SumLhs"),+        Core.projectionFieldName = (Core.Name "operand")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the operator field of hydra.python.syntax.SumLhs+sumLhsOperator :: Typed.TypedTerm Syntax.SumLhs -> Typed.TypedTerm Syntax.SumOp+sumLhsOperator x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.SumLhs"),+        Core.projectionFieldName = (Core.Name "operator")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the operand field of hydra.python.syntax.SumLhs+sumLhsWithOperand :: Typed.TypedTerm Syntax.SumLhs -> Typed.TypedTerm Syntax.Sum -> Typed.TypedTerm Syntax.SumLhs+sumLhsWithOperand original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SumLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SumLhs"),+              Core.projectionFieldName = (Core.Name "operator")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the operator field of hydra.python.syntax.SumLhs+sumLhsWithOperator :: Typed.TypedTerm Syntax.SumLhs -> Typed.TypedTerm Syntax.SumOp -> Typed.TypedTerm Syntax.SumLhs+sumLhsWithOperator original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.SumLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.SumLhs"),+              Core.projectionFieldName = (Core.Name "operand")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the add variant of hydra.python.syntax.SumOp+sumOpAdd :: Typed.TypedTerm Syntax.SumOp+sumOpAdd =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SumOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "add"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the sub variant of hydra.python.syntax.SumOp+sumOpSub :: Typed.TypedTerm Syntax.SumOp+sumOpSub =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.SumOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "sub"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL accessor for the rhs field of hydra.python.syntax.Sum+sumRhs :: Typed.TypedTerm Syntax.Sum -> Typed.TypedTerm Syntax.Term+sumRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Sum"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.Sum+sumWithLhs :: Typed.TypedTerm Syntax.Sum -> Typed.TypedTerm (Maybe Syntax.SumLhs) -> Typed.TypedTerm Syntax.Sum+sumWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Sum"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Sum"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.Sum+sumWithRhs :: Typed.TypedTerm Syntax.Sum -> Typed.TypedTerm Syntax.Term -> Typed.TypedTerm Syntax.Sum+sumWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Sum"),+      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.python.syntax.Sum"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.TPrimaryAndArguments+tPrimaryAndArguments :: Typed.TypedTerm Syntax.TPrimary -> Typed.TypedTerm (Maybe Syntax.Args) -> Typed.TypedTerm Syntax.TPrimaryAndArguments+tPrimaryAndArguments primary arguments =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndArguments"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm primary)},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Typed.unTypedTerm arguments)}]}))++-- | DSL accessor for the arguments field of hydra.python.syntax.TPrimaryAndArguments+tPrimaryAndArgumentsArguments :: Typed.TypedTerm Syntax.TPrimaryAndArguments -> Typed.TypedTerm (Maybe Syntax.Args)+tPrimaryAndArgumentsArguments x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndArguments"),+        Core.projectionFieldName = (Core.Name "arguments")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the primary field of hydra.python.syntax.TPrimaryAndArguments+tPrimaryAndArgumentsPrimary :: Typed.TypedTerm Syntax.TPrimaryAndArguments -> Typed.TypedTerm Syntax.TPrimary+tPrimaryAndArgumentsPrimary x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndArguments"),+        Core.projectionFieldName = (Core.Name "primary")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the arguments field of hydra.python.syntax.TPrimaryAndArguments+tPrimaryAndArgumentsWithArguments :: Typed.TypedTerm Syntax.TPrimaryAndArguments -> Typed.TypedTerm (Maybe Syntax.Args) -> Typed.TypedTerm Syntax.TPrimaryAndArguments+tPrimaryAndArgumentsWithArguments original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndArguments"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndArguments"),+              Core.projectionFieldName = (Core.Name "primary")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "arguments"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the primary field of hydra.python.syntax.TPrimaryAndArguments+tPrimaryAndArgumentsWithPrimary :: Typed.TypedTerm Syntax.TPrimaryAndArguments -> Typed.TypedTerm Syntax.TPrimary -> Typed.TypedTerm Syntax.TPrimaryAndArguments+tPrimaryAndArgumentsWithPrimary original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndArguments"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          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.python.syntax.TPrimaryAndArguments"),+              Core.projectionFieldName = (Core.Name "arguments")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.TPrimaryAndGenexp+tPrimaryAndGenexp :: Typed.TypedTerm Syntax.TPrimary -> Typed.TypedTerm Syntax.Genexp -> Typed.TypedTerm Syntax.TPrimaryAndGenexp+tPrimaryAndGenexp primary genexp =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndGenexp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm primary)},+        Core.Field {+          Core.fieldName = (Core.Name "genexp"),+          Core.fieldTerm = (Typed.unTypedTerm genexp)}]}))++-- | DSL accessor for the genexp field of hydra.python.syntax.TPrimaryAndGenexp+tPrimaryAndGenexpGenexp :: Typed.TypedTerm Syntax.TPrimaryAndGenexp -> Typed.TypedTerm Syntax.Genexp+tPrimaryAndGenexpGenexp x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndGenexp"),+        Core.projectionFieldName = (Core.Name "genexp")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the primary field of hydra.python.syntax.TPrimaryAndGenexp+tPrimaryAndGenexpPrimary :: Typed.TypedTerm Syntax.TPrimaryAndGenexp -> Typed.TypedTerm Syntax.TPrimary+tPrimaryAndGenexpPrimary x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndGenexp"),+        Core.projectionFieldName = (Core.Name "primary")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the genexp field of hydra.python.syntax.TPrimaryAndGenexp+tPrimaryAndGenexpWithGenexp :: Typed.TypedTerm Syntax.TPrimaryAndGenexp -> Typed.TypedTerm Syntax.Genexp -> Typed.TypedTerm Syntax.TPrimaryAndGenexp+tPrimaryAndGenexpWithGenexp original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndGenexp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndGenexp"),+              Core.projectionFieldName = (Core.Name "primary")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "genexp"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the primary field of hydra.python.syntax.TPrimaryAndGenexp+tPrimaryAndGenexpWithPrimary :: Typed.TypedTerm Syntax.TPrimaryAndGenexp -> Typed.TypedTerm Syntax.TPrimary -> Typed.TypedTerm Syntax.TPrimaryAndGenexp+tPrimaryAndGenexpWithPrimary original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndGenexp"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "genexp"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndGenexp"),+              Core.projectionFieldName = (Core.Name "genexp")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.TPrimaryAndName+tPrimaryAndName :: Typed.TypedTerm Syntax.TPrimary -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.TPrimaryAndName+tPrimaryAndName primary name =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm primary)},+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm name)}]}))++-- | DSL accessor for the name field of hydra.python.syntax.TPrimaryAndName+tPrimaryAndNameName :: Typed.TypedTerm Syntax.TPrimaryAndName -> Typed.TypedTerm Syntax.Name+tPrimaryAndNameName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndName"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the primary field of hydra.python.syntax.TPrimaryAndName+tPrimaryAndNamePrimary :: Typed.TypedTerm Syntax.TPrimaryAndName -> Typed.TypedTerm Syntax.TPrimary+tPrimaryAndNamePrimary x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndName"),+        Core.projectionFieldName = (Core.Name "primary")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the name field of hydra.python.syntax.TPrimaryAndName+tPrimaryAndNameWithName :: Typed.TypedTerm Syntax.TPrimaryAndName -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.TPrimaryAndName+tPrimaryAndNameWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndName"),+              Core.projectionFieldName = (Core.Name "primary")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "name"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the primary field of hydra.python.syntax.TPrimaryAndName+tPrimaryAndNameWithPrimary :: Typed.TypedTerm Syntax.TPrimaryAndName -> Typed.TypedTerm Syntax.TPrimary -> Typed.TypedTerm Syntax.TPrimaryAndName+tPrimaryAndNameWithPrimary original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndName"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          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.python.syntax.TPrimaryAndName"),+              Core.projectionFieldName = (Core.Name "name")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.TPrimaryAndSlices+tPrimaryAndSlices :: Typed.TypedTerm Syntax.TPrimary -> Typed.TypedTerm Syntax.Slices -> Typed.TypedTerm Syntax.TPrimaryAndSlices+tPrimaryAndSlices primary slices =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndSlices"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm primary)},+        Core.Field {+          Core.fieldName = (Core.Name "slices"),+          Core.fieldTerm = (Typed.unTypedTerm slices)}]}))++-- | DSL accessor for the primary field of hydra.python.syntax.TPrimaryAndSlices+tPrimaryAndSlicesPrimary :: Typed.TypedTerm Syntax.TPrimaryAndSlices -> Typed.TypedTerm Syntax.TPrimary+tPrimaryAndSlicesPrimary x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndSlices"),+        Core.projectionFieldName = (Core.Name "primary")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the slices field of hydra.python.syntax.TPrimaryAndSlices+tPrimaryAndSlicesSlices :: Typed.TypedTerm Syntax.TPrimaryAndSlices -> Typed.TypedTerm Syntax.Slices+tPrimaryAndSlicesSlices x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndSlices"),+        Core.projectionFieldName = (Core.Name "slices")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the primary field of hydra.python.syntax.TPrimaryAndSlices+tPrimaryAndSlicesWithPrimary :: Typed.TypedTerm Syntax.TPrimaryAndSlices -> Typed.TypedTerm Syntax.TPrimary -> Typed.TypedTerm Syntax.TPrimaryAndSlices+tPrimaryAndSlicesWithPrimary original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndSlices"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "slices"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndSlices"),+              Core.projectionFieldName = (Core.Name "slices")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the slices field of hydra.python.syntax.TPrimaryAndSlices+tPrimaryAndSlicesWithSlices :: Typed.TypedTerm Syntax.TPrimaryAndSlices -> Typed.TypedTerm Syntax.Slices -> Typed.TypedTerm Syntax.TPrimaryAndSlices+tPrimaryAndSlicesWithSlices original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndSlices"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "primary"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TPrimaryAndSlices"),+              Core.projectionFieldName = (Core.Name "primary")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "slices"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the atom variant of hydra.python.syntax.TPrimary+tPrimaryAtom :: Typed.TypedTerm Syntax.Atom -> Typed.TypedTerm Syntax.TPrimary+tPrimaryAtom x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TPrimary"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "atom"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the primaryAndArguments variant of hydra.python.syntax.TPrimary+tPrimaryPrimaryAndArguments :: Typed.TypedTerm Syntax.TPrimaryAndArguments -> Typed.TypedTerm Syntax.TPrimary+tPrimaryPrimaryAndArguments x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TPrimary"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primaryAndArguments"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the primaryAndGenexp variant of hydra.python.syntax.TPrimary+tPrimaryPrimaryAndGenexp :: Typed.TypedTerm Syntax.TPrimaryAndGenexp -> Typed.TypedTerm Syntax.TPrimary+tPrimaryPrimaryAndGenexp x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TPrimary"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primaryAndGenexp"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the primaryAndName variant of hydra.python.syntax.TPrimary+tPrimaryPrimaryAndName :: Typed.TypedTerm Syntax.TPrimaryAndName -> Typed.TypedTerm Syntax.TPrimary+tPrimaryPrimaryAndName x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TPrimary"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primaryAndName"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the primaryAndSlices variant of hydra.python.syntax.TPrimary+tPrimaryPrimaryAndSlices :: Typed.TypedTerm Syntax.TPrimaryAndSlices -> Typed.TypedTerm Syntax.TPrimary+tPrimaryPrimaryAndSlices x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TPrimary"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "primaryAndSlices"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the atom variant of hydra.python.syntax.TargetWithStarAtom+targetWithStarAtomAtom :: Typed.TypedTerm Syntax.StarAtom -> Typed.TypedTerm Syntax.TargetWithStarAtom+targetWithStarAtomAtom x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TargetWithStarAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "atom"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the project variant of hydra.python.syntax.TargetWithStarAtom+targetWithStarAtomProject :: Typed.TypedTerm Syntax.TPrimaryAndName -> Typed.TypedTerm Syntax.TargetWithStarAtom+targetWithStarAtomProject x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TargetWithStarAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "project"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the slices variant of hydra.python.syntax.TargetWithStarAtom+targetWithStarAtomSlices :: Typed.TypedTerm Syntax.TPrimaryAndSlices -> Typed.TypedTerm Syntax.TargetWithStarAtom+targetWithStarAtomSlices x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TargetWithStarAtom"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "slices"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.Term+term :: Typed.TypedTerm (Maybe Syntax.TermLhs) -> Typed.TypedTerm Syntax.Factor -> Typed.TypedTerm Syntax.Term+term lhs rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Term"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.Term+termLhs :: Typed.TypedTerm Syntax.Term -> Typed.TypedTerm (Maybe Syntax.TermLhs)+termLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Term"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.TermLhs+termLhs2 :: Typed.TypedTerm Syntax.Term -> Typed.TypedTerm Syntax.TermOp -> Typed.TypedTerm Syntax.TermLhs+termLhs2 operand operator =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TermLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Typed.unTypedTerm operand)},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Typed.unTypedTerm operator)}]}))++-- | DSL accessor for the operand field of hydra.python.syntax.TermLhs+termLhsOperand :: Typed.TypedTerm Syntax.TermLhs -> Typed.TypedTerm Syntax.Term+termLhsOperand x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TermLhs"),+        Core.projectionFieldName = (Core.Name "operand")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the operator field of hydra.python.syntax.TermLhs+termLhsOperator :: Typed.TypedTerm Syntax.TermLhs -> Typed.TypedTerm Syntax.TermOp+termLhsOperator x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TermLhs"),+        Core.projectionFieldName = (Core.Name "operator")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the operand field of hydra.python.syntax.TermLhs+termLhsWithOperand :: Typed.TypedTerm Syntax.TermLhs -> Typed.TypedTerm Syntax.Term -> Typed.TypedTerm Syntax.TermLhs+termLhsWithOperand original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TermLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TermLhs"),+              Core.projectionFieldName = (Core.Name "operator")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the operator field of hydra.python.syntax.TermLhs+termLhsWithOperator :: Typed.TypedTerm Syntax.TermLhs -> Typed.TypedTerm Syntax.TermOp -> Typed.TypedTerm Syntax.TermLhs+termLhsWithOperator original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TermLhs"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "operand"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TermLhs"),+              Core.projectionFieldName = (Core.Name "operand")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "operator"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the div variant of hydra.python.syntax.TermOp+termOpDiv :: Typed.TypedTerm Syntax.TermOp+termOpDiv =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TermOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "div"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the floordiv variant of hydra.python.syntax.TermOp+termOpFloordiv :: Typed.TypedTerm Syntax.TermOp+termOpFloordiv =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TermOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "floordiv"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the matmul variant of hydra.python.syntax.TermOp+termOpMatmul :: Typed.TypedTerm Syntax.TermOp+termOpMatmul =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TermOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "matmul"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the mod variant of hydra.python.syntax.TermOp+termOpMod :: Typed.TypedTerm Syntax.TermOp+termOpMod =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TermOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "mod"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the mul variant of hydra.python.syntax.TermOp+termOpMul :: Typed.TypedTerm Syntax.TermOp+termOpMul =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TermOp"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "mul"),+        Core.fieldTerm = Core.TermUnit}}))++-- | DSL accessor for the rhs field of hydra.python.syntax.Term+termRhs :: Typed.TypedTerm Syntax.Term -> Typed.TypedTerm Syntax.Factor+termRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.Term"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.Term+termWithLhs :: Typed.TypedTerm Syntax.Term -> Typed.TypedTerm (Maybe Syntax.TermLhs) -> Typed.TypedTerm Syntax.Term+termWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Term"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.Term"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.Term+termWithRhs :: Typed.TypedTerm Syntax.Term -> Typed.TypedTerm Syntax.Factor -> Typed.TypedTerm Syntax.Term+termWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.Term"),+      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.python.syntax.Term"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatement :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm [Syntax.ExceptStarBlock] -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.TryExceptStarStatement+tryExceptStarStatement body excepts else_ finally =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          Core.fieldTerm = (Typed.unTypedTerm excepts)},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm else_)},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Typed.unTypedTerm finally)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatementBody :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm Syntax.Block+tryExceptStarStatementBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the else field of hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatementElse :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm (Maybe Syntax.Block)+tryExceptStarStatementElse x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+        Core.projectionFieldName = (Core.Name "else")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the excepts field of hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatementExcepts :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm [Syntax.ExceptStarBlock]+tryExceptStarStatementExcepts x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+        Core.projectionFieldName = (Core.Name "excepts")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the finally field of hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatementFinally :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm (Maybe Syntax.Block)+tryExceptStarStatementFinally x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+        Core.projectionFieldName = (Core.Name "finally")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatementWithBody :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryExceptStarStatement+tryExceptStarStatementWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "excepts")})),+            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.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "finally")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the else field of hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatementWithElse :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.TryExceptStarStatement+tryExceptStarStatementWithElse original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "excepts")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "finally")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the excepts field of hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatementWithExcepts :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm [Syntax.ExceptStarBlock] -> Typed.TypedTerm Syntax.TryExceptStarStatement+tryExceptStarStatementWithExcepts original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          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.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "finally")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the finally field of hydra.python.syntax.TryExceptStarStatement+tryExceptStarStatementWithFinally :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.TryExceptStarStatement+tryExceptStarStatementWithFinally original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "excepts")})),+            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.python.syntax.TryExceptStarStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.TryExceptStatement+tryExceptStatement :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm [Syntax.ExceptBlock] -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.TryExceptStatement+tryExceptStatement body excepts else_ finally =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          Core.fieldTerm = (Typed.unTypedTerm excepts)},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm else_)},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Typed.unTypedTerm finally)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.TryExceptStatement+tryExceptStatementBody :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm Syntax.Block+tryExceptStatementBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the else field of hydra.python.syntax.TryExceptStatement+tryExceptStatementElse :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm (Maybe Syntax.Block)+tryExceptStatementElse x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+        Core.projectionFieldName = (Core.Name "else")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the excepts field of hydra.python.syntax.TryExceptStatement+tryExceptStatementExcepts :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm [Syntax.ExceptBlock]+tryExceptStatementExcepts x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+        Core.projectionFieldName = (Core.Name "excepts")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the finally field of hydra.python.syntax.TryExceptStatement+tryExceptStatementFinally :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm (Maybe Syntax.Block)+tryExceptStatementFinally x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+        Core.projectionFieldName = (Core.Name "finally")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.python.syntax.TryExceptStatement+tryExceptStatementWithBody :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryExceptStatement+tryExceptStatementWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "excepts")})),+            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.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "finally")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the else field of hydra.python.syntax.TryExceptStatement+tryExceptStatementWithElse :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.TryExceptStatement+tryExceptStatementWithElse original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "excepts")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "finally")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the excepts field of hydra.python.syntax.TryExceptStatement+tryExceptStatementWithExcepts :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm [Syntax.ExceptBlock] -> Typed.TypedTerm Syntax.TryExceptStatement+tryExceptStatementWithExcepts original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          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.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "finally")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the finally field of hydra.python.syntax.TryExceptStatement+tryExceptStatementWithFinally :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.TryExceptStatement+tryExceptStatementWithFinally original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "excepts"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "excepts")})),+            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.python.syntax.TryExceptStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.TryFinallyStatement+tryFinallyStatement :: Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryFinallyStatement+tryFinallyStatement body finally =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryFinallyStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Typed.unTypedTerm finally)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.TryFinallyStatement+tryFinallyStatementBody :: Typed.TypedTerm Syntax.TryFinallyStatement -> Typed.TypedTerm Syntax.Block+tryFinallyStatementBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryFinallyStatement"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the finally field of hydra.python.syntax.TryFinallyStatement+tryFinallyStatementFinally :: Typed.TypedTerm Syntax.TryFinallyStatement -> Typed.TypedTerm Syntax.Block+tryFinallyStatementFinally x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryFinallyStatement"),+        Core.projectionFieldName = (Core.Name "finally")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.python.syntax.TryFinallyStatement+tryFinallyStatementWithBody :: Typed.TypedTerm Syntax.TryFinallyStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryFinallyStatement+tryFinallyStatementWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryFinallyStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryFinallyStatement"),+              Core.projectionFieldName = (Core.Name "finally")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the finally field of hydra.python.syntax.TryFinallyStatement+tryFinallyStatementWithFinally :: Typed.TypedTerm Syntax.TryFinallyStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.TryFinallyStatement+tryFinallyStatementWithFinally original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TryFinallyStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TryFinallyStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "finally"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the except variant of hydra.python.syntax.TryStatement+tryStatementExcept :: Typed.TypedTerm Syntax.TryExceptStatement -> Typed.TypedTerm Syntax.TryStatement+tryStatementExcept x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TryStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "except"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the exceptStar variant of hydra.python.syntax.TryStatement+tryStatementExceptStar :: Typed.TypedTerm Syntax.TryExceptStarStatement -> Typed.TypedTerm Syntax.TryStatement+tryStatementExceptStar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TryStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "exceptStar"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the finally variant of hydra.python.syntax.TryStatement+tryStatementFinally :: Typed.TypedTerm Syntax.TryFinallyStatement -> Typed.TypedTerm Syntax.TryStatement+tryStatementFinally x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TryStatement"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "finally"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.Tuple wrapper+tuple :: Typed.TypedTerm [Syntax.StarNamedExpression] -> Typed.TypedTerm Syntax.Tuple+tuple x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.Tuple"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.TypeAlias+typeAlias :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypeAlias+typeAlias name typeParams expression =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TypeAlias"),+      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 "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)}]}))++-- | DSL accessor for the expression field of hydra.python.syntax.TypeAlias+typeAliasExpression :: Typed.TypedTerm Syntax.TypeAlias -> Typed.TypedTerm Syntax.Expression+typeAliasExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TypeAlias"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.python.syntax.TypeAlias+typeAliasName :: Typed.TypedTerm Syntax.TypeAlias -> Typed.TypedTerm Syntax.Name+typeAliasName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TypeAlias"),+        Core.projectionFieldName = (Core.Name "name")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeParams field of hydra.python.syntax.TypeAlias+typeAliasTypeParams :: Typed.TypedTerm Syntax.TypeAlias -> Typed.TypedTerm [Syntax.TypeParameter]+typeAliasTypeParams x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TypeAlias"),+        Core.projectionFieldName = (Core.Name "typeParams")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the expression field of hydra.python.syntax.TypeAlias+typeAliasWithExpression :: Typed.TypedTerm Syntax.TypeAlias -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypeAlias+typeAliasWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TypeAlias"),+      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.python.syntax.TypeAlias"),+              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.python.syntax.TypeAlias"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            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.python.syntax.TypeAlias+typeAliasWithName :: Typed.TypedTerm Syntax.TypeAlias -> Typed.TypedTerm Syntax.Name -> Typed.TypedTerm Syntax.TypeAlias+typeAliasWithName original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TypeAlias"),+      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.python.syntax.TypeAlias"),+              Core.projectionFieldName = (Core.Name "typeParams")})),+            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.python.syntax.TypeAlias"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeParams field of hydra.python.syntax.TypeAlias+typeAliasWithTypeParams :: Typed.TypedTerm Syntax.TypeAlias -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.TypeAlias+typeAliasWithTypeParams original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TypeAlias"),+      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.python.syntax.TypeAlias"),+              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 "expression"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.TypeAlias"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for the hydra.python.syntax.TypeComment wrapper+typeComment :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.TypeComment+typeComment x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.TypeComment"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL injection for the doubleStarredExpression variant of hydra.python.syntax.TypeExpression+typeExpressionDoubleStarredExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypeExpression+typeExpressionDoubleStarredExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TypeExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "doubleStarredExpression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the expression variant of hydra.python.syntax.TypeExpression+typeExpressionExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypeExpression+typeExpressionExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TypeExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "expression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the starredExpression variant of hydra.python.syntax.TypeExpression+typeExpressionStarredExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypeExpression+typeExpressionStarredExpression x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TypeExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "starredExpression"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the doubleStar variant of hydra.python.syntax.TypeParameter+typeParameterDoubleStar :: Typed.TypedTerm Syntax.DoubleStarTypeParameter -> Typed.TypedTerm Syntax.TypeParameter+typeParameterDoubleStar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TypeParameter"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "doubleStar"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.TypeParameter+typeParameterSimple :: Typed.TypedTerm Syntax.SimpleTypeParameter -> Typed.TypedTerm Syntax.TypeParameter+typeParameterSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TypeParameter"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the star variant of hydra.python.syntax.TypeParameter+typeParameterStar :: Typed.TypedTerm Syntax.StarTypeParameter -> Typed.TypedTerm Syntax.TypeParameter+typeParameterStar x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.TypeParameter"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "star"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.python.syntax.TypedAssignment+typedAssignment :: Typed.TypedTerm Syntax.SingleTarget -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm (Maybe Syntax.AnnotatedRhs) -> Typed.TypedTerm Syntax.TypedAssignment+typedAssignment lhs type_ rhs =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TypedAssignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          Core.fieldTerm = (Typed.unTypedTerm lhs)},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          Core.fieldTerm = (Typed.unTypedTerm type_)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)}]}))++-- | DSL accessor for the lhs field of hydra.python.syntax.TypedAssignment+typedAssignmentLhs :: Typed.TypedTerm Syntax.TypedAssignment -> Typed.TypedTerm Syntax.SingleTarget+typedAssignmentLhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TypedAssignment"),+        Core.projectionFieldName = (Core.Name "lhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the rhs field of hydra.python.syntax.TypedAssignment+typedAssignmentRhs :: Typed.TypedTerm Syntax.TypedAssignment -> Typed.TypedTerm (Maybe Syntax.AnnotatedRhs)+typedAssignmentRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TypedAssignment"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the type field of hydra.python.syntax.TypedAssignment+typedAssignmentType :: Typed.TypedTerm Syntax.TypedAssignment -> Typed.TypedTerm Syntax.Expression+typedAssignmentType x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.TypedAssignment"),+        Core.projectionFieldName = (Core.Name "type")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the lhs field of hydra.python.syntax.TypedAssignment+typedAssignmentWithLhs :: Typed.TypedTerm Syntax.TypedAssignment -> Typed.TypedTerm Syntax.SingleTarget -> Typed.TypedTerm Syntax.TypedAssignment+typedAssignmentWithLhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TypedAssignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "lhs"),+          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.python.syntax.TypedAssignment"),+              Core.projectionFieldName = (Core.Name "type")})),+            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.python.syntax.TypedAssignment"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the rhs field of hydra.python.syntax.TypedAssignment+typedAssignmentWithRhs :: Typed.TypedTerm Syntax.TypedAssignment -> Typed.TypedTerm (Maybe Syntax.AnnotatedRhs) -> Typed.TypedTerm Syntax.TypedAssignment+typedAssignmentWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TypedAssignment"),+      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.python.syntax.TypedAssignment"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            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.python.syntax.TypedAssignment"),+              Core.projectionFieldName = (Core.Name "type")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the type field of hydra.python.syntax.TypedAssignment+typedAssignmentWithType :: Typed.TypedTerm Syntax.TypedAssignment -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypedAssignment+typedAssignmentWithType original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.TypedAssignment"),+      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.python.syntax.TypedAssignment"),+              Core.projectionFieldName = (Core.Name "lhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "type"),+          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.python.syntax.TypedAssignment"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL accessor for the body of hydra.python.syntax.Annotation+unAnnotation :: Typed.TypedTerm Syntax.Annotation -> Typed.TypedTerm Syntax.Expression+unAnnotation x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Annotation")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Attribute+unAttribute :: Typed.TypedTerm Syntax.Attribute -> Typed.TypedTerm [Syntax.Name]+unAttribute x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Attribute")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.CapturePattern+unCapturePattern :: Typed.TypedTerm Syntax.CapturePattern -> Typed.TypedTerm Syntax.PatternCaptureTarget+unCapturePattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.CapturePattern")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Conjunction+unConjunction :: Typed.TypedTerm Syntax.Conjunction -> Typed.TypedTerm [Syntax.Inversion]+unConjunction x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Conjunction")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Decorators+unDecorators :: Typed.TypedTerm Syntax.Decorators -> Typed.TypedTerm [Syntax.NamedExpression]+unDecorators x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Decorators")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Default+unDefault :: Typed.TypedTerm Syntax.Default -> Typed.TypedTerm Syntax.Expression+unDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Default")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.DelStatement+unDelStatement :: Typed.TypedTerm Syntax.DelStatement -> Typed.TypedTerm Syntax.DelTargets+unDelStatement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.DelStatement")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.DelTargets+unDelTargets :: Typed.TypedTerm Syntax.DelTargets -> Typed.TypedTerm [Syntax.DelTarget]+unDelTargets x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.DelTargets")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Dict+unDict :: Typed.TypedTerm Syntax.Dict -> Typed.TypedTerm [Syntax.DoubleStarredKvpair]+unDict x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Dict")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Disjunction+unDisjunction :: Typed.TypedTerm Syntax.Disjunction -> Typed.TypedTerm [Syntax.Conjunction]+unDisjunction x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Disjunction")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.DottedName+unDottedName :: Typed.TypedTerm Syntax.DottedName -> Typed.TypedTerm [Syntax.Name]+unDottedName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.DottedName")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.DoubleStarPattern+unDoubleStarPattern :: Typed.TypedTerm Syntax.DoubleStarPattern -> Typed.TypedTerm Syntax.PatternCaptureTarget+unDoubleStarPattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.DoubleStarPattern")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Eval+unEval :: Typed.TypedTerm Syntax.Eval -> Typed.TypedTerm [Syntax.Expression]+unEval x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Eval")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.File+unFile :: Typed.TypedTerm Syntax.File -> Typed.TypedTerm [Syntax.Statement]+unFile x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.File")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.ForIfClauses+unForIfClauses :: Typed.TypedTerm Syntax.ForIfClauses -> Typed.TypedTerm [Syntax.ForIfClause]+unForIfClauses x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.ForIfClauses")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.FuncTypeComment+unFuncTypeComment :: Typed.TypedTerm Syntax.FuncTypeComment -> Typed.TypedTerm Syntax.TypeComment+unFuncTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.FuncTypeComment")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.GroupPattern+unGroupPattern :: Typed.TypedTerm Syntax.GroupPattern -> Typed.TypedTerm Syntax.Pattern+unGroupPattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.GroupPattern")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Guard+unGuard :: Typed.TypedTerm Syntax.Guard -> Typed.TypedTerm Syntax.NamedExpression+unGuard x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Guard")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.ImaginaryNumber+unImaginaryNumber :: Typed.TypedTerm Syntax.ImaginaryNumber -> Typed.TypedTerm Double+unImaginaryNumber x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.ImaginaryNumber")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.ImportName+unImportName :: Typed.TypedTerm Syntax.ImportName -> Typed.TypedTerm [Syntax.DottedAsName]+unImportName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.ImportName")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Interactive+unInteractive :: Typed.TypedTerm Syntax.Interactive -> Typed.TypedTerm Syntax.Statement+unInteractive x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Interactive")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.ItemsPattern+unItemsPattern :: Typed.TypedTerm Syntax.ItemsPattern -> Typed.TypedTerm [Syntax.KeyValuePattern]+unItemsPattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.ItemsPattern")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.KeywordPatterns+unKeywordPatterns :: Typed.TypedTerm Syntax.KeywordPatterns -> Typed.TypedTerm [Syntax.KeywordPattern]+unKeywordPatterns x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.KeywordPatterns")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Keywords+unKeywords :: Typed.TypedTerm Syntax.Keywords -> Typed.TypedTerm Syntax.ParamNoDefault+unKeywords x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Keywords")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.LambdaKwds+unLambdaKwds :: Typed.TypedTerm Syntax.LambdaKwds -> Typed.TypedTerm Syntax.LambdaParamNoDefault+unLambdaKwds x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.LambdaKwds")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.LambdaParamNoDefault+unLambdaParamNoDefault :: Typed.TypedTerm Syntax.LambdaParamNoDefault -> Typed.TypedTerm Syntax.Name+unLambdaParamNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.LambdaParamNoDefault")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.List+unList :: Typed.TypedTerm Syntax.List -> Typed.TypedTerm [Syntax.StarNamedExpression]+unList x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.List")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.MaybeSequencePattern+unMaybeSequencePattern :: Typed.TypedTerm Syntax.MaybeSequencePattern -> Typed.TypedTerm [Syntax.MaybeStarPattern]+unMaybeSequencePattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.MaybeSequencePattern")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Module+unModule :: Typed.TypedTerm Syntax.Module -> Typed.TypedTerm [[Syntax.Statement]]+unModule x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Module")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Name+unName :: Typed.TypedTerm Syntax.Name -> Typed.TypedTerm String+unName x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Name")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.NameOrAttribute+unNameOrAttribute :: Typed.TypedTerm Syntax.NameOrAttribute -> Typed.TypedTerm [Syntax.Name]+unNameOrAttribute x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.NameOrAttribute")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.OrPattern+unOrPattern :: Typed.TypedTerm Syntax.OrPattern -> Typed.TypedTerm [Syntax.ClosedPattern]+unOrPattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.OrPattern")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.PatternCaptureTarget+unPatternCaptureTarget :: Typed.TypedTerm Syntax.PatternCaptureTarget -> Typed.TypedTerm Syntax.Name+unPatternCaptureTarget x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.PatternCaptureTarget")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.PositionalPatterns+unPositionalPatterns :: Typed.TypedTerm Syntax.PositionalPatterns -> Typed.TypedTerm [Syntax.Pattern]+unPositionalPatterns x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.PositionalPatterns")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.RaiseStatement+unRaiseStatement :: Typed.TypedTerm Syntax.RaiseStatement -> Typed.TypedTerm (Maybe Syntax.RaiseExpression)+unRaiseStatement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.RaiseStatement")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.ReturnStatement+unReturnStatement :: Typed.TypedTerm Syntax.ReturnStatement -> Typed.TypedTerm [Syntax.StarExpression]+unReturnStatement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.ReturnStatement")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Set+unSet :: Typed.TypedTerm Syntax.Set -> Typed.TypedTerm [Syntax.StarNamedExpression]+unSet x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Set")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.SlashNoDefault+unSlashNoDefault :: Typed.TypedTerm Syntax.SlashNoDefault -> Typed.TypedTerm [Syntax.ParamNoDefault]+unSlashNoDefault x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.SlashNoDefault")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.StarAnnotation+unStarAnnotation :: Typed.TypedTerm Syntax.StarAnnotation -> Typed.TypedTerm Syntax.StarExpression+unStarAnnotation x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.StarAnnotation")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.StarNamedExpressions+unStarNamedExpressions :: Typed.TypedTerm Syntax.StarNamedExpressions -> Typed.TypedTerm [Syntax.StarNamedExpression]+unStarNamedExpressions x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.StarNamedExpressions")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.StarTargetsListSeq+unStarTargetsListSeq :: Typed.TypedTerm Syntax.StarTargetsListSeq -> Typed.TypedTerm [Syntax.StarTarget]+unStarTargetsListSeq x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.StarTargetsListSeq")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.StarTargetsTupleSeq+unStarTargetsTupleSeq :: Typed.TypedTerm Syntax.StarTargetsTupleSeq -> Typed.TypedTerm [Syntax.StarTarget]+unStarTargetsTupleSeq x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.StarTargetsTupleSeq")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.StarredExpression+unStarredExpression :: Typed.TypedTerm Syntax.StarredExpression -> Typed.TypedTerm Syntax.Expression+unStarredExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.StarredExpression")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.Tuple+unTuple :: Typed.TypedTerm Syntax.Tuple -> Typed.TypedTerm [Syntax.StarNamedExpression]+unTuple x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.Tuple")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.TypeComment+unTypeComment :: Typed.TypedTerm Syntax.TypeComment -> Typed.TypedTerm String+unTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.TypeComment")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.ValuePattern+unValuePattern :: Typed.TypedTerm Syntax.ValuePattern -> Typed.TypedTerm Syntax.Attribute+unValuePattern x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.ValuePattern")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body of hydra.python.syntax.YieldStatement+unYieldStatement :: Typed.TypedTerm Syntax.YieldStatement -> Typed.TypedTerm Syntax.YieldExpression+unYieldStatement x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.python.syntax.YieldStatement")),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.UntypedAssignment+untypedAssignment :: Typed.TypedTerm [Syntax.StarTarget] -> Typed.TypedTerm Syntax.AnnotatedRhs -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.UntypedAssignment+untypedAssignment targets rhs typeComment =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Typed.unTypedTerm targets)},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm rhs)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm typeComment)}]}))++-- | DSL accessor for the rhs field of hydra.python.syntax.UntypedAssignment+untypedAssignmentRhs :: Typed.TypedTerm Syntax.UntypedAssignment -> Typed.TypedTerm Syntax.AnnotatedRhs+untypedAssignmentRhs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+        Core.projectionFieldName = (Core.Name "rhs")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the targets field of hydra.python.syntax.UntypedAssignment+untypedAssignmentTargets :: Typed.TypedTerm Syntax.UntypedAssignment -> Typed.TypedTerm [Syntax.StarTarget]+untypedAssignmentTargets x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+        Core.projectionFieldName = (Core.Name "targets")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeComment field of hydra.python.syntax.UntypedAssignment+untypedAssignmentTypeComment :: Typed.TypedTerm Syntax.UntypedAssignment -> Typed.TypedTerm (Maybe Syntax.TypeComment)+untypedAssignmentTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+        Core.projectionFieldName = (Core.Name "typeComment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the rhs field of hydra.python.syntax.UntypedAssignment+untypedAssignmentWithRhs :: Typed.TypedTerm Syntax.UntypedAssignment -> Typed.TypedTerm Syntax.AnnotatedRhs -> Typed.TypedTerm Syntax.UntypedAssignment+untypedAssignmentWithRhs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+              Core.projectionFieldName = (Core.Name "targets")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "rhs"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the targets field of hydra.python.syntax.UntypedAssignment+untypedAssignmentWithTargets :: Typed.TypedTerm Syntax.UntypedAssignment -> Typed.TypedTerm [Syntax.StarTarget] -> Typed.TypedTerm Syntax.UntypedAssignment+untypedAssignmentWithTargets original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          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.python.syntax.UntypedAssignment"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeComment field of hydra.python.syntax.UntypedAssignment+untypedAssignmentWithTypeComment :: Typed.TypedTerm Syntax.UntypedAssignment -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.UntypedAssignment+untypedAssignmentWithTypeComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "targets"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.UntypedAssignment"),+              Core.projectionFieldName = (Core.Name "targets")})),+            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.python.syntax.UntypedAssignment"),+              Core.projectionFieldName = (Core.Name "rhs")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for the hydra.python.syntax.ValuePattern wrapper+valuePattern :: Typed.TypedTerm Syntax.Attribute -> Typed.TypedTerm Syntax.ValuePattern+valuePattern x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.ValuePattern"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))++-- | DSL constructor for hydra.python.syntax.WhileStatement+whileStatement :: Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.WhileStatement+whileStatement condition body else_ =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Typed.unTypedTerm condition)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm else_)}]}))++-- | DSL accessor for the body field of hydra.python.syntax.WhileStatement+whileStatementBody :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Block+whileStatementBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the condition field of hydra.python.syntax.WhileStatement+whileStatementCondition :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.NamedExpression+whileStatementCondition x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+        Core.projectionFieldName = (Core.Name "condition")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the else field of hydra.python.syntax.WhileStatement+whileStatementElse :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm (Maybe Syntax.Block)+whileStatementElse x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+        Core.projectionFieldName = (Core.Name "else")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the body field of hydra.python.syntax.WhileStatement+whileStatementWithBody :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.WhileStatement+whileStatementWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+              Core.projectionFieldName = (Core.Name "condition")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          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.python.syntax.WhileStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the condition field of hydra.python.syntax.WhileStatement+whileStatementWithCondition :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.NamedExpression -> Typed.TypedTerm Syntax.WhileStatement+whileStatementWithCondition original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          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.python.syntax.WhileStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            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.python.syntax.WhileStatement"),+              Core.projectionFieldName = (Core.Name "else")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the else field of hydra.python.syntax.WhileStatement+whileStatementWithElse :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm (Maybe Syntax.Block) -> Typed.TypedTerm Syntax.WhileStatement+whileStatementWithElse original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "condition"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WhileStatement"),+              Core.projectionFieldName = (Core.Name "condition")})),+            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.python.syntax.WhileStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "else"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL constructor for hydra.python.syntax.WithItem+withItem :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm (Maybe Syntax.StarTarget) -> Typed.TypedTerm Syntax.WithItem+withItem expression as =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WithItem"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm expression)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm as)}]}))++-- | DSL accessor for the as field of hydra.python.syntax.WithItem+withItemAs :: Typed.TypedTerm Syntax.WithItem -> Typed.TypedTerm (Maybe Syntax.StarTarget)+withItemAs x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithItem"),+        Core.projectionFieldName = (Core.Name "as")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the expression field of hydra.python.syntax.WithItem+withItemExpression :: Typed.TypedTerm Syntax.WithItem -> Typed.TypedTerm Syntax.Expression+withItemExpression x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithItem"),+        Core.projectionFieldName = (Core.Name "expression")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the as field of hydra.python.syntax.WithItem+withItemWithAs :: Typed.TypedTerm Syntax.WithItem -> Typed.TypedTerm (Maybe Syntax.StarTarget) -> Typed.TypedTerm Syntax.WithItem+withItemWithAs original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WithItem"),+      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.python.syntax.WithItem"),+              Core.projectionFieldName = (Core.Name "expression")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the expression field of hydra.python.syntax.WithItem+withItemWithExpression :: Typed.TypedTerm Syntax.WithItem -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.WithItem+withItemWithExpression original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WithItem"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "expression"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "as"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithItem"),+              Core.projectionFieldName = (Core.Name "as")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.python.syntax.WithStatement+withStatement :: Typed.TypedTerm Bool -> Typed.TypedTerm [Syntax.WithItem] -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.WithStatement+withStatement async items typeComment body =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Typed.unTypedTerm async)},+        Core.Field {+          Core.fieldName = (Core.Name "items"),+          Core.fieldTerm = (Typed.unTypedTerm items)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Typed.unTypedTerm typeComment)},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm body)}]}))++-- | DSL accessor for the async field of hydra.python.syntax.WithStatement+withStatementAsync :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm Bool+withStatementAsync x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+        Core.projectionFieldName = (Core.Name "async")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the body field of hydra.python.syntax.WithStatement+withStatementBody :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm Syntax.Block+withStatementBody x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+        Core.projectionFieldName = (Core.Name "body")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the items field of hydra.python.syntax.WithStatement+withStatementItems :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm [Syntax.WithItem]+withStatementItems x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+        Core.projectionFieldName = (Core.Name "items")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeComment field of hydra.python.syntax.WithStatement+withStatementTypeComment :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm (Maybe Syntax.TypeComment)+withStatementTypeComment x =+    Typed.TypedTerm (Core.TermApplication (Core.Application {+      Core.applicationFunction = (Core.TermProject (Core.Projection {+        Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+        Core.projectionFieldName = (Core.Name "typeComment")})),+      Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the async field of hydra.python.syntax.WithStatement+withStatementWithAsync :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.WithStatement+withStatementWithAsync original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "items"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "items")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            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.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the body field of hydra.python.syntax.WithStatement+withStatementWithBody :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm Syntax.Block -> Typed.TypedTerm Syntax.WithStatement+withStatementWithBody original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "items"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "items")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "body"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the items field of hydra.python.syntax.WithStatement+withStatementWithItems :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm [Syntax.WithItem] -> Typed.TypedTerm Syntax.WithStatement+withStatementWithItems original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "items"),+          Core.fieldTerm = (Typed.unTypedTerm newVal)},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "typeComment")})),+            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.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeComment field of hydra.python.syntax.WithStatement+withStatementWithTypeComment :: Typed.TypedTerm Syntax.WithStatement -> Typed.TypedTerm (Maybe Syntax.TypeComment) -> Typed.TypedTerm Syntax.WithStatement+withStatementWithTypeComment original newVal =+    Typed.TypedTerm (Core.TermRecord (Core.Record {+      Core.recordTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+      Core.recordFields = [+        Core.Field {+          Core.fieldName = (Core.Name "async"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "async")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "items"),+          Core.fieldTerm = (Core.TermApplication (Core.Application {+            Core.applicationFunction = (Core.TermProject (Core.Projection {+              Core.projectionTypeName = (Core.Name "hydra.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "items")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))},+        Core.Field {+          Core.fieldName = (Core.Name "typeComment"),+          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.python.syntax.WithStatement"),+              Core.projectionFieldName = (Core.Name "body")})),+            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the from variant of hydra.python.syntax.YieldExpression+yieldExpressionFrom :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.YieldExpression+yieldExpressionFrom x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.YieldExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "from"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the simple variant of hydra.python.syntax.YieldExpression+yieldExpressionSimple :: Typed.TypedTerm [Syntax.StarExpression] -> Typed.TypedTerm Syntax.YieldExpression+yieldExpressionSimple x =+    Typed.TypedTerm (Core.TermInject (Core.Injection {+      Core.injectionTypeName = (Core.Name "hydra.python.syntax.YieldExpression"),+      Core.injectionField = Core.Field {+        Core.fieldName = (Core.Name "simple"),+        Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for the hydra.python.syntax.YieldStatement wrapper+yieldStatement :: Typed.TypedTerm Syntax.YieldExpression -> Typed.TypedTerm Syntax.YieldStatement+yieldStatement x =+    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {+      Core.wrappedTermTypeName = (Core.Name "hydra.python.syntax.YieldStatement"),+      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
+ src/main/haskell/Hydra/Python/Coder.hs view
@@ -0,0 +1,2965 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Python code generator: converts Hydra modules to Python source code++module Hydra.Python.Coder where++import qualified Hydra.Analysis as Analysis+import qualified Hydra.Annotations as Annotations+import qualified Hydra.Arity as Arity+import qualified Hydra.Ast as Ast+import qualified Hydra.Checking as Checking+import qualified Hydra.Classes as Classes+import qualified Hydra.Coders as Coders+import qualified Hydra.Core as Core+import qualified Hydra.Dependencies as Dependencies+import qualified Hydra.Environment as Environment+import qualified Hydra.Error.Checking as ErrorChecking+import qualified Hydra.Error.Core as ErrorCore+import qualified Hydra.Error.Packaging as ErrorPackaging+import qualified Hydra.Errors as Errors+import qualified Hydra.File as File+import qualified Hydra.Formatting as Formatting+import qualified Hydra.Graph as Graph+import qualified Hydra.Inference as Inference+import qualified Hydra.Json.Model as Model+import qualified Hydra.Lexical as Lexical+import qualified Hydra.Overlay.Haskell.Lib.Eithers as Eithers+import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps+import qualified Hydra.Overlay.Haskell.Lib.Math as Math+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs+import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Names as Names+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Predicates as Predicates+import qualified Hydra.Python.Environment as PythonEnvironment+import qualified Hydra.Python.Names as PythonNames+import qualified Hydra.Python.Serde as Serde+import qualified Hydra.Python.Syntax as Syntax+import qualified Hydra.Python.Utils as Utils+import qualified Hydra.Query as Query+import qualified Hydra.Reduction as Reduction+import qualified Hydra.Relational as Relational+import qualified Hydra.Resolution as Resolution+import qualified Hydra.Rewriting as Rewriting+import qualified Hydra.Scoping as Scoping+import qualified Hydra.Serialization as Serialization+import qualified Hydra.Show.Core as ShowCore+import qualified Hydra.Sorting as Sorting+import qualified Hydra.Strip as Strip+import qualified Hydra.Tabular as Tabular+import qualified Hydra.Testing as Testing+import qualified Hydra.Topology as Topology+import qualified Hydra.Typed as Typed+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import qualified Hydra.Validation as Validation+import qualified Hydra.Variables as Variables+import qualified Hydra.Variants as Variants+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci+import qualified Data.Map as M+import qualified Data.Set as S++-- | Analyze a function term with Python-specific Graph management+analyzePythonFunction :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Core.Term -> Either t0 (Typing.FunctionStructure PythonEnvironment.PythonEnvironment)+analyzePythonFunction cx env term =+    Analysis.analyzeFunctionTermWith cx pythonBindingMetadata pythonEnvironmentGetGraph pythonEnvironmentSetGraph env term++-- | Escape a builder setter name that would collide with build()/builder()/self+builderSetterName :: PythonEnvironment.PythonEnvironment -> Core.Name -> String+builderSetterName env fname =++      let base = Syntax.unName (PythonNames.encodeFieldName env fname)+      in (Logic.ifElse (Logic.or (Equality.equal base "build") (Logic.or (Equality.equal base "builder") (Equality.equal base "self"))) (Strings.cat2 base "_") base)++-- | Encode a single case (Field) into a CaseBlock for a match statement+caseBlockToExpr :: t0 -> PythonEnvironment.PythonEnvironment -> Core.Name -> [Core.FieldType] -> Bool -> (PythonEnvironment.PythonEnvironment -> Core.Term -> Either t1 [Syntax.Statement]) -> Core.CaseAlternative -> Either t1 Syntax.CaseBlock+caseBlockToExpr cx env tname rowType isEnum encodeBody field =++      let fname = Core.caseAlternativeName field+          fterm = Core.caseAlternativeHandler field+          stripped = Strip.deannotateAndDetypeTerm fterm+          effectiveLambda =+                  case stripped of+                    Core.TermLambda v0 -> v0+                    _ ->+                      let syntheticVar = Core.Name "_matchValue"+                      in Core.Lambda {+                        Core.lambdaParameter = syntheticVar,+                        Core.lambdaDomain = Nothing,+                        Core.lambdaBody = (Core.TermApplication (Core.Application {+                          Core.applicationFunction = stripped,+                          Core.applicationArgument = (Core.TermVariable syntheticVar)}))}+          v = Core.lambdaParameter effectiveLambda+          rawBody = Core.lambdaBody effectiveLambda+          isUnitVariant = isVariantUnitType rowType fname+          effectiveBody = Logic.ifElse isUnitVariant (eliminateUnitVar v rawBody) rawBody+          shouldCapture =+                  Logic.not (Logic.or isUnitVariant (Logic.or (Variables.isFreeVariableInTerm v rawBody) (Predicates.isUnitTerm rawBody)))+          env2 = pythonEnvironmentSetGraph (Scoping.extendGraphForLambda (pythonEnvironmentGetGraph env) effectiveLambda) env+          pyVariantName = deconflictVariantName True env2 tname fname (PythonEnvironment.pythonEnvironmentGraph env2)+          pattern = variantClosedPattern env2 tname fname pyVariantName rowType isEnum v shouldCapture+      in (Eithers.bind (encodeBody env2 effectiveBody) (\stmts ->+        let pyBody = Utils.indentedBlock Nothing [+              stmts]+        in (Right (Syntax.CaseBlock {+          Syntax.caseBlockPatterns = (Utils.pyClosedPatternToPyPatterns pattern),+          Syntax.caseBlockGuard = Nothing,+          Syntax.caseBlockBody = pyBody}))))++-- | Create a class pattern for a unit variant (no value captured)+classVariantPatternUnit :: Syntax.Name -> Syntax.ClosedPattern+classVariantPatternUnit pyVariantName =+    Syntax.ClosedPatternClass (Syntax.ClassPattern {+      Syntax.classPatternNameOrAttribute = (Syntax.NameOrAttribute [+        pyVariantName]),+      Syntax.classPatternPositionalPatterns = Nothing,+      Syntax.classPatternKeywordPatterns = Nothing})++-- | Create a class pattern for a variant with captured value+classVariantPatternWithCapture :: PythonEnvironment.PythonEnvironment -> Syntax.Name -> Core.Name -> Syntax.ClosedPattern+classVariantPatternWithCapture env pyVariantName varName =++      let pyVarNameAttr = Syntax.NameOrAttribute [+            pyVariantName]+          capturePattern =+                  Syntax.ClosedPatternCapture (Syntax.CapturePattern (Syntax.PatternCaptureTarget (PythonNames.encodeName False Util.CaseConventionLowerSnake env varName)))+          keywordPattern =+                  Syntax.KeywordPattern {+                    Syntax.keywordPatternName = (Syntax.Name "value"),+                    Syntax.keywordPatternPattern = (Syntax.PatternOr (Syntax.OrPattern [+                      capturePattern]))}+      in (Syntax.ClosedPatternClass (Syntax.ClassPattern {+        Syntax.classPatternNameOrAttribute = pyVarNameAttr,+        Syntax.classPatternPositionalPatterns = Nothing,+        Syntax.classPatternKeywordPatterns = (Just (Syntax.KeywordPatterns [+          keywordPattern]))}))++-- | Collect type variables from a type+collectTypeVariables :: S.Set Core.Name -> Core.Type -> S.Set Core.Name+collectTypeVariables initial typ =+    case (Strip.deannotateType typ) of+      Core.TypeForall v0 ->+        let v = Core.forallTypeParameter v0+            body = Core.forallTypeBody v0+        in (collectTypeVariables (Sets.insert v initial) body)+      _ ->+        let freeVars = Variables.freeVariablesInType typ+            isTypeVar = \n -> isTypeVariableName n+            filteredList = Lists.filter isTypeVar (Sets.toList freeVars)+        in (Sets.union initial (Sets.fromList filteredList))++-- | Conditionally include a symbol name based on a boolean flag+condImportSymbol :: t0 -> Bool -> Maybe t0+condImportSymbol name flag = Logic.ifElse flag (Just name) Nothing++-- | Create a @dataclass(frozen=True) decorator+dataclassDecorator :: Syntax.NamedExpression+dataclassDecorator =+    Syntax.NamedExpressionSimple (Utils.pyPrimaryToPyExpression (Utils.primaryWithRhs (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "dataclass"))) (Syntax.PrimaryRhsCall (Syntax.Args {+      Syntax.argsPositional = [],+      Syntax.argsKwargOrStarred = [+        Syntax.KwargOrStarredKwarg (Syntax.Kwarg {+          Syntax.kwargName = (Syntax.Name "frozen"),+          Syntax.kwargValue = (Utils.pyAtomToPyExpression Syntax.AtomTrue)})],+      Syntax.argsKwargOrDoubleStarred = []}))))++-- | Deconflict a variant name to avoid collisions with type names+deconflictVariantName :: Bool -> PythonEnvironment.PythonEnvironment -> Core.Name -> Core.Name -> Graph.Graph -> Syntax.Name+deconflictVariantName isQualified env unionName fname g =++      let candidateHydraName = Core.Name (Strings.cat2 (Core.unName unionName) (Formatting.capitalize (Core.unName fname)))+          termCollision = Maps.member candidateHydraName (Graph.graphBoundTerms g)+          typeCollision = Maps.member candidateHydraName (Graph.graphSchemaTypes g)+          collision = Logic.or termCollision typeCollision+      in (Logic.ifElse collision (Syntax.Name (Strings.cat2 (Syntax.unName (PythonNames.variantName isQualified env unionName fname)) "_")) (PythonNames.variantName isQualified env unionName fname))++-- | Rewrite case statements to avoid variable name collisions+deduplicateCaseVariables :: [Core.CaseAlternative] -> [Core.CaseAlternative]+deduplicateCaseVariables cases_ =++      let rewriteCase =+              \state -> \field ->+                let countByName = Pairs.first state+                    done = Pairs.second state+                    fname = Core.caseAlternativeName field+                    fterm = Core.caseAlternativeHandler field+                in case (Strip.deannotateAndDetypeTerm fterm) of+                  Core.TermLambda v0 ->+                    let v = Core.lambdaParameter v0+                        mdom = Core.lambdaDomain v0+                        body = Core.lambdaBody v0+                    in (Optionals.cases (Maps.lookup v countByName) (Maps.insert v 1 countByName, (Lists.cons field done)) (\count ->+                      let count2 = Math.add count 1+                          v2 = Core.Name (Strings.cat2 (Core.unName v) (Literals.showInt32 count2))+                          newBody = Reduction.alphaConvert v v2 body+                          newLam =+                                  Core.Lambda {+                                    Core.lambdaParameter = v2,+                                    Core.lambdaDomain = mdom,+                                    Core.lambdaBody = newBody}+                          newTerm = Core.TermLambda newLam+                          newField =+                                  Core.CaseAlternative {+                                    Core.caseAlternativeName = fname,+                                    Core.caseAlternativeHandler = newTerm}+                      in (Maps.insert v count2 countByName, (Lists.cons newField done))))+                  _ -> (countByName, (Lists.cons field done))+          result = Lists.foldl rewriteCase (Maps.empty, []) cases_+      in (Lists.reverse (Pairs.second result))++-- | Recursively dig through forall types to find wrap types+digForWrap :: Bool -> PythonEnvironment.PythonModuleMetadata -> Core.Type -> PythonEnvironment.PythonModuleMetadata+digForWrap isTermAnnot meta typ =+    case (Strip.deannotateType typ) of+      Core.TypeForall v0 -> digForWrap isTermAnnot meta (Core.forallTypeBody v0)+      Core.TypeWrap _ -> Logic.ifElse isTermAnnot meta (setMetaUsesNode meta True)+      _ -> meta++-- | Substitute unit for a variable in a term (for unit variant case handling)+eliminateUnitVar :: Core.Name -> Core.Term -> Core.Term+eliminateUnitVar v term0 =++      let rewriteField =+              \rewrite -> \fld -> Core.Field {+                Core.fieldName = (Core.fieldName fld),+                Core.fieldTerm = (rewrite (Core.fieldTerm fld))}+          rewriteCaseAlternative =+                  \rewrite -> \alt -> Core.CaseAlternative {+                    Core.caseAlternativeName = (Core.caseAlternativeName alt),+                    Core.caseAlternativeHandler = (rewrite (Core.caseAlternativeHandler alt))}+          rewriteBinding =+                  \rewrite -> \bnd -> Core.Binding {+                    Core.bindingName = (Core.bindingName bnd),+                    Core.bindingTerm = (rewrite (Core.bindingTerm bnd)),+                    Core.bindingTypeScheme = (Core.bindingTypeScheme bnd)}+          rewrite =+                  \recurse -> \term -> case (Strip.deannotateAndDetypeTerm term) of+                    Core.TermVariable v0 -> Logic.ifElse (Equality.equal v0 v) Core.TermUnit term+                    Core.TermAnnotated v0 -> Core.TermAnnotated (Core.AnnotatedTerm {+                      Core.annotatedTermBody = (recurse (Core.annotatedTermBody v0)),+                      Core.annotatedTermAnnotation = (Core.annotatedTermAnnotation v0)})+                    Core.TermApplication v0 -> Core.TermApplication (Core.Application {+                      Core.applicationFunction = (recurse (Core.applicationFunction v0)),+                      Core.applicationArgument = (recurse (Core.applicationArgument v0))})+                    Core.TermLambda v0 -> Logic.ifElse (Equality.equal (Core.lambdaParameter v0) v) term (Core.TermLambda (Core.Lambda {+                      Core.lambdaParameter = (Core.lambdaParameter v0),+                      Core.lambdaDomain = (Core.lambdaDomain v0),+                      Core.lambdaBody = (recurse (Core.lambdaBody v0))}))+                    Core.TermCases v0 -> Core.TermCases (Core.CaseStatement {+                      Core.caseStatementTypeName = (Core.caseStatementTypeName v0),+                      Core.caseStatementDefault = (Optionals.map recurse (Core.caseStatementDefault v0)),+                      Core.caseStatementCases = (Lists.map (rewriteCaseAlternative recurse) (Core.caseStatementCases v0))})+                    Core.TermLet v0 -> Core.TermLet (Core.Let {+                      Core.letBindings = (Lists.map (rewriteBinding recurse) (Core.letBindings v0)),+                      Core.letBody = (recurse (Core.letBody v0))})+                    Core.TermList v0 -> Core.TermList (Lists.map recurse v0)+                    Core.TermMap v0 -> Core.TermMap (Maps.fromList (Lists.map (\kv -> (recurse (Pairs.first kv), (recurse (Pairs.second kv)))) (Maps.toList v0)))+                    Core.TermRecord v0 -> Core.TermRecord (Core.Record {+                      Core.recordTypeName = (Core.recordTypeName v0),+                      Core.recordFields = (Lists.map (rewriteField recurse) (Core.recordFields v0))})+                    Core.TermSet v0 -> Core.TermSet (Sets.map recurse v0)+                    Core.TermInject v0 -> Core.TermInject (Core.Injection {+                      Core.injectionTypeName = (Core.injectionTypeName v0),+                      Core.injectionField = (rewriteField recurse (Core.injectionField v0))})+                    Core.TermOptional v0 -> Core.TermOptional (Optionals.map recurse v0)+                    Core.TermPair v0 -> Core.TermPair (recurse (Pairs.first v0), (recurse (Pairs.second v0)))+                    Core.TermWrap v0 -> Core.TermWrap (Core.WrappedTerm {+                      Core.wrappedTermTypeName = (Core.wrappedTermTypeName v0),+                      Core.wrappedTermBody = (recurse (Core.wrappedTermBody v0))})+                    Core.TermEither v0 -> Core.TermEither (Eithers.bimap recurse recurse v0)+                    Core.TermTypeApplication v0 -> Core.TermTypeApplication (Core.TypeApplicationTerm {+                      Core.typeApplicationTermBody = (recurse (Core.typeApplicationTermBody v0)),+                      Core.typeApplicationTermType = (Core.typeApplicationTermType v0)})+                    Core.TermTypeLambda v0 -> Core.TermTypeLambda (Core.TypeLambda {+                      Core.typeLambdaParameter = (Core.typeLambdaParameter v0),+                      Core.typeLambdaBody = (recurse (Core.typeLambdaBody v0))})+                    _ -> term+          go = \term -> rewrite go term+      in (go term0)++-- | Create an initial empty metadata record with given namespaces+emptyMetadata :: Util.ModuleNames Syntax.DottedName -> PythonEnvironment.PythonModuleMetadata+emptyMetadata ns =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = ns,+      PythonEnvironment.pythonModuleMetadataTypeVariables = Sets.empty,+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = False,+      PythonEnvironment.pythonModuleMetadataUsesCallable = False,+      PythonEnvironment.pythonModuleMetadataUsesCast = False,+      PythonEnvironment.pythonModuleMetadataUsesLruCache = False,+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = False,+      PythonEnvironment.pythonModuleMetadataUsesDataclass = False,+      PythonEnvironment.pythonModuleMetadataUsesDecimal = False,+      PythonEnvironment.pythonModuleMetadataUsesEither = False,+      PythonEnvironment.pythonModuleMetadataUsesEnum = False,+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = False,+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = False,+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = False,+      PythonEnvironment.pythonModuleMetadataUsesGeneric = False,+      PythonEnvironment.pythonModuleMetadataUsesJust = False,+      PythonEnvironment.pythonModuleMetadataUsesLeft = False,+      PythonEnvironment.pythonModuleMetadataUsesMaybe = False,+      PythonEnvironment.pythonModuleMetadataUsesName = False,+      PythonEnvironment.pythonModuleMetadataUsesNode = False,+      PythonEnvironment.pythonModuleMetadataUsesNothing = False,+      PythonEnvironment.pythonModuleMetadataUsesRight = False,+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = False}++-- | Encode a function application to a Python expression+encodeApplication :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Core.Application -> Either Errors.Error Syntax.Expression+encodeApplication cx env app =++      let g = pythonEnvironmentGetGraph env+          term = Core.TermApplication app+          gathered = Analysis.gatherArgs term []+          fun = Pairs.first gathered+          args = Pairs.second gathered+          knownArity = termArityWithPrimitives g fun+          arity = Math.max knownArity (Lists.length args)+      in (Eithers.bind (Eithers.mapList (\t -> encodeTermInline cx env False t) args) (\pargs ->+        let hargs = Lists.take arity pargs+            rargs = Lists.drop arity pargs+        in (Eithers.bind (encodeApplicationInner cx env fun hargs rargs) (\result ->+          let lhs = Pairs.first result+              remainingRargs = Pairs.second result+              pyapp = Lists.foldl (\t -> \a -> Utils.functionCall (Utils.pyExpressionToPyPrimary t) [+                    a]) lhs remainingRargs+          in (Right pyapp)))))++-- | Inner helper for encodeApplication+encodeApplicationInner :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Core.Term -> [Syntax.Expression] -> [Syntax.Expression] -> Either Errors.Error (Syntax.Expression, [Syntax.Expression])+encodeApplicationInner cx env fun hargs rargs =++      let firstArg = Optionals.fromOptional (Utils.pyNameToPyExpression (Syntax.Name "")) (Lists.maybeHead hargs)+          restArgs = Lists.drop 1 hargs+          withRest = \e -> Logic.ifElse (Lists.null restArgs) e (Utils.functionCall (Utils.pyExpressionToPyPrimary e) restArgs)+          defaultCase =+                  Eithers.bind (encodeTermInline cx env False fun) (\pfun -> Right (Utils.functionCall (Utils.pyExpressionToPyPrimary pfun) hargs, rargs))+      in case (Strip.deannotateAndDetypeTerm fun) of+        Core.TermProject v0 ->+          let fname = Core.projectionFieldName v0+              fieldExpr = Utils.projectFromExpression firstArg (PythonNames.encodeFieldName env fname)+          in (Right (withRest fieldExpr, rargs))+        Core.TermCases v0 -> Eithers.bind (encodeUnionEliminationInline cx env v0 firstArg) (\inlineExpr -> Right (withRest inlineExpr, rargs))+        Core.TermUnwrap _ ->+          let valueExpr = Utils.projectFromExpression firstArg (Syntax.Name "value")+              allArgs = Lists.concat2 restArgs rargs+          in (Logic.ifElse (Lists.null allArgs) (Right (valueExpr, [])) (Right (Utils.functionCall (Utils.pyExpressionToPyPrimary valueExpr) allArgs, [])))+        Core.TermLambda _ -> Eithers.bind (encodeTermInline cx env False fun) (\pfun -> Right (Utils.functionCall (Utils.pyExpressionToPyPrimary pfun) hargs, rargs))+        Core.TermVariable v0 ->+          let g = pythonEnvironmentGetGraph env+              allArgs = Lists.concat2 hargs rargs+              inlineVars = PythonEnvironment.pythonEnvironmentInlineVariables env+          in (Optionals.cases (Maps.lookup v0 (Graph.graphPrimitives g)) (Optionals.cases (Lexical.lookupBinding g v0) (Eithers.bind (encodeVariable cx env v0 hargs) (\expr -> Right (expr, rargs))) (\el -> Optionals.cases (Core.bindingTypeScheme el) (Eithers.bind (encodeVariable cx env v0 hargs) (\expr -> Right (expr, rargs))) (\ts ->+            let elArity = Arity.typeSchemeArity ts+                consumeCount = Math.min elArity (Lists.length allArgs)+                consumedArgs = Lists.take consumeCount allArgs+                remainingArgs = Lists.drop consumeCount allArgs+            in (Logic.ifElse (Lists.null consumedArgs) (Eithers.bind (encodeVariable cx env v0 []) (\expr -> Right (expr, rargs))) (Logic.ifElse (Sets.member v0 inlineVars) (Right (+              Utils.functionCall (Utils.pyExpressionToPyPrimary (lazyDotGet (PythonNames.termVariableReference env v0))) consumedArgs,+              remainingArgs)) (Right (+              Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeName True Util.CaseConventionLowerSnake env v0)) consumedArgs,+              remainingArgs))))))) (\_prim ->+            let wrappedArgs = wrapLazyArguments g v0 hargs+            in (Eithers.bind (encodeVariable cx env v0 wrappedArgs) (\expr -> Right (expr, rargs)))))+        _ -> defaultCase++-- | Encode an application type to Python expression+encodeApplicationType :: PythonEnvironment.PythonEnvironment -> Core.ApplicationType -> Either t0 Syntax.Expression+encodeApplicationType env at =++      let gatherParams =+              \t -> \ps -> case (Strip.deannotateType t) of+                Core.TypeApplication v0 -> gatherParams (Core.applicationTypeFunction v0) (Lists.cons (Core.applicationTypeArgument v0) ps)+                Core.TypeAnnotated _ -> (t, ps)+                Core.TypeEffect _ -> (t, ps)+                Core.TypeFunction _ -> (t, ps)+                Core.TypeForall _ -> (t, ps)+                Core.TypeList _ -> (t, ps)+                Core.TypeLiteral _ -> (t, ps)+                Core.TypeMap _ -> (t, ps)+                Core.TypeOptional _ -> (t, ps)+                Core.TypeEither _ -> (t, ps)+                Core.TypePair _ -> (t, ps)+                Core.TypeRecord _ -> (t, ps)+                Core.TypeSet _ -> (t, ps)+                Core.TypeUnion _ -> (t, ps)+                Core.TypeUnit -> (t, ps)+                Core.TypeVariable _ -> (t, ps)+                Core.TypeVoid -> (t, ps)+                Core.TypeWrap _ -> (t, ps)+          bodyAndArgs = gatherParams (Core.TypeApplication at) []+          body = Pairs.first bodyAndArgs+          args = Pairs.second bodyAndArgs+      in (Eithers.bind (encodeType env body) (\pyBody -> Eithers.bind (Eithers.mapList (encodeType env) args) (\pyArgs -> Right (Utils.primaryAndParams (Utils.pyExpressionToPyPrimary pyBody) pyArgs))))++-- | Encode a binding as a Python statement (function definition or assignment)+encodeBindingAs :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Core.Binding -> Either Errors.Error Syntax.Statement+encodeBindingAs cx env binding =++      let name1 = Core.bindingName binding+          term1 = Core.bindingTerm binding+          mts = Core.bindingTypeScheme binding+          fname = PythonNames.encodeName True Util.CaseConventionLowerSnake env name1+      in (Optionals.cases mts (+        let gathered = gatherLambdas term1+            lambdaParams = Pairs.first gathered+            innerBody = Pairs.second gathered+            mcsa = isCaseStatementApplication innerBody+        in (Optionals.cases mcsa (+          let mcs = extractCaseElimination term1+          in (Optionals.cases mcs (Eithers.bind (encodeTermMultiline cx env term1) (\stmts -> Optionals.cases (Lists.maybeHead stmts) (Left (Errors.ErrorOther (Errors.OtherError "encodeTermMultiline returned no statements"))) (\x -> Right x))) (\cs ->+            let tname = Core.caseStatementTypeName cs+                dflt = Core.caseStatementDefault cs+                cases_ = Core.caseStatementCases cs+            in (Eithers.bind (Resolution.requireUnionType cx (pythonEnvironmentGetGraph env) tname) (\rt ->+              let isEnum = Predicates.isEnumRowType rt+                  isFull = isCasesFull rt cases_+                  innerParam =+                          Syntax.Param {+                            Syntax.paramName = (Syntax.Name "x"),+                            Syntax.paramAnnotation = Nothing}+                  param =+                          Syntax.ParamNoDefault {+                            Syntax.paramNoDefaultParam = innerParam,+                            Syntax.paramNoDefaultTypeComment = Nothing}+                  params =+                          Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+                            Syntax.paramNoDefaultParametersParamNoDefault = [+                              param],+                            Syntax.paramNoDefaultParametersParamWithDefault = [],+                            Syntax.paramNoDefaultParametersStarEtc = Nothing})+              in (Eithers.bind (Eithers.mapList (caseBlockToExpr cx env tname rt isEnum (\e -> \t -> encodeTermMultiline cx e t)) cases_) (\pyCases -> Eithers.bind (encodeDefaultCaseBlock (\t -> encodeTermInline cx env False t) isFull dflt tname) (\pyDflt ->+                let subj = Syntax.SubjectExpressionSimple (Syntax.NamedExpressionSimple (Utils.pyNameToPyExpression (Syntax.Name "x")))+                    allCases = Lists.concat2 pyCases pyDflt+                    matchStmt =+                            Syntax.StatementCompound (Syntax.CompoundStatementMatch (Syntax.MatchStatement {+                              Syntax.matchStatementSubject = subj,+                              Syntax.matchStatementCases = allCases}))+                    body = Utils.indentedBlock Nothing [+                          [+                            matchStmt]]+                    funcDefRaw =+                            Syntax.FunctionDefRaw {+                              Syntax.functionDefRawAsync = False,+                              Syntax.functionDefRawName = fname,+                              Syntax.functionDefRawTypeParams = [],+                              Syntax.functionDefRawParams = (Just params),+                              Syntax.functionDefRawReturnType = Nothing,+                              Syntax.functionDefRawFuncTypeComment = Nothing,+                              Syntax.functionDefRawBlock = body}+                in (Right (Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+                  Syntax.functionDefinitionDecorators = Nothing,+                  Syntax.functionDefinitionRaw = funcDefRaw})))))))))))) (\csa -> Logic.ifElse (Lists.null lambdaParams) (+          let mcs = extractCaseElimination term1+          in (Optionals.cases mcs (Eithers.bind (encodeTermMultiline cx env term1) (\stmts -> Optionals.cases (Lists.maybeHead stmts) (Left (Errors.ErrorOther (Errors.OtherError "encodeTermMultiline returned no statements"))) (\x -> Right x))) (\cs ->+            let tname = Core.caseStatementTypeName cs+                dflt = Core.caseStatementDefault cs+                cases_ = Core.caseStatementCases cs+            in (Eithers.bind (Resolution.requireUnionType cx (pythonEnvironmentGetGraph env) tname) (\rt ->+              let isEnum = Predicates.isEnumRowType rt+                  isFull = isCasesFull rt cases_+                  innerParam =+                          Syntax.Param {+                            Syntax.paramName = (Syntax.Name "x"),+                            Syntax.paramAnnotation = Nothing}+                  param =+                          Syntax.ParamNoDefault {+                            Syntax.paramNoDefaultParam = innerParam,+                            Syntax.paramNoDefaultTypeComment = Nothing}+                  params =+                          Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+                            Syntax.paramNoDefaultParametersParamNoDefault = [+                              param],+                            Syntax.paramNoDefaultParametersParamWithDefault = [],+                            Syntax.paramNoDefaultParametersStarEtc = Nothing})+              in (Eithers.bind (Eithers.mapList (caseBlockToExpr cx env tname rt isEnum (\e -> \t -> encodeTermMultiline cx e t)) cases_) (\pyCases -> Eithers.bind (encodeDefaultCaseBlock (\t -> encodeTermInline cx env False t) isFull dflt tname) (\pyDflt ->+                let subj = Syntax.SubjectExpressionSimple (Syntax.NamedExpressionSimple (Utils.pyNameToPyExpression (Syntax.Name "x")))+                    allCases = Lists.concat2 pyCases pyDflt+                    matchStmt =+                            Syntax.StatementCompound (Syntax.CompoundStatementMatch (Syntax.MatchStatement {+                              Syntax.matchStatementSubject = subj,+                              Syntax.matchStatementCases = allCases}))+                    body = Utils.indentedBlock Nothing [+                          [+                            matchStmt]]+                    funcDefRaw =+                            Syntax.FunctionDefRaw {+                              Syntax.functionDefRawAsync = False,+                              Syntax.functionDefRawName = fname,+                              Syntax.functionDefRawTypeParams = [],+                              Syntax.functionDefRawParams = (Just params),+                              Syntax.functionDefRawReturnType = Nothing,+                              Syntax.functionDefRawFuncTypeComment = Nothing,+                              Syntax.functionDefRawBlock = body}+                in (Right (Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+                  Syntax.functionDefinitionDecorators = Nothing,+                  Syntax.functionDefinitionRaw = funcDefRaw})))))))))))) (+          let tname = Pairs.first csa+              rest1 = Pairs.second csa+              dflt = Pairs.first rest1+              rest2 = Pairs.second rest1+              cases_ = Pairs.first rest2+          in (Eithers.bind (Resolution.requireUnionType cx (pythonEnvironmentGetGraph env) tname) (\rt ->+            let isEnum = Predicates.isEnumRowType rt+                isFull = isCasesFull rt cases_+                capturedVarNames = Optionals.fromOptional [] (Lists.maybeInit lambdaParams)+                matchLambdaParam = Optionals.fromOptional (Core.Name "") (Lists.maybeLast lambdaParams)+                capturedParams =+                        Lists.map (\n -> Syntax.ParamNoDefault {+                          Syntax.paramNoDefaultParam = Syntax.Param {+                            Syntax.paramName = (PythonNames.encodeName False Util.CaseConventionLowerSnake env n),+                            Syntax.paramAnnotation = Nothing},+                          Syntax.paramNoDefaultTypeComment = Nothing}) capturedVarNames+                matchArgName = PythonNames.encodeName False Util.CaseConventionLowerSnake env matchLambdaParam+                matchParam =+                        Syntax.ParamNoDefault {+                          Syntax.paramNoDefaultParam = Syntax.Param {+                            Syntax.paramName = matchArgName,+                            Syntax.paramAnnotation = Nothing},+                          Syntax.paramNoDefaultTypeComment = Nothing}+                allParams = Lists.concat2 capturedParams [+                      matchParam]+                params =+                        Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+                          Syntax.paramNoDefaultParametersParamNoDefault = allParams,+                          Syntax.paramNoDefaultParametersParamWithDefault = [],+                          Syntax.paramNoDefaultParametersStarEtc = Nothing})+                envWithParams = extendEnvWithLambdaParams env term1+            in (Eithers.bind (Eithers.mapList (caseBlockToExpr cx envWithParams tname rt isEnum (\e -> \t -> encodeTermMultiline cx e t)) cases_) (\pyCases -> Eithers.bind (encodeDefaultCaseBlock (\t -> encodeTermInline cx envWithParams False t) isFull dflt tname) (\pyDflt ->+              let subj = Syntax.SubjectExpressionSimple (Syntax.NamedExpressionSimple (Utils.pyNameToPyExpression matchArgName))+                  allCases = Lists.concat2 pyCases pyDflt+                  matchStmt =+                          Syntax.StatementCompound (Syntax.CompoundStatementMatch (Syntax.MatchStatement {+                            Syntax.matchStatementSubject = subj,+                            Syntax.matchStatementCases = allCases}))+                  body = Utils.indentedBlock Nothing [+                        [+                          matchStmt]]+                  funcDefRaw =+                          Syntax.FunctionDefRaw {+                            Syntax.functionDefRawAsync = False,+                            Syntax.functionDefRawName = fname,+                            Syntax.functionDefRawTypeParams = [],+                            Syntax.functionDefRawParams = (Just params),+                            Syntax.functionDefRawReturnType = Nothing,+                            Syntax.functionDefRawFuncTypeComment = Nothing,+                            Syntax.functionDefRawBlock = body}+              in (Right (Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+                Syntax.functionDefinitionDecorators = Nothing,+                Syntax.functionDefinitionRaw = funcDefRaw}))))))))))))) (\ts -> Eithers.bind (Annotations.getTermDescription cx (pythonEnvironmentGetGraph env) term1) (\comment ->+        let normComment = Optionals.map Formatting.normalizeComment comment+        in (encodeTermAssignment cx env False name1 term1 ts normComment))))++-- | Encode a binding as a walrus operator assignment+encodeBindingAsAssignment :: Typing.InferenceContext -> Bool -> PythonEnvironment.PythonEnvironment -> Core.Binding -> Either Errors.Error Syntax.NamedExpression+encodeBindingAsAssignment cx allowThunking env binding =++      let name = Core.bindingName binding+          term = Core.bindingTerm binding+          mts = Core.bindingTypeScheme binding+          pyName = PythonNames.encodeName False Util.CaseConventionLowerSnake env name+      in (Eithers.bind (encodeTermInline cx env False term) (\pbody ->+        let tc = PythonEnvironment.pythonEnvironmentGraph env+            isComplexVar = Predicates.isComplexVariable tc name+            termIsComplex = Predicates.isComplexTerm tc term+            isTrivial = Predicates.isTrivialTerm term+            needsThunk =+                    Logic.ifElse isTrivial False (Optionals.cases mts (Logic.and allowThunking (Logic.or isComplexVar termIsComplex)) (\ts -> Logic.and allowThunking (Logic.and (Equality.equal (Arity.typeSchemeArity ts) 0) (Logic.or isComplexVar termIsComplex))))+            pterm = makeLazy pbody+        in (Right (Syntax.NamedExpressionAssignment (Syntax.AssignmentExpression {+          Syntax.assignmentExpressionName = pyName,+          Syntax.assignmentExpressionExpression = pterm})))))++-- | Encode bindings as function definitions+encodeBindingsAsDefs :: t0 -> (t0 -> t1 -> Either t2 t3) -> [t1] -> Either t2 [t3]+encodeBindingsAsDefs env encodeBinding bindings = Eithers.mapList (encodeBinding env) bindings++-- | Encode the default (wildcard) case block for a match statement+encodeDefaultCaseBlock :: (t0 -> Either t1 Syntax.Expression) -> Bool -> Maybe t0 -> Core.Name -> Either t1 [Syntax.CaseBlock]+encodeDefaultCaseBlock termToExpr isFull mdflt tname =+    Eithers.bind (Optionals.cases mdflt (Right (Logic.ifElse isFull (Utils.raiseAssertionError "Unreachable: all variants handled") (Utils.raiseTypeError (Strings.cat2 "Unsupported " (Names.localNameOf tname))))) (\d -> Eithers.bind (termToExpr d) (\pyexpr -> Right (Utils.returnSingle pyexpr)))) (\stmt ->+      let patterns = Utils.pyClosedPatternToPyPatterns Syntax.ClosedPatternWildcard+          body = Utils.indentedBlock Nothing [+                [+                  stmt]]+      in (Right [+        Syntax.CaseBlock {+          Syntax.caseBlockPatterns = patterns,+          Syntax.caseBlockGuard = Nothing,+          Syntax.caseBlockBody = body}]))++-- | Encode a definition (term or type) to Python statements+encodeDefinition :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Packaging.Definition -> Either Errors.Error [[Syntax.Statement]]+encodeDefinition cx env def_ =+    case def_ of+      Packaging.DefinitionTerm v0 ->+        let name = Packaging.termDefinitionName v0+            term = Packaging.termDefinitionBody v0+            typ =+                    Optionals.cases (Packaging.termDefinitionSignature v0) (Core.TypeScheme {+                      Core.typeSchemeVariables = [],+                      Core.typeSchemeBody = (Core.TypeVariable (Core.Name "hydra.core.Unit")),+                      Core.typeSchemeConstraints = Nothing}) (\sig -> Scoping.termSignatureToTypeScheme sig)+        in (Eithers.bind (Annotations.getTermDescription cx (pythonEnvironmentGetGraph env) term) (\comment ->+          let normComment = Optionals.map Formatting.normalizeComment comment+          in (Eithers.bind (encodeTermAssignment cx env True name term typ normComment) (\stmt -> Right [+            [+              stmt]]))))+      Packaging.DefinitionType v0 ->+        let name = Packaging.typeDefinitionName v0+            typ = Core.typeSchemeBody (Packaging.typeDefinitionBody v0)+        in (Eithers.bind (Annotations.getTypeDescription cx (pythonEnvironmentGetGraph env) typ) (\comment ->+          let normComment = Optionals.map Formatting.normalizeComment comment+          in (encodeTypeAssignment cx env name typ normComment)))++-- | Encode an enum value assignment statement with optional comment+encodeEnumValueAssignment :: t0 -> PythonEnvironment.PythonEnvironment -> Core.FieldType -> Either Errors.Error [Syntax.Statement]+encodeEnumValueAssignment cx env fieldType =++      let fname = Core.fieldTypeName fieldType+          ftype = Core.fieldTypeType fieldType+      in (Eithers.bind (Annotations.getTypeDescription cx (pythonEnvironmentGetGraph env) ftype) (\mcomment ->+        let pyName = PythonNames.encodeEnumValue env fname+            fnameStr = Core.unName fname+            pyValue =+                    Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeName True Util.CaseConventionPascal env (Core.Name "hydra.core.Name"))) [+                      Utils.doubleQuotedString fnameStr]+            assignStmt = Utils.assignmentStatement pyName pyValue+        in (Right (Optionals.cases mcomment [+          assignStmt] (\c -> [+          assignStmt,+          (Utils.pyExpressionToPyStatement (Utils.tripleQuotedString c))])))))++-- | Encode a field (name-value pair) to a Python (Name, Expression) pair+encodeField :: t0 -> PythonEnvironment.PythonEnvironment -> Core.Field -> (Core.Term -> Either t1 t2) -> Either t1 (Syntax.Name, t2)+encodeField cx env field termToExpr =++      let fname = Core.fieldName field+          fterm = Core.fieldTerm field+      in (Eithers.bind (termToExpr fterm) (\pterm -> Right (PythonNames.encodeFieldName env fname, pterm)))++-- | Encode a field type for record definitions (field: type annotation)+encodeFieldType :: t0 -> PythonEnvironment.PythonEnvironment -> Core.FieldType -> Either Errors.Error Syntax.Statement+encodeFieldType cx env fieldType =++      let fname = Core.fieldTypeName fieldType+          ftype = Core.fieldTypeType fieldType+      in (Eithers.bind (Annotations.getTypeDescription cx (pythonEnvironmentGetGraph env) ftype) (\comment ->+        let pyName = Syntax.SingleTargetName (PythonNames.encodeFieldName env fname)+        in (Eithers.bind (encodeType env ftype) (\pyType ->+          let annotatedPyType = Utils.annotatedExpression comment pyType+          in (Right (Utils.pyAssignmentToPyStatement (Syntax.AssignmentTyped (Syntax.TypedAssignment {+            Syntax.typedAssignmentLhs = pyName,+            Syntax.typedAssignmentType = annotatedPyType,+            Syntax.typedAssignmentRhs = Nothing}))))))))++-- | Encode a float value to a Python expression+encodeFloatValue :: Core.FloatValue -> Either t0 Syntax.Expression+encodeFloatValue fv =+    case fv of+      Core.FloatValueFloat32 v0 -> encodeFloatValue_encodeFloat32 v0+      Core.FloatValueFloat64 v0 -> encodeFloatValue_encodeFloat64 v0++encodeFloatValue_encodeFloat32 :: Float -> Either t0 Syntax.Expression+encodeFloatValue_encodeFloat32 v =++      let s = Literals.showFloat32 v+      in (Logic.ifElse (Equality.equal s "NaN") (Right (encodeFloatValue_pySpecialFloat "nan")) (Logic.ifElse (Equality.equal s "Infinity") (Right (encodeFloatValue_pySpecialFloat "inf")) (Logic.ifElse (Equality.equal s "-Infinity") (Right (encodeFloatValue_pySpecialFloat "-inf")) (Right (Utils.pyAtomToPyExpression (Syntax.AtomNumber (Syntax.NumberFloat (Literals.float32ToFloat64 v))))))))++encodeFloatValue_encodeFloat64 :: Double -> Either t0 Syntax.Expression+encodeFloatValue_encodeFloat64 v =++      let s = Literals.showFloat64 v+      in (Logic.ifElse (Equality.equal s "NaN") (Right (encodeFloatValue_pySpecialFloat "nan")) (Logic.ifElse (Equality.equal s "Infinity") (Right (encodeFloatValue_pySpecialFloat "inf")) (Logic.ifElse (Equality.equal s "-Infinity") (Right (encodeFloatValue_pySpecialFloat "-inf")) (Logic.ifElse (Equality.equal s "-0.0") (Right (encodeFloatValue_pySpecialFloat "-0.0")) (Right (Utils.pyAtomToPyExpression (Syntax.AtomNumber (Syntax.NumberFloat v))))))))++encodeFloatValue_pySpecialFloat :: String -> Syntax.Expression+encodeFloatValue_pySpecialFloat value =+    Utils.functionCall (Utils.pyNameToPyPrimary (Syntax.Name "float")) [+      Utils.singleQuotedString value]++-- | Encode a forall type to Python expression+encodeForallType :: PythonEnvironment.PythonEnvironment -> Core.ForallType -> Either t0 Syntax.Expression+encodeForallType env lt =++      let gatherParams =+              \t -> \ps -> case (Strip.deannotateType t) of+                Core.TypeForall v0 -> gatherParams (Core.forallTypeBody v0) (Lists.cons (Core.forallTypeParameter v0) ps)+                Core.TypeAnnotated _ -> (t, (Lists.reverse ps))+                Core.TypeApplication _ -> (t, (Lists.reverse ps))+                Core.TypeEffect _ -> (t, (Lists.reverse ps))+                Core.TypeFunction _ -> (t, (Lists.reverse ps))+                Core.TypeList _ -> (t, (Lists.reverse ps))+                Core.TypeLiteral _ -> (t, (Lists.reverse ps))+                Core.TypeMap _ -> (t, (Lists.reverse ps))+                Core.TypeOptional _ -> (t, (Lists.reverse ps))+                Core.TypeEither _ -> (t, (Lists.reverse ps))+                Core.TypePair _ -> (t, (Lists.reverse ps))+                Core.TypeRecord _ -> (t, (Lists.reverse ps))+                Core.TypeSet _ -> (t, (Lists.reverse ps))+                Core.TypeUnion _ -> (t, (Lists.reverse ps))+                Core.TypeUnit -> (t, (Lists.reverse ps))+                Core.TypeVariable _ -> (t, (Lists.reverse ps))+                Core.TypeVoid -> (t, (Lists.reverse ps))+                Core.TypeWrap _ -> (t, (Lists.reverse ps))+          bodyAndParams = gatherParams (Core.TypeForall lt) []+          body = Pairs.first bodyAndParams+          params = Pairs.second bodyAndParams+      in (Eithers.bind (encodeType env body) (\pyBody -> Right (Utils.primaryAndParams (Utils.pyExpressionToPyPrimary pyBody) (Lists.map (\n -> Syntax.ExpressionSimple (Syntax.Disjunction [+        Syntax.Conjunction [+          Syntax.InversionSimple (Syntax.Comparison {+            Syntax.comparisonLhs = Syntax.BitwiseOr {+              Syntax.bitwiseOrLhs = Nothing,+              Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                Syntax.bitwiseXorLhs = Nothing,+                Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                  Syntax.bitwiseAndLhs = Nothing,+                  Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                    Syntax.shiftExpressionLhs = Nothing,+                    Syntax.shiftExpressionRhs = Syntax.Sum {+                      Syntax.sumLhs = Nothing,+                      Syntax.sumRhs = Syntax.Term {+                        Syntax.termLhs = Nothing,+                        Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                          Syntax.powerLhs = Syntax.AwaitPrimary {+                            Syntax.awaitPrimaryAwait = False,+                            Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name (Core.unName n))))},+                          Syntax.powerRhs = Nothing}))}}}}}},+            Syntax.comparisonRhs = []})]])) params))))++-- | Encode a function type to Python Callable expression+encodeFunctionType :: PythonEnvironment.PythonEnvironment -> Core.FunctionType -> Either t0 Syntax.Expression+encodeFunctionType env ft =++      let gatherParams =+              \rdoms -> \ftype ->+                let innerCod = Core.functionTypeCodomain ftype+                    dom = Core.functionTypeDomain ftype+                in case (Strip.deannotateType innerCod) of+                  Core.TypeFunction v0 -> gatherParams (Lists.cons dom rdoms) v0+                  Core.TypeAnnotated _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeApplication _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeEffect _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeForall _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeList _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeLiteral _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeMap _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeOptional _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeEither _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypePair _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeRecord _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeSet _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeUnion _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeUnit -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeVariable _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeVoid -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+                  Core.TypeWrap _ -> (Lists.reverse (Lists.cons dom rdoms), innerCod)+          domsAndCod = gatherParams [] ft+          doms = Pairs.first domsAndCod+          cod = Pairs.second domsAndCod+      in (Eithers.bind (Eithers.mapList (encodeType env) doms) (\pydoms -> Eithers.bind (encodeType env cod) (\pycod -> Right (Utils.pyPrimaryToPyExpression (Utils.primaryWithSlices (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "Callable"))) (Utils.pyPrimaryToPySlice (Syntax.PrimarySimple (Syntax.AtomList (Utils.pyList pydoms)))) [+        Syntax.SliceOrStarredExpressionSlice (Utils.pyExpressionToPySlice pycod)])))))++-- | Encode an integer value to a Python expression+encodeIntegerValue :: Core.IntegerValue -> Either t0 Syntax.Expression+encodeIntegerValue iv =++      let toPyInt = \n -> Right (Utils.pyAtomToPyExpression (Syntax.AtomNumber (Syntax.NumberInteger n)))+      in case iv of+        Core.IntegerValueBigint v0 -> toPyInt v0+        Core.IntegerValueInt8 v0 -> toPyInt (Literals.int8ToBigint v0)+        Core.IntegerValueInt16 v0 -> toPyInt (Literals.int16ToBigint v0)+        Core.IntegerValueInt32 v0 -> toPyInt (Literals.int32ToBigint v0)+        Core.IntegerValueInt64 v0 -> toPyInt (Literals.int64ToBigint v0)+        Core.IntegerValueUint8 v0 -> toPyInt (Literals.uint8ToBigint v0)+        Core.IntegerValueUint16 v0 -> toPyInt (Literals.uint16ToBigint v0)+        Core.IntegerValueUint32 v0 -> toPyInt (Literals.uint32ToBigint v0)+        Core.IntegerValueUint64 v0 -> toPyInt (Literals.uint64ToBigint v0)++-- | Encode a literal value to a Python expression+encodeLiteral :: Core.Literal -> Either t0 Syntax.Expression+encodeLiteral lit =+    case lit of+      Core.LiteralBinary v0 ->+        let byteValues = Literals.binaryToBytes v0+        in (Right (Utils.functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "bytes"))) [+          Utils.pyAtomToPyExpression (Syntax.AtomList (Utils.pyList (Lists.map (\byteVal -> Utils.pyAtomToPyExpression (Syntax.AtomNumber (Syntax.NumberInteger (Literals.int32ToBigint byteVal)))) byteValues)))]))+      Core.LiteralBoolean v0 -> Right (Utils.pyAtomToPyExpression (Logic.ifElse v0 Syntax.AtomTrue Syntax.AtomFalse))+      Core.LiteralDecimal v0 -> Right (Utils.functionCall (Utils.pyNameToPyPrimary (Syntax.Name "Decimal")) [+        Utils.singleQuotedString (Literals.showDecimal v0)])+      Core.LiteralFloat v0 -> encodeFloatValue v0+      Core.LiteralInteger v0 -> encodeIntegerValue v0+      Core.LiteralString v0 -> Right (Utils.stringToPyExpression Syntax.QuoteStyleDouble v0)++-- | Encode a literal type to a Python type expression+encodeLiteralType :: Core.LiteralType -> Either t0 Syntax.Expression+encodeLiteralType lt =++      let findName =+              case lt of+                Core.LiteralTypeBinary -> "bytes"+                Core.LiteralTypeBoolean -> "bool"+                Core.LiteralTypeDecimal -> "Decimal"+                Core.LiteralTypeFloat v0 -> case v0 of+                  Core.FloatTypeFloat32 -> "float"+                  Core.FloatTypeFloat64 -> "float"+                Core.LiteralTypeInteger _ -> "int"+                Core.LiteralTypeString -> "str"+      in (Right (Syntax.ExpressionSimple (Syntax.Disjunction [+        Syntax.Conjunction [+          Syntax.InversionSimple (Syntax.Comparison {+            Syntax.comparisonLhs = Syntax.BitwiseOr {+              Syntax.bitwiseOrLhs = Nothing,+              Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                Syntax.bitwiseXorLhs = Nothing,+                Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                  Syntax.bitwiseAndLhs = Nothing,+                  Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                    Syntax.shiftExpressionLhs = Nothing,+                    Syntax.shiftExpressionRhs = Syntax.Sum {+                      Syntax.sumLhs = Nothing,+                      Syntax.sumRhs = Syntax.Term {+                        Syntax.termLhs = Nothing,+                        Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                          Syntax.powerLhs = Syntax.AwaitPrimary {+                            Syntax.awaitPrimaryAwait = False,+                            Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name findName)))},+                          Syntax.powerRhs = Nothing}))}}}}}},+            Syntax.comparisonRhs = []})]])))++-- | Generate name constants for a type as class-level attributes+encodeNameConstants :: PythonEnvironment.PythonEnvironment -> Core.Name -> [Core.FieldType] -> [Syntax.Statement]+encodeNameConstants env name fields =++      let toStmt =+              \pair -> Utils.assignmentStatement (Pairs.first pair) (Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeName True Util.CaseConventionPascal env (Core.Name "hydra.core.Name"))) [+                Utils.doubleQuotedString (Core.unName (Pairs.second pair))])+          namePair = (PythonNames.encodeConstantForTypeName env name, name)+          fieldPairs =+                  Lists.map (\field -> (PythonNames.encodeConstantForFieldName env name (Core.fieldTypeName field), (Core.fieldTypeName field))) fields+      in (Lists.map toStmt (Lists.cons namePair fieldPairs))++-- | Encode a Hydra module to a Python module AST+encodePythonModule :: Typing.InferenceContext -> Graph.Graph -> Packaging.Module -> [Packaging.Definition] -> Either Errors.Error Syntax.Module+encodePythonModule cx g mod defs0 =++      let defs = Environment.reorderDefs defs0+          meta0 = gatherMetadata (Packaging.moduleName mod) defs+          namespaces0 = PythonEnvironment.pythonModuleMetadataNamespaces meta0+          env0 = initialEnvironment namespaces0 g+          isTypeMod = isTypeModuleCheck defs0+      in (withDefinitions env0 defs (\env -> Eithers.bind (Eithers.map (\xs -> Lists.concat xs) (Eithers.mapList (\d -> encodeDefinition cx env d) defs)) (\defStmts ->+        let meta2 = Logic.ifElse (Logic.and (Logic.not isTypeMod) useInlineTypeParams) (setMetaUsesTypeVar meta0 False) meta0+            meta =+                    Logic.ifElse (Logic.and isTypeMod (Equality.equal targetPythonVersion PythonEnvironment.PythonVersionPython310)) (setMetaUsesTypeAlias meta2 True) meta2+            namespaces = PythonEnvironment.pythonModuleMetadataNamespaces meta0+            commentStmts =+                    Optionals.cases (Optionals.map Formatting.normalizeComment (Optionals.bind (Packaging.moduleMetadata mod) (\em -> Packaging.entityMetadataDescription em))) [] (\c -> [+                      Utils.commentStatement c])+            importStmts = moduleImports namespaces meta+            tvars =+                    Logic.ifElse (Logic.or isTypeMod (Logic.not useInlineTypeParams)) (PythonEnvironment.pythonModuleMetadataTypeVariables meta) Sets.empty+            tvarStmts = Lists.map (\tv -> tvarStatement (PythonNames.encodeTypeVariable tv)) (Sets.toList tvars)+            body =+                    Lists.filter (\group -> Logic.not (Lists.null group)) (Lists.concat [+                      [+                        commentStmts,+                        importStmts,+                        tvarStmts],+                      defStmts])+        in (Right (Syntax.Module body)))))++-- | Encode a record type as a Python dataclass+encodeRecordType :: t0 -> PythonEnvironment.PythonEnvironment -> Core.Name -> [Core.FieldType] -> Maybe String -> Either Errors.Error Syntax.Statement+encodeRecordType cx env name rowType comment =+    Eithers.bind (Eithers.mapList (encodeFieldType cx env) rowType) (\pyFields ->+      let constStmts = encodeNameConstants env name rowType+          withMethods = Lists.map (recordWithMethod env) rowType+          boundVars = PythonEnvironment.pythonEnvironmentBoundTypeVariables env+          tparamList = Pairs.first boundVars+          mGenericArg = genericArg tparamList+          args = Optionals.cases mGenericArg Nothing (\a -> Just (Utils.pyExpressionsToPyArgs [+                a]))+          decs = Just (Syntax.Decorators [+                dataclassDecorator])+          pyName = PythonNames.encodeName False Util.CaseConventionPascal env name+          noTypeParams = []+      in (Eithers.bind (recordBuilderClass env name rowType args) (\builderStmts ->+        let body =+                Utils.indentedBlock comment [+                  pyFields,+                  constStmts,+                  withMethods,+                  builderStmts]+        in (Right (Utils.pyClassDefinitionToPyStatement (Syntax.ClassDefinition {+          Syntax.classDefinitionDecorators = decs,+          Syntax.classDefinitionName = pyName,+          Syntax.classDefinitionTypeParams = noTypeParams,+          Syntax.classDefinitionArguments = args,+          Syntax.classDefinitionBody = body}))))))++-- | Encode a term assignment to a Python statement+encodeTermAssignment :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Bool -> Core.Name -> Core.Term -> Core.TypeScheme -> Maybe String -> Either Errors.Error Syntax.Statement+encodeTermAssignment cx env topLevel name term ts comment =+    Eithers.bind (analyzePythonFunction cx env term) (\fs ->+      let tparams = Typing.functionStructureTypeParams fs+          params = Typing.functionStructureParams fs+          bindings = Typing.functionStructureBindings fs+          body = Typing.functionStructureBody fs+          domsRaw = Typing.functionStructureDomains fs+          sigTermSig = Scoping.typeSchemeToTermSignature ts+          sigParamTypes = Lists.map (\p -> Typing.parameterType p) (Typing.termSignatureParameters sigTermSig)+          sigResult = Typing.termSignatureResult sigTermSig+          sigCod = Typing.resultType sigResult+          doms = fillDomsFromSignature domsRaw sigParamTypes+          mcod = Just sigCod+          env2 = Typing.functionStructureEnvironment fs+          tc = PythonEnvironment.pythonEnvironmentGraph env2+          binding =+                  Core.Binding {+                    Core.bindingName = name,+                    Core.bindingTerm = term,+                    Core.bindingTypeScheme = (Just ts)}+          isComplex = Predicates.isComplexBinding tc binding+          isTrivial = Predicates.isTrivialTerm term+      in (Logic.ifElse (Logic.and isComplex (Logic.not isTrivial)) (Logic.ifElse (Logic.and (Logic.not topLevel) (Lists.null params)) (Eithers.bind (encodeTermInline cx env2 False term) (\bodyExpr ->+        let pyName = PythonNames.encodeName False Util.CaseConventionLowerSnake env2 name+            lazyExpr = makeLazy bodyExpr+        in (Right (Utils.annotatedStatement comment (Utils.assignmentStatement pyName lazyExpr))))) (Eithers.bind (Eithers.mapList (encodeBindingAs cx env2) bindings) (\bindingStmts -> functionDefinitionToExpr cx env2 name tparams params body doms mcod comment bindingStmts))) (Eithers.bind (encodeTermInline cx env2 False body) (\bodyExpr ->+        let pyName = PythonNames.encodeName False Util.CaseConventionLowerSnake env2 name+        in (Right (Utils.annotatedStatement comment (Utils.assignmentStatement pyName bodyExpr)))))))++-- | Encode a term to a Python expression (inline form)+encodeTermInline :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Bool -> Core.Term -> Either Errors.Error Syntax.Expression+encodeTermInline cx env noCast term =++      let encode = \t -> encodeTermInline cx env False t+          stripTypeApps =+                  \t -> case t of+                    Core.TermAnnotated v0 -> stripTypeApps (Core.annotatedTermBody v0)+                    Core.TermTypeApplication v0 -> stripTypeApps (Core.typeApplicationTermBody v0)+                    _ -> t+          withCast =+                  \pyexp -> Logic.ifElse (Logic.or noCast (PythonEnvironment.pythonEnvironmentSkipCasts env)) (Right pyexp) (+                    let tc = PythonEnvironment.pythonEnvironmentGraph env+                        mtyp = Eithers.map (\_r -> Pairs.first _r) (Checking.typeOf cx tc [] term)+                    in (Eithers.either (\_ -> Right pyexp) (\typ -> Eithers.either (\_ -> Right pyexp) (\pytyp -> Right (Utils.castTo pytyp pyexp)) (encodeType env typ)) mtyp))+      in case (Strip.deannotateAndDetypeTerm term) of+        Core.TermApplication v0 -> encodeApplication cx env v0+        Core.TermEither v0 -> Eithers.either (\t1 -> Eithers.bind (encode t1) (\pyexp -> withCast (Utils.functionCall (Utils.pyNameToPyPrimary (Syntax.Name "Left")) [+          pyexp]))) (\t1 -> Eithers.bind (encode t1) (\pyexp -> withCast (Utils.functionCall (Utils.pyNameToPyPrimary (Syntax.Name "Right")) [+          pyexp]))) v0+        Core.TermLambda v0 -> Eithers.bind (analyzePythonFunction cx env (Core.TermLambda v0)) (\fs ->+          let params = Typing.functionStructureParams fs+              bindings = Typing.functionStructureBindings fs+              innerBody = Typing.functionStructureBody fs+              innerEnv0 = Typing.functionStructureEnvironment fs+              bindingNames = Lists.map (\b -> Core.bindingName b) bindings+              innerEnv =+                      PythonEnvironment.PythonEnvironment {+                        PythonEnvironment.pythonEnvironmentNamespaces = (PythonEnvironment.pythonEnvironmentNamespaces innerEnv0),+                        PythonEnvironment.pythonEnvironmentBoundTypeVariables = (PythonEnvironment.pythonEnvironmentBoundTypeVariables innerEnv0),+                        PythonEnvironment.pythonEnvironmentGraph = (PythonEnvironment.pythonEnvironmentGraph innerEnv0),+                        PythonEnvironment.pythonEnvironmentNullaryBindings = (PythonEnvironment.pythonEnvironmentNullaryBindings innerEnv0),+                        PythonEnvironment.pythonEnvironmentVersion = (PythonEnvironment.pythonEnvironmentVersion innerEnv0),+                        PythonEnvironment.pythonEnvironmentSkipCasts = (PythonEnvironment.pythonEnvironmentSkipCasts innerEnv0),+                        PythonEnvironment.pythonEnvironmentInlineVariables = (Sets.union (Sets.fromList bindingNames) (PythonEnvironment.pythonEnvironmentInlineVariables innerEnv0))}+          in (Eithers.bind (encodeTermInline cx innerEnv False innerBody) (\pbody ->+            let pparams = Lists.map (PythonNames.encodeName False Util.CaseConventionLowerSnake innerEnv) params+            in (Logic.ifElse (Lists.null bindings) (Right (makeUncurriedLambda pparams pbody)) (Eithers.bind (Eithers.mapList (encodeBindingAsAssignment cx False innerEnv) bindings) (\pbindingExprs ->+              let pbindingStarExprs = Lists.map (\ne -> Syntax.StarNamedExpressionSimple ne) pbindingExprs+                  pbodyStarExpr = Utils.pyExpressionToPyStarNamedExpression pbody+                  tupleElements = Lists.concat2 pbindingStarExprs [+                        pbodyStarExpr]+                  tupleExpr = Utils.pyAtomToPyExpression (Syntax.AtomTuple (Syntax.Tuple tupleElements))+                  indexValue =+                          Utils.pyAtomToPyExpression (Syntax.AtomNumber (Syntax.NumberInteger (Literals.int32ToBigint (Lists.length bindings))))+                  indexedExpr = Utils.primaryWithExpressionSlices (Utils.pyExpressionToPyPrimary tupleExpr) [+                        indexValue]+              in (Right (makeUncurriedLambda pparams (Utils.pyPrimaryToPyExpression indexedExpr)))))))))+        Core.TermProject v0 ->+          let fname = Core.projectionFieldName v0+          in (Right (makeCurriedLambda [+            Syntax.Name "v1"] (Utils.projectFromExpression (Syntax.ExpressionSimple (Syntax.Disjunction [+            Syntax.Conjunction [+              Syntax.InversionSimple (Syntax.Comparison {+                Syntax.comparisonLhs = Syntax.BitwiseOr {+                  Syntax.bitwiseOrLhs = Nothing,+                  Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                    Syntax.bitwiseXorLhs = Nothing,+                    Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                      Syntax.bitwiseAndLhs = Nothing,+                      Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                        Syntax.shiftExpressionLhs = Nothing,+                        Syntax.shiftExpressionRhs = Syntax.Sum {+                          Syntax.sumLhs = Nothing,+                          Syntax.sumRhs = Syntax.Term {+                            Syntax.termLhs = Nothing,+                            Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                              Syntax.powerLhs = Syntax.AwaitPrimary {+                                Syntax.awaitPrimaryAwait = False,+                                Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "v1")))},+                              Syntax.powerRhs = Nothing}))}}}}}},+                Syntax.comparisonRhs = []})]])) (PythonNames.encodeFieldName env fname))))+        Core.TermUnwrap _ -> Right (makeCurriedLambda [+          Syntax.Name "v1"] (Utils.projectFromExpression (Syntax.ExpressionSimple (Syntax.Disjunction [+          Syntax.Conjunction [+            Syntax.InversionSimple (Syntax.Comparison {+              Syntax.comparisonLhs = Syntax.BitwiseOr {+                Syntax.bitwiseOrLhs = Nothing,+                Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                  Syntax.bitwiseXorLhs = Nothing,+                  Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                    Syntax.bitwiseAndLhs = Nothing,+                    Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                      Syntax.shiftExpressionLhs = Nothing,+                      Syntax.shiftExpressionRhs = Syntax.Sum {+                        Syntax.sumLhs = Nothing,+                        Syntax.sumRhs = Syntax.Term {+                          Syntax.termLhs = Nothing,+                          Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                            Syntax.powerLhs = Syntax.AwaitPrimary {+                              Syntax.awaitPrimaryAwait = False,+                              Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "v1")))},+                            Syntax.powerRhs = Nothing}))}}}}}},+              Syntax.comparisonRhs = []})]])) (Syntax.Name "value")))+        Core.TermCases _ -> Right (unsupportedExpression "case expressions as values are not yet supported")+        Core.TermLet v0 ->+          let bindings = Core.letBindings v0+              body = Core.letBody v0+          in (Logic.ifElse (Lists.null bindings) (encodeTermInline cx env False body) (withLetInline env v0 (\innerEnv -> Eithers.bind (Eithers.mapList (encodeBindingAsAssignment cx False innerEnv) bindings) (\pbindingExprs -> Eithers.bind (encodeTermInline cx innerEnv False body) (\pbody ->+            let pbindingStarExprs = Lists.map (\ne -> Syntax.StarNamedExpressionSimple ne) pbindingExprs+                pbodyStarExpr = Utils.pyExpressionToPyStarNamedExpression pbody+                tupleElements = Lists.concat2 pbindingStarExprs [+                      pbodyStarExpr]+                tupleExpr = Utils.pyAtomToPyExpression (Syntax.AtomTuple (Syntax.Tuple tupleElements))+                indexValue =+                        Utils.pyAtomToPyExpression (Syntax.AtomNumber (Syntax.NumberInteger (Literals.int32ToBigint (Lists.length bindings))))+                indexedExpr = Utils.primaryWithExpressionSlices (Utils.pyExpressionToPyPrimary tupleExpr) [+                      indexValue]+            in (Right (Utils.pyPrimaryToPyExpression indexedExpr)))))))+        Core.TermList v0 -> Eithers.bind (Eithers.mapList encode v0) (\pyExprs ->+          let consListOf = Utils.projectFromExpression (Utils.pyNameToPyExpression (Syntax.Name "ConsList")) (Syntax.Name "of")+          in (Right (Utils.functionCall (Utils.pyExpressionToPyPrimary consListOf) pyExprs)))+        Core.TermLiteral v0 -> encodeLiteral v0+        Core.TermMap v0 -> Eithers.bind (Eithers.mapList (\kv ->+          let k = Pairs.first kv+              v = Pairs.second kv+          in (Eithers.bind (encode k) (\pyK -> Eithers.bind (encode v) (\pyV -> Right (Utils.pyAtomToPyExpression (Syntax.AtomTuple (Syntax.Tuple [+            Utils.pyExpressionToPyStarNamedExpression pyK,+            (Utils.pyExpressionToPyStarNamedExpression pyV)]))))))) (Maps.toList v0)) (\tuplePairs ->+          let pmapOfEntries =+                  Utils.projectFromExpression (Utils.pyNameToPyExpression (Syntax.Name "PersistentMap")) (Syntax.Name "of_entries")+          in (Right (Utils.functionCall (Utils.pyExpressionToPyPrimary pmapOfEntries) tuplePairs)))+        Core.TermOptional v0 -> Optionals.cases v0 (Right (Utils.functionCall (Utils.pyNameToPyPrimary (Syntax.Name "None_")) [])) (\t1 -> Eithers.bind (encode t1) (\pyexp -> withCast (Utils.functionCall (Utils.pyNameToPyPrimary (Syntax.Name "Given")) [+          pyexp])))+        Core.TermPair v0 ->+          let t1 = Pairs.first v0+              t2 = Pairs.second v0+          in (Eithers.bind (encode t1) (\pyExpr1 -> Eithers.bind (encode t2) (\pyExpr2 -> Right (Utils.pyAtomToPyExpression (Syntax.AtomTuple (Syntax.Tuple [+            Utils.pyExpressionToPyStarNamedExpression pyExpr1,+            (Utils.pyExpressionToPyStarNamedExpression pyExpr2)]))))))+        Core.TermRecord v0 ->+          let tname = Core.recordTypeName v0+              fields = Core.recordFields v0+          in (Eithers.bind (Eithers.mapList (\fld -> encode (Core.fieldTerm fld)) fields) (\pargs -> Right (Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeNameQualified env tname)) pargs)))+        Core.TermSet v0 -> Eithers.bind (Eithers.mapList encode (Sets.toList v0)) (\pyEls ->+          let psetOf = Utils.projectFromExpression (Utils.pyNameToPyExpression (Syntax.Name "PersistentSet")) (Syntax.Name "of")+          in (Right (Utils.functionCall (Utils.pyExpressionToPyPrimary psetOf) pyEls)))+        Core.TermTypeApplication v0 ->+          let body = Core.typeApplicationTermBody v0+          in (Eithers.bind (encodeTermInline cx env True (stripTypeApps body)) (\pybase -> withCast pybase))+        Core.TermTypeLambda v0 ->+          let body = Core.typeLambdaBody v0+          in (withTypeLambda env v0 (\env2 -> encodeTermInline cx env2 noCast body))+        Core.TermInject v0 ->+          let tname = Core.injectionTypeName v0+              field = Core.injectionField v0+          in (Eithers.bind (Resolution.requireUnionType cx (pythonEnvironmentGetGraph env) tname) (\rt -> Logic.ifElse (Predicates.isEnumRowType rt) (Right (Utils.projectFromExpression (Utils.pyNameToPyExpression (PythonNames.encodeNameQualified env tname)) (PythonNames.encodeEnumValue env (Core.fieldName field)))) (+            let fname = Core.fieldName field+                isUnitVariant =+                        Optionals.cases (Lists.find (\ft -> Equality.equal (Core.unName (Core.fieldTypeName ft)) (Core.unName fname)) rt) False (\ft -> Predicates.isUnitType (Strip.deannotateType (Core.fieldTypeType ft)))+            in (Eithers.bind (Logic.ifElse (Logic.or (Predicates.isUnitTerm (Core.fieldTerm field)) isUnitVariant) (Right []) (Eithers.bind (encode (Core.fieldTerm field)) (\parg -> Right [+              parg]))) (\args ->+              let deconflictedName = deconflictVariantName True env tname fname (PythonEnvironment.pythonEnvironmentGraph env)+              in (Right (Utils.castTo (PythonNames.typeVariableReference env tname) (Utils.functionCall (Utils.pyNameToPyPrimary deconflictedName) args))))))))+        Core.TermUnit -> Right (Utils.pyNameToPyExpression Utils.pyNone)+        Core.TermVariable v0 -> encodeVariable cx env v0 []+        Core.TermWrap v0 ->+          let tname = Core.wrappedTermTypeName v0+              inner = Core.wrappedTermBody v0+          in (Eithers.bind (encode inner) (\parg -> Right (Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeNameQualified env tname)) [+            parg])))++-- | Encode a term to a list of statements with return as final statement+encodeTermMultiline :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Core.Term -> Either Errors.Error [Syntax.Statement]+encodeTermMultiline cx env term =++      let dfltLogic =+              Eithers.bind (analyzePythonFunction cx env term) (\fs ->+                let params = Typing.functionStructureParams fs+                    bindings = Typing.functionStructureBindings fs+                    innerBody = Typing.functionStructureBody fs+                    env2 = Typing.functionStructureEnvironment fs+                in (Logic.ifElse (Lists.null bindings) (Eithers.bind (encodeTermInline cx env False term) (\expr -> Right [+                  Utils.returnSingle expr])) (Eithers.bind (Eithers.mapList (encodeBindingAs cx env2) bindings) (\bindingStmts -> Eithers.bind (encodeTermMultiline cx env2 innerBody) (\bodyStmts -> Right (Lists.concat2 bindingStmts bodyStmts))))))+          gathered = Analysis.gatherApplications term+          args = Pairs.first gathered+          body = Pairs.second gathered+      in (Logic.ifElse (Equality.equal (Lists.length args) 1) (+        let arg = Optionals.fromOptional Core.TermUnit (Lists.maybeHead args)+        in case (Strip.deannotateAndDetypeTerm body) of+          Core.TermCases v0 ->+            let tname = Core.caseStatementTypeName v0+                dflt = Core.caseStatementDefault v0+                cases_ = Core.caseStatementCases v0+            in (Eithers.bind (Resolution.requireUnionType cx (pythonEnvironmentGetGraph env) tname) (\rt ->+              let isEnum = Predicates.isEnumRowType rt+                  isFull = isCasesFull rt cases_+              in (Eithers.bind (encodeTermInline cx env False arg) (\pyArg -> Eithers.bind (Eithers.mapList (caseBlockToExpr cx env tname rt isEnum (\e -> \t -> encodeTermMultiline cx e t)) (deduplicateCaseVariables cases_)) (\pyCases -> Eithers.bind (encodeDefaultCaseBlock (\t -> encodeTermInline cx env False t) isFull dflt tname) (\pyDflt ->+                let subj = Syntax.SubjectExpressionSimple (Syntax.NamedExpressionSimple pyArg)+                    matchStmt =+                            Syntax.StatementCompound (Syntax.CompoundStatementMatch (Syntax.MatchStatement {+                              Syntax.matchStatementSubject = subj,+                              Syntax.matchStatementCases = (Lists.concat2 pyCases pyDflt)}))+                in (Right [+                  matchStmt])))))))+          _ -> dfltLogic) dfltLogic)++-- | Encode a term body for TCO: tail self-calls become param reassignment + continue+encodeTermMultilineTCO :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Core.Name -> [Core.Name] -> Core.Term -> Either Errors.Error [Syntax.Statement]+encodeTermMultilineTCO cx env funcName paramNames term =++      let stripped = Strip.deannotateAndDetypeTerm term+          gathered = Analysis.gatherApplications stripped+          gatherArgs = Pairs.first gathered+          gatherFun = Pairs.second gathered+          strippedFun = Strip.deannotateAndDetypeTerm gatherFun+          isSelfCall =+                  case strippedFun of+                    Core.TermVariable v0 -> Equality.equal v0 funcName+                    _ -> False+      in (Logic.ifElse (Logic.and isSelfCall (Equality.equal (Lists.length gatherArgs) (Lists.length paramNames))) (Eithers.bind (Eithers.mapList (\a -> encodeTermInline cx env False a) gatherArgs) (\pyArgs ->+        let assignments =+                Lists.map (\pair ->+                  let paramName = Pairs.first pair+                      pyArg = Pairs.second pair+                  in (Utils.assignmentStatement (PythonNames.encodeName False Util.CaseConventionLowerSnake env paramName) pyArg)) (Lists.zip paramNames pyArgs)+            continueStmt = Syntax.StatementSimple [+                  Syntax.SimpleStatementContinue]+        in (Right (Lists.concat2 assignments [+          continueStmt])))) (+        let gathered2 = Analysis.gatherApplications term+            args2 = Pairs.first gathered2+            body2 = Pairs.second gathered2+        in (Logic.ifElse (Equality.equal (Lists.length args2) 1) (+          let arg = Optionals.fromOptional Core.TermUnit (Lists.maybeHead args2)+          in case (Strip.deannotateAndDetypeTerm body2) of+            Core.TermCases v0 ->+              let tname = Core.caseStatementTypeName v0+                  dflt = Core.caseStatementDefault v0+                  cases_ = Core.caseStatementCases v0+              in (Eithers.bind (Resolution.requireUnionType cx (pythonEnvironmentGetGraph env) tname) (\rt ->+                let isEnum = Predicates.isEnumRowType rt+                    isFull = isCasesFull rt cases_+                in (Eithers.bind (encodeTermInline cx env False arg) (\pyArg -> Eithers.bind (Eithers.mapList (caseBlockToExpr cx env tname rt isEnum (\e2 -> \t2 -> encodeTermMultilineTCO cx e2 funcName paramNames t2)) (deduplicateCaseVariables cases_)) (\pyCases -> Eithers.bind (encodeDefaultCaseBlock (\t2 -> encodeTermInline cx env False t2) isFull dflt tname) (\pyDflt ->+                  let subj = Syntax.SubjectExpressionSimple (Syntax.NamedExpressionSimple pyArg)+                      matchStmt =+                              Syntax.StatementCompound (Syntax.CompoundStatementMatch (Syntax.MatchStatement {+                                Syntax.matchStatementSubject = subj,+                                Syntax.matchStatementCases = (Lists.concat2 pyCases pyDflt)}))+                  in (Right [+                    matchStmt])))))))+            _ -> Eithers.bind (encodeTermInline cx env False term) (\expr -> Right [+              Utils.returnSingle expr])) (Eithers.bind (encodeTermInline cx env False term) (\expr -> Right [+          Utils.returnSingle expr])))))++-- | Encode a Hydra type to a Python type expression+encodeType :: PythonEnvironment.PythonEnvironment -> Core.Type -> Either t0 Syntax.Expression+encodeType env typ =++      let dflt = Right (Utils.doubleQuotedString (Strings.cat2 "type = " (ShowCore.type_ (Strip.deannotateType typ))))+      in case (Strip.deannotateType typ) of+        Core.TypeApplication v0 -> encodeApplicationType env v0+        Core.TypeFunction v0 -> encodeFunctionType env v0+        Core.TypeForall v0 -> encodeForallType env v0+        Core.TypeList v0 -> Eithers.bind (encodeType env v0) (\pyet -> Right (Utils.nameAndParams (Syntax.Name "Sequence") [+          pyet]))+        Core.TypeMap v0 -> Eithers.bind (encodeType env (Core.mapTypeKeys v0)) (\pykt -> Eithers.bind (encodeType env (Core.mapTypeValues v0)) (\pyvt -> Right (Utils.nameAndParams (Syntax.Name "Mapping") [+          pykt,+          pyvt])))+        Core.TypeLiteral v0 -> encodeLiteralType v0+        Core.TypeOptional v0 -> Eithers.bind (encodeType env v0) (\ptype -> Right (Utils.pyPrimaryToPyExpression (Utils.primaryWithExpressionSlices (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "Optional"))) [+          ptype])))+        Core.TypeEither v0 -> Eithers.bind (encodeType env (Core.eitherTypeLeft v0)) (\pyleft -> Eithers.bind (encodeType env (Core.eitherTypeRight v0)) (\pyright -> Right (Utils.pyPrimaryToPyExpression (Utils.primaryWithExpressionSlices (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "Either"))) [+          pyleft,+          pyright]))))+        Core.TypePair v0 -> Eithers.bind (encodeType env (Core.pairTypeFirst v0)) (\pyFirst -> Eithers.bind (encodeType env (Core.pairTypeSecond v0)) (\pySecond -> Right (Utils.nameAndParams (Syntax.Name "tuple") [+          pyFirst,+          pySecond])))+        Core.TypeRecord _ -> dflt+        Core.TypeSet v0 -> Eithers.bind (encodeType env v0) (\pyet -> Right (Utils.nameAndParams (Syntax.Name "Set") [+          pyet]))+        Core.TypeUnion _ -> dflt+        Core.TypeUnit -> Right (Utils.pyNameToPyExpression Utils.pyNone)+        Core.TypeVoid -> Right (Utils.pyNameToPyExpression Utils.pyNone)+        Core.TypeVariable v0 -> Right (PythonNames.typeVariableReference env v0)+        Core.TypeWrap _ -> dflt+        Core.TypeAnnotated _ -> dflt+        Core.TypeEffect v0 -> encodeType env v0++-- | Encode a type definition, dispatching based on type structure+encodeTypeAssignment :: t0 -> PythonEnvironment.PythonEnvironment -> Core.Name -> Core.Type -> Maybe String -> Either Errors.Error [[Syntax.Statement]]+encodeTypeAssignment cx env name typ comment =+    Eithers.bind (encodeTypeAssignmentInner cx env name typ comment) (\defStmts -> Right (Lists.map (\s -> [+      s]) defStmts))++-- | Encode the inner type definition, unwrapping forall types+encodeTypeAssignmentInner :: t0 -> PythonEnvironment.PythonEnvironment -> Core.Name -> Core.Type -> Maybe String -> Either Errors.Error [Syntax.Statement]+encodeTypeAssignmentInner cx env name typ comment =++      let stripped = Strip.deannotateType typ+          dflt = Eithers.bind (encodeType env typ) (\typeExpr -> Right (encodeTypeDefSingle env name comment typeExpr))+      in case stripped of+        Core.TypeForall v0 ->+          let tvar = Core.forallTypeParameter v0+              body = Core.forallTypeBody v0+              newEnv = extendEnvWithTypeVar env tvar+          in (encodeTypeAssignmentInner cx newEnv name body comment)+        Core.TypeRecord v0 -> Eithers.map (\s -> [+          s]) (encodeRecordType cx env name v0 comment)+        Core.TypeUnion v0 -> encodeUnionType cx env name v0 comment+        Core.TypeWrap v0 -> encodeWrappedType env name v0 comment+        _ -> dflt++-- | Encode a simple type alias definition+encodeTypeDefSingle :: PythonEnvironment.PythonEnvironment -> Core.Name -> Maybe String -> Syntax.Expression -> [Syntax.Statement]+encodeTypeDefSingle env name comment typeExpr =++      let pyName = PythonNames.encodeName False Util.CaseConventionPascal env name+          tparams = environmentTypeParameters env+      in [+        typeAliasStatementFor env pyName tparams comment typeExpr]++-- | Encode a type to a Python expression, quoting if the type has free variables+encodeTypeQuoted :: PythonEnvironment.PythonEnvironment -> Core.Type -> Either t0 Syntax.Expression+encodeTypeQuoted env typ =+    Eithers.bind (encodeType env typ) (\pytype -> Right (Logic.ifElse (Sets.null (Variables.freeVariablesInType typ)) pytype (Utils.doubleQuotedString (Serialization.printExpr (Serde.expressionToExpr pytype)))))++-- | Encode a union elimination as an inline conditional chain (isinstance-based ternary)+encodeUnionEliminationInline :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Core.CaseStatement -> Syntax.Expression -> Either Errors.Error Syntax.Expression+encodeUnionEliminationInline cx env cs pyArg =++      let tname = Core.caseStatementTypeName cs+          mdefault = Core.caseStatementDefault cs+          cases_ = Core.caseStatementCases cs+      in (Eithers.bind (Resolution.requireUnionType cx (pythonEnvironmentGetGraph env) tname) (\rt ->+        let isEnum = Predicates.isEnumRowType rt+            valueExpr = Utils.projectFromExpression pyArg (Syntax.Name "value")+            isinstancePrimary = Utils.pyNameToPyPrimary (Syntax.Name "isinstance")+        in (Eithers.bind (Optionals.cases mdefault (Right (unsupportedExpression "no matching case in inline union elimination")) (\dflt -> encodeTermInline cx env False dflt)) (\pyDefault ->+          let encodeBranch =+                  \field ->+                    let fname = Core.caseAlternativeName field+                        fterm = Core.caseAlternativeHandler field+                        isUnitVariant = isVariantUnitType rt fname+                        pyVariantName = deconflictVariantName True env tname fname (PythonEnvironment.pythonEnvironmentGraph env)+                        pyTypeName = PythonNames.encodeName True Util.CaseConventionPascal env tname+                        pyEnumValue = PythonNames.encodeEnumValue env fname+                        enumMemberExpr =+                                Utils.pyPrimaryToPyExpression (Syntax.PrimaryCompound (Syntax.PrimaryWithRhs {+                                  Syntax.primaryWithRhsPrimary = (Utils.pyNameToPyPrimary pyTypeName),+                                  Syntax.primaryWithRhsRhs = (Syntax.PrimaryRhsProject pyEnumValue)}))+                        isinstanceCheck =+                                Logic.ifElse isEnum (Syntax.ExpressionSimple (Syntax.Disjunction [+                                  Syntax.Conjunction [+                                    Syntax.InversionSimple (Syntax.Comparison {+                                      Syntax.comparisonLhs = (Utils.pyExpressionToBitwiseOr pyArg),+                                      Syntax.comparisonRhs = [+                                        Syntax.CompareOpBitwiseOrPair {+                                          Syntax.compareOpBitwiseOrPairOperator = Syntax.CompareOpEq,+                                          Syntax.compareOpBitwiseOrPairRhs = (Utils.pyExpressionToBitwiseOr enumMemberExpr)}]})]])) (Utils.functionCall isinstancePrimary [+                                  pyArg,+                                  (Utils.pyNameToPyExpression pyVariantName)])+                    in (Eithers.bind (encodeTermInline cx env False fterm) (\pyBranch ->+                      let pyResult =+                              Logic.ifElse isEnum (Utils.functionCall (Utils.pyExpressionToPyPrimary pyBranch) [+                                pyArg]) (Logic.ifElse isUnitVariant (Utils.functionCall (Utils.pyExpressionToPyPrimary pyBranch) [+                                pyArg]) (Utils.functionCall (Utils.pyExpressionToPyPrimary pyBranch) [+                                valueExpr]))+                      in (Right (isinstanceCheck, pyResult))))+          in (Eithers.bind (Eithers.mapList encodeBranch cases_) (\encodedBranches ->+            let buildChain =+                    \elseExpr -> \branchPair ->+                      let checkExpr = Pairs.first branchPair+                          resultExpr = Pairs.second branchPair+                      in (Syntax.ExpressionConditional (Syntax.Conditional {+                        Syntax.conditionalBody = (Utils.pyExpressionToDisjunction resultExpr),+                        Syntax.conditionalIf = (Utils.pyExpressionToDisjunction checkExpr),+                        Syntax.conditionalElse = elseExpr}))+            in (Right (Lists.foldl buildChain pyDefault (Lists.reverse encodedBranches)))))))))++-- | Encode a union field as a variant class+encodeUnionField :: t0 -> PythonEnvironment.PythonEnvironment -> Core.Name -> Core.FieldType -> Either Errors.Error Syntax.Statement+encodeUnionField cx env unionName fieldType =++      let fname = Core.fieldTypeName fieldType+          ftype = Core.fieldTypeType fieldType+      in (Eithers.bind (Annotations.getTypeDescription cx (pythonEnvironmentGetGraph env) ftype) (\fcomment ->+        let isUnit = Equality.equal (Strip.deannotateType ftype) Core.TypeUnit+            varName = deconflictVariantName False env unionName fname (PythonEnvironment.pythonEnvironmentGraph env)+            tparamNames = findTypeParams env ftype+            tparamPyNames = Lists.map PythonNames.encodeTypeVariable tparamNames+            fieldParams = Lists.map Utils.pyNameToPyTypeParameter tparamPyNames+            body =+                    Logic.ifElse isUnit (Utils.indentedBlock fcomment [+                      Utils.unitVariantMethods varName]) (Utils.indentedBlock fcomment [])+        in (Eithers.bind (Logic.ifElse isUnit (Right Nothing) (Eithers.bind (encodeTypeQuoted env ftype) (\quotedType -> Right (Just (variantArgs quotedType []))))) (\margs -> Right (Utils.pyClassDefinitionToPyStatement (Syntax.ClassDefinition {+          Syntax.classDefinitionDecorators = Nothing,+          Syntax.classDefinitionName = varName,+          Syntax.classDefinitionTypeParams = fieldParams,+          Syntax.classDefinitionArguments = margs,+          Syntax.classDefinitionBody = body}))))))++-- | Encode a union field as a primary expression for | alternatives+encodeUnionFieldAlt :: PythonEnvironment.PythonEnvironment -> Core.Name -> Core.FieldType -> Syntax.Primary+encodeUnionFieldAlt env unionName fieldType =++      let fname = Core.fieldTypeName fieldType+          ftype = Core.fieldTypeType fieldType+          tparamNames = findTypeParams env ftype+          tparams = Lists.map PythonNames.encodeTypeVariable tparamNames+          namePrim = Utils.pyNameToPyPrimary (PythonNames.variantName False env unionName fname)+      in (Logic.ifElse (Lists.null tparams) namePrim (+        let tparamExprs = Lists.map Utils.pyNameToPyExpression tparams+        in (Utils.primaryWithExpressionSlices namePrim tparamExprs)))++-- | Encode a union type as an enum (for unit-only fields) or variant classes+encodeUnionType :: t0 -> PythonEnvironment.PythonEnvironment -> Core.Name -> [Core.FieldType] -> Maybe String -> Either Errors.Error [Syntax.Statement]+encodeUnionType cx env name rowType comment =+    Logic.ifElse (Predicates.isEnumRowType rowType) (Eithers.bind (Eithers.mapList (encodeEnumValueAssignment cx env) rowType) (\vals ->+      let body = Utils.indentedBlock comment vals+          enumName = Syntax.Name "Enum"+          args = Just (Utils.pyExpressionsToPyArgs [+                Utils.pyNameToPyExpression enumName])+          pyName = PythonNames.encodeName False Util.CaseConventionPascal env name+          typeConstStmt =+                  Utils.dottedAssignmentStatement pyName (PythonNames.encodeConstantForTypeName env name) (Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeName True Util.CaseConventionPascal env (Core.Name "hydra.core.Name"))) [+                    Utils.doubleQuotedString (Core.unName name)])+      in (Right [+        Utils.pyClassDefinitionToPyStatement (Syntax.ClassDefinition {+          Syntax.classDefinitionDecorators = Nothing,+          Syntax.classDefinitionName = pyName,+          Syntax.classDefinitionTypeParams = [],+          Syntax.classDefinitionArguments = args,+          Syntax.classDefinitionBody = body}),+        typeConstStmt]))) (+      let constStmts = encodeNameConstants env name rowType+      in (Eithers.bind (Eithers.mapList (encodeUnionField cx env name) rowType) (\fieldStmts ->+        let tparams = environmentTypeParameters env+            unionAlts = Lists.map (encodeUnionFieldAlt env name) rowType+            unionStmts =+                    unionTypeStatementsFor env (PythonNames.encodeName False Util.CaseConventionPascal env name) tparams comment (Utils.orExpression unionAlts) constStmts+        in (Right (Lists.concat2 fieldStmts unionStmts)))))++-- | Encode a variable reference to a Python expression+encodeVariable :: t0 -> PythonEnvironment.PythonEnvironment -> Core.Name -> [Syntax.Expression] -> Either Errors.Error Syntax.Expression+encodeVariable cx env name args =++      let g = pythonEnvironmentGetGraph env+          tc = PythonEnvironment.pythonEnvironmentGraph env+          tcTypes = Graph.graphBoundTypes tc+          tcLambdaVars = Graph.graphLambdaVariables tc+          tcMetadata = Graph.graphMetadata tc+          inlineVars = PythonEnvironment.pythonEnvironmentInlineVariables env+          mTypScheme = Maps.lookup name tcTypes+          mTyp = Optionals.map (\ts_ -> Core.typeSchemeBody ts_) mTypScheme+          asVariable = PythonNames.termVariableReference env name+          asFunctionCall =+                  Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeName True Util.CaseConventionLowerSnake env name)) args+          asLazyCall = Utils.functionCall (Utils.pyExpressionToPyPrimary (lazyDotGet asVariable)) args+      in (Logic.ifElse (Logic.not (Lists.null args)) (Logic.ifElse (Sets.member name inlineVars) (Right asLazyCall) (Optionals.cases (Lexical.lookupPrimitive g name) (Right asFunctionCall) (\prim ->+        let primArity = Arity.primitiveArity prim+        in (Logic.ifElse (Equality.equal primArity (Lists.length args)) (Right asFunctionCall) (+          let numRemaining = Math.sub primArity (Lists.length args)+              remainingParams = Lists.map (\i -> Syntax.Name (Strings.cat2 "x" (Literals.showInt32 i))) (Math.range 1 numRemaining)+              remainingExprs =+                      Lists.map (\n -> Syntax.ExpressionSimple (Syntax.Disjunction [+                        Syntax.Conjunction [+                          Syntax.InversionSimple (Syntax.Comparison {+                            Syntax.comparisonLhs = Syntax.BitwiseOr {+                              Syntax.bitwiseOrLhs = Nothing,+                              Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                                Syntax.bitwiseXorLhs = Nothing,+                                Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                                  Syntax.bitwiseAndLhs = Nothing,+                                  Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                                    Syntax.shiftExpressionLhs = Nothing,+                                    Syntax.shiftExpressionRhs = Syntax.Sum {+                                      Syntax.sumLhs = Nothing,+                                      Syntax.sumRhs = Syntax.Term {+                                        Syntax.termLhs = Nothing,+                                        Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                                          Syntax.powerLhs = Syntax.AwaitPrimary {+                                            Syntax.awaitPrimaryAwait = False,+                                            Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName n))},+                                          Syntax.powerRhs = Nothing}))}}}}}},+                            Syntax.comparisonRhs = []})]])) remainingParams+              allArgs = Lists.concat2 args remainingExprs+              fullCall =+                      Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeName True Util.CaseConventionLowerSnake env name)) allArgs+          in (Right (makeUncurriedLambda remainingParams fullCall))))))) (Optionals.cases mTyp (Logic.ifElse (Sets.member name tcLambdaVars) (Right asVariable) (Logic.ifElse (Sets.member name inlineVars) (Right (lazyDotGet asVariable)) (Optionals.cases (Lexical.lookupPrimitive g name) (Optionals.cases (Lexical.lookupBinding g name) (Optionals.cases (Maps.lookup name tcMetadata) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "Unknown variable: " (Core.unName name))))) (\_ -> Right asFunctionCall)) (\el ->+        let elTrivial1 = Predicates.isTrivialTerm (Core.bindingTerm el)+        in (Optionals.cases (Core.bindingTypeScheme el) (Right asVariable) (\ts -> Logic.ifElse (Logic.and (Logic.and (Equality.equal (Arity.typeSchemeArity ts) 0) (Predicates.isComplexBinding tc el)) (Logic.not elTrivial1)) (Right asFunctionCall) (+          let asFunctionRef =+                  Logic.ifElse (Logic.not (Lists.null (Core.typeSchemeVariables ts))) (makeSimpleLambda (Arity.typeArity (Core.typeSchemeBody ts)) asVariable) asVariable+          in (Right asFunctionRef)))))) (\prim ->+        let primArity = Arity.primitiveArity prim+        in (Logic.ifElse (Equality.equal primArity 0) (Right asFunctionCall) (+          let ts = Scoping.termSignatureToTypeScheme (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition prim))+              asFunctionRef =+                      Logic.ifElse (Logic.not (Lists.null (Core.typeSchemeVariables ts))) (makeSimpleLambda (Arity.typeArity (Core.typeSchemeBody ts)) asVariable) asVariable+          in (Right asFunctionRef))))))) (\typ -> Logic.ifElse (Sets.member name tcLambdaVars) (Right asVariable) (Logic.ifElse (Sets.member name inlineVars) (+        let unwrapped = lazyDotGet asVariable+            asFunctionRef =+                    Logic.ifElse (Logic.not (Sets.null (Variables.freeVariablesInType typ))) (makeSimpleLambda (Arity.typeArity typ) unwrapped) unwrapped+        in (Right asFunctionRef)) (Logic.ifElse (Logic.not (Maps.member name tcMetadata)) (Optionals.cases (Lexical.lookupBinding g name) (+        let asFunctionRef =+                Logic.ifElse (Logic.not (Sets.null (Variables.freeVariablesInType typ))) (makeSimpleLambda (Arity.typeArity typ) asVariable) asVariable+        in (Right asFunctionRef)) (\el ->+        let elTrivial = Predicates.isTrivialTerm (Core.bindingTerm el)+        in (Optionals.cases (Core.bindingTypeScheme el) (Logic.ifElse (Logic.and (Equality.equal (Arity.typeArity typ) 0) (Logic.not elTrivial)) (Right asFunctionCall) (+          let asFunctionRef =+                  Logic.ifElse (Logic.not (Sets.null (Variables.freeVariablesInType typ))) (makeSimpleLambda (Arity.typeArity typ) asVariable) asVariable+          in (Right asFunctionRef))) (\ts -> Logic.ifElse (Logic.and (Logic.and (Equality.equal (Arity.typeArity typ) 0) (Predicates.isComplexBinding tc el)) (Logic.not elTrivial)) (Right asFunctionCall) (+          let asFunctionRef =+                  Logic.ifElse (Logic.not (Sets.null (Variables.freeVariablesInType typ))) (makeSimpleLambda (Arity.typeArity typ) asVariable) asVariable+          in (Right asFunctionRef)))))) (Logic.ifElse (Logic.and (Equality.equal (Arity.typeArity typ) 0) (Predicates.isComplexVariable tc name)) (Right asFunctionCall) (+        let asFunctionRef =+                Logic.ifElse (Logic.not (Sets.null (Variables.freeVariablesInType typ))) (makeSimpleLambda (Arity.typeArity typ) asVariable) asVariable+        in (Right asFunctionRef))))))))++-- | Encode a wrapped type (newtype) to a Python class definition+encodeWrappedType :: PythonEnvironment.PythonEnvironment -> Core.Name -> Core.Type -> Maybe String -> Either t0 [Syntax.Statement]+encodeWrappedType env name typ comment =++      let tparamList = Pairs.first (PythonEnvironment.pythonEnvironmentBoundTypeVariables env)+      in (Eithers.bind (encodeTypeQuoted env typ) (\ptypeQuoted ->+        let pyName = PythonNames.encodeName False Util.CaseConventionPascal env name+            body = Utils.indentedBlock comment []+            typeConstStmt =+                    Utils.dottedAssignmentStatement pyName (PythonNames.encodeConstantForTypeName env name) (Utils.functionCall (Utils.pyNameToPyPrimary (PythonNames.encodeName True Util.CaseConventionPascal env (Core.Name "hydra.core.Name"))) [+                      Utils.doubleQuotedString (Core.unName name)])+        in (Right [+          Utils.pyClassDefinitionToPyStatement (Syntax.ClassDefinition {+            Syntax.classDefinitionDecorators = Nothing,+            Syntax.classDefinitionName = pyName,+            Syntax.classDefinitionTypeParams = (Lists.map (\arg_ -> Utils.pyNameToPyTypeParameter (PythonNames.encodeTypeVariable arg_)) (findTypeParams env typ)),+            Syntax.classDefinitionArguments = (Just (variantArgs ptypeQuoted tparamList)),+            Syntax.classDefinitionBody = body}),+          typeConstStmt])))++-- | Create a value pattern for an enum variant+enumVariantPattern :: PythonEnvironment.PythonEnvironment -> Core.Name -> Core.Name -> Syntax.ClosedPattern+enumVariantPattern env typeName fieldName =+    Syntax.ClosedPatternValue (Syntax.ValuePattern (Syntax.Attribute [+      PythonNames.encodeName True Util.CaseConventionPascal env typeName,+      (PythonNames.encodeEnumValue env fieldName)]))++-- | Get type parameters from environment as Python TypeParameters+environmentTypeParameters :: PythonEnvironment.PythonEnvironment -> [Syntax.TypeParameter]+environmentTypeParameters env =+    Lists.map (\arg_ -> Utils.pyNameToPyTypeParameter (PythonNames.encodeTypeVariable arg_)) (Pairs.first (PythonEnvironment.pythonEnvironmentBoundTypeVariables env))++-- | Extend environment with lambda parameters from a term+extendEnvWithLambdaParams :: PythonEnvironment.PythonEnvironment -> Core.Term -> PythonEnvironment.PythonEnvironment+extendEnvWithLambdaParams env term =++      let go =+              \e -> \t -> case (Strip.deannotateAndDetypeTerm t) of+                Core.TermLambda v0 ->+                  let newTc = Scoping.extendGraphForLambda (pythonEnvironmentGetGraph e) v0+                      newEnv = pythonEnvironmentSetGraph newTc e+                  in (go newEnv (Core.lambdaBody v0))+                _ -> e+      in (go env term)++-- | Extend a PythonEnvironment with a new bound type variable+extendEnvWithTypeVar :: PythonEnvironment.PythonEnvironment -> Core.Name -> PythonEnvironment.PythonEnvironment+extendEnvWithTypeVar env var_ =++      let oldBound = PythonEnvironment.pythonEnvironmentBoundTypeVariables env+          tparamList = Pairs.first oldBound+          tparamMap = Pairs.second oldBound+          newList = Lists.concat2 tparamList [+                var_]+          newMap = Maps.insert var_ (PythonNames.encodeTypeVariable var_) tparamMap+      in PythonEnvironment.PythonEnvironment {+        PythonEnvironment.pythonEnvironmentNamespaces = (PythonEnvironment.pythonEnvironmentNamespaces env),+        PythonEnvironment.pythonEnvironmentBoundTypeVariables = (newList, newMap),+        PythonEnvironment.pythonEnvironmentGraph = (PythonEnvironment.pythonEnvironmentGraph env),+        PythonEnvironment.pythonEnvironmentNullaryBindings = (PythonEnvironment.pythonEnvironmentNullaryBindings env),+        PythonEnvironment.pythonEnvironmentVersion = (PythonEnvironment.pythonEnvironmentVersion env),+        PythonEnvironment.pythonEnvironmentSkipCasts = (PythonEnvironment.pythonEnvironmentSkipCasts env),+        PythonEnvironment.pythonEnvironmentInlineVariables = (PythonEnvironment.pythonEnvironmentInlineVariables env)}++-- | Extend metadata based on a term (used during module encoding)+extendMetaForTerm :: Bool -> PythonEnvironment.PythonModuleMetadata -> Core.Term -> PythonEnvironment.PythonModuleMetadata+extendMetaForTerm topLevel meta0 term =++      let step =+              \meta -> \t -> case t of+                Core.TermEither v0 ->+                  let metaWithCast = setMetaUsesCast True meta+                  in (Eithers.either (\_ -> setMetaUsesLeft metaWithCast True) (\_ -> setMetaUsesRight metaWithCast True) v0)+                Core.TermLambda v0 -> Optionals.cases (Core.lambdaDomain v0) meta (\dom -> Logic.ifElse topLevel (extendMetaForType True False dom meta) meta)+                Core.TermLet v0 ->+                  let bindings = Core.letBindings v0+                  in (Lists.foldl (+                    let forBinding =+                            \m -> \b -> Optionals.cases (Core.bindingTypeScheme b) m (\ts ->+                              let term1 = Core.bindingTerm b+                              in (Logic.ifElse (Analysis.isSimpleAssignment term1) m (extendMetaForType True True (Core.typeSchemeBody ts) m)))+                    in forBinding) meta bindings)+                Core.TermLiteral v0 -> case v0 of+                  Core.LiteralDecimal _ -> setMetaUsesDecimal meta True+                  _ -> meta+                Core.TermList _ -> setMetaUsesFrozenList meta True+                Core.TermMap _ -> setMetaUsesFrozenDict meta True+                Core.TermSet _ -> setMetaUsesFrozenSet meta True+                Core.TermOptional v0 -> Optionals.cases v0 (setMetaUsesNothing meta True) (\_ -> setMetaUsesJust meta True)+                Core.TermInject _ -> setMetaUsesCast True meta+                _ -> meta+      in (Rewriting.foldOverTerm Coders.TraversalOrderPre step meta0 term)++-- | Extend metadata based on a type (used during module encoding)+extendMetaForType :: Bool -> Bool -> Core.Type -> PythonEnvironment.PythonModuleMetadata -> PythonEnvironment.PythonModuleMetadata+extendMetaForType topLevel isTermAnnot typ meta =++      let currentTvars = PythonEnvironment.pythonModuleMetadataTypeVariables meta+          newTvars = collectTypeVariables currentTvars typ+          metaWithTvars = setMetaTypeVariables meta newTvars+          metaWithSubtypes = Lists.foldl (\m -> \t -> extendMetaForType False isTermAnnot t m) metaWithTvars (Rewriting.subtypes typ)+      in case (Strip.deannotateType typ) of+        Core.TypeFunction _ -> Logic.ifElse (Logic.and isTermAnnot topLevel) metaWithSubtypes (setMetaUsesCallable metaWithSubtypes True)+        Core.TypeList _ -> setMetaUsesFrozenList metaWithSubtypes True+        Core.TypeMap _ -> setMetaUsesFrozenDict metaWithSubtypes True+        Core.TypeSet _ -> setMetaUsesFrozenSet metaWithSubtypes True+        Core.TypeOptional _ -> setMetaUsesMaybe metaWithSubtypes True+        Core.TypeEither _ -> setMetaUsesEither metaWithSubtypes True+        Core.TypeLiteral v0 -> case v0 of+          Core.LiteralTypeDecimal -> setMetaUsesDecimal metaWithSubtypes True+          _ -> metaWithSubtypes+        Core.TypeUnion v0 -> Logic.ifElse (Predicates.isEnumRowType v0) (setMetaUsesEnum metaWithSubtypes True) (Logic.ifElse (Logic.not (Lists.null v0)) (setMetaUsesNode metaWithSubtypes True) metaWithSubtypes)+        Core.TypeForall v0 ->+          let body = Core.forallTypeBody v0+              metaForWrap = digForWrap isTermAnnot metaWithSubtypes body+          in case (Strip.deannotateType body) of+            Core.TypeRecord _ -> setMetaUsesGeneric metaForWrap True+            _ -> metaForWrap+        Core.TypeRecord v0 ->+          let hasAnnotated = Lists.foldl (\b -> \ft -> Logic.or b (Annotations.hasTypeDescription (Core.fieldTypeType ft))) False v0+              meta1 = Logic.ifElse (Lists.null v0) metaWithSubtypes (setMetaUsesDataclass metaWithSubtypes True)+          in (Logic.ifElse hasAnnotated (setMetaUsesAnnotated meta1 True) meta1)+        Core.TypeWrap _ -> Logic.ifElse isTermAnnot metaWithSubtypes (setMetaUsesNode metaWithSubtypes True)+        _ -> metaWithSubtypes++-- | Extend metadata for a list of types+extendMetaForTypes :: [Core.Type] -> PythonEnvironment.PythonModuleMetadata -> PythonEnvironment.PythonModuleMetadata+extendMetaForTypes types meta =++      let names = Sets.unions (Lists.map (\t -> Dependencies.typeDependencyNames False t) types)+          currentNs = PythonEnvironment.pythonModuleMetadataNamespaces meta+          updatedNs = Analysis.addNamesToModuleNames PythonNames.encodeNamespaceWithOverrides names currentNs+          meta1 = setMetaNamespaces updatedNs meta+      in (Lists.foldl (\m -> \t -> extendMetaForType True False t m) meta1 types)++-- | Extract CaseStatement from a case elimination term+extractCaseElimination :: Core.Term -> Maybe Core.CaseStatement+extractCaseElimination term =+    case (Strip.deannotateAndDetypeTerm term) of+      Core.TermCases v0 -> Just v0+      _ -> Nothing++-- | Prefer signature parameter types over analysis-captured lambda domains when both are available in equal length (#488).+fillDomsFromSignature :: [t0] -> [t0] -> [t0]+fillDomsFromSignature doms sigParamTypes =+    Logic.ifElse (Equality.equal (Lists.length doms) (Lists.length sigParamTypes)) sigParamTypes doms++-- | Find type parameters in a type that are bound in the environment+findTypeParams :: PythonEnvironment.PythonEnvironment -> Core.Type -> [Core.Name]+findTypeParams env typ =++      let boundVars = Pairs.second (PythonEnvironment.pythonEnvironmentBoundTypeVariables env)+          isBound = \v -> Optionals.isGiven (Maps.lookup v boundVars)+      in (Lists.filter isBound (Sets.toList (Variables.freeVariablesInType typ)))++-- | Encode a function definition with parameters and body+functionDefinitionToExpr :: Typing.InferenceContext -> PythonEnvironment.PythonEnvironment -> Core.Name -> [Core.Name] -> [Core.Name] -> Core.Term -> [Core.Type] -> Maybe Core.Type -> Maybe String -> [Syntax.Statement] -> Either Errors.Error Syntax.Statement+functionDefinitionToExpr cx env name tparams args body doms mcod comment prefixes =+    Eithers.bind (Eithers.mapList (\pair ->+      let argName = Pairs.first pair+          typ = Pairs.second pair+      in (Eithers.bind (encodeType env typ) (\pyTyp -> Right (Syntax.ParamNoDefault {+        Syntax.paramNoDefaultParam = Syntax.Param {+          Syntax.paramName = (PythonNames.encodeName False Util.CaseConventionLowerSnake env argName),+          Syntax.paramAnnotation = (Just (Syntax.Annotation pyTyp))},+        Syntax.paramNoDefaultTypeComment = Nothing})))) (Lists.zip args doms)) (\pyArgs ->+      let pyParams =+              Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+                Syntax.paramNoDefaultParametersParamNoDefault = pyArgs,+                Syntax.paramNoDefaultParametersParamWithDefault = [],+                Syntax.paramNoDefaultParametersStarEtc = Nothing})+          isTCO = Logic.and (Logic.not (Lists.null args)) (Analysis.isSelfTailRecursive name body)+      in (Eithers.bind (Logic.ifElse isTCO (Eithers.bind (encodeTermMultilineTCO cx env name args body) (\tcoStmts ->+        let trueExpr = Syntax.NamedExpressionSimple (Utils.pyAtomToPyExpression Syntax.AtomTrue)+            whileBody = Utils.indentedBlock Nothing [+                  Lists.concat2 prefixes tcoStmts]+            whileStmt =+                    Syntax.StatementCompound (Syntax.CompoundStatementWhile (Syntax.WhileStatement {+                      Syntax.whileStatementCondition = trueExpr,+                      Syntax.whileStatementBody = whileBody,+                      Syntax.whileStatementElse = Nothing}))+        in (Right (Utils.indentedBlock comment [+          [+            whileStmt]])))) (Eithers.bind (encodeTermMultiline cx env body) (\stmts -> Right (Utils.indentedBlock comment [+        Lists.concat2 prefixes stmts])))) (\block -> Eithers.bind (Optionals.cases mcod (Right Nothing) (\cod -> Eithers.bind (encodeType env cod) (\pytyp -> Right (Just pytyp)))) (\mreturnType ->+        let pyTparams =+                Logic.ifElse useInlineTypeParams (Lists.map (\arg_ -> Utils.pyNameToPyTypeParameter (PythonNames.encodeTypeVariable arg_)) tparams) []+            isThunk = Lists.null args+            mDecorators = Logic.ifElse isThunk (Just (Syntax.Decorators [+                  lruCacheDecorator])) Nothing+            pyName = PythonNames.encodeName False Util.CaseConventionLowerSnake env name+        in (Right (Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+          Syntax.functionDefinitionDecorators = mDecorators,+          Syntax.functionDefinitionRaw = Syntax.FunctionDefRaw {+            Syntax.functionDefRawAsync = False,+            Syntax.functionDefRawName = pyName,+            Syntax.functionDefRawTypeParams = pyTparams,+            Syntax.functionDefRawParams = (Just pyParams),+            Syntax.functionDefRawReturnType = mreturnType,+            Syntax.functionDefRawFuncTypeComment = Nothing,+            Syntax.functionDefRawBlock = block}}))))))))++-- | Extract lambdas and their bodies from a term+gatherLambdas :: Core.Term -> ([Core.Name], Core.Term)+gatherLambdas term =++      let go =+              \params -> \t -> case (Strip.deannotateAndDetypeTerm t) of+                Core.TermLambda v0 -> go (Lists.concat2 params [+                  Core.lambdaParameter v0]) (Core.lambdaBody v0)+                _ -> (params, t)+      in (go [] term)++-- | Gather metadata from definitions+gatherMetadata :: Packaging.ModuleName -> [Packaging.Definition] -> PythonEnvironment.PythonModuleMetadata+gatherMetadata focusNs defs =++      let start = emptyMetadata (Utils.findNamespaces focusNs defs)+          addDef =+                  \meta -> \def -> case def of+                    Packaging.DefinitionTerm v0 ->+                      let term = Packaging.termDefinitionBody v0+                          typ =+                                  Optionals.cases (Packaging.termDefinitionSignature v0) (Core.TypeVariable (Core.Name "hydra.core.Unit")) (\sig -> Core.typeSchemeBody (Scoping.termSignatureToTypeScheme sig))+                          meta2 = extendMetaForType True True typ meta+                      in (extendMetaForTerm True meta2 term)+                    Packaging.DefinitionType v0 ->+                      let typ = Core.typeSchemeBody (Packaging.typeDefinitionBody v0)+                          meta2 = setMetaUsesName meta True+                      in (Rewriting.foldOverType Coders.TraversalOrderPre (\m -> \t -> extendMetaForType True False t m) meta2 typ)+          result = Lists.foldl addDef start defs+          tvars = PythonEnvironment.pythonModuleMetadataTypeVariables result+          result2 = setMetaUsesCast True (setMetaUsesLruCache True result)+      in (setMetaUsesTypeVar result2 (Logic.not (Sets.null tvars)))++-- | Create Generic[...] argument expression for class definition+genericArg :: [Core.Name] -> Maybe Syntax.Expression+genericArg tparamList =+    Logic.ifElse (Lists.null tparamList) Nothing (Just (Utils.pyPrimaryToPyExpression (Utils.primaryWithExpressionSlices (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "Generic"))) (Lists.map (\n -> Syntax.ExpressionSimple (Syntax.Disjunction [+      Syntax.Conjunction [+        Syntax.InversionSimple (Syntax.Comparison {+          Syntax.comparisonLhs = Syntax.BitwiseOr {+            Syntax.bitwiseOrLhs = Nothing,+            Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+              Syntax.bitwiseXorLhs = Nothing,+              Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                Syntax.bitwiseAndLhs = Nothing,+                Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                  Syntax.shiftExpressionLhs = Nothing,+                  Syntax.shiftExpressionRhs = Syntax.Sum {+                    Syntax.sumLhs = Nothing,+                    Syntax.sumRhs = Syntax.Term {+                      Syntax.termLhs = Nothing,+                      Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                        Syntax.powerLhs = Syntax.AwaitPrimary {+                          Syntax.awaitPrimaryAwait = False,+                          Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (PythonNames.encodeTypeVariable n)))},+                        Syntax.powerRhs = Nothing}))}}}}}},+          Syntax.comparisonRhs = []})]])) tparamList))))++-- | Create an initial Python environment for code generation+initialEnvironment :: Util.ModuleNames Syntax.DottedName -> Graph.Graph -> PythonEnvironment.PythonEnvironment+initialEnvironment namespaces tcontext =+    PythonEnvironment.PythonEnvironment {+      PythonEnvironment.pythonEnvironmentNamespaces = namespaces,+      PythonEnvironment.pythonEnvironmentBoundTypeVariables = ([], Maps.empty),+      PythonEnvironment.pythonEnvironmentGraph = tcontext,+      PythonEnvironment.pythonEnvironmentNullaryBindings = Sets.empty,+      PythonEnvironment.pythonEnvironmentVersion = targetPythonVersion,+      PythonEnvironment.pythonEnvironmentSkipCasts = True,+      PythonEnvironment.pythonEnvironmentInlineVariables = Sets.empty}++-- | Create initial empty metadata for a Python module+initialMetadata :: Packaging.ModuleName -> PythonEnvironment.PythonModuleMetadata+initialMetadata ns =++      let dottedNs = PythonNames.encodeNamespace ns+          emptyNs =+                  Util.ModuleNames {+                    Util.moduleNamesFocus = (ns, dottedNs),+                    Util.moduleNamesMapping = Maps.empty}+      in PythonEnvironment.PythonModuleMetadata {+        PythonEnvironment.pythonModuleMetadataNamespaces = emptyNs,+        PythonEnvironment.pythonModuleMetadataTypeVariables = Sets.empty,+        PythonEnvironment.pythonModuleMetadataUsesAnnotated = False,+        PythonEnvironment.pythonModuleMetadataUsesCallable = False,+        PythonEnvironment.pythonModuleMetadataUsesCast = False,+        PythonEnvironment.pythonModuleMetadataUsesLruCache = False,+        PythonEnvironment.pythonModuleMetadataUsesTypeAlias = False,+        PythonEnvironment.pythonModuleMetadataUsesDataclass = False,+        PythonEnvironment.pythonModuleMetadataUsesDecimal = False,+        PythonEnvironment.pythonModuleMetadataUsesEither = False,+        PythonEnvironment.pythonModuleMetadataUsesEnum = False,+        PythonEnvironment.pythonModuleMetadataUsesFrozenDict = False,+        PythonEnvironment.pythonModuleMetadataUsesFrozenList = False,+        PythonEnvironment.pythonModuleMetadataUsesFrozenSet = False,+        PythonEnvironment.pythonModuleMetadataUsesGeneric = False,+        PythonEnvironment.pythonModuleMetadataUsesJust = False,+        PythonEnvironment.pythonModuleMetadataUsesLeft = False,+        PythonEnvironment.pythonModuleMetadataUsesMaybe = False,+        PythonEnvironment.pythonModuleMetadataUsesName = False,+        PythonEnvironment.pythonModuleMetadataUsesNode = False,+        PythonEnvironment.pythonModuleMetadataUsesNothing = False,+        PythonEnvironment.pythonModuleMetadataUsesRight = False,+        PythonEnvironment.pythonModuleMetadataUsesTypeVar = False}++-- | Check if a term is a case statement applied to exactly one argument+isCaseStatementApplication :: Core.Term -> Maybe (Core.Name, (Maybe Core.Term, ([Core.CaseAlternative], Core.Term)))+isCaseStatementApplication term =++      let gathered = Analysis.gatherApplications term+          args = Pairs.first gathered+          body = Pairs.second gathered+      in (Logic.ifElse (Logic.not (Equality.equal (Lists.length args) 1)) Nothing (+        let arg = Optionals.fromOptional Core.TermUnit (Lists.maybeHead args)+        in case (Strip.deannotateAndDetypeTerm body) of+          Core.TermCases v0 -> Just (Core.caseStatementTypeName v0, (Core.caseStatementDefault v0, (Core.caseStatementCases v0, arg)))+          _ -> Nothing))++-- | Check if union cases are fully covered+isCasesFull :: [t0] -> [t1] -> Bool+isCasesFull rowType cases_ =++      let numCases = Lists.length cases_+          numFields = Lists.length rowType+      in (Logic.not (Equality.lt numCases numFields))++-- | Check whether a list of definitions contains any type definitions+isTypeModuleCheck :: [Packaging.Definition] -> Bool+isTypeModuleCheck defs =+    Logic.not (Lists.null (Lists.filter (\d -> case d of+      Packaging.DefinitionType _ -> True+      _ -> False) defs))++-- | Check if a name is a type variable (unqualified - no dots)+isTypeVariableName :: Core.Name -> Bool+isTypeVariableName name = Equality.equal 1 (Lists.length (Strings.splitOn "." (Core.unName name)))++-- | Check if a variant field has unit type+isVariantUnitType :: [Core.FieldType] -> Core.Name -> Bool+isVariantUnitType rowType fieldName =++      let mfield = Lists.find (\ft -> Equality.equal (Core.fieldTypeName ft) fieldName) rowType+      in (Optionals.fromOptional False (Optionals.map (\ft -> Predicates.isUnitType (Strip.deannotateType (Core.fieldTypeType ft))) mfield))++-- | Wrap an expression in a .get() method call (for Lazy unwrap at use sites)+lazyDotGet :: Syntax.Expression -> Syntax.Expression+lazyDotGet expr = Utils.functionCall (Utils.pyExpressionToPyPrimary (Utils.projectFromExpression expr (Syntax.Name "get"))) []++-- | Per-parameter isLazy flags of a primitive (by name), or empty if not a primitive. Single source of truth for which arguments coders thunk; replaces hard-coded name tables (issue #391).+lazyFlagsForPrimitive :: Graph.Graph -> Core.Name -> [Bool]+lazyFlagsForPrimitive g name =+    Optionals.cases (Maps.lookup name (Graph.graphPrimitives g)) [] (\prim ->+      let def0 = Graph.primitiveDefinition prim+          sig = Packaging.primitiveDefinitionSignature def0+      in (Lists.map (\p -> Typing.parameterIsLazy p) (Typing.termSignatureParameters sig)))++-- | Decorator for @lru_cache(1) to memoize zero-argument function results+lruCacheDecorator :: Syntax.NamedExpression+lruCacheDecorator =+    Syntax.NamedExpressionSimple (Utils.functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "lru_cache"))) [+      pyInt 1])++-- | Create a curried lambda chain from a list of parameter names and a body+makeCurriedLambda :: [Syntax.Name] -> Syntax.Expression -> Syntax.Expression+makeCurriedLambda params body =+    Lists.foldl (\acc -> \p -> Syntax.ExpressionLambda (Syntax.Lambda {+      Syntax.lambdaParams = Syntax.LambdaParameters {+        Syntax.lambdaParametersSlashNoDefault = Nothing,+        Syntax.lambdaParametersParamNoDefault = [+          Syntax.LambdaParamNoDefault p],+        Syntax.lambdaParametersParamWithDefault = [],+        Syntax.lambdaParametersStarEtc = Nothing},+      Syntax.lambdaBody = acc})) body (Lists.reverse params)++-- | Wrap an expression in Lazy(lambda: ...) for one-shot lazy memoization+makeLazy :: Syntax.Expression -> Syntax.Expression+makeLazy pbody =+    Utils.functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "Lazy"))) [+      wrapInNullaryLambda pbody]++-- | Constructor for PyGraph record+makePyGraph :: Graph.Graph -> PythonEnvironment.PythonModuleMetadata -> PythonEnvironment.PyGraph+makePyGraph g m =+    PythonEnvironment.PyGraph {+      PythonEnvironment.pyGraphGraph = g,+      PythonEnvironment.pyGraphMetadata = m}++-- | Wrap a bare reference to a polymorphic function in an uncurried lambda+makeSimpleLambda :: Int -> Syntax.Expression -> Syntax.Expression+makeSimpleLambda arity lhs =++      let args = Lists.map (\i -> Syntax.Name (Strings.cat2 "x" (Literals.showInt32 i))) (Math.range 1 arity)+      in (Logic.ifElse (Equality.equal arity 0) lhs (Syntax.ExpressionLambda (Syntax.Lambda {+        Syntax.lambdaParams = Syntax.LambdaParameters {+          Syntax.lambdaParametersSlashNoDefault = Nothing,+          Syntax.lambdaParametersParamNoDefault = (Lists.map (\a -> Syntax.LambdaParamNoDefault a) args),+          Syntax.lambdaParametersParamWithDefault = [],+          Syntax.lambdaParametersStarEtc = Nothing},+        Syntax.lambdaBody = (Utils.functionCall (Utils.pyExpressionToPyPrimary lhs) (Lists.map (\a -> Syntax.ExpressionSimple (Syntax.Disjunction [+          Syntax.Conjunction [+            Syntax.InversionSimple (Syntax.Comparison {+              Syntax.comparisonLhs = Syntax.BitwiseOr {+                Syntax.bitwiseOrLhs = Nothing,+                Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                  Syntax.bitwiseXorLhs = Nothing,+                  Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                    Syntax.bitwiseAndLhs = Nothing,+                    Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                      Syntax.shiftExpressionLhs = Nothing,+                      Syntax.shiftExpressionRhs = Syntax.Sum {+                        Syntax.sumLhs = Nothing,+                        Syntax.sumRhs = Syntax.Term {+                          Syntax.termLhs = Nothing,+                          Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                            Syntax.powerLhs = Syntax.AwaitPrimary {+                              Syntax.awaitPrimaryAwait = False,+                              Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName a))},+                            Syntax.powerRhs = Nothing}))}}}}}},+              Syntax.comparisonRhs = []})]])) args))})))++-- | Create a thunk (zero-argument lambda) wrapped with lru_cache(1) for memoization+makeThunk :: Syntax.Expression -> Syntax.Expression+makeThunk pbody =+    Utils.functionCall (Utils.pyExpressionToPyPrimary (Utils.functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "lru_cache"))) [+      pyInt 1])) [+      wrapInNullaryLambda pbody]++-- | Create an uncurried lambda with multiple parameters+makeUncurriedLambda :: [Syntax.Name] -> Syntax.Expression -> Syntax.Expression+makeUncurriedLambda params body =+    Syntax.ExpressionLambda (Syntax.Lambda {+      Syntax.lambdaParams = Syntax.LambdaParameters {+        Syntax.lambdaParametersSlashNoDefault = Nothing,+        Syntax.lambdaParametersParamNoDefault = (Lists.map (\p -> Syntax.LambdaParamNoDefault p) params),+        Syntax.lambdaParametersParamWithDefault = [],+        Syntax.lambdaParametersStarEtc = Nothing},+      Syntax.lambdaBody = body})++-- | Generate domain import statements from namespace mappings+moduleDomainImports :: Util.ModuleNames Syntax.DottedName -> [Syntax.ImportStatement]+moduleDomainImports namespaces =++      let names = Lists.sort (Maps.elems (Util.moduleNamesMapping namespaces))+      in (Lists.map (\ns -> Syntax.ImportStatementName (Syntax.ImportName [+        Syntax.DottedAsName {+          Syntax.dottedAsNameName = ns,+          Syntax.dottedAsNameAs = Nothing}])) names)++-- | Generate all import statements for a Python module+moduleImports :: Util.ModuleNames Syntax.DottedName -> PythonEnvironment.PythonModuleMetadata -> [Syntax.Statement]+moduleImports namespaces meta =+    Lists.map (\imp -> Utils.pySimpleStatementToPyStatement (Syntax.SimpleStatementImport imp)) (Lists.concat [+      moduleStandardImports meta,+      (moduleDomainImports namespaces)])++-- | Generate standard import statements based on module metadata+moduleStandardImports :: PythonEnvironment.PythonModuleMetadata -> [Syntax.ImportStatement]+moduleStandardImports meta =++      let pairs =+              [+                ("__future__", [+                  condImportSymbol "annotations" PythonNames.useFutureAnnotations]),+                (+                  "collections.abc",+                  [+                    condImportSymbol "Callable" (PythonEnvironment.pythonModuleMetadataUsesCallable meta),+                    (condImportSymbol "Mapping" (PythonEnvironment.pythonModuleMetadataUsesFrozenDict meta)),+                    (condImportSymbol "Sequence" (PythonEnvironment.pythonModuleMetadataUsesFrozenList meta)),+                    (condImportSymbol "Set" (PythonEnvironment.pythonModuleMetadataUsesFrozenSet meta))]),+                (+                  "dataclasses",+                  [+                    condImportSymbol "dataclass" (PythonEnvironment.pythonModuleMetadataUsesDataclass meta),+                    (condImportSymbol "replace" (PythonEnvironment.pythonModuleMetadataUsesDataclass meta))]),+                ("decimal", [+                  condImportSymbol "Decimal" (PythonEnvironment.pythonModuleMetadataUsesDecimal meta)]),+                ("enum", [+                  condImportSymbol "Enum" (PythonEnvironment.pythonModuleMetadataUsesEnum meta)]),+                ("functools", [+                  condImportSymbol "lru_cache" (PythonEnvironment.pythonModuleMetadataUsesLruCache meta)]),+                (+                  "hydra.overlay.python.dsl.python",+                  [+                    condImportSymbol "Either" (PythonEnvironment.pythonModuleMetadataUsesEither meta),+                    (condImportSymbol "Given" (PythonEnvironment.pythonModuleMetadataUsesJust meta)),+                    (condImportSymbol "Left" (PythonEnvironment.pythonModuleMetadataUsesLeft meta)),+                    (condImportSymbol "Node" (PythonEnvironment.pythonModuleMetadataUsesNode meta)),+                    (condImportSymbol "None_" (PythonEnvironment.pythonModuleMetadataUsesNothing meta)),+                    (condImportSymbol "Optional" (PythonEnvironment.pythonModuleMetadataUsesMaybe meta)),+                    (condImportSymbol "Right" (PythonEnvironment.pythonModuleMetadataUsesRight meta))]),+                (+                  "hydra.overlay.python.util",+                  [+                    condImportSymbol "ConsList" (PythonEnvironment.pythonModuleMetadataUsesFrozenList meta),+                    (condImportSymbol "Lazy" True),+                    (condImportSymbol "PersistentMap" (PythonEnvironment.pythonModuleMetadataUsesFrozenDict meta)),+                    (condImportSymbol "PersistentSet" (PythonEnvironment.pythonModuleMetadataUsesFrozenSet meta))]),+                (+                  "typing",+                  [+                    condImportSymbol "Annotated" (PythonEnvironment.pythonModuleMetadataUsesAnnotated meta),+                    (condImportSymbol "Generic" (PythonEnvironment.pythonModuleMetadataUsesGeneric meta)),+                    (condImportSymbol "TypeAlias" (PythonEnvironment.pythonModuleMetadataUsesTypeAlias meta)),+                    (condImportSymbol "TypeVar" (PythonEnvironment.pythonModuleMetadataUsesTypeVar meta)),+                    (condImportSymbol "cast" (PythonEnvironment.pythonModuleMetadataUsesCast meta))])]+          simplified =+                  Optionals.cat (Lists.map (\p ->+                    let modName = Pairs.first p+                        symbols = Optionals.cat (Pairs.second p)+                    in (Logic.ifElse (Lists.null symbols) Nothing (Just (modName, symbols)))) pairs)+      in (Lists.map (\p -> standardImportStatement (Pairs.first p) (Pairs.second p)) simplified)++-- | Convert a Hydra module to Python source files+moduleToPython :: Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map String String)+moduleToPython mod defs cx g =+    Eithers.bind (encodePythonModule cx g mod defs) (\file ->+      let s = Serialization.printExpr (Serialization.parenthesize (Serde.moduleToExpr file))+          path = Names.moduleNameToFilePath Util.CaseConventionLowerSnake (File.FileExtension "py") (Packaging.moduleName mod)+      in (Right (Maps.singleton path s)))++-- | Accessor for the graph field of PyGraph+pyGraphGraph :: PythonEnvironment.PyGraph -> Graph.Graph+pyGraphGraph pyg = PythonEnvironment.pyGraphGraph pyg++-- | Accessor for the metadata field of PyGraph+pyGraphMetadata :: PythonEnvironment.PyGraph -> PythonEnvironment.PythonModuleMetadata+pyGraphMetadata pyg = PythonEnvironment.pyGraphMetadata pyg++-- | Create integer literal expression+pyInt :: Integer -> Syntax.Expression+pyInt n = Utils.pyAtomToPyExpression (Syntax.AtomNumber (Syntax.NumberInteger n))++-- | Like bindingMetadata, but only for bindings that will actually be thunked+pythonBindingMetadata :: Graph.Graph -> Core.Binding -> Maybe Core.Term+pythonBindingMetadata g b =+    Logic.ifElse (shouldThunkBinding g b) (Logic.ifElse (Predicates.isComplexBinding g b) (Just (Core.TermLiteral (Core.LiteralBoolean True))) Nothing) Nothing++-- | Get the Graph from a PythonEnvironment+pythonEnvironmentGetGraph :: PythonEnvironment.PythonEnvironment -> Graph.Graph+pythonEnvironmentGetGraph env = PythonEnvironment.pythonEnvironmentGraph env++-- | Set the Graph in a PythonEnvironment+pythonEnvironmentSetGraph :: Graph.Graph -> PythonEnvironment.PythonEnvironment -> PythonEnvironment.PythonEnvironment+pythonEnvironmentSetGraph tc env =+    PythonEnvironment.PythonEnvironment {+      PythonEnvironment.pythonEnvironmentNamespaces = (PythonEnvironment.pythonEnvironmentNamespaces env),+      PythonEnvironment.pythonEnvironmentBoundTypeVariables = (PythonEnvironment.pythonEnvironmentBoundTypeVariables env),+      PythonEnvironment.pythonEnvironmentGraph = tc,+      PythonEnvironment.pythonEnvironmentNullaryBindings = (PythonEnvironment.pythonEnvironmentNullaryBindings env),+      PythonEnvironment.pythonEnvironmentVersion = (PythonEnvironment.pythonEnvironmentVersion env),+      PythonEnvironment.pythonEnvironmentSkipCasts = (PythonEnvironment.pythonEnvironmentSkipCasts env),+      PythonEnvironment.pythonEnvironmentInlineVariables = (PythonEnvironment.pythonEnvironmentInlineVariables env)}++-- | Build a fluent builder (factory + nested Builder dataclass) for a record+recordBuilderClass :: PythonEnvironment.PythonEnvironment -> Core.Name -> [Core.FieldType] -> Maybe Syntax.Args -> Either t0 [Syntax.Statement]+recordBuilderClass env name rowType recordArgs =+    Eithers.bind (Eithers.mapList (\ft -> Eithers.map (\pyType -> Utils.pyAssignmentToPyStatement (Syntax.AssignmentTyped (Syntax.TypedAssignment {+      Syntax.typedAssignmentLhs = (Syntax.SingleTargetName (Syntax.Name (Strings.cat2 "_" (Syntax.unName (PythonNames.encodeFieldName env (Core.fieldTypeName ft)))))),+      Syntax.typedAssignmentType = pyType,+      Syntax.typedAssignmentRhs = (Just (Syntax.AnnotatedRhsStar [+        Syntax.StarExpressionSimple (Utils.pyNameToPyExpression Utils.pyNone)]))}))) (encodeType env (Core.fieldTypeType ft))) rowType) (\builderFields ->+      let setters = Lists.map (\ft -> recordBuilderSetter env ft) rowType+          pyName = PythonNames.encodeName False Util.CaseConventionPascal env name+          buildKwargs =+                  Lists.map (\ft -> Syntax.KwargOrStarredKwarg (Syntax.Kwarg {+                    Syntax.kwargName = (Syntax.Name (Syntax.unName (PythonNames.encodeFieldName env (Core.fieldTypeName ft)))),+                    Syntax.kwargValue = (Utils.projectFromExpression (Utils.pyNameToPyExpression (Syntax.Name "self")) (Syntax.Name (Strings.cat2 "_" (Syntax.unName (PythonNames.encodeFieldName env (Core.fieldTypeName ft))))))})) rowType+          ctorCall =+                  Utils.pyPrimaryToPyExpression (Utils.primaryWithRhs (Utils.pyNameToPyPrimary pyName) (Syntax.PrimaryRhsCall (Syntax.Args {+                    Syntax.argsPositional = [],+                    Syntax.argsKwargOrStarred = buildKwargs,+                    Syntax.argsKwargOrDoubleStarred = []})))+          buildMethod =+                  Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+                    Syntax.functionDefinitionDecorators = Nothing,+                    Syntax.functionDefinitionRaw = Syntax.FunctionDefRaw {+                      Syntax.functionDefRawAsync = False,+                      Syntax.functionDefRawName = (Syntax.Name "build"),+                      Syntax.functionDefRawTypeParams = [],+                      Syntax.functionDefRawParams = (Just (Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+                        Syntax.paramNoDefaultParametersParamNoDefault = [+                          Syntax.ParamNoDefault {+                            Syntax.paramNoDefaultParam = Syntax.Param {+                              Syntax.paramName = (Syntax.Name "self"),+                              Syntax.paramAnnotation = Nothing},+                            Syntax.paramNoDefaultTypeComment = Nothing}],+                        Syntax.paramNoDefaultParametersParamWithDefault = [],+                        Syntax.paramNoDefaultParametersStarEtc = Nothing}))),+                      Syntax.functionDefRawReturnType = Nothing,+                      Syntax.functionDefRawFuncTypeComment = Nothing,+                      Syntax.functionDefRawBlock = (Utils.indentedBlock Nothing [+                        [+                          Utils.returnSingle ctorCall]])}}))+          builderBody =+                  Utils.indentedBlock Nothing [+                    Lists.concat [+                      builderFields,+                      setters,+                      [+                        buildMethod]]]+          builderDecs = Just (Syntax.Decorators [+                dataclassDecorator])+          builderClass =+                  Utils.pyClassDefinitionToPyStatement (Syntax.ClassDefinition {+                    Syntax.classDefinitionDecorators = builderDecs,+                    Syntax.classDefinitionName = (Syntax.Name "Builder"),+                    Syntax.classDefinitionTypeParams = [],+                    Syntax.classDefinitionArguments = recordArgs,+                    Syntax.classDefinitionBody = builderBody})+          qualifiedBuilderName = Syntax.Name (Strings.cat2 (Syntax.unName pyName) ".Builder")+          builderCall = Utils.functionCall (Utils.pyNameToPyPrimary qualifiedBuilderName) []+          factoryMethod =+                  Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+                    Syntax.functionDefinitionDecorators = (Just (Syntax.Decorators [+                      Syntax.NamedExpressionSimple (Utils.pyNameToPyExpression (Syntax.Name "staticmethod"))])),+                    Syntax.functionDefinitionRaw = Syntax.FunctionDefRaw {+                      Syntax.functionDefRawAsync = False,+                      Syntax.functionDefRawName = (Syntax.Name "builder"),+                      Syntax.functionDefRawTypeParams = [],+                      Syntax.functionDefRawParams = (Just (Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+                        Syntax.paramNoDefaultParametersParamNoDefault = [],+                        Syntax.paramNoDefaultParametersParamWithDefault = [],+                        Syntax.paramNoDefaultParametersStarEtc = Nothing}))),+                      Syntax.functionDefRawReturnType = Nothing,+                      Syntax.functionDefRawFuncTypeComment = Nothing,+                      Syntax.functionDefRawBlock = (Utils.indentedBlock Nothing [+                        [+                          Utils.returnSingle builderCall]])}}))+      in (Right [+        factoryMethod,+        builderClass]))++-- | Build a fluent setter for the nested Builder of a record+recordBuilderSetter :: PythonEnvironment.PythonEnvironment -> Core.FieldType -> Syntax.Statement+recordBuilderSetter env fieldType =++      let fname = Core.fieldTypeName fieldType+          setterName = builderSetterName env fname+          paramName = Syntax.Name setterName+          storageName = Strings.cat2 "_" (Syntax.unName (PythonNames.encodeFieldName env (Core.fieldTypeName fieldType)))+          kwarg =+                  Syntax.KwargOrStarredKwarg (Syntax.Kwarg {+                    Syntax.kwargName = (Syntax.Name storageName),+                    Syntax.kwargValue = (Utils.pyNameToPyExpression paramName)})+      in (Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+        Syntax.functionDefinitionDecorators = Nothing,+        Syntax.functionDefinitionRaw = Syntax.FunctionDefRaw {+          Syntax.functionDefRawAsync = False,+          Syntax.functionDefRawName = (Syntax.Name setterName),+          Syntax.functionDefRawTypeParams = [],+          Syntax.functionDefRawParams = (Just (Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+            Syntax.paramNoDefaultParametersParamNoDefault = [+              Syntax.ParamNoDefault {+                Syntax.paramNoDefaultParam = Syntax.Param {+                  Syntax.paramName = (Syntax.Name "self"),+                  Syntax.paramAnnotation = Nothing},+                Syntax.paramNoDefaultTypeComment = Nothing},+              Syntax.ParamNoDefault {+                Syntax.paramNoDefaultParam = Syntax.Param {+                  Syntax.paramName = paramName,+                  Syntax.paramAnnotation = Nothing},+                Syntax.paramNoDefaultTypeComment = Nothing}],+            Syntax.paramNoDefaultParametersParamWithDefault = [],+            Syntax.paramNoDefaultParametersStarEtc = Nothing}))),+          Syntax.functionDefRawReturnType = Nothing,+          Syntax.functionDefRawFuncTypeComment = Nothing,+          Syntax.functionDefRawBlock = (Utils.indentedBlock Nothing [+            [+              Utils.returnSingle (Utils.pyPrimaryToPyExpression (Utils.primaryWithRhs (Utils.pyNameToPyPrimary (Syntax.Name "replace")) (Syntax.PrimaryRhsCall (Syntax.Args {+                Syntax.argsPositional = [+                  Syntax.PosArgExpression (Utils.pyNameToPyExpression (Syntax.Name "self"))],+                Syntax.argsKwargOrStarred = [+                  kwarg],+                Syntax.argsKwargOrDoubleStarred = []}))))]])}})))++-- | Build a per-field copy-update method (with_<field>) for a record+recordWithMethod :: PythonEnvironment.PythonEnvironment -> Core.FieldType -> Syntax.Statement+recordWithMethod env fieldType =++      let fname = Core.fieldTypeName fieldType+          snake = Syntax.unName (PythonNames.encodeFieldName env fname)+          methodName = Strings.cat2 "with_" snake+          kwargKey = Syntax.Name snake+          paramSnake = Logic.ifElse (Equality.equal snake "self") "_self" snake+          paramName = Syntax.Name paramSnake+          kwarg =+                  Syntax.KwargOrStarredKwarg (Syntax.Kwarg {+                    Syntax.kwargName = kwargKey,+                    Syntax.kwargValue = (Utils.pyNameToPyExpression paramName)})+      in (Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+        Syntax.functionDefinitionDecorators = Nothing,+        Syntax.functionDefinitionRaw = Syntax.FunctionDefRaw {+          Syntax.functionDefRawAsync = False,+          Syntax.functionDefRawName = (Syntax.Name methodName),+          Syntax.functionDefRawTypeParams = [],+          Syntax.functionDefRawParams = (Just (Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+            Syntax.paramNoDefaultParametersParamNoDefault = [+              Syntax.ParamNoDefault {+                Syntax.paramNoDefaultParam = Syntax.Param {+                  Syntax.paramName = (Syntax.Name "self"),+                  Syntax.paramAnnotation = Nothing},+                Syntax.paramNoDefaultTypeComment = Nothing},+              Syntax.ParamNoDefault {+                Syntax.paramNoDefaultParam = Syntax.Param {+                  Syntax.paramName = paramName,+                  Syntax.paramAnnotation = Nothing},+                Syntax.paramNoDefaultTypeComment = Nothing}],+            Syntax.paramNoDefaultParametersParamWithDefault = [],+            Syntax.paramNoDefaultParametersStarEtc = Nothing}))),+          Syntax.functionDefRawReturnType = Nothing,+          Syntax.functionDefRawFuncTypeComment = Nothing,+          Syntax.functionDefRawBlock = (Utils.indentedBlock Nothing [+            [+              Utils.returnSingle (Utils.pyPrimaryToPyExpression (Utils.primaryWithRhs (Utils.pyNameToPyPrimary (Syntax.Name "replace")) (Syntax.PrimaryRhsCall (Syntax.Args {+                Syntax.argsPositional = [+                  Syntax.PosArgExpression (Utils.pyNameToPyExpression (Syntax.Name "self"))],+                Syntax.argsKwargOrStarred = [+                  kwarg],+                Syntax.argsKwargOrDoubleStarred = []}))))]])}})))++setMetaNamespaces :: Util.ModuleNames Syntax.DottedName -> PythonEnvironment.PythonModuleMetadata -> PythonEnvironment.PythonModuleMetadata+setMetaNamespaces ns m =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = ns,+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaTypeVariables :: PythonEnvironment.PythonModuleMetadata -> S.Set Core.Name -> PythonEnvironment.PythonModuleMetadata+setMetaTypeVariables m tvars =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = tvars,+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesAnnotated :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesAnnotated m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = b,+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesCallable :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesCallable m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = b,+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesCast :: Bool -> PythonEnvironment.PythonModuleMetadata -> PythonEnvironment.PythonModuleMetadata+setMetaUsesCast b m =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = b,+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesDataclass :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesDataclass m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = b,+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesDecimal :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesDecimal m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = b,+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesEither :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesEither m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = b,+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesEnum :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesEnum m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = b,+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesFrozenDict :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesFrozenDict m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = b,+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesFrozenList :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesFrozenList m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = b,+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesFrozenSet :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesFrozenSet m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = b,+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesGeneric :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesGeneric m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = b,+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesJust :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesJust m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = b,+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesLeft :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesLeft m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = b,+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesLruCache :: Bool -> PythonEnvironment.PythonModuleMetadata -> PythonEnvironment.PythonModuleMetadata+setMetaUsesLruCache b m =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = b,+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesMaybe :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesMaybe m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = b,+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesName :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesName m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = b,+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesNode :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesNode m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = b,+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesNothing :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesNothing m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = b,+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesRight :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesRight m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = b,+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesTypeAlias :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesTypeAlias m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = b,+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = (PythonEnvironment.pythonModuleMetadataUsesTypeVar m)}++setMetaUsesTypeVar :: PythonEnvironment.PythonModuleMetadata -> Bool -> PythonEnvironment.PythonModuleMetadata+setMetaUsesTypeVar m b =+    PythonEnvironment.PythonModuleMetadata {+      PythonEnvironment.pythonModuleMetadataNamespaces = (PythonEnvironment.pythonModuleMetadataNamespaces m),+      PythonEnvironment.pythonModuleMetadataTypeVariables = (PythonEnvironment.pythonModuleMetadataTypeVariables m),+      PythonEnvironment.pythonModuleMetadataUsesAnnotated = (PythonEnvironment.pythonModuleMetadataUsesAnnotated m),+      PythonEnvironment.pythonModuleMetadataUsesCallable = (PythonEnvironment.pythonModuleMetadataUsesCallable m),+      PythonEnvironment.pythonModuleMetadataUsesCast = (PythonEnvironment.pythonModuleMetadataUsesCast m),+      PythonEnvironment.pythonModuleMetadataUsesLruCache = (PythonEnvironment.pythonModuleMetadataUsesLruCache m),+      PythonEnvironment.pythonModuleMetadataUsesTypeAlias = (PythonEnvironment.pythonModuleMetadataUsesTypeAlias m),+      PythonEnvironment.pythonModuleMetadataUsesDataclass = (PythonEnvironment.pythonModuleMetadataUsesDataclass m),+      PythonEnvironment.pythonModuleMetadataUsesDecimal = (PythonEnvironment.pythonModuleMetadataUsesDecimal m),+      PythonEnvironment.pythonModuleMetadataUsesEither = (PythonEnvironment.pythonModuleMetadataUsesEither m),+      PythonEnvironment.pythonModuleMetadataUsesEnum = (PythonEnvironment.pythonModuleMetadataUsesEnum m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenDict = (PythonEnvironment.pythonModuleMetadataUsesFrozenDict m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenList = (PythonEnvironment.pythonModuleMetadataUsesFrozenList m),+      PythonEnvironment.pythonModuleMetadataUsesFrozenSet = (PythonEnvironment.pythonModuleMetadataUsesFrozenSet m),+      PythonEnvironment.pythonModuleMetadataUsesGeneric = (PythonEnvironment.pythonModuleMetadataUsesGeneric m),+      PythonEnvironment.pythonModuleMetadataUsesJust = (PythonEnvironment.pythonModuleMetadataUsesJust m),+      PythonEnvironment.pythonModuleMetadataUsesLeft = (PythonEnvironment.pythonModuleMetadataUsesLeft m),+      PythonEnvironment.pythonModuleMetadataUsesMaybe = (PythonEnvironment.pythonModuleMetadataUsesMaybe m),+      PythonEnvironment.pythonModuleMetadataUsesName = (PythonEnvironment.pythonModuleMetadataUsesName m),+      PythonEnvironment.pythonModuleMetadataUsesNode = (PythonEnvironment.pythonModuleMetadataUsesNode m),+      PythonEnvironment.pythonModuleMetadataUsesNothing = (PythonEnvironment.pythonModuleMetadataUsesNothing m),+      PythonEnvironment.pythonModuleMetadataUsesRight = (PythonEnvironment.pythonModuleMetadataUsesRight m),+      PythonEnvironment.pythonModuleMetadataUsesTypeVar = b}++-- | Determine if a binding should be thunked based on its complexity and triviality+shouldThunkBinding :: Graph.Graph -> Core.Binding -> Bool+shouldThunkBinding g b = Logic.and (Predicates.isComplexBinding g b) (Logic.not (Predicates.isTrivialTerm (Core.bindingTerm b)))++-- | Generate a single from-import statement+standardImportStatement :: String -> [String] -> Syntax.ImportStatement+standardImportStatement modName symbols =+    Syntax.ImportStatementFrom (Syntax.ImportFrom {+      Syntax.importFromPrefixes = [],+      Syntax.importFromDottedName = (Just (Syntax.DottedName [+        Syntax.Name modName])),+      Syntax.importFromTargets = (Syntax.ImportFromTargetsSimple (Lists.map (\s -> Syntax.ImportFromAsName {+        Syntax.importFromAsNameName = (Syntax.Name s),+        Syntax.importFromAsNameAs = Nothing}) symbols))})++-- | The target Python version for code generation+targetPythonVersion :: PythonEnvironment.PythonVersion+targetPythonVersion = Utils.targetPythonVersion++-- | Calculate term arity with proper primitive handling+termArityWithPrimitives :: Graph.Graph -> Core.Term -> Int+termArityWithPrimitives graph term =+    case (Strip.deannotateAndDetypeTerm term) of+      Core.TermApplication v0 -> Math.max 0 (Math.sub (termArityWithPrimitives graph (Core.applicationFunction v0)) 1)+      Core.TermLambda v0 -> Math.add 1 (termArityWithPrimitives graph (Core.lambdaBody v0))+      Core.TermProject _ -> 1+      Core.TermUnwrap _ -> 1+      Core.TermCases _ -> 1+      Core.TermVariable v0 -> Optionals.cases (Lexical.lookupBinding graph v0) 0 (\el -> Optionals.cases (Core.bindingTypeScheme el) (Arity.termArity (Core.bindingTerm el)) (\ts -> Arity.typeSchemeArity ts))+      _ -> 0++-- | Create a TypeVar assignment statement for a type variable name+tvarStatement :: Syntax.Name -> Syntax.Statement+tvarStatement name =+    Utils.assignmentStatement name (Utils.functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "TypeVar"))) [+      Utils.doubleQuotedString (Syntax.unName name)])++-- | Version-aware type alias statement generation+typeAliasStatementFor :: PythonEnvironment.PythonEnvironment -> Syntax.Name -> [Syntax.TypeParameter] -> Maybe String -> Syntax.Expression -> Syntax.Statement+typeAliasStatementFor env name tparams mcomment tyexpr =+    Logic.ifElse (useInlineTypeParamsFor (PythonEnvironment.pythonEnvironmentVersion env)) (Utils.typeAliasStatement name tparams mcomment tyexpr) (Utils.typeAliasStatement310 name tparams mcomment tyexpr)++-- | Version-aware union type statement generation+unionTypeStatementsFor :: PythonEnvironment.PythonEnvironment -> Syntax.Name -> [Syntax.TypeParameter] -> Maybe String -> Syntax.Expression -> [Syntax.Statement] -> [Syntax.Statement]+unionTypeStatementsFor env name tparams mcomment tyexpr extraStmts =+    Logic.ifElse (useInlineTypeParamsFor (PythonEnvironment.pythonEnvironmentVersion env)) (Lists.concat2 [+      Utils.typeAliasStatement name tparams mcomment tyexpr] extraStmts) (Utils.unionTypeClassStatements310 name mcomment tyexpr extraStmts)++-- | Create an expression that calls hydra.overlay.python.dsl.python.unsupported(message) at runtime+unsupportedExpression :: String -> Syntax.Expression+unsupportedExpression msg =+    Utils.functionCall (Utils.pyExpressionToPyPrimary (Utils.projectFromExpression (Utils.projectFromExpression (Utils.projectFromExpression (Utils.projectFromExpression (Utils.projectFromExpression (Syntax.ExpressionSimple (Syntax.Disjunction [+      Syntax.Conjunction [+        Syntax.InversionSimple (Syntax.Comparison {+          Syntax.comparisonLhs = Syntax.BitwiseOr {+            Syntax.bitwiseOrLhs = Nothing,+            Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+              Syntax.bitwiseXorLhs = Nothing,+              Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                Syntax.bitwiseAndLhs = Nothing,+                Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                  Syntax.shiftExpressionLhs = Nothing,+                  Syntax.shiftExpressionRhs = Syntax.Sum {+                    Syntax.sumLhs = Nothing,+                    Syntax.sumRhs = Syntax.Term {+                      Syntax.termLhs = Nothing,+                      Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                        Syntax.powerLhs = Syntax.AwaitPrimary {+                          Syntax.awaitPrimaryAwait = False,+                          Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "hydra")))},+                        Syntax.powerRhs = Nothing}))}}}}}},+          Syntax.comparisonRhs = []})]])) (Syntax.Name "overlay")) (Syntax.Name "python")) (Syntax.Name "dsl")) (Syntax.Name "python")) (Syntax.Name "unsupported"))) [+      Utils.stringToPyExpression Syntax.QuoteStyleDouble msg]++-- | Legacy constant for backward compatibility; use useInlineTypeParamsFor in new code+useInlineTypeParams :: Bool+useInlineTypeParams = useInlineTypeParamsFor Utils.targetPythonVersion++-- | Version-aware inline type parameters+useInlineTypeParamsFor :: PythonEnvironment.PythonVersion -> Bool+useInlineTypeParamsFor version = Equality.equal version PythonEnvironment.PythonVersionPython312++-- | Create args for variant (Node[type], Generic[tparams])+variantArgs :: Syntax.Expression -> [Core.Name] -> Syntax.Args+variantArgs ptype tparams =+    Utils.pyExpressionsToPyArgs (Optionals.cat [+      Just (Utils.pyPrimaryToPyExpression (Utils.primaryWithExpressionSlices (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "Node"))) [+        ptype])),+      (genericArg tparams)])++-- | Create a ClosedPattern for a variant based on its characteristics+variantClosedPattern :: PythonEnvironment.PythonEnvironment -> Core.Name -> Core.Name -> Syntax.Name -> t0 -> Bool -> Core.Name -> Bool -> Syntax.ClosedPattern+variantClosedPattern env typeName fieldName pyVariantName rowType isEnum varName shouldCapture =+    Logic.ifElse isEnum (enumVariantPattern env typeName fieldName) (Logic.ifElse (Logic.not shouldCapture) (classVariantPatternUnit pyVariantName) (classVariantPatternWithCapture env pyVariantName varName))++-- | Create a wildcard case block with a given body statement+wildcardCaseBlock :: Syntax.Statement -> Syntax.CaseBlock+wildcardCaseBlock stmt =+    Syntax.CaseBlock {+      Syntax.caseBlockPatterns = (Utils.pyClosedPatternToPyPatterns Syntax.ClosedPatternWildcard),+      Syntax.caseBlockGuard = Nothing,+      Syntax.caseBlockBody = (Utils.indentedBlock Nothing [+        [+          stmt]])}++-- | Execute a computation with definitions in scope+withDefinitions :: PythonEnvironment.PythonEnvironment -> [Packaging.Definition] -> (PythonEnvironment.PythonEnvironment -> t0) -> t0+withDefinitions env defs body =++      let bindings =+              Optionals.cat (Lists.map (\def_ -> case def_ of+                Packaging.DefinitionTerm v0 -> Just (Core.Binding {+                  Core.bindingName = (Packaging.termDefinitionName v0),+                  Core.bindingTerm = (Packaging.termDefinitionBody v0),+                  Core.bindingTypeScheme = (Optionals.map (\sig -> Scoping.termSignatureToTypeScheme sig) (Packaging.termDefinitionSignature v0))})+                Packaging.DefinitionType _ -> Nothing+                _ -> Nothing) defs)+          dummyLet =+                  Core.Let {+                    Core.letBindings = bindings,+                    Core.letBody = (Core.TermLiteral (Core.LiteralString "dummy"))}+      in (withLet env dummyLet body)++-- | Execute a computation with lambda context (adds lambda parameter to Graph)+withLambda :: PythonEnvironment.PythonEnvironment -> Core.Lambda -> (PythonEnvironment.PythonEnvironment -> t0) -> t0+withLambda = Environment.withLambdaContext pythonEnvironmentGetGraph pythonEnvironmentSetGraph++-- | Execute a computation with let context (adds let bindings to Graph)+withLet :: PythonEnvironment.PythonEnvironment -> Core.Let -> (PythonEnvironment.PythonEnvironment -> t0) -> t0+withLet = Environment.withLetContext pythonEnvironmentGetGraph pythonEnvironmentSetGraph pythonBindingMetadata++-- | Execute a computation with inline let context (for walrus operators)+withLetInline :: PythonEnvironment.PythonEnvironment -> Core.Let -> (PythonEnvironment.PythonEnvironment -> t0) -> t0+withLetInline env lt body =++      let bindingNames = Lists.map (\b -> Core.bindingName b) (Core.letBindings lt)+          inlineVars = Sets.fromList bindingNames+          noMetadata = \tc -> \b -> Nothing+      in (Environment.withLetContext pythonEnvironmentGetGraph pythonEnvironmentSetGraph noMetadata env lt (\innerEnv ->+        let updatedEnv =+                PythonEnvironment.PythonEnvironment {+                  PythonEnvironment.pythonEnvironmentNamespaces = (PythonEnvironment.pythonEnvironmentNamespaces innerEnv),+                  PythonEnvironment.pythonEnvironmentBoundTypeVariables = (PythonEnvironment.pythonEnvironmentBoundTypeVariables innerEnv),+                  PythonEnvironment.pythonEnvironmentGraph = (PythonEnvironment.pythonEnvironmentGraph innerEnv),+                  PythonEnvironment.pythonEnvironmentNullaryBindings = (PythonEnvironment.pythonEnvironmentNullaryBindings innerEnv),+                  PythonEnvironment.pythonEnvironmentVersion = (PythonEnvironment.pythonEnvironmentVersion innerEnv),+                  PythonEnvironment.pythonEnvironmentSkipCasts = (PythonEnvironment.pythonEnvironmentSkipCasts innerEnv),+                  PythonEnvironment.pythonEnvironmentInlineVariables = (Sets.union inlineVars (PythonEnvironment.pythonEnvironmentInlineVariables innerEnv))}+        in (body updatedEnv)))++-- | Execute a computation with type lambda context+withTypeLambda :: PythonEnvironment.PythonEnvironment -> Core.TypeLambda -> (PythonEnvironment.PythonEnvironment -> t0) -> t0+withTypeLambda = Environment.withTypeLambdaContext pythonEnvironmentGetGraph pythonEnvironmentSetGraph++-- | Wrap a Python expression in a nullary lambda (thunk) for lazy evaluation+wrapInNullaryLambda :: Syntax.Expression -> Syntax.Expression+wrapInNullaryLambda expr =+    Syntax.ExpressionLambda (Syntax.Lambda {+      Syntax.lambdaParams = Syntax.LambdaParameters {+        Syntax.lambdaParametersSlashNoDefault = Nothing,+        Syntax.lambdaParametersParamNoDefault = [],+        Syntax.lambdaParametersParamWithDefault = [],+        Syntax.lambdaParametersStarEtc = Nothing},+      Syntax.lambdaBody = expr})++-- | Wrap lazy-flagged arguments of a primitive call in nullary lambdas, per isLazy metadata (issue #391)+wrapLazyArguments :: Graph.Graph -> Core.Name -> [Syntax.Expression] -> [Syntax.Expression]+wrapLazyArguments g name args =++      let lazyFlags = lazyFlagsForPrimitive g name+      in (Lists.map (\pair -> Logic.ifElse (Pairs.second pair) (wrapInNullaryLambda (Pairs.first pair)) (Pairs.first pair)) (Lists.zip args lazyFlags))
+ src/main/haskell/Hydra/Python/Environment.hs view
@@ -0,0 +1,154 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Environment types for Python code generation++module Hydra.Python.Environment where++import qualified Hydra.Core as Core+import qualified Hydra.Graph as Graph+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Python.Syntax as Syntax+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci+import qualified Data.Map as M+import qualified Data.Set as S++-- | Target Python version for code generation+data PythonVersion =+  PythonVersionPython310 |+  PythonVersionPython312+  deriving (Eq, Ord, Read, Show)++_PythonVersion = Core.Name "hydra.python.environment.PythonVersion"++_PythonVersion_python310 = Core.Name "python310"++_PythonVersion_python312 = Core.Name "python312"++-- | Environment for Python code generation+data PythonEnvironment =+  PythonEnvironment {+    -- | ModuleName mapping for imports+    pythonEnvironmentNamespaces :: (Util.ModuleNames Syntax.DottedName),+    -- | Type variables in scope, with their Python names+    pythonEnvironmentBoundTypeVariables :: ([Core.Name], (M.Map Core.Name Syntax.Name)),+    -- | Graph context for type inference+    pythonEnvironmentGraph :: Graph.Graph,+    -- | Set of nullary bindings (need call syntax)+    pythonEnvironmentNullaryBindings :: (S.Set Core.Name),+    -- | Target Python version+    pythonEnvironmentVersion :: PythonVersion,+    -- | When True, skip generating cast() calls for reduced memory usage+    pythonEnvironmentSkipCasts :: Bool,+    -- | Variables that are inline let bindings (walrus operators)+    pythonEnvironmentInlineVariables :: (S.Set Core.Name)}++_PythonEnvironment = Core.Name "hydra.python.environment.PythonEnvironment"++_PythonEnvironment_namespaces = Core.Name "namespaces"++_PythonEnvironment_boundTypeVariables = Core.Name "boundTypeVariables"++_PythonEnvironment_graph = Core.Name "graph"++_PythonEnvironment_nullaryBindings = Core.Name "nullaryBindings"++_PythonEnvironment_version = Core.Name "version"++_PythonEnvironment_skipCasts = Core.Name "skipCasts"++_PythonEnvironment_inlineVariables = Core.Name "inlineVariables"++-- | Temporary metadata used to create the header section of a Python file+data PythonModuleMetadata =+  PythonModuleMetadata {+    -- | ModuleName mapping for imports+    pythonModuleMetadataNamespaces :: (Util.ModuleNames Syntax.DottedName),+    -- | Type variables used in the module+    pythonModuleMetadataTypeVariables :: (S.Set Core.Name),+    pythonModuleMetadataUsesAnnotated :: Bool,+    pythonModuleMetadataUsesCallable :: Bool,+    pythonModuleMetadataUsesCast :: Bool,+    pythonModuleMetadataUsesLruCache :: Bool,+    pythonModuleMetadataUsesTypeAlias :: Bool,+    pythonModuleMetadataUsesDataclass :: Bool,+    pythonModuleMetadataUsesDecimal :: Bool,+    pythonModuleMetadataUsesEither :: Bool,+    pythonModuleMetadataUsesEnum :: Bool,+    pythonModuleMetadataUsesFrozenDict :: Bool,+    pythonModuleMetadataUsesFrozenList :: Bool,+    pythonModuleMetadataUsesFrozenSet :: Bool,+    pythonModuleMetadataUsesGeneric :: Bool,+    pythonModuleMetadataUsesJust :: Bool,+    pythonModuleMetadataUsesLeft :: Bool,+    pythonModuleMetadataUsesMaybe :: Bool,+    pythonModuleMetadataUsesName :: Bool,+    pythonModuleMetadataUsesNode :: Bool,+    pythonModuleMetadataUsesNothing :: Bool,+    pythonModuleMetadataUsesRight :: Bool,+    pythonModuleMetadataUsesTypeVar :: Bool}+  deriving (Eq, Ord, Read, Show)++_PythonModuleMetadata = Core.Name "hydra.python.environment.PythonModuleMetadata"++_PythonModuleMetadata_namespaces = Core.Name "namespaces"++_PythonModuleMetadata_typeVariables = Core.Name "typeVariables"++_PythonModuleMetadata_usesAnnotated = Core.Name "usesAnnotated"++_PythonModuleMetadata_usesCallable = Core.Name "usesCallable"++_PythonModuleMetadata_usesCast = Core.Name "usesCast"++_PythonModuleMetadata_usesLruCache = Core.Name "usesLruCache"++_PythonModuleMetadata_usesTypeAlias = Core.Name "usesTypeAlias"++_PythonModuleMetadata_usesDataclass = Core.Name "usesDataclass"++_PythonModuleMetadata_usesDecimal = Core.Name "usesDecimal"++_PythonModuleMetadata_usesEither = Core.Name "usesEither"++_PythonModuleMetadata_usesEnum = Core.Name "usesEnum"++_PythonModuleMetadata_usesFrozenDict = Core.Name "usesFrozenDict"++_PythonModuleMetadata_usesFrozenList = Core.Name "usesFrozenList"++_PythonModuleMetadata_usesFrozenSet = Core.Name "usesFrozenSet"++_PythonModuleMetadata_usesGeneric = Core.Name "usesGeneric"++_PythonModuleMetadata_usesJust = Core.Name "usesJust"++_PythonModuleMetadata_usesLeft = Core.Name "usesLeft"++_PythonModuleMetadata_usesMaybe = Core.Name "usesMaybe"++_PythonModuleMetadata_usesName = Core.Name "usesName"++_PythonModuleMetadata_usesNode = Core.Name "usesNode"++_PythonModuleMetadata_usesNothing = Core.Name "usesNothing"++_PythonModuleMetadata_usesRight = Core.Name "usesRight"++_PythonModuleMetadata_usesTypeVar = Core.Name "usesTypeVar"++-- | Combined graph and metadata state for Python code generation+data PyGraph =+  PyGraph {+    -- | The Hydra graph being processed+    pyGraphGraph :: Graph.Graph,+    -- | Accumulated module metadata+    pyGraphMetadata :: PythonModuleMetadata}++_PyGraph = Core.Name "hydra.python.environment.PyGraph"++_PyGraph_graph = Core.Name "graph"++_PyGraph_metadata = Core.Name "metadata"
+ src/main/haskell/Hydra/Python/Language.hs view
@@ -0,0 +1,172 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Language constraints and reserved words for Python 3++module Hydra.Python.Language where++import qualified Hydra.Ast as Ast+import qualified Hydra.Classes as Classes+import qualified Hydra.Coders as Coders+import qualified Hydra.Core as Core+import qualified Hydra.Error.Checking as Checking+import qualified Hydra.Error.Core as ErrorCore+import qualified Hydra.Error.Packaging as ErrorPackaging+import qualified Hydra.Errors as Errors+import qualified Hydra.File as File+import qualified Hydra.Graph as Graph+import qualified Hydra.Json.Model as Model+import qualified Hydra.Lexical as Lexical+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Query as Query+import qualified Hydra.Relational as Relational+import qualified Hydra.Tabular as Tabular+import qualified Hydra.Testing as Testing+import qualified Hydra.Topology as Topology+import qualified Hydra.Typed as Typed+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import qualified Hydra.Validation as Validation+import qualified Hydra.Variants as Variants+import 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 Python 3+pythonLanguage :: Coders.Language+pythonLanguage =+    Coders.Language {+      Coders.languageName = (Coders.LanguageName "hydra.python"),+      Coders.languageConstraints = Coders.LanguageConstraints {+        Coders.languageConstraintsLiteralVariants = literalVariants,+        Coders.languageConstraintsFloatTypes = floatTypes,+        Coders.languageConstraintsIntegerTypes = integerTypes,+        Coders.languageConstraintsTermVariants = termVariants,+        Coders.languageConstraintsTypeVariants = typeVariants,+        Coders.languageConstraintsTypes = typePredicate},+      Coders.languageSupportedFeatures = (Sets.fromList [+        Coders.LanguageFeatureNestedPolymorphicLetBindings]),+      Coders.languageCaseConventions = Coders.CaseConventions {+        Coders.caseConventionsConstant = Util.CaseConventionUpperSnake,+        Coders.caseConventionsDirectory = Util.CaseConventionLowerSnake,+        Coders.caseConventionsEnumValue = Util.CaseConventionUpperSnake,+        Coders.caseConventionsField = Util.CaseConventionLowerSnake,+        Coders.caseConventionsFile = Util.CaseConventionLowerSnake,+        Coders.caseConventionsModule = Util.CaseConventionLowerSnake,+        Coders.caseConventionsTerm = Util.CaseConventionLowerSnake,+        Coders.caseConventionsTermVariable = Util.CaseConventionLowerSnake,+        Coders.caseConventionsType = Util.CaseConventionPascal,+        Coders.caseConventionsTypeVariable = Util.CaseConventionPascal},+      Coders.languageDefaultFileExtension = (File.FileExtension "py")}+  where+    literalVariants =+        Sets.fromList [+          Variants.LiteralVariantBinary,+          Variants.LiteralVariantBoolean,+          Variants.LiteralVariantDecimal,+          Variants.LiteralVariantFloat,+          Variants.LiteralVariantInteger,+          Variants.LiteralVariantString]+    floatTypes = Sets.fromList [+      Core.FloatTypeFloat64]+    integerTypes = Sets.fromList [+      Core.IntegerTypeBigint]+    termVariants =+        Sets.fromList [+          Variants.TermVariantAnnotated,+          Variants.TermVariantApplication,+          Variants.TermVariantEither,+          Variants.TermVariantCases,+          Variants.TermVariantLambda,+          Variants.TermVariantProject,+          Variants.TermVariantUnwrap,+          Variants.TermVariantLet,+          Variants.TermVariantList,+          Variants.TermVariantLiteral,+          Variants.TermVariantMap,+          Variants.TermVariantOptional,+          Variants.TermVariantPair,+          Variants.TermVariantRecord,+          Variants.TermVariantSet,+          Variants.TermVariantTypeApplication,+          Variants.TermVariantTypeLambda,+          Variants.TermVariantInject,+          Variants.TermVariantUnit,+          Variants.TermVariantVariable,+          Variants.TermVariantWrap]+    typeVariants =+        Sets.fromList [+          Variants.TypeVariantAnnotated,+          Variants.TypeVariantApplication,+          Variants.TypeVariantEither,+          Variants.TypeVariantEffect,+          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 Python+pythonReservedWords :: S.Set String+pythonReservedWords =+    Sets.fromList (Lists.concat [+      pythonKeywords,+      pythonBuiltInFunctions,+      hydraPythonKeywords])+  where+    pythonKeywords =+        [+          "False",+          "None",+          "True",+          "and",+          "as",+          "assert",+          "async",+          "await",+          "break",+          "class",+          "continue",+          "def",+          "del",+          "elif",+          "else",+          "except",+          "finally",+          "for",+          "from",+          "global",+          "if",+          "import",+          "in",+          "is",+          "lambda",+          "nonlocal",+          "not",+          "or",+          "pass",+          "raise",+          "return",+          "try",+          "while",+          "with",+          "yield"]+    pythonBuiltInFunctions = [+      "range"]+    hydraPythonKeywords =+        [+          "Node",+          "FrozenDict"]
+ src/main/haskell/Hydra/Python/Names.hs view
@@ -0,0 +1,194 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Python naming utilities: encoding Hydra names as Python names++module Hydra.Python.Names where++import qualified Hydra.Ast as Ast+import qualified Hydra.Classes as Classes+import qualified Hydra.Coders as Coders+import qualified Hydra.Core as Core+import qualified Hydra.Error.Checking as Checking+import qualified Hydra.Error.Core as ErrorCore+import qualified Hydra.Error.Packaging as ErrorPackaging+import qualified Hydra.Errors as Errors+import qualified Hydra.Formatting as Formatting+import qualified Hydra.Graph as Graph+import qualified Hydra.Json.Model as Model+import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Names as Names+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Python.Environment as Environment+import qualified Hydra.Python.Language as Language+import qualified Hydra.Python.Serde as Serde+import qualified Hydra.Python.Syntax as Syntax+import qualified Hydra.Query as Query+import qualified Hydra.Relational as Relational+import qualified Hydra.Tabular as Tabular+import qualified Hydra.Testing as Testing+import qualified Hydra.Topology as Topology+import qualified Hydra.Typed as Typed+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import qualified Hydra.Validation as Validation+import qualified Hydra.Variants as Variants+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci+import qualified Data.Map as M++-- | Generate a constant name for a field definition+encodeConstantForFieldName :: t0 -> t1 -> Core.Name -> Syntax.Name+encodeConstantForFieldName env tname fname =+    Syntax.Name (Formatting.convertCase Util.CaseConventionCamel Util.CaseConventionUpperSnake (Strings.intercalate "_" (Strings.splitOn "-" (Core.unName fname))))++-- | Generate a constant name for a type definition+encodeConstantForTypeName :: t0 -> t1 -> Syntax.Name+encodeConstantForTypeName env tname = Syntax.Name "TYPE_"++-- | Encode a name as a Python enum value (UPPER_SNAKE case)+encodeEnumValue :: Environment.PythonEnvironment -> Core.Name -> Syntax.Name+encodeEnumValue = encodeName False Util.CaseConventionUpperSnake++-- | Encode a name as a Python field name (lower_snake case)+encodeFieldName :: Environment.PythonEnvironment -> Core.Name -> Syntax.Name+encodeFieldName env fname = encodeName False Util.CaseConventionLowerSnake env fname++-- | Encode a Hydra name as a Python name+encodeName :: Bool -> Util.CaseConvention -> Environment.PythonEnvironment -> Core.Name -> Syntax.Name+encodeName isQualified conv env name =++      let namespaces = Environment.pythonEnvironmentNamespaces env+          focusPair = Util.moduleNamesFocus namespaces+          focusNs = Pairs.first focusPair+          boundVars = Pairs.second (Environment.pythonEnvironmentBoundTypeVariables env)+          qualName = Names.qualifyName name+          mns = Util.qualifiedNameModuleName qualName+          local = Util.qualifiedNameLocal qualName+          pyLocal = sanitizePythonName (Formatting.convertCase Util.CaseConventionCamel conv local)+          pyNs = \nsVal -> encodeNamespaceStringWithOverrides nsVal+      in (Logic.ifElse isQualified (Optionals.cases (Maps.lookup name boundVars) (Logic.ifElse (Equality.equal mns (Just focusNs)) (Syntax.Name (Logic.ifElse useFutureAnnotations pyLocal (Serde.escapePythonString True pyLocal))) (Optionals.cases mns (Syntax.Name pyLocal) (\nsVal -> Syntax.Name (Strings.cat2 (pyNs nsVal) (Strings.cat2 "." pyLocal))))) (\n -> n)) (Syntax.Name pyLocal))++-- | Encode a name as a fully qualified Python name+encodeNameQualified :: Environment.PythonEnvironment -> Core.Name -> Syntax.Name+encodeNameQualified env name =++      let namespaces = Environment.pythonEnvironmentNamespaces env+          focusPair = Util.moduleNamesFocus namespaces+          focusNs = Pairs.first focusPair+          boundVars = Pairs.second (Environment.pythonEnvironmentBoundTypeVariables env)+          qualName = Names.qualifyName name+          mns = Util.qualifiedNameModuleName qualName+          local = Util.qualifiedNameLocal qualName+          pyNs = \nsVal -> encodeNamespaceStringWithOverrides nsVal+      in (Optionals.cases (Maps.lookup name boundVars) (Logic.ifElse (Equality.equal mns (Just focusNs)) (Syntax.Name (Logic.ifElse useFutureAnnotations local (Serde.escapePythonString True local))) (Optionals.cases mns (Syntax.Name (sanitizePythonName local)) (\nsVal -> Syntax.Name (Strings.cat2 (pyNs nsVal) (Strings.cat2 "." (sanitizePythonName local)))))) (\n -> n))++-- | Encode a namespace as a Python dotted name+encodeNamespace :: Packaging.ModuleName -> Syntax.DottedName+encodeNamespace nsVal =+    Syntax.DottedName (Lists.map (\part -> Syntax.Name (Formatting.convertCase Util.CaseConventionCamel Util.CaseConventionLowerSnake part)) (Strings.splitOn "." (Packaging.unModuleName nsVal)))++-- | Convert a ModuleName to its Python dotted import string, routing overlay modules to hydra.overlay.python.*+encodeNamespaceStringWithOverrides :: Packaging.ModuleName -> String+encodeNamespaceStringWithOverrides nsVal =+    Optionals.fromOptional (Strings.intercalate "." (Lists.map (Formatting.convertCase Util.CaseConventionCamel Util.CaseConventionLowerSnake) (Strings.splitOn "." (Packaging.unModuleName nsVal)))) (Maps.lookup nsVal overlayPythonModuleAliases)++-- | Encode a namespace as a Python dotted name, routing overlay modules to their hydra.overlay.python.* paths+encodeNamespaceWithOverrides :: Packaging.ModuleName -> Syntax.DottedName+encodeNamespaceWithOverrides nsVal =+    Syntax.DottedName (Lists.map (\part -> Syntax.Name part) (Strings.splitOn "." (encodeNamespaceStringWithOverrides nsVal)))++-- | Encode a type variable name (capitalized)+encodeTypeVariable :: Core.Name -> Syntax.Name+encodeTypeVariable name = Syntax.Name (Formatting.capitalize (Core.unName name))++-- | Alias map routing DSL-declared module names to their hydra.overlay.python.* import strings+overlayPythonModuleAliases :: M.Map Packaging.ModuleName String+overlayPythonModuleAliases =+    Maps.fromList [+      (Packaging.ModuleName "hydra.test.testEnv", "hydra.overlay.python.test_env")]++-- | Sanitize a string to be a valid Python name+sanitizePythonName :: String -> String+sanitizePythonName = Formatting.sanitizeWithUnderscores Language.pythonReservedWords++-- | Reference a term variable as a Python expression+termVariableReference :: Environment.PythonEnvironment -> Core.Name -> Syntax.Expression+termVariableReference = variableReference Util.CaseConventionLowerSnake False++-- | Reference a type variable as a Python expression+typeVariableReference :: Environment.PythonEnvironment -> Core.Name -> Syntax.Expression+typeVariableReference = variableReference Util.CaseConventionPascal False++-- | Whether to use __future__ annotations for forward references+useFutureAnnotations :: Bool+useFutureAnnotations = True++-- | Reference a variable as a Python expression+variableReference :: Util.CaseConvention -> Bool -> Environment.PythonEnvironment -> Core.Name -> Syntax.Expression+variableReference conv quoted env name =++      let pyName = encodeName True conv env name+          unquoted =+                  Syntax.ExpressionSimple (Syntax.Disjunction [+                    Syntax.Conjunction [+                      Syntax.InversionSimple (Syntax.Comparison {+                        Syntax.comparisonLhs = Syntax.BitwiseOr {+                          Syntax.bitwiseOrLhs = Nothing,+                          Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                            Syntax.bitwiseXorLhs = Nothing,+                            Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                              Syntax.bitwiseAndLhs = Nothing,+                              Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                                Syntax.shiftExpressionLhs = Nothing,+                                Syntax.shiftExpressionRhs = Syntax.Sum {+                                  Syntax.sumLhs = Nothing,+                                  Syntax.sumRhs = Syntax.Term {+                                    Syntax.termLhs = Nothing,+                                    Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                                      Syntax.powerLhs = Syntax.AwaitPrimary {+                                        Syntax.awaitPrimaryAwait = False,+                                        Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName pyName))},+                                      Syntax.powerRhs = Nothing}))}}}}}},+                        Syntax.comparisonRhs = []})]])+          namespaces = Environment.pythonEnvironmentNamespaces env+          focusPair = Util.moduleNamesFocus namespaces+          focusNs = Pairs.first focusPair+          mns = Names.moduleNameOf name+          sameNamespace = Optionals.cases mns False (\ns -> Equality.equal ns focusNs)+      in (Logic.ifElse (Logic.and quoted sameNamespace) (Syntax.ExpressionSimple (Syntax.Disjunction [+        Syntax.Conjunction [+          Syntax.InversionSimple (Syntax.Comparison {+            Syntax.comparisonLhs = Syntax.BitwiseOr {+              Syntax.bitwiseOrLhs = Nothing,+              Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                Syntax.bitwiseXorLhs = Nothing,+                Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                  Syntax.bitwiseAndLhs = Nothing,+                  Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                    Syntax.shiftExpressionLhs = Nothing,+                    Syntax.shiftExpressionRhs = Syntax.Sum {+                      Syntax.sumLhs = Nothing,+                      Syntax.sumRhs = Syntax.Term {+                        Syntax.termLhs = Nothing,+                        Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                          Syntax.powerLhs = Syntax.AwaitPrimary {+                            Syntax.awaitPrimaryAwait = False,+                            Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomString (Syntax.String_ {+                              Syntax.stringValue = (Syntax.unName pyName),+                              Syntax.stringPrefix = Nothing,+                              Syntax.stringQuoteStyle = Syntax.QuoteStyleDouble})))},+                          Syntax.powerRhs = Nothing}))}}}}}},+            Syntax.comparisonRhs = []})]])) unquoted)++-- | Generate a variant name from type name and field name+variantName :: Bool -> Environment.PythonEnvironment -> Core.Name -> Core.Name -> Syntax.Name+variantName isQualified env tname fname =+    encodeName isQualified Util.CaseConventionPascal env (Core.Name (Strings.cat2 (Core.unName tname) (Formatting.capitalize (Core.unName fname))))
+ src/main/haskell/Hydra/Python/Serde.hs view
@@ -0,0 +1,1076 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Python serializer: converts Python AST to concrete syntax++module Hydra.Python.Serde where++import qualified Hydra.Ast as Ast+import qualified Hydra.Classes as Classes+import qualified Hydra.Coders as Coders+import qualified Hydra.Constants as Constants+import qualified Hydra.Core as Core+import qualified Hydra.Error.Checking as Checking+import qualified Hydra.Error.Core as ErrorCore+import qualified Hydra.Error.Packaging as ErrorPackaging+import qualified Hydra.Errors as Errors+import qualified Hydra.Graph as Graph+import qualified Hydra.Json.Model as Model+import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Names as Names+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Python.Syntax as Syntax+import qualified Hydra.Query as Query+import qualified Hydra.Relational as Relational+import qualified Hydra.Serialization as Serialization+import qualified Hydra.Show.Docs as Docs+import qualified Hydra.Tabular as Tabular+import qualified Hydra.Testing as Testing+import qualified Hydra.Topology as Topology+import qualified Hydra.Typed as Typed+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import qualified Hydra.Validation as Validation+import qualified Hydra.Variants as Variants+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++-- | Serialize an annotated RHS+annotatedRhsToExpr :: Syntax.AnnotatedRhs -> Ast.Expr+annotatedRhsToExpr arhs =+    Serialization.spaceSep [+      Serialization.cst "=",+      case arhs of+        Syntax.AnnotatedRhsStar v0 -> Serialization.commaSep Serialization.inlineStyle (Lists.map starExpressionToExpr v0)+        Syntax.AnnotatedRhsYield _ -> Serialization.cst "yield ..."]++-- | Serialize an annotated statement (with optional doc comment)+annotatedStatementToExpr :: Syntax.AnnotatedStatement -> Ast.Expr+annotatedStatementToExpr as_ =++      let doc_ = Syntax.annotatedStatementComment as_+          stmt = Syntax.annotatedStatementStatement as_+      in (Serialization.newlineSep [+        Serialization.cst (toPythonComments doc_),+        (statementToExpr stmt)])++-- | Serialize a type annotation+annotationToExpr :: Syntax.Annotation -> Ast.Expr+annotationToExpr ann =+    Serialization.spaceSep [+      Serialization.cst ":",+      (expressionToExpr (Syntax.unAnnotation ann))]++-- | Serialize function arguments+argsToExpr :: Syntax.Args -> Ast.Expr+argsToExpr args =++      let pos = Syntax.argsPositional args+          ks = Syntax.argsKwargOrStarred args+          kss = Syntax.argsKwargOrDoubleStarred args+      in (Serialization.commaSepAdaptive (Lists.concat [+        Lists.map posArgToExpr pos,+        (Lists.map kwargOrStarredToExpr ks),+        (Lists.map kwargOrDoubleStarredToExpr kss)]))++-- | Serialize an assignment expression (walrus operator)+assignmentExpressionToExpr :: Syntax.AssignmentExpression -> Ast.Expr+assignmentExpressionToExpr ae =++      let name = Syntax.assignmentExpressionName ae+          expr = Syntax.assignmentExpressionExpression ae+      in (Serialization.spaceSep [+        nameToExpr name,+        (Serialization.cst ":="),+        (expressionToExpr expr)])++-- | Serialize an assignment+assignmentToExpr :: Syntax.Assignment -> Ast.Expr+assignmentToExpr a =+    case a of+      Syntax.AssignmentTyped v0 -> typedAssignmentToExpr v0+      Syntax.AssignmentUntyped v0 -> untypedAssignmentToExpr v0+      Syntax.AssignmentAug _ -> Serialization.cst "... += ..."++-- | Serialize a Python atom (literal or basic expression)+atomToExpr :: Syntax.Atom -> Ast.Expr+atomToExpr atom =+    case atom of+      Syntax.AtomDict v0 -> dictToExpr v0+      Syntax.AtomDictcomp _ -> Serialization.cst "{...}"+      Syntax.AtomEllipsis -> Serialization.cst "..."+      Syntax.AtomFalse -> Serialization.cst "False"+      Syntax.AtomGenexp _ -> Serialization.cst "(...)"+      Syntax.AtomGroup v0 -> groupToExpr v0+      Syntax.AtomList v0 -> listToExpr v0+      Syntax.AtomListcomp _ -> Serialization.cst "[...]"+      Syntax.AtomName v0 -> nameToExpr v0+      Syntax.AtomNone -> Serialization.cst "None"+      Syntax.AtomNumber v0 -> numberToExpr v0+      Syntax.AtomSet v0 -> setToExpr v0+      Syntax.AtomSetcomp _ -> Serialization.cst "{...}"+      Syntax.AtomString v0 -> stringToExpr v0+      Syntax.AtomTrue -> Serialization.cst "True"+      Syntax.AtomTuple v0 -> tupleToExpr v0++-- | Serialize an attribute access+attributeToExpr :: Syntax.Attribute -> Ast.Expr+attributeToExpr attr = Serialization.dotSep (Lists.map nameToExpr (Syntax.unAttribute attr))++-- | Serialize an await primary expression+awaitPrimaryToExpr :: Syntax.AwaitPrimary -> Ast.Expr+awaitPrimaryToExpr ap =++      let await_ = Syntax.awaitPrimaryAwait ap+          primary = Syntax.awaitPrimaryPrimary ap+      in (Logic.ifElse await_ (Serialization.spaceSep [+        Serialization.cst "await",+        (primaryToExpr primary)]) (primaryToExpr primary))++-- | Serialize a bitwise AND expression+bitwiseAndToExpr :: Syntax.BitwiseAnd -> Ast.Expr+bitwiseAndToExpr band =++      let lhs = Syntax.bitwiseAndLhs band+          rhs = Syntax.bitwiseAndRhs band+      in (Serialization.spaceSep (Optionals.cat [+        Optionals.map (\l -> Serialization.spaceSep [+          bitwiseAndToExpr l,+          (Serialization.cst "&")]) lhs,+        (Just (shiftExpressionToExpr rhs))]))++-- | Serialize a bitwise OR expression+bitwiseOrToExpr :: Syntax.BitwiseOr -> Ast.Expr+bitwiseOrToExpr bor =++      let lhs = Syntax.bitwiseOrLhs bor+          rhs = Syntax.bitwiseOrRhs bor+      in (Serialization.spaceSep (Optionals.cat [+        Optionals.map (\l -> Serialization.spaceSep [+          bitwiseOrToExpr l,+          (Serialization.cst "|")]) lhs,+        (Just (bitwiseXorToExpr rhs))]))++-- | Serialize a bitwise XOR expression+bitwiseXorToExpr :: Syntax.BitwiseXor -> Ast.Expr+bitwiseXorToExpr bxor =++      let lhs = Syntax.bitwiseXorLhs bxor+          rhs = Syntax.bitwiseXorRhs bxor+      in (Serialization.spaceSep (Optionals.cat [+        Optionals.map (\l -> Serialization.spaceSep [+          bitwiseXorToExpr l,+          (Serialization.cst "^")]) lhs,+        (Just (bitwiseAndToExpr rhs))]))++-- | Serialize a block+blockToExpr :: Syntax.Block -> Ast.Expr+blockToExpr b =+    case b of+      Syntax.BlockIndented v0 -> Serialization.tabIndentDoubleSpace (Lists.map (\stmts -> Serialization.newlineSep (Lists.map statementToExpr stmts)) v0)+      Syntax.BlockSimple v0 -> Serialization.semicolonSep (Lists.map simpleStatementToExpr v0)++-- | Serialize a capture pattern+capturePatternToExpr :: Syntax.CapturePattern -> Ast.Expr+capturePatternToExpr cp = patternCaptureTargetToExpr (Syntax.unCapturePattern cp)++-- | Serialize a case block+caseBlockToExpr :: Syntax.CaseBlock -> Ast.Expr+caseBlockToExpr cb =++      let patterns = Syntax.caseBlockPatterns cb+          guard = Syntax.caseBlockGuard cb+          body = Syntax.caseBlockBody cb+      in (Serialization.newlineSep [+        Serialization.noSep [+          Serialization.spaceSep (Optionals.cat [+            Just (Serialization.cst "case"),+            (Just (patternsToExpr patterns)),+            (Optionals.map guardToExpr guard)]),+          (Serialization.cst ":")],+        (blockToExpr body)])++-- | Serialize a class definition+classDefinitionToExpr :: Syntax.ClassDefinition -> Ast.Expr+classDefinitionToExpr cd =++      let decs = Syntax.classDefinitionDecorators cd+          name = Syntax.classDefinitionName cd+          args = Syntax.classDefinitionArguments cd+          body = Syntax.classDefinitionBody cd+          argPart =+                  Optionals.map (\a -> Serialization.noSep [+                    Serialization.cst "(",+                    (argsToExpr a),+                    (Serialization.cst ")")]) args+      in (Serialization.newlineSep (Optionals.cat [+        Optionals.map decoratorsToExpr decs,+        (Just (Serialization.noSep (Optionals.cat [+          Just (Serialization.spaceSep [+            Serialization.cst "class",+            (nameToExpr name)]),+          argPart,+          (Just (Serialization.cst ":"))]))),+        (Just (blockToExpr body))]))++-- | Serialize a class pattern+classPatternToExpr :: Syntax.ClassPattern -> Ast.Expr+classPatternToExpr cp =++      let noa = Syntax.classPatternNameOrAttribute cp+          pos = Syntax.classPatternPositionalPatterns cp+          kw = Syntax.classPatternKeywordPatterns cp+      in (Serialization.noSep (Optionals.cat [+        Just (nameOrAttributeToExpr noa),+        (Just (Serialization.cst "(")),+        (Optionals.map positionalPatternsToExpr pos),+        (Optionals.map keywordPatternsToExpr kw),+        (Just (Serialization.cst ")"))]))++-- | Serialize a closed pattern+closedPatternToExpr :: Syntax.ClosedPattern -> Ast.Expr+closedPatternToExpr cp =+    case cp of+      Syntax.ClosedPatternLiteral _ -> Serialization.cst "..."+      Syntax.ClosedPatternCapture v0 -> capturePatternToExpr v0+      Syntax.ClosedPatternWildcard -> Serialization.cst "_"+      Syntax.ClosedPatternValue v0 -> valuePatternToExpr v0+      Syntax.ClosedPatternGroup _ -> Serialization.cst "(...)"+      Syntax.ClosedPatternSequence _ -> Serialization.cst "[...]"+      Syntax.ClosedPatternMapping _ -> Serialization.cst "{...}"+      Syntax.ClosedPatternClass v0 -> classPatternToExpr v0++-- | Serialize a (compare-op, bitwise-or) pair as `<op> <rhs>`+compareOpBitwiseOrPairToExpr :: Syntax.CompareOpBitwiseOrPair -> Ast.Expr+compareOpBitwiseOrPairToExpr pair =+    Serialization.spaceSep [+      Serialization.cst (compareOpToString (Syntax.compareOpBitwiseOrPairOperator pair)),+      (bitwiseOrToExpr (Syntax.compareOpBitwiseOrPairRhs pair))]++-- | Render a Python comparison operator to its source-code form+compareOpToString :: Syntax.CompareOp -> String+compareOpToString op =+    case op of+      Syntax.CompareOpEq -> "=="+      Syntax.CompareOpNoteq -> "!="+      Syntax.CompareOpLte -> "<="+      Syntax.CompareOpLt -> "<"+      Syntax.CompareOpGte -> ">="+      Syntax.CompareOpGt -> ">"+      Syntax.CompareOpNotin -> "not in"+      Syntax.CompareOpIn -> "in"+      Syntax.CompareOpIsnot -> "is not"+      Syntax.CompareOpIs -> "is"++-- | Serialize a comparison expression: `<lhs>` if rhs is empty, otherwise `<lhs> <op1> <rhs1> <op2> <rhs2> ...`+comparisonToExpr :: Syntax.Comparison -> Ast.Expr+comparisonToExpr cmp =++      let lhs = Syntax.comparisonLhs cmp+          rhs = Syntax.comparisonRhs cmp+      in (Logic.ifElse (Lists.null rhs) (bitwiseOrToExpr lhs) (Serialization.spaceSep (Lists.cons (bitwiseOrToExpr lhs) (Lists.map compareOpBitwiseOrPairToExpr rhs))))++-- | Serialize a compound (multi-line) Python statement+compoundStatementToExpr :: Syntax.CompoundStatement -> Ast.Expr+compoundStatementToExpr cs =+    case cs of+      Syntax.CompoundStatementFunction v0 -> functionDefinitionToExpr v0+      Syntax.CompoundStatementIf _ -> Serialization.cst "if ..."+      Syntax.CompoundStatementClassDef v0 -> classDefinitionToExpr v0+      Syntax.CompoundStatementWith _ -> Serialization.cst "with ..."+      Syntax.CompoundStatementFor _ -> Serialization.cst "for ..."+      Syntax.CompoundStatementTry _ -> Serialization.cst "try ..."+      Syntax.CompoundStatementWhile v0 -> whileStatementToExpr v0+      Syntax.CompoundStatementMatch v0 -> matchStatementToExpr v0++-- | Serialize a conditional expression (ternary)+conditionalToExpr :: Syntax.Conditional -> Ast.Expr+conditionalToExpr c =++      let body = Syntax.conditionalBody c+          cond = Syntax.conditionalIf c+          elseExpr = Syntax.conditionalElse c+      in (Serialization.spaceSep [+        disjunctionToExpr body,+        (Serialization.cst "if"),+        (disjunctionToExpr cond),+        (Serialization.cst "else"),+        (expressionToExpr elseExpr)])++-- | Serialize a conjunction (and expression)+conjunctionToExpr :: Syntax.Conjunction -> Ast.Expr+conjunctionToExpr c =+    Serialization.symbolSep "and" Serialization.inlineStyle (Lists.map inversionToExpr (Syntax.unConjunction c))++-- | Serialize decorators+decoratorsToExpr :: Syntax.Decorators -> Ast.Expr+decoratorsToExpr decs =+    Serialization.newlineSep (Lists.map (\ne -> Serialization.noSep [+      Serialization.cst "@",+      (namedExpressionToExpr ne)]) (Syntax.unDecorators decs))++-- | Serialize a Python dictionary+dictToExpr :: Syntax.Dict -> Ast.Expr+dictToExpr d =+    Serialization.curlyBracesList Nothing Serialization.halfBlockStyle (Lists.map doubleStarredKvpairToExpr (Syntax.unDict d))++-- | Serialize a disjunction (or expression)+disjunctionToExpr :: Syntax.Disjunction -> Ast.Expr+disjunctionToExpr d =+    Serialization.symbolSep "or" Serialization.inlineStyle (Lists.map conjunctionToExpr (Syntax.unDisjunction d))++-- | Serialize a dotted as name+dottedAsNameToExpr :: Syntax.DottedAsName -> Ast.Expr+dottedAsNameToExpr dan =++      let name = Syntax.dottedAsNameName dan+          alias = Syntax.dottedAsNameAs dan+      in (Serialization.spaceSep (Optionals.cat [+        Just (dottedNameToExpr name),+        (Optionals.map (\a -> Serialization.spaceSep [+          Serialization.cst "as",+          (nameToExpr a)]) alias)]))++-- | Serialize a dotted name (e.g., module.submodule)+dottedNameToExpr :: Syntax.DottedName -> Ast.Expr+dottedNameToExpr dn = Serialization.cst (Strings.intercalate "." (Lists.map (\n -> Syntax.unName n) (Syntax.unDottedName dn)))++-- | Serialize a double-starred key-value pair+doubleStarredKvpairToExpr :: Syntax.DoubleStarredKvpair -> Ast.Expr+doubleStarredKvpairToExpr dskv =+    case dskv of+      Syntax.DoubleStarredKvpairPair v0 -> kvpairToExpr v0+      Syntax.DoubleStarredKvpairStarred v0 -> Serialization.noSep [+        Serialization.cst "**",+        (bitwiseOrToExpr v0)]++-- | Escape special characters in a Python string and wrap in quotes+escapePythonString :: Bool -> String -> String+escapePythonString doubleQuoted s =++      let replace = \old -> \new -> \str -> Strings.intercalate new (Strings.splitOn old str)+          s1 = replace "\\" "\\\\" s+          s2 = replace "\NUL" "\\x00" s1+          s3 = replace "\n" "\\n" s2+          s4 = replace "\t" "\\t" s3+          s5 = replace "\r" "\\r" s4+          escaped = Logic.ifElse doubleQuoted (replace "\"" "\\\"" s5) (replace "'" "\\'" s5)+          quote = Logic.ifElse doubleQuoted "\"" "'"+      in (Strings.cat2 quote (Strings.cat2 escaped quote))++-- | Serialize a Python expression+expressionToExpr :: Syntax.Expression -> Ast.Expr+expressionToExpr expr =+    case expr of+      Syntax.ExpressionSimple v0 -> disjunctionToExpr v0+      Syntax.ExpressionConditional v0 -> conditionalToExpr v0+      Syntax.ExpressionLambda v0 -> lambdaToExpr v0++-- | Serialize a factor expression+factorToExpr :: Syntax.Factor -> Ast.Expr+factorToExpr f =+    case f of+      Syntax.FactorPositive v0 -> Serialization.noSep [+        Serialization.cst "+",+        (factorToExpr v0)]+      Syntax.FactorNegative v0 -> Serialization.noSep [+        Serialization.cst "-",+        (factorToExpr v0)]+      Syntax.FactorComplement v0 -> Serialization.noSep [+        Serialization.cst "~",+        (factorToExpr v0)]+      Syntax.FactorSimple v0 -> powerToExpr v0++-- | Serialize a raw function definition+functionDefRawToExpr :: Syntax.FunctionDefRaw -> Ast.Expr+functionDefRawToExpr fdr =++      let async_ = Syntax.functionDefRawAsync fdr+          name = Syntax.functionDefRawName fdr+          tparams = Syntax.functionDefRawTypeParams fdr+          params = Syntax.functionDefRawParams fdr+          retType = Syntax.functionDefRawReturnType fdr+          block = Syntax.functionDefRawBlock fdr+          asyncKw = Logic.ifElse async_ (Just (Serialization.cst "async")) Nothing+          tparamPart =+                  Logic.ifElse (Lists.null tparams) Nothing (Just (Serialization.bracketList Serialization.inlineStyle (Lists.map typeParameterToExpr tparams)))+          paramPart = Optionals.map parametersToExpr params+          retPart =+                  Optionals.map (\t -> Serialization.spaceSep [+                    Serialization.cst "->",+                    (expressionToExpr t)]) retType+      in (Serialization.newlineSep [+        Serialization.noSep [+          Serialization.spaceSep (Optionals.cat [+            asyncKw,+            (Just (Serialization.cst "def")),+            (Just (Serialization.noSep (Optionals.cat [+              Just (nameToExpr name),+              tparamPart,+              (Just (Serialization.cst "(")),+              paramPart,+              (Just (Serialization.cst ")"))]))),+            retPart]),+          (Serialization.cst ":")],+        (blockToExpr block)])++-- | Serialize a function definition+functionDefinitionToExpr :: Syntax.FunctionDefinition -> Ast.Expr+functionDefinitionToExpr fd =++      let decs = Syntax.functionDefinitionDecorators fd+          raw = Syntax.functionDefinitionRaw fd+      in (Serialization.newlineSep (Optionals.cat [+        Optionals.map decoratorsToExpr decs,+        (Just (functionDefRawToExpr raw))]))++-- | Serialize a parenthesized group+groupToExpr :: Syntax.Group -> Ast.Expr+groupToExpr g =+    case g of+      Syntax.GroupExpression v0 -> namedExpressionToExpr v0+      Syntax.GroupYield _ -> Serialization.cst "(yield ...)"++-- | Serialize a guard clause+guardToExpr :: Syntax.Guard -> Ast.Expr+guardToExpr g =+    Serialization.spaceSep [+      Serialization.cst "if",+      (namedExpressionToExpr (Syntax.unGuard g))]++-- | Serialize an import from as name+importFromAsNameToExpr :: Syntax.ImportFromAsName -> Ast.Expr+importFromAsNameToExpr ifan =++      let name = Syntax.importFromAsNameName ifan+          alias = Syntax.importFromAsNameAs ifan+      in (Optionals.cases alias (nameToExpr name) (\a -> Serialization.spaceSep [+        nameToExpr name,+        (Serialization.cst "as"),+        (nameToExpr a)]))++-- | Serialize import from targets+importFromTargetsToExpr :: Syntax.ImportFromTargets -> Ast.Expr+importFromTargetsToExpr t =+    case t of+      Syntax.ImportFromTargetsSimple v0 -> Serialization.commaSep Serialization.inlineStyle (Lists.map importFromAsNameToExpr v0)+      Syntax.ImportFromTargetsParens v0 -> Serialization.noSep [+        Serialization.cst "(",+        (Serialization.commaSep Serialization.inlineStyle (Lists.map importFromAsNameToExpr v0)),+        (Serialization.cst ")")]+      Syntax.ImportFromTargetsStar -> Serialization.cst "*"++-- | Serialize an import from statement+importFromToExpr :: Syntax.ImportFrom -> Ast.Expr+importFromToExpr if_ =++      let prefixes = Syntax.importFromPrefixes if_+          name = Syntax.importFromDottedName if_+          targets = Syntax.importFromTargets if_+          lhs =+                  Serialization.noSep (Optionals.cat (Lists.concat [+                    Lists.map (\p -> Just (relativeImportPrefixToExpr p)) prefixes,+                    [+                      Optionals.map dottedNameToExpr name]]))+      in (Serialization.spaceSep [+        Serialization.cst "from",+        lhs,+        (Serialization.cst "import"),+        (importFromTargetsToExpr targets)])++-- | Serialize an import name+importNameToExpr :: Syntax.ImportName -> Ast.Expr+importNameToExpr in_ =+    Serialization.spaceSep [+      Serialization.cst "import",+      (Serialization.commaSep Serialization.inlineStyle (Lists.map dottedAsNameToExpr (Syntax.unImportName in_)))]++-- | Serialize an import statement+importStatementToExpr :: Syntax.ImportStatement -> Ast.Expr+importStatementToExpr is_ =+    case is_ of+      Syntax.ImportStatementName v0 -> importNameToExpr v0+      Syntax.ImportStatementFrom v0 -> importFromToExpr v0++-- | Serialize an inversion (not expression)+inversionToExpr :: Syntax.Inversion -> Ast.Expr+inversionToExpr i =+    case i of+      Syntax.InversionNot v0 -> Serialization.spaceSep [+        Serialization.cst "not",+        (inversionToExpr v0)]+      Syntax.InversionSimple v0 -> comparisonToExpr v0++-- | Serialize a keyword pattern+keywordPatternToExpr :: Syntax.KeywordPattern -> Ast.Expr+keywordPatternToExpr kp =++      let name = Syntax.keywordPatternName kp+          pat = Syntax.keywordPatternPattern kp+      in (Serialization.noSep [+        nameToExpr name,+        (Serialization.cst "="),+        (patternToExpr pat)])++-- | Serialize keyword patterns+keywordPatternsToExpr :: Syntax.KeywordPatterns -> Ast.Expr+keywordPatternsToExpr kp =+    Serialization.commaSep Serialization.inlineStyle (Lists.map keywordPatternToExpr (Syntax.unKeywordPatterns kp))++-- | Serialize a key-value pair+kvpairToExpr :: Syntax.Kvpair -> Ast.Expr+kvpairToExpr kv =++      let k = Syntax.kvpairKey kv+          v = Syntax.kvpairValue kv+      in (Serialization.spaceSep [+        Serialization.noSep [+          expressionToExpr k,+          (Serialization.cst ":")],+        (expressionToExpr v)])++-- | Serialize a kwarg or double starred+kwargOrDoubleStarredToExpr :: Syntax.KwargOrDoubleStarred -> Ast.Expr+kwargOrDoubleStarredToExpr kds =+    case kds of+      Syntax.KwargOrDoubleStarredKwarg v0 -> kwargToExpr v0+      Syntax.KwargOrDoubleStarredDoubleStarred v0 -> Serialization.noSep [+        Serialization.cst "**",+        (expressionToExpr v0)]++-- | Serialize a kwarg or starred+kwargOrStarredToExpr :: Syntax.KwargOrStarred -> Ast.Expr+kwargOrStarredToExpr ks =+    case ks of+      Syntax.KwargOrStarredKwarg v0 -> kwargToExpr v0+      Syntax.KwargOrStarredStarred v0 -> starredExpressionToExpr v0++-- | Serialize a keyword argument+kwargToExpr :: Syntax.Kwarg -> Ast.Expr+kwargToExpr k =++      let name = Syntax.kwargName k+          expr = Syntax.kwargValue k+      in (Serialization.noSep [+        nameToExpr name,+        (Serialization.cst "="),+        (expressionToExpr expr)])++-- | Serialize a lambda parameter without default+lambdaParamNoDefaultToExpr :: Syntax.LambdaParamNoDefault -> Ast.Expr+lambdaParamNoDefaultToExpr p = nameToExpr (Syntax.unLambdaParamNoDefault p)++-- | Serialize lambda parameters+lambdaParametersToExpr :: Syntax.LambdaParameters -> Ast.Expr+lambdaParametersToExpr lp =++      let nodef = Syntax.lambdaParametersParamNoDefault lp+      in (Serialization.commaSep Serialization.inlineStyle (Lists.map lambdaParamNoDefaultToExpr nodef))++-- | Serialize lambda star etc+lambdaStarEtcToExpr :: Syntax.LambdaStarEtc -> Ast.Expr+lambdaStarEtcToExpr lse =+    case lse of+      Syntax.LambdaStarEtcParamNoDefault v0 -> lambdaParamNoDefaultToExpr v0+      Syntax.LambdaStarEtcStar _ -> Serialization.cst "*..."+      Syntax.LambdaStarEtcParamMaybeDefault _ -> Serialization.cst "..."+      Syntax.LambdaStarEtcKwds _ -> Serialization.cst "**..."++-- | Serialize a lambda expression+lambdaToExpr :: Syntax.Lambda -> Ast.Expr+lambdaToExpr l =++      let params = Syntax.lambdaParams l+          body = Syntax.lambdaBody l+      in (Serialization.parens (Serialization.spaceSep [+        Serialization.cst "lambda",+        (Serialization.noSep [+          lambdaParametersToExpr params,+          (Serialization.cst ":")]),+        (expressionToExpr body)]))++-- | Serialize a Python list+listToExpr :: Syntax.List -> Ast.Expr+listToExpr l = Serialization.bracketListAdaptive (Lists.map starNamedExpressionToExpr (Syntax.unList l))++-- | Serialize a match statement+matchStatementToExpr :: Syntax.MatchStatement -> Ast.Expr+matchStatementToExpr ms =++      let subj = Syntax.matchStatementSubject ms+          cases = Syntax.matchStatementCases ms+      in (Serialization.newlineSep [+        Serialization.spaceSep [+          Serialization.cst "match",+          (Serialization.noSep [+            subjectExpressionToExpr subj,+            (Serialization.cst ":")])],+        (Serialization.tabIndentDoubleSpace (Lists.map caseBlockToExpr cases))])++-- | Serialize a Python module to an AST expression+moduleToExpr :: Syntax.Module -> Ast.Expr+moduleToExpr mod =++      let warning = Serialization.cst (toPythonComments Constants.warningAutoGeneratedFile)+          groups = Lists.map (\group -> Serialization.newlineSep (Lists.map statementToExpr group)) (Syntax.unModule mod)+      in (Serialization.doubleNewlineSep (Lists.cons warning groups))++-- | Serialize a name or attribute+nameOrAttributeToExpr :: Syntax.NameOrAttribute -> Ast.Expr+nameOrAttributeToExpr noa = Serialization.dotSep (Lists.map nameToExpr (Syntax.unNameOrAttribute noa))++-- | Serialize a Python name/identifier+nameToExpr :: Syntax.Name -> Ast.Expr+nameToExpr n = Serialization.cst (Syntax.unName n)++-- | Serialize a named expression+namedExpressionToExpr :: Syntax.NamedExpression -> Ast.Expr+namedExpressionToExpr ne =+    case ne of+      Syntax.NamedExpressionSimple v0 -> expressionToExpr v0+      Syntax.NamedExpressionAssignment v0 -> assignmentExpressionToExpr v0++-- | Serialize a Python number literal+numberToExpr :: Syntax.Number -> Ast.Expr+numberToExpr num =+    case num of+      Syntax.NumberFloat v0 -> Serialization.cst (pythonFloatLiteralText (Literals.showFloat64 v0))+      Syntax.NumberImaginary v0 -> Serialization.cst (Strings.cat2 (pythonFloatLiteralText (Literals.showFloat64 v0)) "j")+      Syntax.NumberInteger v0 -> Serialization.cst (Literals.showBigint v0)++-- | Serialize an or pattern+orPatternToExpr :: Syntax.OrPattern -> Ast.Expr+orPatternToExpr op =+    Serialization.symbolSep "|" Serialization.inlineStyle (Lists.map closedPatternToExpr (Syntax.unOrPattern op))++-- | Serialize parameters without defaults+paramNoDefaultParametersToExpr :: Syntax.ParamNoDefaultParameters -> Ast.Expr+paramNoDefaultParametersToExpr pndp =++      let nodef = Syntax.paramNoDefaultParametersParamNoDefault pndp+      in (Serialization.commaSepAdaptive (Lists.map paramNoDefaultToExpr nodef))++-- | Serialize a parameter without default+paramNoDefaultToExpr :: Syntax.ParamNoDefault -> Ast.Expr+paramNoDefaultToExpr pnd = paramToExpr (Syntax.paramNoDefaultParam pnd)++-- | Serialize a parameter+paramToExpr :: Syntax.Param -> Ast.Expr+paramToExpr p =++      let name = Syntax.paramName p+          ann = Syntax.paramAnnotation p+      in (Serialization.noSep (Optionals.cat [+        Just (nameToExpr name),+        (Optionals.map annotationToExpr ann)]))++-- | Serialize function parameters+parametersToExpr :: Syntax.Parameters -> Ast.Expr+parametersToExpr p =+    case p of+      Syntax.ParametersParamNoDefault v0 -> paramNoDefaultParametersToExpr v0+      Syntax.ParametersSlashNoDefault _ -> Serialization.cst "..."+      Syntax.ParametersSlashWithDefault _ -> Serialization.cst "..."++-- | Serialize a pattern capture target+patternCaptureTargetToExpr :: Syntax.PatternCaptureTarget -> Ast.Expr+patternCaptureTargetToExpr pct = nameToExpr (Syntax.unPatternCaptureTarget pct)++-- | Serialize a pattern+patternToExpr :: Syntax.Pattern -> Ast.Expr+patternToExpr p =+    case p of+      Syntax.PatternOr v0 -> orPatternToExpr v0+      Syntax.PatternAs _ -> Serialization.cst "... as ..."++-- | Serialize patterns+patternsToExpr :: Syntax.Patterns -> Ast.Expr+patternsToExpr ps =+    case ps of+      Syntax.PatternsPattern v0 -> patternToExpr v0+      Syntax.PatternsSequence _ -> Serialization.cst "..."++-- | Serialize a positional argument+posArgToExpr :: Syntax.PosArg -> Ast.Expr+posArgToExpr pa =+    case pa of+      Syntax.PosArgStarred v0 -> starredExpressionToExpr v0+      Syntax.PosArgAssignment v0 -> assignmentExpressionToExpr v0+      Syntax.PosArgExpression v0 -> expressionToExpr v0++-- | Serialize positional patterns+positionalPatternsToExpr :: Syntax.PositionalPatterns -> Ast.Expr+positionalPatternsToExpr pp =+    Serialization.commaSep Serialization.inlineStyle (Lists.map patternToExpr (Syntax.unPositionalPatterns pp))++-- | Serialize a power expression+powerToExpr :: Syntax.Power -> Ast.Expr+powerToExpr p =++      let lhs = Syntax.powerLhs p+          rhs = Syntax.powerRhs p+      in (Serialization.spaceSep (Optionals.cat [+        Just (awaitPrimaryToExpr lhs),+        (Optionals.map (\r -> Serialization.spaceSep [+          Serialization.cst "**",+          (factorToExpr r)]) rhs)]))++-- | Serialize a primary RHS+primaryRhsToExpr :: Syntax.PrimaryRhs -> Ast.Expr+primaryRhsToExpr rhs =+    case rhs of+      Syntax.PrimaryRhsCall v0 -> Serialization.noSep [+        Serialization.cst "(",+        (argsToExpr v0),+        (Serialization.cst ")")]+      Syntax.PrimaryRhsProject v0 -> Serialization.noSep [+        Serialization.cst ".",+        (nameToExpr v0)]+      Syntax.PrimaryRhsSlices v0 -> Serialization.noSep [+        Serialization.cst "[",+        (slicesToExpr v0),+        (Serialization.cst "]")]+      Syntax.PrimaryRhsGenexp _ -> Serialization.cst "[...]"++-- | Serialize a primary expression+primaryToExpr :: Syntax.Primary -> Ast.Expr+primaryToExpr p =+    case p of+      Syntax.PrimarySimple v0 -> atomToExpr v0+      Syntax.PrimaryCompound v0 -> primaryWithRhsToExpr v0++-- | Serialize a primary with RHS+primaryWithRhsToExpr :: Syntax.PrimaryWithRhs -> Ast.Expr+primaryWithRhsToExpr pwr =++      let prim = Syntax.primaryWithRhsPrimary pwr+          rhs = Syntax.primaryWithRhsRhs pwr+      in (Serialization.noSep [+        primaryToExpr prim,+        (primaryRhsToExpr rhs)])++-- | Render a hydra.packaging.EntityReference as Sphinx/RST link syntax+pythonDocEntityRef :: Packaging.EntityReference -> String+pythonDocEntityRef ref =+    case ref of+      Packaging.EntityReferenceDefinition v0 -> case v0 of+        Packaging.DefinitionReferencePrimitive v1 -> Strings.cat2 ":func:`" (Strings.cat2 (Names.localNameOf v1) "`")+        Packaging.DefinitionReferenceTerm v1 -> Strings.cat2 ":func:`" (Strings.cat2 (Names.localNameOf v1) "`")+        Packaging.DefinitionReferenceType v1 -> Strings.cat2 ":class:`" (Strings.cat2 (Names.localNameOf v1) "`")+      Packaging.EntityReferenceModule v0 -> Strings.cat2 "" (Packaging.unModuleName v0)+      Packaging.EntityReferencePackage v0 -> Strings.cat2 "" (Packaging.unPackageName v0)+      Packaging.EntityReferenceTermExpr v0 -> Strings.cat2 "``" (Strings.cat2 v0 "``")+      Packaging.EntityReferenceTypeExpr v0 -> Strings.cat2 "``" (Strings.cat2 v0 "``")++pythonFloatLiteralText :: String -> String+pythonFloatLiteralText s =+    Logic.ifElse (Equality.equal s "NaN") "float('nan')" (Logic.ifElse (Equality.equal s "Infinity") "float('inf')" (Logic.ifElse (Equality.equal s "-Infinity") "float('-inf')" s))++-- | Serialize a raise expression+raiseExpressionToExpr :: Syntax.RaiseExpression -> Ast.Expr+raiseExpressionToExpr re =++      let expr = Syntax.raiseExpressionExpression re+          from_ = Syntax.raiseExpressionFrom re+      in (Serialization.spaceSep (Optionals.cat [+        Just (expressionToExpr expr),+        (Optionals.map (\f -> Serialization.spaceSep [+          Serialization.cst "from",+          (expressionToExpr f)]) from_)]))++-- | Serialize a raise statement+raiseStatementToExpr :: Syntax.RaiseStatement -> Ast.Expr+raiseStatementToExpr rs =+    Serialization.spaceSep (Optionals.cat [+      Just (Serialization.cst "raise"),+      (Optionals.map raiseExpressionToExpr (Syntax.unRaiseStatement rs))])++-- | Serialize a relative import prefix+relativeImportPrefixToExpr :: Syntax.RelativeImportPrefix -> Ast.Expr+relativeImportPrefixToExpr p =+    case p of+      Syntax.RelativeImportPrefixDot -> Serialization.cst "."+      Syntax.RelativeImportPrefixEllipsis -> Serialization.cst "..."++-- | Serialize a return statement+returnStatementToExpr :: Syntax.ReturnStatement -> Ast.Expr+returnStatementToExpr rs =+    Serialization.spaceSep [+      Serialization.cst "return",+      (Serialization.commaSep Serialization.inlineStyle (Lists.map starExpressionToExpr (Syntax.unReturnStatement rs)))]++-- | Serialize a Python set+setToExpr :: Syntax.Set -> Ast.Expr+setToExpr s = Serialization.bracesListAdaptive (Lists.map starNamedExpressionToExpr (Syntax.unSet s))++-- | Serialize a shift expression+shiftExpressionToExpr :: Syntax.ShiftExpression -> Ast.Expr+shiftExpressionToExpr se = sumToExpr (Syntax.shiftExpressionRhs se)++-- | Serialize a simple (single-line) Python statement+simpleStatementToExpr :: Syntax.SimpleStatement -> Ast.Expr+simpleStatementToExpr ss =+    case ss of+      Syntax.SimpleStatementAssignment v0 -> assignmentToExpr v0+      Syntax.SimpleStatementStarExpressions v0 -> Serialization.newlineSep (Lists.map starExpressionToExpr v0)+      Syntax.SimpleStatementReturn v0 -> returnStatementToExpr v0+      Syntax.SimpleStatementRaise v0 -> raiseStatementToExpr v0+      Syntax.SimpleStatementPass -> Serialization.cst "pass"+      Syntax.SimpleStatementBreak -> Serialization.cst "break"+      Syntax.SimpleStatementContinue -> Serialization.cst "continue"+      Syntax.SimpleStatementImport v0 -> importStatementToExpr v0+      Syntax.SimpleStatementTypeAlias v0 -> typeAliasToExpr v0+      Syntax.SimpleStatementAssert _ -> Serialization.cst "assert ..."+      Syntax.SimpleStatementGlobal _ -> Serialization.cst "global ..."+      Syntax.SimpleStatementNonlocal _ -> Serialization.cst "nonlocal ..."+      Syntax.SimpleStatementDel _ -> Serialization.cst "del ..."++-- | Serialize a simple type parameter+simpleTypeParameterToExpr :: Syntax.SimpleTypeParameter -> Ast.Expr+simpleTypeParameterToExpr stp = nameToExpr (Syntax.simpleTypeParameterName stp)++-- | Serialize a single target+singleTargetToExpr :: Syntax.SingleTarget -> Ast.Expr+singleTargetToExpr st =+    case st of+      Syntax.SingleTargetName v0 -> nameToExpr v0+      Syntax.SingleTargetParens _ -> Serialization.cst "(...)"+      Syntax.SingleTargetSubscriptAttributeTarget _ -> Serialization.cst "..."++-- | Serialize a slice or starred expression+sliceOrStarredExpressionToExpr :: Syntax.SliceOrStarredExpression -> Ast.Expr+sliceOrStarredExpressionToExpr s =+    case s of+      Syntax.SliceOrStarredExpressionSlice v0 -> sliceToExpr v0+      Syntax.SliceOrStarredExpressionStarred v0 -> starredExpressionToExpr v0++-- | Serialize a slice+sliceToExpr :: Syntax.Slice -> Ast.Expr+sliceToExpr s =+    case s of+      Syntax.SliceNamed v0 -> namedExpressionToExpr v0+      Syntax.SliceSlice_ _ -> Serialization.cst ":"++-- | Serialize slices+slicesToExpr :: Syntax.Slices -> Ast.Expr+slicesToExpr s =++      let hd = Syntax.slicesHead s+          tl = Syntax.slicesTail s+      in (Serialization.commaSep Serialization.inlineStyle (Lists.cons (sliceToExpr hd) (Lists.map sliceOrStarredExpressionToExpr tl)))++-- | Serialize a star atom+starAtomToExpr :: Syntax.StarAtom -> Ast.Expr+starAtomToExpr sa =+    case sa of+      Syntax.StarAtomName v0 -> nameToExpr v0+      Syntax.StarAtomTargetWithStarAtom _ -> Serialization.cst "(...)"+      Syntax.StarAtomStarTargetsTupleSeq _ -> Serialization.cst "(...)"+      Syntax.StarAtomStarTargetsListSeq _ -> Serialization.cst "[...]"++-- | Serialize a star expression+starExpressionToExpr :: Syntax.StarExpression -> Ast.Expr+starExpressionToExpr se =+    case se of+      Syntax.StarExpressionStar v0 -> Serialization.noSep [+        Serialization.cst "*",+        (bitwiseOrToExpr v0)]+      Syntax.StarExpressionSimple v0 -> expressionToExpr v0++-- | Serialize a star named expression+starNamedExpressionToExpr :: Syntax.StarNamedExpression -> Ast.Expr+starNamedExpressionToExpr sne =+    case sne of+      Syntax.StarNamedExpressionStar v0 -> Serialization.noSep [+        Serialization.cst "*",+        (bitwiseOrToExpr v0)]+      Syntax.StarNamedExpressionSimple v0 -> namedExpressionToExpr v0++-- | Serialize a star target+starTargetToExpr :: Syntax.StarTarget -> Ast.Expr+starTargetToExpr st =+    case st of+      Syntax.StarTargetUnstarred v0 -> targetWithStarAtomToExpr v0+      Syntax.StarTargetStarred v0 -> Serialization.noSep [+        Serialization.cst "*",+        (starTargetToExpr v0)]++-- | Serialize a starred expression+starredExpressionToExpr :: Syntax.StarredExpression -> Ast.Expr+starredExpressionToExpr se =+    Serialization.noSep [+      Serialization.cst "*",+      (expressionToExpr (Syntax.unStarredExpression se))]++-- | Serialize a Python statement+statementToExpr :: Syntax.Statement -> Ast.Expr+statementToExpr stmt =+    case stmt of+      Syntax.StatementAnnotated v0 -> annotatedStatementToExpr v0+      Syntax.StatementSimple v0 -> Serialization.newlineSep (Lists.map simpleStatementToExpr v0)+      Syntax.StatementCompound v0 -> compoundStatementToExpr v0++-- | Serialize a Python string prefix to its source-form characters+stringPrefixToText :: Syntax.StringPrefix -> String+stringPrefixToText p =+    case p of+      Syntax.StringPrefixRaw -> "r"+      Syntax.StringPrefixBytes -> "b"+      Syntax.StringPrefixRawBytes -> "rb"+      Syntax.StringPrefixUnicode -> "u"++-- | Serialize a Python string literal+stringToExpr :: Syntax.String_ -> Ast.Expr+stringToExpr s =++      let content = Syntax.stringValue s+          prefix = Optionals.cases (Syntax.stringPrefix s) "" stringPrefixToText+          style = Syntax.stringQuoteStyle s+      in case style of+        Syntax.QuoteStyleSingle -> Serialization.cst (Strings.cat2 prefix (escapePythonString False content))+        Syntax.QuoteStyleDouble -> Serialization.cst (Strings.cat2 prefix (escapePythonString True content))+        Syntax.QuoteStyleTripleSingle -> Serialization.noSep [+          Serialization.cst (Strings.cat2 prefix "'''"),+          (Serialization.cst content),+          (Serialization.cst "'''")]+        Syntax.QuoteStyleTripleDouble -> Serialization.noSep [+          Serialization.cst (Strings.cat2 prefix "\"\"\""),+          (Serialization.cst content),+          (Serialization.cst "\"\"\"")]++-- | Serialize a subject expression+subjectExpressionToExpr :: Syntax.SubjectExpression -> Ast.Expr+subjectExpressionToExpr se =+    case se of+      Syntax.SubjectExpressionSimple v0 -> namedExpressionToExpr v0+      Syntax.SubjectExpressionTuple _ -> Serialization.cst "*..."++-- | Serialize a sum expression+sumToExpr :: Syntax.Sum -> Ast.Expr+sumToExpr s = termToExpr (Syntax.sumRhs s)++-- | Serialize a TPrimaryAndName as primary.name+tPrimaryAndNameToExpr :: Syntax.TPrimaryAndName -> Ast.Expr+tPrimaryAndNameToExpr pn =++      let prim = Syntax.tPrimaryAndNamePrimary pn+          name_ = Syntax.tPrimaryAndNameName pn+      in (Serialization.noSep [+        tPrimaryToExpr prim,+        (Serialization.cst "."),+        (nameToExpr name_)])++-- | Serialize a target-side primary expression+tPrimaryToExpr :: Syntax.TPrimary -> Ast.Expr+tPrimaryToExpr tp =+    case tp of+      Syntax.TPrimaryAtom v0 -> atomToExpr v0+      Syntax.TPrimaryPrimaryAndName v0 -> tPrimaryAndNameToExpr v0+      Syntax.TPrimaryPrimaryAndSlices _ -> Serialization.cst "..."+      Syntax.TPrimaryPrimaryAndGenexp _ -> Serialization.cst "..."+      Syntax.TPrimaryPrimaryAndArguments _ -> Serialization.cst "..."++-- | Serialize a target with star atom+targetWithStarAtomToExpr :: Syntax.TargetWithStarAtom -> Ast.Expr+targetWithStarAtomToExpr t =+    case t of+      Syntax.TargetWithStarAtomAtom v0 -> starAtomToExpr v0+      Syntax.TargetWithStarAtomProject v0 -> tPrimaryAndNameToExpr v0+      Syntax.TargetWithStarAtomSlices _ -> Serialization.cst "..."++-- | Serialize a term expression+termToExpr :: Syntax.Term -> Ast.Expr+termToExpr t = factorToExpr (Syntax.termRhs t)++-- | Convert a doc string to Python comment format. Empty source lines emit `#` (no trailing space) so blank comment lines don't carry trailing whitespace into the generated file.+toPythonComments :: String -> String+toPythonComments doc_ =+    Logic.ifElse (Equality.equal doc_ "") "" (Strings.intercalate "\n" (Lists.map (\line -> Logic.ifElse (Equality.equal line "") "#" (Strings.cat2 "# " line)) (Strings.lines (Docs.renderDocStringWith pythonDocEntityRef doc_))))++-- | Serialize a Python tuple+tupleToExpr :: Syntax.Tuple -> Ast.Expr+tupleToExpr t =++      let es = Syntax.unTuple t+      in (Optionals.fromOptional (Serialization.parenListAdaptive (Lists.map starNamedExpressionToExpr es)) (Optionals.map (\firstEs -> Logic.ifElse (Equality.equal (Lists.length es) 1) (Serialization.parens (Serialization.noSep [+        starNamedExpressionToExpr firstEs,+        (Serialization.cst ",")])) (Serialization.parenListAdaptive (Lists.map starNamedExpressionToExpr es))) (Lists.maybeHead es)))++-- | Serialize a type alias+typeAliasToExpr :: Syntax.TypeAlias -> Ast.Expr+typeAliasToExpr ta =++      let name = Syntax.typeAliasName ta+          tparams = Syntax.typeAliasTypeParams ta+          expr = Syntax.typeAliasExpression ta+          alias =+                  Serialization.noSep (Optionals.cat [+                    Just (nameToExpr name),+                    (Logic.ifElse (Lists.null tparams) Nothing (Just (Serialization.bracketList Serialization.inlineStyle (Lists.map typeParameterToExpr tparams))))])+      in (Serialization.spaceSep [+        Serialization.cst "type",+        alias,+        (Serialization.cst "="),+        (expressionToExpr expr)])++-- | Serialize a type parameter+typeParameterToExpr :: Syntax.TypeParameter -> Ast.Expr+typeParameterToExpr tp =+    case tp of+      Syntax.TypeParameterSimple v0 -> simpleTypeParameterToExpr v0+      Syntax.TypeParameterStar _ -> Serialization.cst "*..."+      Syntax.TypeParameterDoubleStar _ -> Serialization.cst "**..."++-- | Serialize a typed assignment+typedAssignmentToExpr :: Syntax.TypedAssignment -> Ast.Expr+typedAssignmentToExpr ta =++      let lhs = Syntax.typedAssignmentLhs ta+          typ = Syntax.typedAssignmentType ta+          rhs = Syntax.typedAssignmentRhs ta+      in (Serialization.spaceSep (Optionals.cat [+        Just (Serialization.noSep [+          singleTargetToExpr lhs,+          (Serialization.cst ":")]),+        (Just (expressionToExpr typ)),+        (Optionals.map annotatedRhsToExpr rhs)]))++-- | Serialize an untyped assignment+untypedAssignmentToExpr :: Syntax.UntypedAssignment -> Ast.Expr+untypedAssignmentToExpr ua =++      let targets = Syntax.untypedAssignmentTargets ua+          rhs = Syntax.untypedAssignmentRhs ua+      in (Serialization.spaceSep (Lists.concat [+        Lists.map starTargetToExpr targets,+        [+          annotatedRhsToExpr rhs]]))++-- | Serialize a value pattern+valuePatternToExpr :: Syntax.ValuePattern -> Ast.Expr+valuePatternToExpr vp = attributeToExpr (Syntax.unValuePattern vp)++-- | Serialize a while statement+whileStatementToExpr :: Syntax.WhileStatement -> Ast.Expr+whileStatementToExpr ws =++      let cond = Syntax.whileStatementCondition ws+          body = Syntax.whileStatementBody ws+          else_ = Syntax.whileStatementElse ws+      in (Serialization.newlineSep (Optionals.cat [+        Just (Serialization.newlineSep [+          Serialization.spaceSep [+            Serialization.cst "while",+            (Serialization.noSep [+              namedExpressionToExpr cond,+              (Serialization.cst ":")])],+          (blockToExpr body)]),+        (Optionals.map (\eb -> Serialization.newlineSep [+          Serialization.cst "else:",+          (blockToExpr eb)]) else_)]))
+ src/main/haskell/Hydra/Python/Syntax.hs view
@@ -0,0 +1,2502 @@+-- Note: this is an automatically generated file. Do not edit.++-- | A Python syntax model, tracking the Python 3.14 PEG grammar:+-- |   https://docs.python.org/3.14/reference/grammar.html++module Hydra.Python.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 AnnotatedStatement =+  AnnotatedStatement {+    annotatedStatementComment :: String,+    annotatedStatementStatement :: Statement}+  deriving (Eq, Ord, Read, Show)++_AnnotatedStatement = Core.Name "hydra.python.syntax.AnnotatedStatement"++_AnnotatedStatement_comment = Core.Name "comment"++_AnnotatedStatement_statement = Core.Name "statement"++newtype Module =+  Module {+    unModule :: [[Statement]]}+  deriving (Eq, Ord, Read, Show)++_Module = Core.Name "hydra.python.syntax.Module"++data QuoteStyle =+  QuoteStyleSingle |+  QuoteStyleDouble |+  QuoteStyleTripleSingle |+  QuoteStyleTripleDouble+  deriving (Eq, Ord, Read, Show)++_QuoteStyle = Core.Name "hydra.python.syntax.QuoteStyle"++_QuoteStyle_single = Core.Name "single"++_QuoteStyle_double = Core.Name "double"++_QuoteStyle_tripleSingle = Core.Name "tripleSingle"++_QuoteStyle_tripleDouble = Core.Name "tripleDouble"++data StringPrefix =+  StringPrefixRaw |+  StringPrefixBytes |+  StringPrefixRawBytes |+  StringPrefixUnicode+  deriving (Eq, Ord, Read, Show)++_StringPrefix = Core.Name "hydra.python.syntax.StringPrefix"++_StringPrefix_raw = Core.Name "raw"++_StringPrefix_bytes = Core.Name "bytes"++_StringPrefix_rawBytes = Core.Name "rawBytes"++_StringPrefix_unicode = Core.Name "unicode"++newtype Name =+  Name {+    unName :: String}+  deriving (Eq, Ord, Read, Show)++_Name = Core.Name "hydra.python.syntax.Name"++data Number =+  NumberInteger Integer |+  NumberFloat Double |+  NumberImaginary Double+  deriving (Eq, Ord, Read, Show)++_Number = Core.Name "hydra.python.syntax.Number"++_Number_integer = Core.Name "integer"++_Number_float = Core.Name "float"++_Number_imaginary = Core.Name "imaginary"++data String_ =+  String_ {+    stringValue :: String,+    stringPrefix :: (Maybe StringPrefix),+    stringQuoteStyle :: QuoteStyle}+  deriving (Eq, Ord, Read, Show)++_String = Core.Name "hydra.python.syntax.String"++_String_value = Core.Name "value"++_String_prefix = Core.Name "prefix"++_String_quoteStyle = Core.Name "quoteStyle"++newtype TypeComment =+  TypeComment {+    unTypeComment :: String}+  deriving (Eq, Ord, Read, Show)++_TypeComment = Core.Name "hydra.python.syntax.TypeComment"++newtype File =+  File {+    unFile :: [Statement]}+  deriving (Eq, Ord, Read, Show)++_File = Core.Name "hydra.python.syntax.File"++newtype Interactive =+  Interactive {+    unInteractive :: Statement}+  deriving (Eq, Ord, Read, Show)++_Interactive = Core.Name "hydra.python.syntax.Interactive"++newtype Eval =+  Eval {+    unEval :: [Expression]}+  deriving (Eq, Ord, Read, Show)++_Eval = Core.Name "hydra.python.syntax.Eval"++data Statement =+  StatementCompound CompoundStatement |+  StatementSimple [SimpleStatement] |+  StatementAnnotated AnnotatedStatement+  deriving (Eq, Ord, Read, Show)++_Statement = Core.Name "hydra.python.syntax.Statement"++_Statement_compound = Core.Name "compound"++_Statement_simple = Core.Name "simple"++_Statement_annotated = Core.Name "annotated"++data SimpleStatement =+  SimpleStatementAssignment Assignment |+  SimpleStatementTypeAlias TypeAlias |+  SimpleStatementStarExpressions [StarExpression] |+  SimpleStatementReturn ReturnStatement |+  SimpleStatementImport ImportStatement |+  SimpleStatementRaise RaiseStatement |+  SimpleStatementPass |+  SimpleStatementDel DelStatement |+  SimpleStatementYield YieldStatement |+  SimpleStatementAssert AssertStatement |+  SimpleStatementBreak |+  SimpleStatementContinue |+  SimpleStatementGlobal [Name] |+  SimpleStatementNonlocal [Name]+  deriving (Eq, Ord, Read, Show)++_SimpleStatement = Core.Name "hydra.python.syntax.SimpleStatement"++_SimpleStatement_assignment = Core.Name "assignment"++_SimpleStatement_typeAlias = Core.Name "typeAlias"++_SimpleStatement_starExpressions = Core.Name "starExpressions"++_SimpleStatement_return = Core.Name "return"++_SimpleStatement_import = Core.Name "import"++_SimpleStatement_raise = Core.Name "raise"++_SimpleStatement_pass = Core.Name "pass"++_SimpleStatement_del = Core.Name "del"++_SimpleStatement_yield = Core.Name "yield"++_SimpleStatement_assert = Core.Name "assert"++_SimpleStatement_break = Core.Name "break"++_SimpleStatement_continue = Core.Name "continue"++_SimpleStatement_global = Core.Name "global"++_SimpleStatement_nonlocal = Core.Name "nonlocal"++data CompoundStatement =+  CompoundStatementFunction FunctionDefinition |+  CompoundStatementIf IfStatement |+  CompoundStatementClassDef ClassDefinition |+  CompoundStatementWith WithStatement |+  CompoundStatementFor ForStatement |+  CompoundStatementTry TryStatement |+  CompoundStatementWhile WhileStatement |+  CompoundStatementMatch MatchStatement+  deriving (Eq, Ord, Read, Show)++_CompoundStatement = Core.Name "hydra.python.syntax.CompoundStatement"++_CompoundStatement_function = Core.Name "function"++_CompoundStatement_if = Core.Name "if"++_CompoundStatement_classDef = Core.Name "classDef"++_CompoundStatement_with = Core.Name "with"++_CompoundStatement_for = Core.Name "for"++_CompoundStatement_try = Core.Name "try"++_CompoundStatement_while = Core.Name "while"++_CompoundStatement_match = Core.Name "match"++data Assignment =+  AssignmentTyped TypedAssignment |+  AssignmentUntyped UntypedAssignment |+  AssignmentAug AugAssignment+  deriving (Eq, Ord, Read, Show)++_Assignment = Core.Name "hydra.python.syntax.Assignment"++_Assignment_typed = Core.Name "typed"++_Assignment_untyped = Core.Name "untyped"++_Assignment_aug = Core.Name "aug"++data TypedAssignment =+  TypedAssignment {+    typedAssignmentLhs :: SingleTarget,+    typedAssignmentType :: Expression,+    typedAssignmentRhs :: (Maybe AnnotatedRhs)}+  deriving (Eq, Ord, Read, Show)++_TypedAssignment = Core.Name "hydra.python.syntax.TypedAssignment"++_TypedAssignment_lhs = Core.Name "lhs"++_TypedAssignment_type = Core.Name "type"++_TypedAssignment_rhs = Core.Name "rhs"++data UntypedAssignment =+  UntypedAssignment {+    untypedAssignmentTargets :: [StarTarget],+    untypedAssignmentRhs :: AnnotatedRhs,+    untypedAssignmentTypeComment :: (Maybe TypeComment)}+  deriving (Eq, Ord, Read, Show)++_UntypedAssignment = Core.Name "hydra.python.syntax.UntypedAssignment"++_UntypedAssignment_targets = Core.Name "targets"++_UntypedAssignment_rhs = Core.Name "rhs"++_UntypedAssignment_typeComment = Core.Name "typeComment"++data AugAssignment =+  AugAssignment {+    augAssignmentLhs :: SingleTarget,+    augAssignmentAugassign :: AugAssign,+    augAssignmentRhs :: AnnotatedRhs}+  deriving (Eq, Ord, Read, Show)++_AugAssignment = Core.Name "hydra.python.syntax.AugAssignment"++_AugAssignment_lhs = Core.Name "lhs"++_AugAssignment_augassign = Core.Name "augassign"++_AugAssignment_rhs = Core.Name "rhs"++data AnnotatedRhs =+  AnnotatedRhsYield YieldExpression |+  AnnotatedRhsStar [StarExpression]+  deriving (Eq, Ord, Read, Show)++_AnnotatedRhs = Core.Name "hydra.python.syntax.AnnotatedRhs"++_AnnotatedRhs_yield = Core.Name "yield"++_AnnotatedRhs_star = Core.Name "star"++data AugAssign =+  AugAssignPlusEqual |+  AugAssignMinusEqual |+  AugAssignTimesEqual |+  AugAssignAtEqual |+  AugAssignSlashEqual |+  AugAssignPercentEqual |+  AugAssignAmpersandEqual |+  AugAssignBarEqual |+  AugAssignCaretEqual |+  AugAssignLeftShiftEqual |+  AugAssignRightShiftEqual |+  AugAssignStarStarEqual |+  AugAssignDoubleSlashEqual+  deriving (Eq, Ord, Read, Show)++_AugAssign = Core.Name "hydra.python.syntax.AugAssign"++_AugAssign_plusEqual = Core.Name "plusEqual"++_AugAssign_minusEqual = Core.Name "minusEqual"++_AugAssign_timesEqual = Core.Name "timesEqual"++_AugAssign_atEqual = Core.Name "atEqual"++_AugAssign_slashEqual = Core.Name "slashEqual"++_AugAssign_percentEqual = Core.Name "percentEqual"++_AugAssign_ampersandEqual = Core.Name "ampersandEqual"++_AugAssign_barEqual = Core.Name "barEqual"++_AugAssign_caretEqual = Core.Name "caretEqual"++_AugAssign_leftShiftEqual = Core.Name "leftShiftEqual"++_AugAssign_rightShiftEqual = Core.Name "rightShiftEqual"++_AugAssign_starStarEqual = Core.Name "starStarEqual"++_AugAssign_doubleSlashEqual = Core.Name "doubleSlashEqual"++newtype ReturnStatement =+  ReturnStatement {+    unReturnStatement :: [StarExpression]}+  deriving (Eq, Ord, Read, Show)++_ReturnStatement = Core.Name "hydra.python.syntax.ReturnStatement"++newtype RaiseStatement =+  RaiseStatement {+    unRaiseStatement :: (Maybe RaiseExpression)}+  deriving (Eq, Ord, Read, Show)++_RaiseStatement = Core.Name "hydra.python.syntax.RaiseStatement"++data RaiseExpression =+  RaiseExpression {+    raiseExpressionExpression :: Expression,+    raiseExpressionFrom :: (Maybe Expression)}+  deriving (Eq, Ord, Read, Show)++_RaiseExpression = Core.Name "hydra.python.syntax.RaiseExpression"++_RaiseExpression_expression = Core.Name "expression"++_RaiseExpression_from = Core.Name "from"++newtype DelStatement =+  DelStatement {+    unDelStatement :: DelTargets}+  deriving (Eq, Ord, Read, Show)++_DelStatement = Core.Name "hydra.python.syntax.DelStatement"++newtype YieldStatement =+  YieldStatement {+    unYieldStatement :: YieldExpression}+  deriving (Eq, Ord, Read, Show)++_YieldStatement = Core.Name "hydra.python.syntax.YieldStatement"++data AssertStatement =+  AssertStatement {+    assertStatementExpression1 :: Expression,+    assertStatementExpression2 :: (Maybe Expression)}+  deriving (Eq, Ord, Read, Show)++_AssertStatement = Core.Name "hydra.python.syntax.AssertStatement"++_AssertStatement_expression1 = Core.Name "expression1"++_AssertStatement_expression2 = Core.Name "expression2"++data ImportStatement =+  ImportStatementName ImportName |+  ImportStatementFrom ImportFrom+  deriving (Eq, Ord, Read, Show)++_ImportStatement = Core.Name "hydra.python.syntax.ImportStatement"++_ImportStatement_name = Core.Name "name"++_ImportStatement_from = Core.Name "from"++newtype ImportName =+  ImportName {+    unImportName :: [DottedAsName]}+  deriving (Eq, Ord, Read, Show)++_ImportName = Core.Name "hydra.python.syntax.ImportName"++data ImportFrom =+  ImportFrom {+    importFromPrefixes :: [RelativeImportPrefix],+    importFromDottedName :: (Maybe DottedName),+    importFromTargets :: ImportFromTargets}+  deriving (Eq, Ord, Read, Show)++_ImportFrom = Core.Name "hydra.python.syntax.ImportFrom"++_ImportFrom_prefixes = Core.Name "prefixes"++_ImportFrom_dottedName = Core.Name "dottedName"++_ImportFrom_targets = Core.Name "targets"++data RelativeImportPrefix =+  RelativeImportPrefixDot |+  RelativeImportPrefixEllipsis+  deriving (Eq, Ord, Read, Show)++_RelativeImportPrefix = Core.Name "hydra.python.syntax.RelativeImportPrefix"++_RelativeImportPrefix_dot = Core.Name "dot"++_RelativeImportPrefix_ellipsis = Core.Name "ellipsis"++data ImportFromTargets =+  ImportFromTargetsSimple [ImportFromAsName] |+  ImportFromTargetsParens [ImportFromAsName] |+  ImportFromTargetsStar+  deriving (Eq, Ord, Read, Show)++_ImportFromTargets = Core.Name "hydra.python.syntax.ImportFromTargets"++_ImportFromTargets_simple = Core.Name "simple"++_ImportFromTargets_parens = Core.Name "parens"++_ImportFromTargets_star = Core.Name "star"++data ImportFromAsName =+  ImportFromAsName {+    importFromAsNameName :: Name,+    importFromAsNameAs :: (Maybe Name)}+  deriving (Eq, Ord, Read, Show)++_ImportFromAsName = Core.Name "hydra.python.syntax.ImportFromAsName"++_ImportFromAsName_name = Core.Name "name"++_ImportFromAsName_as = Core.Name "as"++data DottedAsName =+  DottedAsName {+    dottedAsNameName :: DottedName,+    dottedAsNameAs :: (Maybe Name)}+  deriving (Eq, Ord, Read, Show)++_DottedAsName = Core.Name "hydra.python.syntax.DottedAsName"++_DottedAsName_name = Core.Name "name"++_DottedAsName_as = Core.Name "as"++newtype DottedName =+  DottedName {+    unDottedName :: [Name]}+  deriving (Eq, Ord, Read, Show)++_DottedName = Core.Name "hydra.python.syntax.DottedName"++data Block =+  BlockIndented [[Statement]] |+  BlockSimple [SimpleStatement]+  deriving (Eq, Ord, Read, Show)++_Block = Core.Name "hydra.python.syntax.Block"++_Block_indented = Core.Name "indented"++_Block_simple = Core.Name "simple"++newtype Decorators =+  Decorators {+    unDecorators :: [NamedExpression]}+  deriving (Eq, Ord, Read, Show)++_Decorators = Core.Name "hydra.python.syntax.Decorators"++data ClassDefinition =+  ClassDefinition {+    classDefinitionDecorators :: (Maybe Decorators),+    classDefinitionName :: Name,+    classDefinitionTypeParams :: [TypeParameter],+    classDefinitionArguments :: (Maybe Args),+    classDefinitionBody :: Block}+  deriving (Eq, Ord, Read, Show)++_ClassDefinition = Core.Name "hydra.python.syntax.ClassDefinition"++_ClassDefinition_decorators = Core.Name "decorators"++_ClassDefinition_name = Core.Name "name"++_ClassDefinition_typeParams = Core.Name "typeParams"++_ClassDefinition_arguments = Core.Name "arguments"++_ClassDefinition_body = Core.Name "body"++data FunctionDefinition =+  FunctionDefinition {+    functionDefinitionDecorators :: (Maybe Decorators),+    functionDefinitionRaw :: FunctionDefRaw}+  deriving (Eq, Ord, Read, Show)++_FunctionDefinition = Core.Name "hydra.python.syntax.FunctionDefinition"++_FunctionDefinition_decorators = Core.Name "decorators"++_FunctionDefinition_raw = Core.Name "raw"++data FunctionDefRaw =+  FunctionDefRaw {+    functionDefRawAsync :: Bool,+    functionDefRawName :: Name,+    functionDefRawTypeParams :: [TypeParameter],+    functionDefRawParams :: (Maybe Parameters),+    functionDefRawReturnType :: (Maybe Expression),+    functionDefRawFuncTypeComment :: (Maybe FuncTypeComment),+    functionDefRawBlock :: Block}+  deriving (Eq, Ord, Read, Show)++_FunctionDefRaw = Core.Name "hydra.python.syntax.FunctionDefRaw"++_FunctionDefRaw_async = Core.Name "async"++_FunctionDefRaw_name = Core.Name "name"++_FunctionDefRaw_typeParams = Core.Name "typeParams"++_FunctionDefRaw_params = Core.Name "params"++_FunctionDefRaw_returnType = Core.Name "returnType"++_FunctionDefRaw_funcTypeComment = Core.Name "funcTypeComment"++_FunctionDefRaw_block = Core.Name "block"++data Parameters =+  ParametersSlashNoDefault SlashNoDefaultParameters |+  ParametersSlashWithDefault SlashWithDefaultParameters |+  ParametersParamNoDefault ParamNoDefaultParameters |+  ParametersParamWithDefault ParamWithDefaultParameters |+  ParametersStarEtc StarEtc+  deriving (Eq, Ord, Read, Show)++_Parameters = Core.Name "hydra.python.syntax.Parameters"++_Parameters_slashNoDefault = Core.Name "slashNoDefault"++_Parameters_slashWithDefault = Core.Name "slashWithDefault"++_Parameters_paramNoDefault = Core.Name "paramNoDefault"++_Parameters_paramWithDefault = Core.Name "paramWithDefault"++_Parameters_starEtc = Core.Name "starEtc"++data SlashNoDefaultParameters =+  SlashNoDefaultParameters {+    slashNoDefaultParametersSlash :: SlashNoDefault,+    slashNoDefaultParametersParamNoDefault :: [ParamNoDefault],+    slashNoDefaultParametersParamWithDefault :: [ParamWithDefault],+    slashNoDefaultParametersStarEtc :: (Maybe StarEtc)}+  deriving (Eq, Ord, Read, Show)++_SlashNoDefaultParameters = Core.Name "hydra.python.syntax.SlashNoDefaultParameters"++_SlashNoDefaultParameters_slash = Core.Name "slash"++_SlashNoDefaultParameters_paramNoDefault = Core.Name "paramNoDefault"++_SlashNoDefaultParameters_paramWithDefault = Core.Name "paramWithDefault"++_SlashNoDefaultParameters_starEtc = Core.Name "starEtc"++data SlashWithDefaultParameters =+  SlashWithDefaultParameters {+    slashWithDefaultParametersParamNoDefault :: [ParamNoDefault],+    slashWithDefaultParametersParamWithDefault :: [ParamWithDefault],+    slashWithDefaultParametersStarEtc :: (Maybe StarEtc)}+  deriving (Eq, Ord, Read, Show)++_SlashWithDefaultParameters = Core.Name "hydra.python.syntax.SlashWithDefaultParameters"++_SlashWithDefaultParameters_paramNoDefault = Core.Name "paramNoDefault"++_SlashWithDefaultParameters_paramWithDefault = Core.Name "paramWithDefault"++_SlashWithDefaultParameters_starEtc = Core.Name "starEtc"++data ParamNoDefaultParameters =+  ParamNoDefaultParameters {+    paramNoDefaultParametersParamNoDefault :: [ParamNoDefault],+    paramNoDefaultParametersParamWithDefault :: [ParamWithDefault],+    paramNoDefaultParametersStarEtc :: (Maybe StarEtc)}+  deriving (Eq, Ord, Read, Show)++_ParamNoDefaultParameters = Core.Name "hydra.python.syntax.ParamNoDefaultParameters"++_ParamNoDefaultParameters_paramNoDefault = Core.Name "paramNoDefault"++_ParamNoDefaultParameters_paramWithDefault = Core.Name "paramWithDefault"++_ParamNoDefaultParameters_starEtc = Core.Name "starEtc"++data ParamWithDefaultParameters =+  ParamWithDefaultParameters {+    paramWithDefaultParametersParamWithDefault :: [ParamWithDefault],+    paramWithDefaultParametersStarEtc :: (Maybe StarEtc)}+  deriving (Eq, Ord, Read, Show)++_ParamWithDefaultParameters = Core.Name "hydra.python.syntax.ParamWithDefaultParameters"++_ParamWithDefaultParameters_paramWithDefault = Core.Name "paramWithDefault"++_ParamWithDefaultParameters_starEtc = Core.Name "starEtc"++newtype SlashNoDefault =+  SlashNoDefault {+    unSlashNoDefault :: [ParamNoDefault]}+  deriving (Eq, Ord, Read, Show)++_SlashNoDefault = Core.Name "hydra.python.syntax.SlashNoDefault"++data SlashWithDefault =+  SlashWithDefault {+    slashWithDefaultParamNoDefault :: [ParamNoDefault],+    slashWithDefaultParamWithDefault :: [ParamWithDefault]}+  deriving (Eq, Ord, Read, Show)++_SlashWithDefault = Core.Name "hydra.python.syntax.SlashWithDefault"++_SlashWithDefault_paramNoDefault = Core.Name "paramNoDefault"++_SlashWithDefault_paramWithDefault = Core.Name "paramWithDefault"++data StarEtc =+  StarEtcStarNoDefault NoDefaultStarEtc |+  StarEtcStarNoDefaultStarAnnotation NoDefaultStarAnnotationStarEtc |+  StarEtcStarComma CommaStarEtc |+  StarEtcKeywords Keywords+  deriving (Eq, Ord, Read, Show)++_StarEtc = Core.Name "hydra.python.syntax.StarEtc"++_StarEtc_starNoDefault = Core.Name "starNoDefault"++_StarEtc_starNoDefaultStarAnnotation = Core.Name "starNoDefaultStarAnnotation"++_StarEtc_starComma = Core.Name "starComma"++_StarEtc_keywords = Core.Name "keywords"++data NoDefaultStarEtc =+  NoDefaultStarEtc {+    noDefaultStarEtcParamNoDefault :: ParamNoDefault,+    noDefaultStarEtcParamMaybeDefault :: [ParamMaybeDefault],+    noDefaultStarEtcKeywords :: (Maybe Keywords)}+  deriving (Eq, Ord, Read, Show)++_NoDefaultStarEtc = Core.Name "hydra.python.syntax.NoDefaultStarEtc"++_NoDefaultStarEtc_paramNoDefault = Core.Name "paramNoDefault"++_NoDefaultStarEtc_paramMaybeDefault = Core.Name "paramMaybeDefault"++_NoDefaultStarEtc_keywords = Core.Name "keywords"++data NoDefaultStarAnnotationStarEtc =+  NoDefaultStarAnnotationStarEtc {+    noDefaultStarAnnotationStarEtcParamNoDefaultStarAnnotation :: ParamNoDefaultStarAnnotation,+    noDefaultStarAnnotationStarEtcParamMaybeDefault :: [ParamMaybeDefault],+    noDefaultStarAnnotationStarEtcKeywords :: (Maybe Keywords)}+  deriving (Eq, Ord, Read, Show)++_NoDefaultStarAnnotationStarEtc = Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"++_NoDefaultStarAnnotationStarEtc_paramNoDefaultStarAnnotation = Core.Name "paramNoDefaultStarAnnotation"++_NoDefaultStarAnnotationStarEtc_paramMaybeDefault = Core.Name "paramMaybeDefault"++_NoDefaultStarAnnotationStarEtc_keywords = Core.Name "keywords"++data CommaStarEtc =+  CommaStarEtc {+    commaStarEtcParamMaybeDefault :: [ParamMaybeDefault],+    commaStarEtcKeywords :: (Maybe Keywords)}+  deriving (Eq, Ord, Read, Show)++_CommaStarEtc = Core.Name "hydra.python.syntax.CommaStarEtc"++_CommaStarEtc_paramMaybeDefault = Core.Name "paramMaybeDefault"++_CommaStarEtc_keywords = Core.Name "keywords"++newtype Keywords =+  Keywords {+    unKeywords :: ParamNoDefault}+  deriving (Eq, Ord, Read, Show)++_Keywords = Core.Name "hydra.python.syntax.Keywords"++data ParamNoDefault =+  ParamNoDefault {+    paramNoDefaultParam :: Param,+    paramNoDefaultTypeComment :: (Maybe TypeComment)}+  deriving (Eq, Ord, Read, Show)++_ParamNoDefault = Core.Name "hydra.python.syntax.ParamNoDefault"++_ParamNoDefault_param = Core.Name "param"++_ParamNoDefault_typeComment = Core.Name "typeComment"++data ParamNoDefaultStarAnnotation =+  ParamNoDefaultStarAnnotation {+    paramNoDefaultStarAnnotationParamStarAnnotation :: ParamStarAnnotation,+    paramNoDefaultStarAnnotationTypeComment :: (Maybe TypeComment)}+  deriving (Eq, Ord, Read, Show)++_ParamNoDefaultStarAnnotation = Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"++_ParamNoDefaultStarAnnotation_paramStarAnnotation = Core.Name "paramStarAnnotation"++_ParamNoDefaultStarAnnotation_typeComment = Core.Name "typeComment"++data ParamWithDefault =+  ParamWithDefault {+    paramWithDefaultParam :: Param,+    paramWithDefaultDefault :: Default,+    paramWithDefaultTypeComment :: (Maybe TypeComment)}+  deriving (Eq, Ord, Read, Show)++_ParamWithDefault = Core.Name "hydra.python.syntax.ParamWithDefault"++_ParamWithDefault_param = Core.Name "param"++_ParamWithDefault_default = Core.Name "default"++_ParamWithDefault_typeComment = Core.Name "typeComment"++data ParamMaybeDefault =+  ParamMaybeDefault {+    paramMaybeDefaultParam :: Param,+    paramMaybeDefaultDefault :: (Maybe Default),+    paramMaybeDefaultTypeComment :: (Maybe TypeComment)}+  deriving (Eq, Ord, Read, Show)++_ParamMaybeDefault = Core.Name "hydra.python.syntax.ParamMaybeDefault"++_ParamMaybeDefault_param = Core.Name "param"++_ParamMaybeDefault_default = Core.Name "default"++_ParamMaybeDefault_typeComment = Core.Name "typeComment"++data Param =+  Param {+    paramName :: Name,+    paramAnnotation :: (Maybe Annotation)}+  deriving (Eq, Ord, Read, Show)++_Param = Core.Name "hydra.python.syntax.Param"++_Param_name = Core.Name "name"++_Param_annotation = Core.Name "annotation"++data ParamStarAnnotation =+  ParamStarAnnotation {+    paramStarAnnotationName :: Name,+    paramStarAnnotationAnnotation :: StarAnnotation}+  deriving (Eq, Ord, Read, Show)++_ParamStarAnnotation = Core.Name "hydra.python.syntax.ParamStarAnnotation"++_ParamStarAnnotation_name = Core.Name "name"++_ParamStarAnnotation_annotation = Core.Name "annotation"++newtype Annotation =+  Annotation {+    unAnnotation :: Expression}+  deriving (Eq, Ord, Read, Show)++_Annotation = Core.Name "hydra.python.syntax.Annotation"++newtype StarAnnotation =+  StarAnnotation {+    unStarAnnotation :: StarExpression}+  deriving (Eq, Ord, Read, Show)++_StarAnnotation = Core.Name "hydra.python.syntax.StarAnnotation"++newtype Default =+  Default {+    unDefault :: Expression}+  deriving (Eq, Ord, Read, Show)++_Default = Core.Name "hydra.python.syntax.Default"++data IfStatement =+  IfStatement {+    ifStatementCondition :: NamedExpression,+    ifStatementBody :: Block,+    ifStatementContinuation :: (Maybe IfTail)}+  deriving (Eq, Ord, Read, Show)++_IfStatement = Core.Name "hydra.python.syntax.IfStatement"++_IfStatement_condition = Core.Name "condition"++_IfStatement_body = Core.Name "body"++_IfStatement_continuation = Core.Name "continuation"++data IfTail =+  IfTailElif IfStatement |+  IfTailElse Block+  deriving (Eq, Ord, Read, Show)++_IfTail = Core.Name "hydra.python.syntax.IfTail"++_IfTail_elif = Core.Name "elif"++_IfTail_else = Core.Name "else"++data WhileStatement =+  WhileStatement {+    whileStatementCondition :: NamedExpression,+    whileStatementBody :: Block,+    whileStatementElse :: (Maybe Block)}+  deriving (Eq, Ord, Read, Show)++_WhileStatement = Core.Name "hydra.python.syntax.WhileStatement"++_WhileStatement_condition = Core.Name "condition"++_WhileStatement_body = Core.Name "body"++_WhileStatement_else = Core.Name "else"++data ForStatement =+  ForStatement {+    forStatementAsync :: Bool,+    forStatementTargets :: [StarTarget],+    forStatementExpressions :: [StarExpression],+    forStatementTypeComment :: (Maybe TypeComment),+    forStatementBody :: Block,+    forStatementElse :: (Maybe Block)}+  deriving (Eq, Ord, Read, Show)++_ForStatement = Core.Name "hydra.python.syntax.ForStatement"++_ForStatement_async = Core.Name "async"++_ForStatement_targets = Core.Name "targets"++_ForStatement_expressions = Core.Name "expressions"++_ForStatement_typeComment = Core.Name "typeComment"++_ForStatement_body = Core.Name "body"++_ForStatement_else = Core.Name "else"++data WithStatement =+  WithStatement {+    withStatementAsync :: Bool,+    withStatementItems :: [WithItem],+    withStatementTypeComment :: (Maybe TypeComment),+    withStatementBody :: Block}+  deriving (Eq, Ord, Read, Show)++_WithStatement = Core.Name "hydra.python.syntax.WithStatement"++_WithStatement_async = Core.Name "async"++_WithStatement_items = Core.Name "items"++_WithStatement_typeComment = Core.Name "typeComment"++_WithStatement_body = Core.Name "body"++data WithItem =+  WithItem {+    withItemExpression :: Expression,+    withItemAs :: (Maybe StarTarget)}+  deriving (Eq, Ord, Read, Show)++_WithItem = Core.Name "hydra.python.syntax.WithItem"++_WithItem_expression = Core.Name "expression"++_WithItem_as = Core.Name "as"++data TryStatement =+  TryStatementFinally TryFinallyStatement |+  TryStatementExcept TryExceptStatement |+  TryStatementExceptStar TryExceptStarStatement+  deriving (Eq, Ord, Read, Show)++_TryStatement = Core.Name "hydra.python.syntax.TryStatement"++_TryStatement_finally = Core.Name "finally"++_TryStatement_except = Core.Name "except"++_TryStatement_exceptStar = Core.Name "exceptStar"++data TryFinallyStatement =+  TryFinallyStatement {+    tryFinallyStatementBody :: Block,+    tryFinallyStatementFinally :: Block}+  deriving (Eq, Ord, Read, Show)++_TryFinallyStatement = Core.Name "hydra.python.syntax.TryFinallyStatement"++_TryFinallyStatement_body = Core.Name "body"++_TryFinallyStatement_finally = Core.Name "finally"++data TryExceptStatement =+  TryExceptStatement {+    tryExceptStatementBody :: Block,+    tryExceptStatementExcepts :: [ExceptBlock],+    tryExceptStatementElse :: (Maybe Block),+    tryExceptStatementFinally :: (Maybe Block)}+  deriving (Eq, Ord, Read, Show)++_TryExceptStatement = Core.Name "hydra.python.syntax.TryExceptStatement"++_TryExceptStatement_body = Core.Name "body"++_TryExceptStatement_excepts = Core.Name "excepts"++_TryExceptStatement_else = Core.Name "else"++_TryExceptStatement_finally = Core.Name "finally"++data TryExceptStarStatement =+  TryExceptStarStatement {+    tryExceptStarStatementBody :: Block,+    tryExceptStarStatementExcepts :: [ExceptStarBlock],+    tryExceptStarStatementElse :: (Maybe Block),+    tryExceptStarStatementFinally :: (Maybe Block)}+  deriving (Eq, Ord, Read, Show)++_TryExceptStarStatement = Core.Name "hydra.python.syntax.TryExceptStarStatement"++_TryExceptStarStatement_body = Core.Name "body"++_TryExceptStarStatement_excepts = Core.Name "excepts"++_TryExceptStarStatement_else = Core.Name "else"++_TryExceptStarStatement_finally = Core.Name "finally"++data ExceptBlock =+  ExceptBlock {+    exceptBlockExpression :: (Maybe ExceptExpression),+    exceptBlockBody :: Block}+  deriving (Eq, Ord, Read, Show)++_ExceptBlock = Core.Name "hydra.python.syntax.ExceptBlock"++_ExceptBlock_expression = Core.Name "expression"++_ExceptBlock_body = Core.Name "body"++data ExceptExpression =+  ExceptExpression {+    exceptExpressionExpression :: Expression,+    exceptExpressionAs :: (Maybe Name)}+  deriving (Eq, Ord, Read, Show)++_ExceptExpression = Core.Name "hydra.python.syntax.ExceptExpression"++_ExceptExpression_expression = Core.Name "expression"++_ExceptExpression_as = Core.Name "as"++data ExceptStarBlock =+  ExceptStarBlock {+    exceptStarBlockExpression :: Expression,+    exceptStarBlockAs :: (Maybe Name),+    exceptStarBlockBody :: Block}+  deriving (Eq, Ord, Read, Show)++_ExceptStarBlock = Core.Name "hydra.python.syntax.ExceptStarBlock"++_ExceptStarBlock_expression = Core.Name "expression"++_ExceptStarBlock_as = Core.Name "as"++_ExceptStarBlock_body = Core.Name "body"++data MatchStatement =+  MatchStatement {+    matchStatementSubject :: SubjectExpression,+    matchStatementCases :: [CaseBlock]}+  deriving (Eq, Ord, Read, Show)++_MatchStatement = Core.Name "hydra.python.syntax.MatchStatement"++_MatchStatement_subject = Core.Name "subject"++_MatchStatement_cases = Core.Name "cases"++data SubjectExpression =+  SubjectExpressionTuple [StarNamedExpression] |+  SubjectExpressionSimple NamedExpression+  deriving (Eq, Ord, Read, Show)++_SubjectExpression = Core.Name "hydra.python.syntax.SubjectExpression"++_SubjectExpression_tuple = Core.Name "tuple"++_SubjectExpression_simple = Core.Name "simple"++data CaseBlock =+  CaseBlock {+    caseBlockPatterns :: Patterns,+    caseBlockGuard :: (Maybe Guard),+    caseBlockBody :: Block}+  deriving (Eq, Ord, Read, Show)++_CaseBlock = Core.Name "hydra.python.syntax.CaseBlock"++_CaseBlock_patterns = Core.Name "patterns"++_CaseBlock_guard = Core.Name "guard"++_CaseBlock_body = Core.Name "body"++newtype Guard =+  Guard {+    unGuard :: NamedExpression}+  deriving (Eq, Ord, Read, Show)++_Guard = Core.Name "hydra.python.syntax.Guard"++data Patterns =+  PatternsSequence OpenSequencePattern |+  PatternsPattern Pattern+  deriving (Eq, Ord, Read, Show)++_Patterns = Core.Name "hydra.python.syntax.Patterns"++_Patterns_sequence = Core.Name "sequence"++_Patterns_pattern = Core.Name "pattern"++data Pattern =+  PatternAs AsPattern |+  PatternOr OrPattern+  deriving (Eq, Ord, Read, Show)++_Pattern = Core.Name "hydra.python.syntax.Pattern"++_Pattern_as = Core.Name "as"++_Pattern_or = Core.Name "or"++data AsPattern =+  AsPattern {+    asPatternPattern :: OrPattern,+    asPatternAs :: PatternCaptureTarget}+  deriving (Eq, Ord, Read, Show)++_AsPattern = Core.Name "hydra.python.syntax.AsPattern"++_AsPattern_pattern = Core.Name "pattern"++_AsPattern_as = Core.Name "as"++newtype OrPattern =+  OrPattern {+    unOrPattern :: [ClosedPattern]}+  deriving (Eq, Ord, Read, Show)++_OrPattern = Core.Name "hydra.python.syntax.OrPattern"++data ClosedPattern =+  ClosedPatternLiteral LiteralExpression |+  ClosedPatternCapture CapturePattern |+  ClosedPatternWildcard |+  ClosedPatternValue ValuePattern |+  ClosedPatternGroup GroupPattern |+  ClosedPatternSequence SequencePattern |+  ClosedPatternMapping MappingPattern |+  ClosedPatternClass ClassPattern+  deriving (Eq, Ord, Read, Show)++_ClosedPattern = Core.Name "hydra.python.syntax.ClosedPattern"++_ClosedPattern_literal = Core.Name "literal"++_ClosedPattern_capture = Core.Name "capture"++_ClosedPattern_wildcard = Core.Name "wildcard"++_ClosedPattern_value = Core.Name "value"++_ClosedPattern_group = Core.Name "group"++_ClosedPattern_sequence = Core.Name "sequence"++_ClosedPattern_mapping = Core.Name "mapping"++_ClosedPattern_class = Core.Name "class"++data LiteralExpression =+  LiteralExpressionNumber SignedNumber |+  LiteralExpressionComplex ComplexNumber |+  LiteralExpressionString String_ |+  LiteralExpressionNone |+  LiteralExpressionTrue |+  LiteralExpressionFalse+  deriving (Eq, Ord, Read, Show)++_LiteralExpression = Core.Name "hydra.python.syntax.LiteralExpression"++_LiteralExpression_number = Core.Name "number"++_LiteralExpression_complex = Core.Name "complex"++_LiteralExpression_string = Core.Name "string"++_LiteralExpression_none = Core.Name "none"++_LiteralExpression_true = Core.Name "true"++_LiteralExpression_false = Core.Name "false"++data ComplexNumber =+  ComplexNumber {+    complexNumberReal :: SignedRealNumber,+    complexNumberPlusOrMinus :: PlusOrMinus,+    complexNumberImaginary :: ImaginaryNumber}+  deriving (Eq, Ord, Read, Show)++_ComplexNumber = Core.Name "hydra.python.syntax.ComplexNumber"++_ComplexNumber_real = Core.Name "real"++_ComplexNumber_plusOrMinus = Core.Name "plusOrMinus"++_ComplexNumber_imaginary = Core.Name "imaginary"++data PlusOrMinus =+  PlusOrMinusPlus |+  PlusOrMinusMinus+  deriving (Eq, Ord, Read, Show)++_PlusOrMinus = Core.Name "hydra.python.syntax.PlusOrMinus"++_PlusOrMinus_plus = Core.Name "plus"++_PlusOrMinus_minus = Core.Name "minus"++data SignedNumber =+  SignedNumberSign PlusOrMinus |+  SignedNumberNumber Number+  deriving (Eq, Ord, Read, Show)++_SignedNumber = Core.Name "hydra.python.syntax.SignedNumber"++_SignedNumber_sign = Core.Name "sign"++_SignedNumber_number = Core.Name "number"++data SignedRealNumber =+  SignedRealNumberSign PlusOrMinus |+  SignedRealNumberNumber RealNumber+  deriving (Eq, Ord, Read, Show)++_SignedRealNumber = Core.Name "hydra.python.syntax.SignedRealNumber"++_SignedRealNumber_sign = Core.Name "sign"++_SignedRealNumber_number = Core.Name "number"++data RealNumber =+  RealNumberInteger Integer |+  RealNumberFloat Double+  deriving (Eq, Ord, Read, Show)++_RealNumber = Core.Name "hydra.python.syntax.RealNumber"++_RealNumber_integer = Core.Name "integer"++_RealNumber_float = Core.Name "float"++newtype ImaginaryNumber =+  ImaginaryNumber {+    unImaginaryNumber :: Double}+  deriving (Eq, Ord, Read, Show)++_ImaginaryNumber = Core.Name "hydra.python.syntax.ImaginaryNumber"++newtype CapturePattern =+  CapturePattern {+    unCapturePattern :: PatternCaptureTarget}+  deriving (Eq, Ord, Read, Show)++_CapturePattern = Core.Name "hydra.python.syntax.CapturePattern"++newtype PatternCaptureTarget =+  PatternCaptureTarget {+    unPatternCaptureTarget :: Name}+  deriving (Eq, Ord, Read, Show)++_PatternCaptureTarget = Core.Name "hydra.python.syntax.PatternCaptureTarget"++newtype ValuePattern =+  ValuePattern {+    unValuePattern :: Attribute}+  deriving (Eq, Ord, Read, Show)++_ValuePattern = Core.Name "hydra.python.syntax.ValuePattern"++newtype Attribute =+  Attribute {+    unAttribute :: [Name]}+  deriving (Eq, Ord, Read, Show)++_Attribute = Core.Name "hydra.python.syntax.Attribute"++newtype NameOrAttribute =+  NameOrAttribute {+    unNameOrAttribute :: [Name]}+  deriving (Eq, Ord, Read, Show)++_NameOrAttribute = Core.Name "hydra.python.syntax.NameOrAttribute"++newtype GroupPattern =+  GroupPattern {+    unGroupPattern :: Pattern}+  deriving (Eq, Ord, Read, Show)++_GroupPattern = Core.Name "hydra.python.syntax.GroupPattern"++data SequencePattern =+  SequencePatternList (Maybe MaybeSequencePattern) |+  SequencePatternTuple (Maybe OpenSequencePattern)+  deriving (Eq, Ord, Read, Show)++_SequencePattern = Core.Name "hydra.python.syntax.SequencePattern"++_SequencePattern_list = Core.Name "list"++_SequencePattern_tuple = Core.Name "tuple"++data OpenSequencePattern =+  OpenSequencePattern {+    openSequencePatternHead :: MaybeStarPattern,+    openSequencePatternTail :: (Maybe MaybeSequencePattern)}+  deriving (Eq, Ord, Read, Show)++_OpenSequencePattern = Core.Name "hydra.python.syntax.OpenSequencePattern"++_OpenSequencePattern_head = Core.Name "head"++_OpenSequencePattern_tail = Core.Name "tail"++newtype MaybeSequencePattern =+  MaybeSequencePattern {+    unMaybeSequencePattern :: [MaybeStarPattern]}+  deriving (Eq, Ord, Read, Show)++_MaybeSequencePattern = Core.Name "hydra.python.syntax.MaybeSequencePattern"++data MaybeStarPattern =+  MaybeStarPatternStar StarPattern |+  MaybeStarPatternPattern Pattern+  deriving (Eq, Ord, Read, Show)++_MaybeStarPattern = Core.Name "hydra.python.syntax.MaybeStarPattern"++_MaybeStarPattern_star = Core.Name "star"++_MaybeStarPattern_pattern = Core.Name "pattern"++data StarPattern =+  StarPatternCapture PatternCaptureTarget |+  StarPatternWildcard+  deriving (Eq, Ord, Read, Show)++_StarPattern = Core.Name "hydra.python.syntax.StarPattern"++_StarPattern_capture = Core.Name "capture"++_StarPattern_wildcard = Core.Name "wildcard"++data MappingPattern =+  MappingPattern {+    mappingPatternItems :: (Maybe ItemsPattern),+    mappingPatternDoubleStar :: (Maybe DoubleStarPattern)}+  deriving (Eq, Ord, Read, Show)++_MappingPattern = Core.Name "hydra.python.syntax.MappingPattern"++_MappingPattern_items = Core.Name "items"++_MappingPattern_doubleStar = Core.Name "doubleStar"++newtype ItemsPattern =+  ItemsPattern {+    unItemsPattern :: [KeyValuePattern]}+  deriving (Eq, Ord, Read, Show)++_ItemsPattern = Core.Name "hydra.python.syntax.ItemsPattern"++data KeyValuePattern =+  KeyValuePattern {+    keyValuePatternKey :: LiteralExpressionOrAttribute,+    keyValuePatternValue :: Pattern}+  deriving (Eq, Ord, Read, Show)++_KeyValuePattern = Core.Name "hydra.python.syntax.KeyValuePattern"++_KeyValuePattern_key = Core.Name "key"++_KeyValuePattern_value = Core.Name "value"++data LiteralExpressionOrAttribute =+  LiteralExpressionOrAttributeLiteral LiteralExpression |+  LiteralExpressionOrAttributeAttribute Attribute+  deriving (Eq, Ord, Read, Show)++_LiteralExpressionOrAttribute = Core.Name "hydra.python.syntax.LiteralExpressionOrAttribute"++_LiteralExpressionOrAttribute_literal = Core.Name "literal"++_LiteralExpressionOrAttribute_attribute = Core.Name "attribute"++newtype DoubleStarPattern =+  DoubleStarPattern {+    unDoubleStarPattern :: PatternCaptureTarget}+  deriving (Eq, Ord, Read, Show)++_DoubleStarPattern = Core.Name "hydra.python.syntax.DoubleStarPattern"++data ClassPattern =+  ClassPattern {+    classPatternNameOrAttribute :: NameOrAttribute,+    classPatternPositionalPatterns :: (Maybe PositionalPatterns),+    classPatternKeywordPatterns :: (Maybe KeywordPatterns)}+  deriving (Eq, Ord, Read, Show)++_ClassPattern = Core.Name "hydra.python.syntax.ClassPattern"++_ClassPattern_nameOrAttribute = Core.Name "nameOrAttribute"++_ClassPattern_positionalPatterns = Core.Name "positionalPatterns"++_ClassPattern_keywordPatterns = Core.Name "keywordPatterns"++newtype PositionalPatterns =+  PositionalPatterns {+    unPositionalPatterns :: [Pattern]}+  deriving (Eq, Ord, Read, Show)++_PositionalPatterns = Core.Name "hydra.python.syntax.PositionalPatterns"++newtype KeywordPatterns =+  KeywordPatterns {+    unKeywordPatterns :: [KeywordPattern]}+  deriving (Eq, Ord, Read, Show)++_KeywordPatterns = Core.Name "hydra.python.syntax.KeywordPatterns"++data KeywordPattern =+  KeywordPattern {+    keywordPatternName :: Name,+    keywordPatternPattern :: Pattern}+  deriving (Eq, Ord, Read, Show)++_KeywordPattern = Core.Name "hydra.python.syntax.KeywordPattern"++_KeywordPattern_name = Core.Name "name"++_KeywordPattern_pattern = Core.Name "pattern"++data TypeAlias =+  TypeAlias {+    typeAliasName :: Name,+    typeAliasTypeParams :: [TypeParameter],+    typeAliasExpression :: Expression}+  deriving (Eq, Ord, Read, Show)++_TypeAlias = Core.Name "hydra.python.syntax.TypeAlias"++_TypeAlias_name = Core.Name "name"++_TypeAlias_typeParams = Core.Name "typeParams"++_TypeAlias_expression = Core.Name "expression"++data TypeParameter =+  TypeParameterSimple SimpleTypeParameter |+  TypeParameterStar StarTypeParameter |+  TypeParameterDoubleStar DoubleStarTypeParameter+  deriving (Eq, Ord, Read, Show)++_TypeParameter = Core.Name "hydra.python.syntax.TypeParameter"++_TypeParameter_simple = Core.Name "simple"++_TypeParameter_star = Core.Name "star"++_TypeParameter_doubleStar = Core.Name "doubleStar"++data SimpleTypeParameter =+  SimpleTypeParameter {+    simpleTypeParameterName :: Name,+    simpleTypeParameterBound :: (Maybe Expression),+    simpleTypeParameterDefault :: (Maybe Expression)}+  deriving (Eq, Ord, Read, Show)++_SimpleTypeParameter = Core.Name "hydra.python.syntax.SimpleTypeParameter"++_SimpleTypeParameter_name = Core.Name "name"++_SimpleTypeParameter_bound = Core.Name "bound"++_SimpleTypeParameter_default = Core.Name "default"++data StarTypeParameter =+  StarTypeParameter {+    starTypeParameterName :: Name,+    starTypeParameterDefault :: (Maybe StarExpression)}+  deriving (Eq, Ord, Read, Show)++_StarTypeParameter = Core.Name "hydra.python.syntax.StarTypeParameter"++_StarTypeParameter_name = Core.Name "name"++_StarTypeParameter_default = Core.Name "default"++data DoubleStarTypeParameter =+  DoubleStarTypeParameter {+    doubleStarTypeParameterName :: Name,+    doubleStarTypeParameterDefault :: (Maybe Expression)}+  deriving (Eq, Ord, Read, Show)++_DoubleStarTypeParameter = Core.Name "hydra.python.syntax.DoubleStarTypeParameter"++_DoubleStarTypeParameter_name = Core.Name "name"++_DoubleStarTypeParameter_default = Core.Name "default"++data Expression =+  ExpressionConditional Conditional |+  ExpressionSimple Disjunction |+  ExpressionLambda Lambda+  deriving (Eq, Ord, Read, Show)++_Expression = Core.Name "hydra.python.syntax.Expression"++_Expression_conditional = Core.Name "conditional"++_Expression_simple = Core.Name "simple"++_Expression_lambda = Core.Name "lambda"++data Conditional =+  Conditional {+    conditionalBody :: Disjunction,+    conditionalIf :: Disjunction,+    conditionalElse :: Expression}+  deriving (Eq, Ord, Read, Show)++_Conditional = Core.Name "hydra.python.syntax.Conditional"++_Conditional_body = Core.Name "body"++_Conditional_if = Core.Name "if"++_Conditional_else = Core.Name "else"++data YieldExpression =+  YieldExpressionFrom Expression |+  YieldExpressionSimple [StarExpression]+  deriving (Eq, Ord, Read, Show)++_YieldExpression = Core.Name "hydra.python.syntax.YieldExpression"++_YieldExpression_from = Core.Name "from"++_YieldExpression_simple = Core.Name "simple"++data StarExpression =+  StarExpressionStar BitwiseOr |+  StarExpressionSimple Expression+  deriving (Eq, Ord, Read, Show)++_StarExpression = Core.Name "hydra.python.syntax.StarExpression"++_StarExpression_star = Core.Name "star"++_StarExpression_simple = Core.Name "simple"++newtype StarNamedExpressions =+  StarNamedExpressions {+    unStarNamedExpressions :: [StarNamedExpression]}+  deriving (Eq, Ord, Read, Show)++_StarNamedExpressions = Core.Name "hydra.python.syntax.StarNamedExpressions"++data StarNamedExpression =+  StarNamedExpressionStar BitwiseOr |+  StarNamedExpressionSimple NamedExpression+  deriving (Eq, Ord, Read, Show)++_StarNamedExpression = Core.Name "hydra.python.syntax.StarNamedExpression"++_StarNamedExpression_star = Core.Name "star"++_StarNamedExpression_simple = Core.Name "simple"++data AssignmentExpression =+  AssignmentExpression {+    assignmentExpressionName :: Name,+    assignmentExpressionExpression :: Expression}+  deriving (Eq, Ord, Read, Show)++_AssignmentExpression = Core.Name "hydra.python.syntax.AssignmentExpression"++_AssignmentExpression_name = Core.Name "name"++_AssignmentExpression_expression = Core.Name "expression"++data NamedExpression =+  NamedExpressionAssignment AssignmentExpression |+  NamedExpressionSimple Expression+  deriving (Eq, Ord, Read, Show)++_NamedExpression = Core.Name "hydra.python.syntax.NamedExpression"++_NamedExpression_assignment = Core.Name "assignment"++_NamedExpression_simple = Core.Name "simple"++newtype Disjunction =+  Disjunction {+    unDisjunction :: [Conjunction]}+  deriving (Eq, Ord, Read, Show)++_Disjunction = Core.Name "hydra.python.syntax.Disjunction"++newtype Conjunction =+  Conjunction {+    unConjunction :: [Inversion]}+  deriving (Eq, Ord, Read, Show)++_Conjunction = Core.Name "hydra.python.syntax.Conjunction"++data Inversion =+  InversionNot Inversion |+  InversionSimple Comparison+  deriving (Eq, Ord, Read, Show)++_Inversion = Core.Name "hydra.python.syntax.Inversion"++_Inversion_not = Core.Name "not"++_Inversion_simple = Core.Name "simple"++data Comparison =+  Comparison {+    comparisonLhs :: BitwiseOr,+    comparisonRhs :: [CompareOpBitwiseOrPair]}+  deriving (Eq, Ord, Read, Show)++_Comparison = Core.Name "hydra.python.syntax.Comparison"++_Comparison_lhs = Core.Name "lhs"++_Comparison_rhs = Core.Name "rhs"++data CompareOpBitwiseOrPair =+  CompareOpBitwiseOrPair {+    compareOpBitwiseOrPairOperator :: CompareOp,+    compareOpBitwiseOrPairRhs :: BitwiseOr}+  deriving (Eq, Ord, Read, Show)++_CompareOpBitwiseOrPair = Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"++_CompareOpBitwiseOrPair_operator = Core.Name "operator"++_CompareOpBitwiseOrPair_rhs = Core.Name "rhs"++data CompareOp =+  CompareOpEq |+  CompareOpNoteq |+  CompareOpLte |+  CompareOpLt |+  CompareOpGte |+  CompareOpGt |+  CompareOpNotin |+  CompareOpIn |+  CompareOpIsnot |+  CompareOpIs+  deriving (Eq, Ord, Read, Show)++_CompareOp = Core.Name "hydra.python.syntax.CompareOp"++_CompareOp_eq = Core.Name "eq"++_CompareOp_noteq = Core.Name "noteq"++_CompareOp_lte = Core.Name "lte"++_CompareOp_lt = Core.Name "lt"++_CompareOp_gte = Core.Name "gte"++_CompareOp_gt = Core.Name "gt"++_CompareOp_notin = Core.Name "notin"++_CompareOp_in = Core.Name "in"++_CompareOp_isnot = Core.Name "isnot"++_CompareOp_is = Core.Name "is"++data BitwiseOr =+  BitwiseOr {+    bitwiseOrLhs :: (Maybe BitwiseOr),+    bitwiseOrRhs :: BitwiseXor}+  deriving (Eq, Ord, Read, Show)++_BitwiseOr = Core.Name "hydra.python.syntax.BitwiseOr"++_BitwiseOr_lhs = Core.Name "lhs"++_BitwiseOr_rhs = Core.Name "rhs"++data BitwiseXor =+  BitwiseXor {+    bitwiseXorLhs :: (Maybe BitwiseXor),+    bitwiseXorRhs :: BitwiseAnd}+  deriving (Eq, Ord, Read, Show)++_BitwiseXor = Core.Name "hydra.python.syntax.BitwiseXor"++_BitwiseXor_lhs = Core.Name "lhs"++_BitwiseXor_rhs = Core.Name "rhs"++data BitwiseAnd =+  BitwiseAnd {+    bitwiseAndLhs :: (Maybe BitwiseAnd),+    bitwiseAndRhs :: ShiftExpression}+  deriving (Eq, Ord, Read, Show)++_BitwiseAnd = Core.Name "hydra.python.syntax.BitwiseAnd"++_BitwiseAnd_lhs = Core.Name "lhs"++_BitwiseAnd_rhs = Core.Name "rhs"++data ShiftExpression =+  ShiftExpression {+    shiftExpressionLhs :: (Maybe ShiftLhs),+    shiftExpressionRhs :: Sum}+  deriving (Eq, Ord, Read, Show)++_ShiftExpression = Core.Name "hydra.python.syntax.ShiftExpression"++_ShiftExpression_lhs = Core.Name "lhs"++_ShiftExpression_rhs = Core.Name "rhs"++data ShiftLhs =+  ShiftLhs {+    shiftLhsOperand :: ShiftExpression,+    shiftLhsOperator :: ShiftOp}+  deriving (Eq, Ord, Read, Show)++_ShiftLhs = Core.Name "hydra.python.syntax.ShiftLhs"++_ShiftLhs_operand = Core.Name "operand"++_ShiftLhs_operator = Core.Name "operator"++data ShiftOp =+  ShiftOpLeft |+  ShiftOpRight+  deriving (Eq, Ord, Read, Show)++_ShiftOp = Core.Name "hydra.python.syntax.ShiftOp"++_ShiftOp_left = Core.Name "left"++_ShiftOp_right = Core.Name "right"++data Sum =+  Sum {+    sumLhs :: (Maybe SumLhs),+    sumRhs :: Term}+  deriving (Eq, Ord, Read, Show)++_Sum = Core.Name "hydra.python.syntax.Sum"++_Sum_lhs = Core.Name "lhs"++_Sum_rhs = Core.Name "rhs"++data SumLhs =+  SumLhs {+    sumLhsOperand :: Sum,+    sumLhsOperator :: SumOp}+  deriving (Eq, Ord, Read, Show)++_SumLhs = Core.Name "hydra.python.syntax.SumLhs"++_SumLhs_operand = Core.Name "operand"++_SumLhs_operator = Core.Name "operator"++data SumOp =+  SumOpAdd |+  SumOpSub+  deriving (Eq, Ord, Read, Show)++_SumOp = Core.Name "hydra.python.syntax.SumOp"++_SumOp_add = Core.Name "add"++_SumOp_sub = Core.Name "sub"++data Term =+  Term {+    termLhs :: (Maybe TermLhs),+    termRhs :: Factor}+  deriving (Eq, Ord, Read, Show)++_Term = Core.Name "hydra.python.syntax.Term"++_Term_lhs = Core.Name "lhs"++_Term_rhs = Core.Name "rhs"++data TermLhs =+  TermLhs {+    termLhsOperand :: Term,+    termLhsOperator :: TermOp}+  deriving (Eq, Ord, Read, Show)++_TermLhs = Core.Name "hydra.python.syntax.TermLhs"++_TermLhs_operand = Core.Name "operand"++_TermLhs_operator = Core.Name "operator"++data TermOp =+  TermOpMul |+  TermOpDiv |+  TermOpFloordiv |+  TermOpMod |+  TermOpMatmul+  deriving (Eq, Ord, Read, Show)++_TermOp = Core.Name "hydra.python.syntax.TermOp"++_TermOp_mul = Core.Name "mul"++_TermOp_div = Core.Name "div"++_TermOp_floordiv = Core.Name "floordiv"++_TermOp_mod = Core.Name "mod"++_TermOp_matmul = Core.Name "matmul"++data Factor =+  FactorPositive Factor |+  FactorNegative Factor |+  FactorComplement Factor |+  FactorSimple Power+  deriving (Eq, Ord, Read, Show)++_Factor = Core.Name "hydra.python.syntax.Factor"++_Factor_positive = Core.Name "positive"++_Factor_negative = Core.Name "negative"++_Factor_complement = Core.Name "complement"++_Factor_simple = Core.Name "simple"++data Power =+  Power {+    powerLhs :: AwaitPrimary,+    powerRhs :: (Maybe Factor)}+  deriving (Eq, Ord, Read, Show)++_Power = Core.Name "hydra.python.syntax.Power"++_Power_lhs = Core.Name "lhs"++_Power_rhs = Core.Name "rhs"++data AwaitPrimary =+  AwaitPrimary {+    awaitPrimaryAwait :: Bool,+    awaitPrimaryPrimary :: Primary}+  deriving (Eq, Ord, Read, Show)++_AwaitPrimary = Core.Name "hydra.python.syntax.AwaitPrimary"++_AwaitPrimary_await = Core.Name "await"++_AwaitPrimary_primary = Core.Name "primary"++data Primary =+  PrimarySimple Atom |+  PrimaryCompound PrimaryWithRhs+  deriving (Eq, Ord, Read, Show)++_Primary = Core.Name "hydra.python.syntax.Primary"++_Primary_simple = Core.Name "simple"++_Primary_compound = Core.Name "compound"++data PrimaryWithRhs =+  PrimaryWithRhs {+    primaryWithRhsPrimary :: Primary,+    primaryWithRhsRhs :: PrimaryRhs}+  deriving (Eq, Ord, Read, Show)++_PrimaryWithRhs = Core.Name "hydra.python.syntax.PrimaryWithRhs"++_PrimaryWithRhs_primary = Core.Name "primary"++_PrimaryWithRhs_rhs = Core.Name "rhs"++data PrimaryRhs =+  PrimaryRhsProject Name |+  PrimaryRhsGenexp Genexp |+  PrimaryRhsCall Args |+  PrimaryRhsSlices Slices+  deriving (Eq, Ord, Read, Show)++_PrimaryRhs = Core.Name "hydra.python.syntax.PrimaryRhs"++_PrimaryRhs_project = Core.Name "project"++_PrimaryRhs_genexp = Core.Name "genexp"++_PrimaryRhs_call = Core.Name "call"++_PrimaryRhs_slices = Core.Name "slices"++data Slices =+  Slices {+    slicesHead :: Slice,+    slicesTail :: [SliceOrStarredExpression]}+  deriving (Eq, Ord, Read, Show)++_Slices = Core.Name "hydra.python.syntax.Slices"++_Slices_head = Core.Name "head"++_Slices_tail = Core.Name "tail"++data SliceOrStarredExpression =+  SliceOrStarredExpressionSlice Slice |+  SliceOrStarredExpressionStarred StarredExpression+  deriving (Eq, Ord, Read, Show)++_SliceOrStarredExpression = Core.Name "hydra.python.syntax.SliceOrStarredExpression"++_SliceOrStarredExpression_slice = Core.Name "slice"++_SliceOrStarredExpression_starred = Core.Name "starred"++data Slice =+  SliceNamed NamedExpression |+  SliceSlice_ SliceExpression+  deriving (Eq, Ord, Read, Show)++_Slice = Core.Name "hydra.python.syntax.Slice"++_Slice_named = Core.Name "named"++_Slice_slice_ = Core.Name "slice_"++data SliceExpression =+  SliceExpression {+    sliceExpressionStart :: (Maybe Expression),+    sliceExpressionStop :: (Maybe Expression),+    sliceExpressionStep :: (Maybe Expression)}+  deriving (Eq, Ord, Read, Show)++_SliceExpression = Core.Name "hydra.python.syntax.SliceExpression"++_SliceExpression_start = Core.Name "start"++_SliceExpression_stop = Core.Name "stop"++_SliceExpression_step = Core.Name "step"++data Atom =+  AtomName Name |+  AtomTrue |+  AtomFalse |+  AtomNone |+  AtomString String_ |+  AtomNumber Number |+  AtomTuple Tuple |+  AtomGroup Group |+  AtomGenexp Genexp |+  AtomList List |+  AtomListcomp Listcomp |+  AtomDict Dict |+  AtomSet Set |+  AtomDictcomp Dictcomp |+  AtomSetcomp Setcomp |+  AtomEllipsis+  deriving (Eq, Ord, Read, Show)++_Atom = Core.Name "hydra.python.syntax.Atom"++_Atom_name = Core.Name "name"++_Atom_true = Core.Name "true"++_Atom_false = Core.Name "false"++_Atom_none = Core.Name "none"++_Atom_string = Core.Name "string"++_Atom_number = Core.Name "number"++_Atom_tuple = Core.Name "tuple"++_Atom_group = Core.Name "group"++_Atom_genexp = Core.Name "genexp"++_Atom_list = Core.Name "list"++_Atom_listcomp = Core.Name "listcomp"++_Atom_dict = Core.Name "dict"++_Atom_set = Core.Name "set"++_Atom_dictcomp = Core.Name "dictcomp"++_Atom_setcomp = Core.Name "setcomp"++_Atom_ellipsis = Core.Name "ellipsis"++data Group =+  GroupYield YieldExpression |+  GroupExpression NamedExpression+  deriving (Eq, Ord, Read, Show)++_Group = Core.Name "hydra.python.syntax.Group"++_Group_yield = Core.Name "yield"++_Group_expression = Core.Name "expression"++data Lambda =+  Lambda {+    lambdaParams :: LambdaParameters,+    lambdaBody :: Expression}+  deriving (Eq, Ord, Read, Show)++_Lambda = Core.Name "hydra.python.syntax.Lambda"++_Lambda_params = Core.Name "params"++_Lambda_body = Core.Name "body"++data LambdaParameters =+  LambdaParameters {+    lambdaParametersSlashNoDefault :: (Maybe LambdaSlashNoDefault),+    lambdaParametersParamNoDefault :: [LambdaParamNoDefault],+    lambdaParametersParamWithDefault :: [LambdaParamWithDefault],+    lambdaParametersStarEtc :: (Maybe LambdaStarEtc)}+  deriving (Eq, Ord, Read, Show)++_LambdaParameters = Core.Name "hydra.python.syntax.LambdaParameters"++_LambdaParameters_slashNoDefault = Core.Name "slashNoDefault"++_LambdaParameters_paramNoDefault = Core.Name "paramNoDefault"++_LambdaParameters_paramWithDefault = Core.Name "paramWithDefault"++_LambdaParameters_starEtc = Core.Name "starEtc"++data LambdaSlashNoDefault =+  LambdaSlashNoDefault {+    lambdaSlashNoDefaultParameters :: [LambdaParamNoDefault]}+  deriving (Eq, Ord, Read, Show)++_LambdaSlashNoDefault = Core.Name "hydra.python.syntax.LambdaSlashNoDefault"++_LambdaSlashNoDefault_parameters = Core.Name "parameters"++data LambdaSlashWithDefault =+  LambdaSlashWithDefault {+    lambdaSlashWithDefaultParamNoDefault :: [LambdaParamNoDefault],+    lambdaSlashWithDefaultParamWithDefault :: [LambdaParamWithDefault]}+  deriving (Eq, Ord, Read, Show)++_LambdaSlashWithDefault = Core.Name "hydra.python.syntax.LambdaSlashWithDefault"++_LambdaSlashWithDefault_paramNoDefault = Core.Name "paramNoDefault"++_LambdaSlashWithDefault_paramWithDefault = Core.Name "paramWithDefault"++data LambdaStarEtc =+  LambdaStarEtcStar Bool |+  LambdaStarEtcParamNoDefault LambdaParamNoDefault |+  LambdaStarEtcParamMaybeDefault [LambdaParamMaybeDefault] |+  LambdaStarEtcKwds LambdaKwds+  deriving (Eq, Ord, Read, Show)++_LambdaStarEtc = Core.Name "hydra.python.syntax.LambdaStarEtc"++_LambdaStarEtc_star = Core.Name "star"++_LambdaStarEtc_paramNoDefault = Core.Name "paramNoDefault"++_LambdaStarEtc_paramMaybeDefault = Core.Name "paramMaybeDefault"++_LambdaStarEtc_kwds = Core.Name "kwds"++newtype LambdaKwds =+  LambdaKwds {+    unLambdaKwds :: LambdaParamNoDefault}+  deriving (Eq, Ord, Read, Show)++_LambdaKwds = Core.Name "hydra.python.syntax.LambdaKwds"++newtype LambdaParamNoDefault =+  LambdaParamNoDefault {+    unLambdaParamNoDefault :: Name}+  deriving (Eq, Ord, Read, Show)++_LambdaParamNoDefault = Core.Name "hydra.python.syntax.LambdaParamNoDefault"++data LambdaParamWithDefault =+  LambdaParamWithDefault {+    lambdaParamWithDefaultParam :: Name,+    lambdaParamWithDefaultDefault :: (Maybe Default)}+  deriving (Eq, Ord, Read, Show)++_LambdaParamWithDefault = Core.Name "hydra.python.syntax.LambdaParamWithDefault"++_LambdaParamWithDefault_param = Core.Name "param"++_LambdaParamWithDefault_default = Core.Name "default"++data LambdaParamMaybeDefault =+  LambdaParamMaybeDefault {+    lambdaParamMaybeDefaultParam :: Name,+    lambdaParamMaybeDefaultDefault :: (Maybe Default)}+  deriving (Eq, Ord, Read, Show)++_LambdaParamMaybeDefault = Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"++_LambdaParamMaybeDefault_param = Core.Name "param"++_LambdaParamMaybeDefault_default = Core.Name "default"++newtype List =+  List {+    unList :: [StarNamedExpression]}+  deriving (Eq, Ord, Read, Show)++_List = Core.Name "hydra.python.syntax.List"++newtype Tuple =+  Tuple {+    unTuple :: [StarNamedExpression]}+  deriving (Eq, Ord, Read, Show)++_Tuple = Core.Name "hydra.python.syntax.Tuple"++newtype Set =+  Set {+    unSet :: [StarNamedExpression]}+  deriving (Eq, Ord, Read, Show)++_Set = Core.Name "hydra.python.syntax.Set"++newtype Dict =+  Dict {+    unDict :: [DoubleStarredKvpair]}+  deriving (Eq, Ord, Read, Show)++_Dict = Core.Name "hydra.python.syntax.Dict"++data DoubleStarredKvpair =+  DoubleStarredKvpairStarred BitwiseOr |+  DoubleStarredKvpairPair Kvpair+  deriving (Eq, Ord, Read, Show)++_DoubleStarredKvpair = Core.Name "hydra.python.syntax.DoubleStarredKvpair"++_DoubleStarredKvpair_starred = Core.Name "starred"++_DoubleStarredKvpair_pair = Core.Name "pair"++data Kvpair =+  Kvpair {+    kvpairKey :: Expression,+    kvpairValue :: Expression}+  deriving (Eq, Ord, Read, Show)++_Kvpair = Core.Name "hydra.python.syntax.Kvpair"++_Kvpair_key = Core.Name "key"++_Kvpair_value = Core.Name "value"++newtype ForIfClauses =+  ForIfClauses {+    unForIfClauses :: [ForIfClause]}+  deriving (Eq, Ord, Read, Show)++_ForIfClauses = Core.Name "hydra.python.syntax.ForIfClauses"++data ForIfClause =+  ForIfClause {+    forIfClauseAsync :: Bool,+    forIfClauseTargets :: [StarTarget],+    forIfClauseIn :: Disjunction,+    forIfClauseIfs :: [Disjunction]}+  deriving (Eq, Ord, Read, Show)++_ForIfClause = Core.Name "hydra.python.syntax.ForIfClause"++_ForIfClause_async = Core.Name "async"++_ForIfClause_targets = Core.Name "targets"++_ForIfClause_in = Core.Name "in"++_ForIfClause_ifs = Core.Name "ifs"++data Listcomp =+  Listcomp {+    listcompExpression :: NamedExpression,+    listcompForIfClauses :: ForIfClauses}+  deriving (Eq, Ord, Read, Show)++_Listcomp = Core.Name "hydra.python.syntax.Listcomp"++_Listcomp_expression = Core.Name "expression"++_Listcomp_forIfClauses = Core.Name "forIfClauses"++data Setcomp =+  Setcomp {+    setcompExpression :: NamedExpression,+    setcompForIfClauses :: ForIfClauses}+  deriving (Eq, Ord, Read, Show)++_Setcomp = Core.Name "hydra.python.syntax.Setcomp"++_Setcomp_expression = Core.Name "expression"++_Setcomp_forIfClauses = Core.Name "forIfClauses"++data Genexp =+  Genexp {+    genexpHead :: GenexpHead,+    genexpTail :: ForIfClauses}+  deriving (Eq, Ord, Read, Show)++_Genexp = Core.Name "hydra.python.syntax.Genexp"++_Genexp_head = Core.Name "head"++_Genexp_tail = Core.Name "tail"++data GenexpHead =+  GenexpHeadAssignment AssignmentExpression |+  GenexpHeadExpression Expression+  deriving (Eq, Ord, Read, Show)++_GenexpHead = Core.Name "hydra.python.syntax.GenexpHead"++_GenexpHead_assignment = Core.Name "assignment"++_GenexpHead_expression = Core.Name "expression"++data Dictcomp =+  Dictcomp {+    dictcompKvpair :: Kvpair,+    dictcompForIfClauses :: ForIfClauses}+  deriving (Eq, Ord, Read, Show)++_Dictcomp = Core.Name "hydra.python.syntax.Dictcomp"++_Dictcomp_kvpair = Core.Name "kvpair"++_Dictcomp_forIfClauses = Core.Name "forIfClauses"++data Args =+  Args {+    argsPositional :: [PosArg],+    argsKwargOrStarred :: [KwargOrStarred],+    argsKwargOrDoubleStarred :: [KwargOrDoubleStarred]}+  deriving (Eq, Ord, Read, Show)++_Args = Core.Name "hydra.python.syntax.Args"++_Args_positional = Core.Name "positional"++_Args_kwargOrStarred = Core.Name "kwargOrStarred"++_Args_kwargOrDoubleStarred = Core.Name "kwargOrDoubleStarred"++data PosArg =+  PosArgStarred StarredExpression |+  PosArgAssignment AssignmentExpression |+  PosArgExpression Expression+  deriving (Eq, Ord, Read, Show)++_PosArg = Core.Name "hydra.python.syntax.PosArg"++_PosArg_starred = Core.Name "starred"++_PosArg_assignment = Core.Name "assignment"++_PosArg_expression = Core.Name "expression"++newtype StarredExpression =+  StarredExpression {+    unStarredExpression :: Expression}+  deriving (Eq, Ord, Read, Show)++_StarredExpression = Core.Name "hydra.python.syntax.StarredExpression"++data KwargOrStarred =+  KwargOrStarredKwarg Kwarg |+  KwargOrStarredStarred StarredExpression+  deriving (Eq, Ord, Read, Show)++_KwargOrStarred = Core.Name "hydra.python.syntax.KwargOrStarred"++_KwargOrStarred_kwarg = Core.Name "kwarg"++_KwargOrStarred_starred = Core.Name "starred"++data Kwarg =+  Kwarg {+    kwargName :: Name,+    kwargValue :: Expression}+  deriving (Eq, Ord, Read, Show)++_Kwarg = Core.Name "hydra.python.syntax.Kwarg"++_Kwarg_name = Core.Name "name"++_Kwarg_value = Core.Name "value"++data KwargOrDoubleStarred =+  KwargOrDoubleStarredKwarg Kwarg |+  KwargOrDoubleStarredDoubleStarred Expression+  deriving (Eq, Ord, Read, Show)++_KwargOrDoubleStarred = Core.Name "hydra.python.syntax.KwargOrDoubleStarred"++_KwargOrDoubleStarred_kwarg = Core.Name "kwarg"++_KwargOrDoubleStarred_doubleStarred = Core.Name "doubleStarred"++newtype StarTargetsListSeq =+  StarTargetsListSeq {+    unStarTargetsListSeq :: [StarTarget]}+  deriving (Eq, Ord, Read, Show)++_StarTargetsListSeq = Core.Name "hydra.python.syntax.StarTargetsListSeq"++newtype StarTargetsTupleSeq =+  StarTargetsTupleSeq {+    unStarTargetsTupleSeq :: [StarTarget]}+  deriving (Eq, Ord, Read, Show)++_StarTargetsTupleSeq = Core.Name "hydra.python.syntax.StarTargetsTupleSeq"++data StarTarget =+  StarTargetStarred StarTarget |+  StarTargetUnstarred TargetWithStarAtom+  deriving (Eq, Ord, Read, Show)++_StarTarget = Core.Name "hydra.python.syntax.StarTarget"++_StarTarget_starred = Core.Name "starred"++_StarTarget_unstarred = Core.Name "unstarred"++data TargetWithStarAtom =+  TargetWithStarAtomProject TPrimaryAndName |+  TargetWithStarAtomSlices TPrimaryAndSlices |+  TargetWithStarAtomAtom StarAtom+  deriving (Eq, Ord, Read, Show)++_TargetWithStarAtom = Core.Name "hydra.python.syntax.TargetWithStarAtom"++_TargetWithStarAtom_project = Core.Name "project"++_TargetWithStarAtom_slices = Core.Name "slices"++_TargetWithStarAtom_atom = Core.Name "atom"++data TPrimaryAndName =+  TPrimaryAndName {+    tPrimaryAndNamePrimary :: TPrimary,+    tPrimaryAndNameName :: Name}+  deriving (Eq, Ord, Read, Show)++_TPrimaryAndName = Core.Name "hydra.python.syntax.TPrimaryAndName"++_TPrimaryAndName_primary = Core.Name "primary"++_TPrimaryAndName_name = Core.Name "name"++data TPrimaryAndSlices =+  TPrimaryAndSlices {+    tPrimaryAndSlicesPrimary :: TPrimary,+    tPrimaryAndSlicesSlices :: Slices}+  deriving (Eq, Ord, Read, Show)++_TPrimaryAndSlices = Core.Name "hydra.python.syntax.TPrimaryAndSlices"++_TPrimaryAndSlices_primary = Core.Name "primary"++_TPrimaryAndSlices_slices = Core.Name "slices"++data StarAtom =+  StarAtomName Name |+  StarAtomTargetWithStarAtom TargetWithStarAtom |+  StarAtomStarTargetsTupleSeq (Maybe StarTargetsTupleSeq) |+  StarAtomStarTargetsListSeq (Maybe StarTargetsListSeq)+  deriving (Eq, Ord, Read, Show)++_StarAtom = Core.Name "hydra.python.syntax.StarAtom"++_StarAtom_name = Core.Name "name"++_StarAtom_targetWithStarAtom = Core.Name "targetWithStarAtom"++_StarAtom_starTargetsTupleSeq = Core.Name "starTargetsTupleSeq"++_StarAtom_starTargetsListSeq = Core.Name "starTargetsListSeq"++data SingleTarget =+  SingleTargetSubscriptAttributeTarget SingleSubscriptAttributeTarget |+  SingleTargetName Name |+  SingleTargetParens SingleTarget+  deriving (Eq, Ord, Read, Show)++_SingleTarget = Core.Name "hydra.python.syntax.SingleTarget"++_SingleTarget_subscriptAttributeTarget = Core.Name "subscriptAttributeTarget"++_SingleTarget_name = Core.Name "name"++_SingleTarget_parens = Core.Name "parens"++data SingleSubscriptAttributeTarget =+  SingleSubscriptAttributeTargetPrimaryAndName TPrimaryAndName |+  SingleSubscriptAttributeTargetPrimaryAndSlices TPrimaryAndSlices+  deriving (Eq, Ord, Read, Show)++_SingleSubscriptAttributeTarget = Core.Name "hydra.python.syntax.SingleSubscriptAttributeTarget"++_SingleSubscriptAttributeTarget_primaryAndName = Core.Name "primaryAndName"++_SingleSubscriptAttributeTarget_primaryAndSlices = Core.Name "primaryAndSlices"++data TPrimary =+  TPrimaryPrimaryAndName TPrimaryAndName |+  TPrimaryPrimaryAndSlices TPrimaryAndSlices |+  TPrimaryPrimaryAndGenexp TPrimaryAndGenexp |+  TPrimaryPrimaryAndArguments TPrimaryAndArguments |+  TPrimaryAtom Atom+  deriving (Eq, Ord, Read, Show)++_TPrimary = Core.Name "hydra.python.syntax.TPrimary"++_TPrimary_primaryAndName = Core.Name "primaryAndName"++_TPrimary_primaryAndSlices = Core.Name "primaryAndSlices"++_TPrimary_primaryAndGenexp = Core.Name "primaryAndGenexp"++_TPrimary_primaryAndArguments = Core.Name "primaryAndArguments"++_TPrimary_atom = Core.Name "atom"++data TPrimaryAndGenexp =+  TPrimaryAndGenexp {+    tPrimaryAndGenexpPrimary :: TPrimary,+    tPrimaryAndGenexpGenexp :: Genexp}+  deriving (Eq, Ord, Read, Show)++_TPrimaryAndGenexp = Core.Name "hydra.python.syntax.TPrimaryAndGenexp"++_TPrimaryAndGenexp_primary = Core.Name "primary"++_TPrimaryAndGenexp_genexp = Core.Name "genexp"++data TPrimaryAndArguments =+  TPrimaryAndArguments {+    tPrimaryAndArgumentsPrimary :: TPrimary,+    tPrimaryAndArgumentsArguments :: (Maybe Args)}+  deriving (Eq, Ord, Read, Show)++_TPrimaryAndArguments = Core.Name "hydra.python.syntax.TPrimaryAndArguments"++_TPrimaryAndArguments_primary = Core.Name "primary"++_TPrimaryAndArguments_arguments = Core.Name "arguments"++newtype DelTargets =+  DelTargets {+    unDelTargets :: [DelTarget]}+  deriving (Eq, Ord, Read, Show)++_DelTargets = Core.Name "hydra.python.syntax.DelTargets"++data DelTarget =+  DelTargetPrimaryAndName TPrimaryAndName |+  DelTargetPrimaryAndSlices TPrimaryAndSlices |+  DelTargetDelTAtom DelTAtom+  deriving (Eq, Ord, Read, Show)++_DelTarget = Core.Name "hydra.python.syntax.DelTarget"++_DelTarget_primaryAndName = Core.Name "primaryAndName"++_DelTarget_primaryAndSlices = Core.Name "primaryAndSlices"++_DelTarget_delTAtom = Core.Name "delTAtom"++data DelTAtom =+  DelTAtomName Name |+  DelTAtomTarget DelTarget |+  DelTAtomTargets DelTargets+  deriving (Eq, Ord, Read, Show)++_DelTAtom = Core.Name "hydra.python.syntax.DelTAtom"++_DelTAtom_name = Core.Name "name"++_DelTAtom_target = Core.Name "target"++_DelTAtom_targets = Core.Name "targets"++data TypeExpression =+  TypeExpressionExpression Expression |+  TypeExpressionStarredExpression Expression |+  TypeExpressionDoubleStarredExpression Expression+  deriving (Eq, Ord, Read, Show)++_TypeExpression = Core.Name "hydra.python.syntax.TypeExpression"++_TypeExpression_expression = Core.Name "expression"++_TypeExpression_starredExpression = Core.Name "starredExpression"++_TypeExpression_doubleStarredExpression = Core.Name "doubleStarredExpression"++newtype FuncTypeComment =+  FuncTypeComment {+    unFuncTypeComment :: TypeComment}+  deriving (Eq, Ord, Read, Show)++_FuncTypeComment = Core.Name "hydra.python.syntax.FuncTypeComment"
+ src/main/haskell/Hydra/Python/Testing.hs view
@@ -0,0 +1,135 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Python test code generation codec for pytest-based generation tests++module Hydra.Python.Testing where++import qualified Hydra.Ast as Ast+import qualified Hydra.Classes as Classes+import qualified Hydra.Coders as Coders+import qualified Hydra.Constants as Constants+import qualified Hydra.Core as Core+import qualified Hydra.Error.Checking as Checking+import qualified Hydra.Error.Core as ErrorCore+import qualified Hydra.Error.Packaging as ErrorPackaging+import qualified Hydra.Errors as Errors+import qualified Hydra.Formatting as Formatting+import qualified Hydra.Graph as Graph+import qualified Hydra.Json.Model as Model+import qualified Hydra.Overlay.Haskell.Lib.Chars as Chars+import qualified Hydra.Overlay.Haskell.Lib.Eithers as Eithers+import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Names as Names+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Python.Syntax as Syntax+import qualified Hydra.Query as Query+import qualified Hydra.Relational as Relational+import qualified Hydra.Serialization as Serialization+import qualified Hydra.Tabular as Tabular+import qualified Hydra.Test.Utils as Utils+import qualified Hydra.Testing as Testing+import qualified Hydra.Topology as Topology+import qualified Hydra.Typed as Typed+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import qualified Hydra.Validation as Validation+import qualified Hydra.Variants as Variants+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++-- | Build the complete Python test module content+buildPythonTestModule :: t0 -> Testing.TestGroup -> String -> String+buildPythonTestModule testModule testGroup testBody =++      let groupName_ = Testing.testGroupName testGroup+          header =+                  Strings.cat [+                    Strings.cat2 "# " Constants.warningAutoGeneratedFile,+                    "\n",+                    (Strings.cat2 "# " groupName_),+                    "\n\n"]+      in (Strings.cat [+        header,+        testBody,+        "\n"])++-- | Format a test name for Python (snake_case with test_ prefix)+formatPythonTestName :: String -> String+formatPythonTestName name =+    Strings.cat2 "test_" (Strings.fromList (Lists.map (\c -> Logic.ifElse (Chars.isAlphaNum c) (Chars.toLower c) 95) (Strings.toList name)))++-- | Generate a single pytest test case from a test case with metadata+generatePythonTestCase :: [String] -> Testing.TestCaseWithMetadata -> Either t0 [String]+generatePythonTestCase groupPath tcm =++      let name_ = Testing.testCaseWithMetadataName tcm+          tcase = Testing.testCaseWithMetadataCase tcm+      in case tcase of+        Testing.TestCaseUniversal v0 ->+          let actual_ = Testing.universalTestCaseActual v0 ()+              expected_ = Testing.universalTestCaseExpected v0 ()+              fullName = Logic.ifElse (Lists.null groupPath) name_ (Strings.intercalate "__" (Lists.concat2 groupPath [+                    name_]))+              formattedName = formatPythonTestName fullName+          in (Right [+            Strings.cat [+              "def ",+              formattedName,+              "():"],+            (Strings.cat [+              "    assert (",+              actual_,+              ") == (",+              expected_,+              ")"])])++-- | Generate a Python test file for a test group+generatePythonTestFile :: Packaging.Module -> Testing.TestGroup -> t0 -> Either t1 (String, String)+generatePythonTestFile testModule testGroup _g = generateTestFileWithPythonCodec testModule testGroup++-- | Generate test hierarchy for Python with nested subgroups+generatePythonTestGroupHierarchy :: [String] -> Testing.TestGroup -> Either t0 String+generatePythonTestGroupHierarchy groupPath testGroup =++      let cases_ = Testing.testGroupCases testGroup+          subgroups = Testing.testGroupSubgroups testGroup+      in (Eithers.bind (Eithers.mapList (\tc -> generatePythonTestCase groupPath tc) cases_) (\testCaseLines -> Eithers.bind (Eithers.mapList (\subgroup ->+        let groupName = Testing.testGroupName subgroup+            header = Strings.cat2 "# " groupName+        in (Eithers.map (\content -> Strings.cat [+          header,+          "\n\n",+          content]) (generatePythonTestGroupHierarchy (Lists.concat2 groupPath [+          groupName]) subgroup))) subgroups) (\subgroupBlocks ->+        let testCasesStr = Strings.intercalate "\n\n" (Lists.concat testCaseLines)+            subgroupsStr = Strings.intercalate "\n\n" subgroupBlocks+        in (Right (Strings.cat [+          testCasesStr,+          (Logic.ifElse (Logic.or (Equality.equal testCasesStr "") (Equality.equal subgroupsStr "")) "" "\n\n"),+          subgroupsStr])))))++-- | Generate a complete test file for Python+generateTestFileWithPythonCodec :: Packaging.Module -> Testing.TestGroup -> Either t0 (String, String)+generateTestFileWithPythonCodec testModule testGroup =+    Eithers.map (\testBody ->+      let testModuleContent = buildPythonTestModule testModule testGroup testBody+          ns_ = Packaging.moduleName testModule+          parts = Strings.splitOn "." (Packaging.unModuleName ns_)+          dirParts = Optionals.fromOptional [] (Lists.maybeInit parts)+          fileName =+                  Strings.cat [+                    "test_",+                    (Optionals.fromOptional "" (Lists.maybeLast parts)),+                    ".py"]+          filePath =+                  Strings.cat [+                    Strings.intercalate "/" dirParts,+                    "/",+                    fileName]+      in (filePath, testModuleContent)) (generatePythonTestGroupHierarchy [] testGroup)
+ src/main/haskell/Hydra/Python/Utils.hs view
@@ -0,0 +1,765 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Python utilities for constructing Python syntax trees++module Hydra.Python.Utils where++import qualified Hydra.Analysis as Analysis+import qualified Hydra.Ast as Ast+import qualified Hydra.Classes as Classes+import qualified Hydra.Coders as Coders+import qualified Hydra.Core as Core+import qualified Hydra.Error.Checking as Checking+import qualified Hydra.Error.Core as ErrorCore+import qualified Hydra.Error.Packaging as ErrorPackaging+import qualified Hydra.Errors as Errors+import qualified Hydra.Graph as Graph+import qualified Hydra.Json.Model as Model+import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Python.Environment as Environment+import qualified Hydra.Python.Names as Names+import qualified Hydra.Python.Serde as Serde+import qualified Hydra.Python.Syntax as Syntax+import qualified Hydra.Query as Query+import qualified Hydra.Relational as Relational+import qualified Hydra.Serialization as Serialization+import qualified Hydra.Tabular as Tabular+import qualified Hydra.Testing as Testing+import qualified Hydra.Topology as Topology+import qualified Hydra.Typed as Typed+import qualified Hydra.Typing as Typing+import qualified Hydra.Util as Util+import qualified Hydra.Validation as Validation+import qualified Hydra.Variants as Variants+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++-- | Annotate an expression with an optional comment using Annotated[]+annotatedExpression :: Maybe String -> Syntax.Expression -> Syntax.Expression+annotatedExpression mcomment expr =+    Optionals.cases mcomment expr (\c -> pyPrimaryToPyExpression (primaryWithExpressionSlices (pyNameToPyPrimary (Syntax.Name "Annotated")) [+      expr,+      (doubleQuotedString c)]))++-- | Annotate a statement with an optional comment+annotatedStatement :: Maybe String -> Syntax.Statement -> Syntax.Statement+annotatedStatement mcomment stmt =+    Optionals.cases mcomment stmt (\c -> Syntax.StatementAnnotated (Syntax.AnnotatedStatement {+      Syntax.annotatedStatementComment = c,+      Syntax.annotatedStatementStatement = stmt}))++-- | Create an assignment statement from name and annotated rhs+assignment :: Syntax.Name -> Syntax.AnnotatedRhs -> Syntax.Statement+assignment name rhs =+    pyAssignmentToPyStatement (Syntax.AssignmentUntyped (Syntax.UntypedAssignment {+      Syntax.untypedAssignmentTargets = [+        pyNameToPyStarTarget name],+      Syntax.untypedAssignmentRhs = rhs,+      Syntax.untypedAssignmentTypeComment = Nothing}))++-- | Create an assignment statement from name and expression+assignmentStatement :: Syntax.Name -> Syntax.Expression -> Syntax.Statement+assignmentStatement name expr = assignment name (pyExpressionToPyAnnotatedRhs expr)++-- | Create a cast expression: cast(type, expr)+castTo :: Syntax.Expression -> Syntax.Expression -> Syntax.Expression+castTo pytype pyexpr =+    functionCall (pyNameToPyPrimary (Syntax.Name "cast")) [+      pytype,+      pyexpr]++-- | Create a comment statement (triple-quoted string)+commentStatement :: String -> Syntax.Statement+commentStatement s = pyExpressionToPyStatement (tripleQuotedString s)++-- | Decode a Comparison to a Primary if possible+decodePyComparisonToPyAwaitPrimary :: Syntax.Comparison -> Maybe Syntax.Primary+decodePyComparisonToPyAwaitPrimary c =++      let rhs = Syntax.comparisonRhs c+          lhs = Syntax.comparisonLhs c+          orLhs = Syntax.bitwiseOrLhs lhs+          orRhs = Syntax.bitwiseOrRhs lhs+          xorLhs = Syntax.bitwiseXorLhs orRhs+          xorRhs = Syntax.bitwiseXorRhs orRhs+          andLhs = Syntax.bitwiseAndLhs xorRhs+          andRhs = Syntax.bitwiseAndRhs xorRhs+          shiftLhs = Syntax.shiftExpressionLhs andRhs+          shiftRhs = Syntax.shiftExpressionRhs andRhs+          sumLhs = Syntax.sumLhs shiftRhs+          sumRhs = Syntax.sumRhs shiftRhs+          termLhs = Syntax.termLhs sumRhs+          termRhs = Syntax.termRhs sumRhs+      in (Logic.ifElse (Logic.not (Lists.null rhs)) Nothing (Logic.ifElse (Optionals.isGiven orLhs) Nothing (Logic.ifElse (Optionals.isGiven xorLhs) Nothing (Logic.ifElse (Optionals.isGiven andLhs) Nothing (Logic.ifElse (Optionals.isGiven shiftLhs) Nothing (Logic.ifElse (Optionals.isGiven sumLhs) Nothing (Logic.ifElse (Optionals.isGiven termLhs) Nothing (case termRhs of+        Syntax.FactorSimple v0 -> decodePyPowerToPyPrimary v0+        _ -> Nothing))))))))++-- | Decode a Conjunction to a Primary if possible+decodePyConjunctionToPyPrimary :: Syntax.Conjunction -> Maybe Syntax.Primary+decodePyConjunctionToPyPrimary c =++      let inversions = Syntax.unConjunction c+      in (Logic.ifElse (Equality.equal (Lists.length inversions) 1) (Optionals.bind (Lists.maybeHead inversions) (\i -> decodePyInversionToPyPrimary i)) Nothing)++-- | Decode an Expression to a Primary if possible+decodePyExpressionToPyPrimary :: Syntax.Expression -> Maybe Syntax.Primary+decodePyExpressionToPyPrimary e =+    case e of+      Syntax.ExpressionSimple v0 ->+        let conjunctions = Syntax.unDisjunction v0+        in (Logic.ifElse (Equality.equal (Lists.length conjunctions) 1) (Optionals.bind (Lists.maybeHead conjunctions) (\c2 -> decodePyConjunctionToPyPrimary c2)) Nothing)+      _ -> Nothing++-- | Decode an Inversion to a Primary if possible+decodePyInversionToPyPrimary :: Syntax.Inversion -> Maybe Syntax.Primary+decodePyInversionToPyPrimary i =+    case i of+      Syntax.InversionSimple v0 -> decodePyComparisonToPyAwaitPrimary v0+      _ -> Nothing++-- | Decode a Power to a Primary if possible+decodePyPowerToPyPrimary :: Syntax.Power -> Maybe Syntax.Primary+decodePyPowerToPyPrimary p =++      let lhs = Syntax.powerLhs p+          await = Syntax.awaitPrimaryAwait lhs+          prim = Syntax.awaitPrimaryPrimary lhs+      in (Logic.ifElse await Nothing (Just prim))++-- | Create a dotted assignment statement: obj.attr = expr+dottedAssignmentStatement :: Syntax.Name -> Syntax.Name -> Syntax.Expression -> Syntax.Statement+dottedAssignmentStatement obj attr expr =++      let target =+              Syntax.StarTargetUnstarred (Syntax.TargetWithStarAtomProject (Syntax.TPrimaryAndName {+                Syntax.tPrimaryAndNamePrimary = (Syntax.TPrimaryAtom (Syntax.AtomName obj)),+                Syntax.tPrimaryAndNameName = attr}))+      in (pyAssignmentToPyStatement (Syntax.AssignmentUntyped (Syntax.UntypedAssignment {+        Syntax.untypedAssignmentTargets = [+          target],+        Syntax.untypedAssignmentRhs = (pyExpressionToPyAnnotatedRhs expr),+        Syntax.untypedAssignmentTypeComment = Nothing})))++-- | Create a double-quoted string expression+doubleQuotedString :: String -> Syntax.Expression+doubleQuotedString s = stringToPyExpression Syntax.QuoteStyleDouble s++-- | Find all namespaces referenced by a list of definitions, plus the core namespace+findNamespaces :: Packaging.ModuleName -> [Packaging.Definition] -> Util.ModuleNames Syntax.DottedName+findNamespaces focusNs defs =++      let coreNs = Packaging.ModuleName "hydra.core"+          namespaces = Analysis.moduleNamesForDefinitions Names.encodeNamespaceWithOverrides focusNs defs+      in (Logic.ifElse (Equality.equal (Packaging.unModuleName (Pairs.first (Util.moduleNamesFocus namespaces))) (Packaging.unModuleName coreNs)) namespaces (Util.ModuleNames {+        Util.moduleNamesFocus = (Util.moduleNamesFocus namespaces),+        Util.moduleNamesMapping = (Maps.insert coreNs (Names.encodeNamespace coreNs) (Util.moduleNamesMapping namespaces))}))++-- | Create a function call expression+functionCall :: Syntax.Primary -> [Syntax.Expression] -> Syntax.Expression+functionCall func args = pyPrimaryToPyExpression (primaryWithRhs func (Syntax.PrimaryRhsCall (pyExpressionsToPyArgs args)))++getItemParams :: Syntax.Parameters+getItemParams =+    Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+      Syntax.paramNoDefaultParametersParamNoDefault = [+        Syntax.ParamNoDefault {+          Syntax.paramNoDefaultParam = Syntax.Param {+            Syntax.paramName = (Syntax.Name "cls"),+            Syntax.paramAnnotation = Nothing},+          Syntax.paramNoDefaultTypeComment = Nothing},+        Syntax.ParamNoDefault {+          Syntax.paramNoDefaultParam = Syntax.Param {+            Syntax.paramName = (Syntax.Name "item"),+            Syntax.paramAnnotation = Nothing},+          Syntax.paramNoDefaultTypeComment = Nothing}],+      Syntax.paramNoDefaultParametersParamWithDefault = [],+      Syntax.paramNoDefaultParametersStarEtc = Nothing})++-- | Create an indented block with optional comment+indentedBlock :: Maybe String -> [[Syntax.Statement]] -> Syntax.Block+indentedBlock mcomment stmts =++      let commentGroup = Optionals.cases mcomment [] (\s -> [+            commentStatement s])+          groups = Lists.filter (\g -> Logic.not (Lists.null g)) (Lists.cons commentGroup stmts)+      in (Logic.ifElse (Lists.null groups) (Syntax.BlockIndented [+        [+          Syntax.StatementSimple [+            pyExpressionToPySimpleStatement (pyAtomToPyExpression Syntax.AtomEllipsis)]]]) (Syntax.BlockIndented groups))++-- | Create a name with parameters+nameAndParams :: Syntax.Name -> [Syntax.Expression] -> Syntax.Expression+nameAndParams pyName params = primaryAndParams (pyNameToPyPrimary pyName) params++-- | Create a NewType statement+newtypeStatement :: Syntax.Name -> Maybe String -> Syntax.Expression -> Syntax.Statement+newtypeStatement name mcomment expr =+    annotatedStatement mcomment (assignmentStatement name (functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "NewType"))) [+      doubleQuotedString (Syntax.unName name),+      expr]))++-- | Build an or-expression from multiple primaries+orExpression :: [Syntax.Primary] -> Syntax.Expression+orExpression prims =++      let build =+              \prev -> \ps -> Optionals.cases (Lists.uncons ps) (Syntax.BitwiseOr {+                Syntax.bitwiseOrLhs = prev,+                Syntax.bitwiseOrRhs = (pyPrimaryToPyBitwiseXor (Syntax.PrimarySimple Syntax.AtomEllipsis))}) (\p -> Logic.ifElse (Lists.null (Pairs.second p)) (Syntax.BitwiseOr {+                Syntax.bitwiseOrLhs = prev,+                Syntax.bitwiseOrRhs = (pyPrimaryToPyBitwiseXor (Pairs.first p))}) (build (Just (Syntax.BitwiseOr {+                Syntax.bitwiseOrLhs = prev,+                Syntax.bitwiseOrRhs = (pyPrimaryToPyBitwiseXor (Pairs.first p))})) (Pairs.second p)))+      in (pyBitwiseOrToPyExpression (build Nothing prims))++-- | Create a primary with parameters (subscript)+primaryAndParams :: Syntax.Primary -> [Syntax.Expression] -> Syntax.Expression+primaryAndParams prim params = pyPrimaryToPyExpression (primaryWithExpressionSlices prim params)++-- | Create a Primary with expression slices+primaryWithExpressionSlices :: Syntax.Primary -> [Syntax.Expression] -> Syntax.Primary+primaryWithExpressionSlices prim exprs =+    Optionals.fromOptional prim (Optionals.map (\p -> primaryWithSlices prim (pyExpressionToPySlice (Pairs.first p)) (Lists.map (\e -> Syntax.SliceOrStarredExpressionSlice (pyExpressionToPySlice e)) (Pairs.second p))) (Lists.uncons exprs))++-- | Combine a Primary with a PrimaryRhs+primaryWithRhs :: Syntax.Primary -> Syntax.PrimaryRhs -> Syntax.Primary+primaryWithRhs prim rhs =+    Syntax.PrimaryCompound (Syntax.PrimaryWithRhs {+      Syntax.primaryWithRhsPrimary = prim,+      Syntax.primaryWithRhsRhs = rhs})++-- | Create a Primary with slices+primaryWithSlices :: Syntax.Primary -> Syntax.Slice -> [Syntax.SliceOrStarredExpression] -> Syntax.Primary+primaryWithSlices prim first rest =+    primaryWithRhs prim (Syntax.PrimaryRhsSlices (Syntax.Slices {+      Syntax.slicesHead = first,+      Syntax.slicesTail = rest}))++-- | Project a field from an expression+projectFromExpression :: Syntax.Expression -> Syntax.Name -> Syntax.Expression+projectFromExpression exp name =++      let prim = Syntax.PrimarySimple (Syntax.AtomGroup (Syntax.GroupExpression (Syntax.NamedExpressionSimple exp)))+      in (pyPrimaryToPyExpression (Syntax.PrimaryCompound (Syntax.PrimaryWithRhs {+        Syntax.primaryWithRhsPrimary = prim,+        Syntax.primaryWithRhsRhs = (Syntax.PrimaryRhsProject name)})))++-- | Convert an Assignment to a Statement+pyAssignmentToPyStatement :: Syntax.Assignment -> Syntax.Statement+pyAssignmentToPyStatement a = pySimpleStatementToPyStatement (Syntax.SimpleStatementAssignment a)++-- | Convert an Atom to an Expression+pyAtomToPyExpression :: Syntax.Atom -> Syntax.Expression+pyAtomToPyExpression atom = pyPrimaryToPyExpression (Syntax.PrimarySimple atom)++-- | Convert a BitwiseOr to a Conjunction+pyBitwiseOrToPyConjunction :: Syntax.BitwiseOr -> Syntax.Conjunction+pyBitwiseOrToPyConjunction bor =+    Syntax.Conjunction [+      Syntax.InversionSimple (Syntax.Comparison {+        Syntax.comparisonLhs = bor,+        Syntax.comparisonRhs = []})]++-- | Convert a BitwiseOr to an Expression+pyBitwiseOrToPyExpression :: Syntax.BitwiseOr -> Syntax.Expression+pyBitwiseOrToPyExpression bor = pyConjunctionToPyExpression (pyBitwiseOrToPyConjunction bor)++-- | Convert a ClassDefinition to a Statement+pyClassDefinitionToPyStatement :: Syntax.ClassDefinition -> Syntax.Statement+pyClassDefinitionToPyStatement cd = Syntax.StatementCompound (Syntax.CompoundStatementClassDef cd)++-- | Convert a ClosedPattern to Patterns+pyClosedPatternToPyPatterns :: Syntax.ClosedPattern -> Syntax.Patterns+pyClosedPatternToPyPatterns p = Syntax.PatternsPattern (Syntax.PatternOr (Syntax.OrPattern [+  p]))++-- | Convert a Conjunction to an Expression+pyConjunctionToPyExpression :: Syntax.Conjunction -> Syntax.Expression+pyConjunctionToPyExpression conj = Syntax.ExpressionSimple (Syntax.Disjunction [+  conj])++-- | Convert an Expression to a BitwiseOr, wrapping in parens if needed+pyExpressionToBitwiseOr :: Syntax.Expression -> Syntax.BitwiseOr+pyExpressionToBitwiseOr e =+    Syntax.BitwiseOr {+      Syntax.bitwiseOrLhs = Nothing,+      Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+        Syntax.bitwiseXorLhs = Nothing,+        Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+          Syntax.bitwiseAndLhs = Nothing,+          Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+            Syntax.shiftExpressionLhs = Nothing,+            Syntax.shiftExpressionRhs = Syntax.Sum {+              Syntax.sumLhs = Nothing,+              Syntax.sumRhs = Syntax.Term {+                Syntax.termLhs = Nothing,+                Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                  Syntax.powerLhs = Syntax.AwaitPrimary {+                    Syntax.awaitPrimaryAwait = False,+                    Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomGroup (Syntax.GroupExpression (Syntax.NamedExpressionSimple e))))},+                  Syntax.powerRhs = Nothing}))}}}}}}++-- | Convert an Expression to a Disjunction, wrapping in parens if needed+pyExpressionToDisjunction :: Syntax.Expression -> Syntax.Disjunction+pyExpressionToDisjunction e =+    case e of+      Syntax.ExpressionSimple v0 -> v0+      _ -> Syntax.Disjunction [+        pyPrimaryToPyConjunction (Syntax.PrimarySimple (Syntax.AtomGroup (Syntax.GroupExpression (Syntax.NamedExpressionSimple e))))]++-- | Convert an Expression to an AnnotatedRhs+pyExpressionToPyAnnotatedRhs :: Syntax.Expression -> Syntax.AnnotatedRhs+pyExpressionToPyAnnotatedRhs expr = Syntax.AnnotatedRhsStar [+  Syntax.StarExpressionSimple expr]++-- | Extracts the primary from an expression, or wraps it in parentheses if the expression does not contain a primary+pyExpressionToPyPrimary :: Syntax.Expression -> Syntax.Primary+pyExpressionToPyPrimary e =+    Optionals.cases (decodePyExpressionToPyPrimary e) (Syntax.PrimarySimple (Syntax.AtomGroup (Syntax.GroupExpression (Syntax.NamedExpressionSimple e)))) (\prim -> prim)++-- | Convert an Expression to a SimpleStatement (as star expressions)+pyExpressionToPySimpleStatement :: Syntax.Expression -> Syntax.SimpleStatement+pyExpressionToPySimpleStatement expr = Syntax.SimpleStatementStarExpressions [+  Syntax.StarExpressionSimple expr]++-- | Convert an Expression to a Slice+pyExpressionToPySlice :: Syntax.Expression -> Syntax.Slice+pyExpressionToPySlice expr = Syntax.SliceNamed (Syntax.NamedExpressionSimple expr)++-- | Convert an Expression to a StarNamedExpression+pyExpressionToPyStarNamedExpression :: Syntax.Expression -> Syntax.StarNamedExpression+pyExpressionToPyStarNamedExpression expr = Syntax.StarNamedExpressionSimple (Syntax.NamedExpressionSimple expr)++-- | Convert an Expression to a Statement+pyExpressionToPyStatement :: Syntax.Expression -> Syntax.Statement+pyExpressionToPyStatement expr = pySimpleStatementToPyStatement (pyExpressionToPySimpleStatement expr)++-- | Convert a list of Expressions to Args+pyExpressionsToPyArgs :: [Syntax.Expression] -> Syntax.Args+pyExpressionsToPyArgs exprs =+    Syntax.Args {+      Syntax.argsPositional = (Lists.map (\e -> Syntax.PosArgExpression e) exprs),+      Syntax.argsKwargOrStarred = [],+      Syntax.argsKwargOrDoubleStarred = []}++-- | Create a Python list from expressions+pyList :: [Syntax.Expression] -> Syntax.List+pyList exprs = Syntax.List (Lists.map pyExpressionToPyStarNamedExpression exprs)++-- | Convert a Name to an Expression+pyNameToPyExpression :: Syntax.Name -> Syntax.Expression+pyNameToPyExpression name = pyPrimaryToPyExpression (pyNameToPyPrimary name)++-- | Convert a Name to a NamedExpression+pyNameToPyNamedExpression :: Syntax.Name -> Syntax.NamedExpression+pyNameToPyNamedExpression name = Syntax.NamedExpressionSimple (pyNameToPyExpression name)++-- | Convert a Name to a Primary (simple atom)+pyNameToPyPrimary :: Syntax.Name -> Syntax.Primary+pyNameToPyPrimary name = Syntax.PrimarySimple (Syntax.AtomName name)++-- | Convert a Name to a StarTarget+pyNameToPyStarTarget :: Syntax.Name -> Syntax.StarTarget+pyNameToPyStarTarget name = Syntax.StarTargetUnstarred (Syntax.TargetWithStarAtomAtom (Syntax.StarAtomName name))++-- | Convert a Name to a TypeParameter+pyNameToPyTypeParameter :: Syntax.Name -> Syntax.TypeParameter+pyNameToPyTypeParameter name =+    Syntax.TypeParameterSimple (Syntax.SimpleTypeParameter {+      Syntax.simpleTypeParameterName = name,+      Syntax.simpleTypeParameterBound = Nothing,+      Syntax.simpleTypeParameterDefault = Nothing})++-- | The Python None value as a Name+pyNone :: Syntax.Name+pyNone = Syntax.Name "None"++-- | Convert a Primary to a BitwiseOr+pyPrimaryToPyBitwiseOr :: Syntax.Primary -> Syntax.BitwiseOr+pyPrimaryToPyBitwiseOr prim =+    Syntax.BitwiseOr {+      Syntax.bitwiseOrLhs = Nothing,+      Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+        Syntax.bitwiseXorLhs = Nothing,+        Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+          Syntax.bitwiseAndLhs = Nothing,+          Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+            Syntax.shiftExpressionLhs = Nothing,+            Syntax.shiftExpressionRhs = Syntax.Sum {+              Syntax.sumLhs = Nothing,+              Syntax.sumRhs = Syntax.Term {+                Syntax.termLhs = Nothing,+                Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                  Syntax.powerLhs = Syntax.AwaitPrimary {+                    Syntax.awaitPrimaryAwait = False,+                    Syntax.awaitPrimaryPrimary = prim},+                  Syntax.powerRhs = Nothing}))}}}}}}++-- | Convert a Primary to a BitwiseXor+pyPrimaryToPyBitwiseXor :: Syntax.Primary -> Syntax.BitwiseXor+pyPrimaryToPyBitwiseXor prim =+    Syntax.BitwiseXor {+      Syntax.bitwiseXorLhs = Nothing,+      Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+        Syntax.bitwiseAndLhs = Nothing,+        Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+          Syntax.shiftExpressionLhs = Nothing,+          Syntax.shiftExpressionRhs = Syntax.Sum {+            Syntax.sumLhs = Nothing,+            Syntax.sumRhs = Syntax.Term {+              Syntax.termLhs = Nothing,+              Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                Syntax.powerLhs = Syntax.AwaitPrimary {+                  Syntax.awaitPrimaryAwait = False,+                  Syntax.awaitPrimaryPrimary = prim},+                Syntax.powerRhs = Nothing}))}}}}}++-- | Convert a Primary to a Conjunction+pyPrimaryToPyConjunction :: Syntax.Primary -> Syntax.Conjunction+pyPrimaryToPyConjunction prim = pyBitwiseOrToPyConjunction (pyPrimaryToPyBitwiseOr prim)++-- | Convert a Primary to an Expression+pyPrimaryToPyExpression :: Syntax.Primary -> Syntax.Expression+pyPrimaryToPyExpression prim = pyConjunctionToPyExpression (pyPrimaryToPyConjunction prim)++-- | Convert a Primary to a Slice+pyPrimaryToPySlice :: Syntax.Primary -> Syntax.Slice+pyPrimaryToPySlice prim = pyExpressionToPySlice (pyPrimaryToPyExpression prim)++-- | Convert a SimpleStatement to a Statement+pySimpleStatementToPyStatement :: Syntax.SimpleStatement -> Syntax.Statement+pySimpleStatementToPyStatement s = Syntax.StatementSimple [+  s]++-- | Create a raise AssertionError statement+raiseAssertionError :: String -> Syntax.Statement+raiseAssertionError msg =+    pySimpleStatementToPyStatement (Syntax.SimpleStatementRaise (Syntax.RaiseStatement (Just (Syntax.RaiseExpression {+      Syntax.raiseExpressionExpression = (functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "AssertionError"))) [+        doubleQuotedString msg]),+      Syntax.raiseExpressionFrom = Nothing}))))++-- | Create a raise TypeError statement+raiseTypeError :: String -> Syntax.Statement+raiseTypeError msg =+    pySimpleStatementToPyStatement (Syntax.SimpleStatementRaise (Syntax.RaiseStatement (Just (Syntax.RaiseExpression {+      Syntax.raiseExpressionExpression = (functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "TypeError"))) [+        doubleQuotedString msg]),+      Syntax.raiseExpressionFrom = Nothing}))))++-- | Create a return statement with a single expression+returnSingle :: Syntax.Expression -> Syntax.Statement+returnSingle expr =+    pySimpleStatementToPyStatement (Syntax.SimpleStatementReturn (Syntax.ReturnStatement [+      Syntax.StarExpressionSimple expr]))++selfOnlyParams :: Syntax.Parameters+selfOnlyParams =+    Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+      Syntax.paramNoDefaultParametersParamNoDefault = [+        Syntax.ParamNoDefault {+          Syntax.paramNoDefaultParam = Syntax.Param {+            Syntax.paramName = (Syntax.Name "self"),+            Syntax.paramAnnotation = Nothing},+          Syntax.paramNoDefaultTypeComment = Nothing}],+      Syntax.paramNoDefaultParametersParamWithDefault = [],+      Syntax.paramNoDefaultParametersStarEtc = Nothing})++selfOtherParams :: Syntax.Parameters+selfOtherParams =+    Syntax.ParametersParamNoDefault (Syntax.ParamNoDefaultParameters {+      Syntax.paramNoDefaultParametersParamNoDefault = [+        Syntax.ParamNoDefault {+          Syntax.paramNoDefaultParam = Syntax.Param {+            Syntax.paramName = (Syntax.Name "self"),+            Syntax.paramAnnotation = Nothing},+          Syntax.paramNoDefaultTypeComment = Nothing},+        Syntax.ParamNoDefault {+          Syntax.paramNoDefaultParam = Syntax.Param {+            Syntax.paramName = (Syntax.Name "other"),+            Syntax.paramAnnotation = Nothing},+          Syntax.paramNoDefaultTypeComment = Nothing}],+      Syntax.paramNoDefaultParametersParamWithDefault = [],+      Syntax.paramNoDefaultParametersStarEtc = Nothing})++-- | Create a single-quoted string expression+singleQuotedString :: String -> Syntax.Expression+singleQuotedString s = stringToPyExpression Syntax.QuoteStyleSingle s++-- | Create a string expression with a given quote style+stringToPyExpression :: Syntax.QuoteStyle -> String -> Syntax.Expression+stringToPyExpression style s =+    pyAtomToPyExpression (Syntax.AtomString (Syntax.String_ {+      Syntax.stringValue = s,+      Syntax.stringPrefix = Nothing,+      Syntax.stringQuoteStyle = style}))++-- | Current target Python version for code generation+targetPythonVersion :: Environment.PythonVersion+targetPythonVersion = Environment.PythonVersionPython310++-- | Create a raw triple-double-quoted string expression (Python docstring convention). Raw-prefixed so embedded backslashes (e.g. lambda notation `\x.e`) aren't interpreted as escape sequences by Python's string parser.+tripleQuotedString :: String -> Syntax.Expression+tripleQuotedString s =+    pyAtomToPyExpression (Syntax.AtomString (Syntax.String_ {+      Syntax.stringValue = s,+      Syntax.stringPrefix = (Just Syntax.StringPrefixRaw),+      Syntax.stringQuoteStyle = Syntax.QuoteStyleTripleDouble}))++-- | Generate a type alias statement using PEP 695 syntax (Python 3.12+)+typeAliasStatement :: Syntax.Name -> [Syntax.TypeParameter] -> Maybe String -> Syntax.Expression -> Syntax.Statement+typeAliasStatement name tparams mcomment tyexpr =+    annotatedStatement mcomment (pySimpleStatementToPyStatement (Syntax.SimpleStatementTypeAlias (Syntax.TypeAlias {+      Syntax.typeAliasName = name,+      Syntax.typeAliasTypeParams = tparams,+      Syntax.typeAliasExpression = tyexpr})))++-- | Generate a type alias statement using Python 3.10-compatible syntax: Name: TypeAlias = "TypeExpression"+typeAliasStatement310 :: Syntax.Name -> t0 -> Maybe String -> Syntax.Expression -> Syntax.Statement+typeAliasStatement310 name _tparams mcomment tyexpr =++      let quotedExpr = doubleQuotedString (Serialization.printExpr (Serde.expressionToExpr tyexpr))+      in (annotatedStatement mcomment (pyAssignmentToPyStatement (Syntax.AssignmentTyped (Syntax.TypedAssignment {+        Syntax.typedAssignmentLhs = (Syntax.SingleTargetName name),+        Syntax.typedAssignmentType = (Syntax.ExpressionSimple (Syntax.Disjunction [+          Syntax.Conjunction [+            Syntax.InversionSimple (Syntax.Comparison {+              Syntax.comparisonLhs = Syntax.BitwiseOr {+                Syntax.bitwiseOrLhs = Nothing,+                Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                  Syntax.bitwiseXorLhs = Nothing,+                  Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                    Syntax.bitwiseAndLhs = Nothing,+                    Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                      Syntax.shiftExpressionLhs = Nothing,+                      Syntax.shiftExpressionRhs = Syntax.Sum {+                        Syntax.sumLhs = Nothing,+                        Syntax.sumRhs = Syntax.Term {+                          Syntax.termLhs = Nothing,+                          Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                            Syntax.powerLhs = Syntax.AwaitPrimary {+                              Syntax.awaitPrimaryAwait = False,+                              Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "TypeAlias")))},+                            Syntax.powerRhs = Nothing}))}}}}}},+              Syntax.comparisonRhs = []})]])),+        Syntax.typedAssignmentRhs = (Just (pyExpressionToPyAnnotatedRhs quotedExpr))}))))++-- | Generate a subscriptable union class for Python 3.10+unionTypeClassStatements310 :: Syntax.Name -> Maybe String -> Syntax.Expression -> [Syntax.Statement] -> [Syntax.Statement]+unionTypeClassStatements310 name mcomment tyexpr extraStmts =++      let nameStr = Syntax.unName name+          metaName = Syntax.Name (Strings.cat2 (Strings.cat2 "_" nameStr) "Meta")+          docString = Serialization.printExpr (Serde.expressionToExpr tyexpr)+          returnObject =+                  pySimpleStatementToPyStatement (Syntax.SimpleStatementReturn (Syntax.ReturnStatement [+                    Syntax.StarExpressionSimple (Syntax.ExpressionSimple (Syntax.Disjunction [+                      Syntax.Conjunction [+                        Syntax.InversionSimple (Syntax.Comparison {+                          Syntax.comparisonLhs = Syntax.BitwiseOr {+                            Syntax.bitwiseOrLhs = Nothing,+                            Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                              Syntax.bitwiseXorLhs = Nothing,+                              Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                                Syntax.bitwiseAndLhs = Nothing,+                                Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                                  Syntax.shiftExpressionLhs = Nothing,+                                  Syntax.shiftExpressionRhs = Syntax.Sum {+                                    Syntax.sumLhs = Nothing,+                                    Syntax.sumRhs = Syntax.Term {+                                      Syntax.termLhs = Nothing,+                                      Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                                        Syntax.powerLhs = Syntax.AwaitPrimary {+                                          Syntax.awaitPrimaryAwait = False,+                                          Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "object")))},+                                        Syntax.powerRhs = Nothing}))}}}}}},+                          Syntax.comparisonRhs = []})]]))]))+          getItemMethod =+                  Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+                    Syntax.functionDefinitionDecorators = Nothing,+                    Syntax.functionDefinitionRaw = Syntax.FunctionDefRaw {+                      Syntax.functionDefRawAsync = False,+                      Syntax.functionDefRawName = (Syntax.Name "__getitem__"),+                      Syntax.functionDefRawTypeParams = [],+                      Syntax.functionDefRawParams = (Just getItemParams),+                      Syntax.functionDefRawReturnType = Nothing,+                      Syntax.functionDefRawFuncTypeComment = Nothing,+                      Syntax.functionDefRawBlock = (indentedBlock Nothing [+                        [+                          returnObject]])}}))+          metaClass =+                  pyClassDefinitionToPyStatement (Syntax.ClassDefinition {+                    Syntax.classDefinitionDecorators = Nothing,+                    Syntax.classDefinitionName = metaName,+                    Syntax.classDefinitionTypeParams = [],+                    Syntax.classDefinitionArguments = (Just (pyExpressionsToPyArgs [+                      Syntax.ExpressionSimple (Syntax.Disjunction [+                        Syntax.Conjunction [+                          Syntax.InversionSimple (Syntax.Comparison {+                            Syntax.comparisonLhs = Syntax.BitwiseOr {+                              Syntax.bitwiseOrLhs = Nothing,+                              Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                                Syntax.bitwiseXorLhs = Nothing,+                                Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                                  Syntax.bitwiseAndLhs = Nothing,+                                  Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                                    Syntax.shiftExpressionLhs = Nothing,+                                    Syntax.shiftExpressionRhs = Syntax.Sum {+                                      Syntax.sumLhs = Nothing,+                                      Syntax.sumRhs = Syntax.Term {+                                        Syntax.termLhs = Nothing,+                                        Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                                          Syntax.powerLhs = Syntax.AwaitPrimary {+                                            Syntax.awaitPrimaryAwait = False,+                                            Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "type")))},+                                          Syntax.powerRhs = Nothing}))}}}}}},+                            Syntax.comparisonRhs = []})]])])),+                    Syntax.classDefinitionBody = (indentedBlock Nothing [+                      [+                        getItemMethod]])})+          docStmt = pyExpressionToPyStatement (tripleQuotedString docString)+          bodyGroups =+                  Logic.ifElse (Lists.null extraStmts) (+                    let passStmt = pySimpleStatementToPyStatement Syntax.SimpleStatementPass+                    in [+                      [+                        docStmt],+                      [+                        passStmt]]) [+                    [+                      docStmt],+                    extraStmts]+          metaclassArg =+                  Syntax.Kwarg {+                    Syntax.kwargName = (Syntax.Name "metaclass"),+                    Syntax.kwargValue = (Syntax.ExpressionSimple (Syntax.Disjunction [+                      Syntax.Conjunction [+                        Syntax.InversionSimple (Syntax.Comparison {+                          Syntax.comparisonLhs = Syntax.BitwiseOr {+                            Syntax.bitwiseOrLhs = Nothing,+                            Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                              Syntax.bitwiseXorLhs = Nothing,+                              Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                                Syntax.bitwiseAndLhs = Nothing,+                                Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                                  Syntax.shiftExpressionLhs = Nothing,+                                  Syntax.shiftExpressionRhs = Syntax.Sum {+                                    Syntax.sumLhs = Nothing,+                                    Syntax.sumRhs = Syntax.Term {+                                      Syntax.termLhs = Nothing,+                                      Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                                        Syntax.powerLhs = Syntax.AwaitPrimary {+                                          Syntax.awaitPrimaryAwait = False,+                                          Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName metaName))},+                                        Syntax.powerRhs = Nothing}))}}}}}},+                          Syntax.comparisonRhs = []})]]))}+          unionClass =+                  annotatedStatement mcomment (pyClassDefinitionToPyStatement (Syntax.ClassDefinition {+                    Syntax.classDefinitionDecorators = Nothing,+                    Syntax.classDefinitionName = name,+                    Syntax.classDefinitionTypeParams = [],+                    Syntax.classDefinitionArguments = (Just (Syntax.Args {+                      Syntax.argsPositional = [],+                      Syntax.argsKwargOrStarred = [+                        Syntax.KwargOrStarredKwarg metaclassArg],+                      Syntax.argsKwargOrDoubleStarred = []})),+                    Syntax.classDefinitionBody = (indentedBlock Nothing bodyGroups)}))+      in [+        metaClass,+        unionClass]++-- | Generate __slots__, __eq__, and __hash__ methods for unit-typed union variants+unitVariantMethods :: Syntax.Name -> [Syntax.Statement]+unitVariantMethods className =++      let classNameStr = Syntax.unName className+          slotsStmt =+                  assignmentStatement (Syntax.Name "__slots__") (pyPrimaryToPyExpression (Syntax.PrimarySimple (Syntax.AtomTuple (Syntax.Tuple []))))+          returnIsinstance =+                  pySimpleStatementToPyStatement (Syntax.SimpleStatementReturn (Syntax.ReturnStatement [+                    Syntax.StarExpressionSimple (functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "isinstance"))) [+                      Syntax.ExpressionSimple (Syntax.Disjunction [+                        Syntax.Conjunction [+                          Syntax.InversionSimple (Syntax.Comparison {+                            Syntax.comparisonLhs = Syntax.BitwiseOr {+                              Syntax.bitwiseOrLhs = Nothing,+                              Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                                Syntax.bitwiseXorLhs = Nothing,+                                Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                                  Syntax.bitwiseAndLhs = Nothing,+                                  Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                                    Syntax.shiftExpressionLhs = Nothing,+                                    Syntax.shiftExpressionRhs = Syntax.Sum {+                                      Syntax.sumLhs = Nothing,+                                      Syntax.sumRhs = Syntax.Term {+                                        Syntax.termLhs = Nothing,+                                        Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                                          Syntax.powerLhs = Syntax.AwaitPrimary {+                                            Syntax.awaitPrimaryAwait = False,+                                            Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "other")))},+                                          Syntax.powerRhs = Nothing}))}}}}}},+                            Syntax.comparisonRhs = []})]]),+                      (Syntax.ExpressionSimple (Syntax.Disjunction [+                        Syntax.Conjunction [+                          Syntax.InversionSimple (Syntax.Comparison {+                            Syntax.comparisonLhs = Syntax.BitwiseOr {+                              Syntax.bitwiseOrLhs = Nothing,+                              Syntax.bitwiseOrRhs = Syntax.BitwiseXor {+                                Syntax.bitwiseXorLhs = Nothing,+                                Syntax.bitwiseXorRhs = Syntax.BitwiseAnd {+                                  Syntax.bitwiseAndLhs = Nothing,+                                  Syntax.bitwiseAndRhs = Syntax.ShiftExpression {+                                    Syntax.shiftExpressionLhs = Nothing,+                                    Syntax.shiftExpressionRhs = Syntax.Sum {+                                      Syntax.sumLhs = Nothing,+                                      Syntax.sumRhs = Syntax.Term {+                                        Syntax.termLhs = Nothing,+                                        Syntax.termRhs = (Syntax.FactorSimple (Syntax.Power {+                                          Syntax.powerLhs = Syntax.AwaitPrimary {+                                            Syntax.awaitPrimaryAwait = False,+                                            Syntax.awaitPrimaryPrimary = (Syntax.PrimarySimple (Syntax.AtomName className))},+                                          Syntax.powerRhs = Nothing}))}}}}}},+                            Syntax.comparisonRhs = []})]]))])]))+          eqMethod =+                  Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+                    Syntax.functionDefinitionDecorators = Nothing,+                    Syntax.functionDefinitionRaw = Syntax.FunctionDefRaw {+                      Syntax.functionDefRawAsync = False,+                      Syntax.functionDefRawName = (Syntax.Name "__eq__"),+                      Syntax.functionDefRawTypeParams = [],+                      Syntax.functionDefRawParams = (Just selfOtherParams),+                      Syntax.functionDefRawReturnType = Nothing,+                      Syntax.functionDefRawFuncTypeComment = Nothing,+                      Syntax.functionDefRawBlock = (indentedBlock Nothing [+                        [+                          returnIsinstance]])}}))+          returnHash =+                  pySimpleStatementToPyStatement (Syntax.SimpleStatementReturn (Syntax.ReturnStatement [+                    Syntax.StarExpressionSimple (functionCall (Syntax.PrimarySimple (Syntax.AtomName (Syntax.Name "hash"))) [+                      doubleQuotedString classNameStr])]))+          hashMethod =+                  Syntax.StatementCompound (Syntax.CompoundStatementFunction (Syntax.FunctionDefinition {+                    Syntax.functionDefinitionDecorators = Nothing,+                    Syntax.functionDefinitionRaw = Syntax.FunctionDefRaw {+                      Syntax.functionDefRawAsync = False,+                      Syntax.functionDefRawName = (Syntax.Name "__hash__"),+                      Syntax.functionDefRawTypeParams = [],+                      Syntax.functionDefRawParams = (Just selfOnlyParams),+                      Syntax.functionDefRawReturnType = Nothing,+                      Syntax.functionDefRawFuncTypeComment = Nothing,+                      Syntax.functionDefRawBlock = (indentedBlock Nothing [+                        [+                          returnHash]])}}))+      in [+        slotsStmt,+        eqMethod,+        hashMethod]