diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,142 +15,197 @@
 
 ---
 
-## [0.17.1] - unreleased
+## [0.17.2] - 2026-07-28
 
-Development version. Opens the 0.17.x line — the first release built entirely against
-published 0.17.0 hosts (Hackage / PyPI / Maven Central), with the `hostOverrides` shims
-that were needed while 0.16.1 lacked the effect type and I/O primitives removed.
+Point release on the 0.17.x line. Themes: promotion of the generator's routing and manifest
+logic into Hydra (`hydra.build.*`), per-package API-doc publishing across Java/Scala/Python,
+constraint-polymorphic arithmetic, and new effectful stream/file primitives. Includes the base64
+binary-literal rename `literals.binaryToString`/`stringToBinary` → `binaryToBase64`/`base64ToBinary`,
+a step toward [#417](https://github.com/CategoricalData/hydra/issues/417) (which remains in progress).
 
+### Highlights
+
+- **Build system promoted into Hydra**: the three generator drivers now consume `hydra.build.routing`
+  ([#560](https://github.com/CategoricalData/hydra/issues/560)) and `hydra.build.manifest`
+  ([#607](https://github.com/CategoricalData/hydra/issues/607)), retiring the legacy static prefix
+  tables; the cold-seeder oil-and-water violation is fixed
+  ([#608](https://github.com/CategoricalData/hydra/issues/608)) and guarded
+  ([#617](https://github.com/CategoricalData/hydra/issues/617)).
+- **Per-package API docs** for all doc-bearing hosts: JavaDoc restructured with cross-links and a fixed
+  tag→CI→Pages chain ([#616](https://github.com/CategoricalData/hydra/issues/616)), plus mirrored
+  Scaladoc ([#619](https://github.com/CategoricalData/hydra/issues/619)) and Python API docs
+  ([#620](https://github.com/CategoricalData/hydra/issues/620)).
+- **Constraint-polymorphic arithmetic**: a `numeric` type class with enforcement and value-level dispatch
+  ([#566](https://github.com/CategoricalData/hydra/issues/566)), reflected on the target hosts
+  ([#618](https://github.com/CategoricalData/hydra/issues/618)).
+
 ### New features
 
+- Standard-stream primitives: `stdin`/`stdout`/`stderr` ([#526](https://github.com/CategoricalData/hydra/issues/526)).
+- Recursive flag for `hydra.lib.files.listDirectory` ([#527](https://github.com/CategoricalData/hydra/issues/527)).
+- Hydra-specific regex syntax with per-target translation (`hydra.read.regex` / `hydra.show.regex`)
+  ([#567](https://github.com/CategoricalData/hydra/issues/567)).
+- Constraint-polymorphic arithmetic: `numeric` type class + value-level dispatch
+  ([#566](https://github.com/CategoricalData/hydra/issues/566)).
+- Aggregated Java + Scala Maven publishing into a single Central Portal deployment
+  ([#591](https://github.com/CategoricalData/hydra/issues/591)).
+
+### Improvements
+
+- Generator drivers consume `hydra.build.routing` ([#560](https://github.com/CategoricalData/hydra/issues/560))
+  and `hydra.build.manifest` ([#607](https://github.com/CategoricalData/hydra/issues/607)).
+- Fixed the cold-seeder oil-and-water violation ([#608](https://github.com/CategoricalData/hydra/issues/608))
+  and extended `check-oil-and-water.py` to catch cold-seeder imports of unpublished `Hydra.Build.*`
+  ([#617](https://github.com/CategoricalData/hydra/issues/617)).
+- Moved non-kernel packages to strict validation, clearing the #575 backlog
+  ([#580](https://github.com/CategoricalData/hydra/issues/580)).
+- Decoupled `Hydra.Sources.Test.All` from `Hydra.Sources.All`'s re-export list
+  ([#601](https://github.com/CategoricalData/hydra/issues/601)).
+- Renamed `hydra.json.schema` to resolve the module-vs-namespace-prefix conflict that broke
+  file-per-module hosts ([#532](https://github.com/CategoricalData/hydra/issues/532)).
+- Coders route `hydra.lib.*` overlay imports by overlay-module existence, not name-matching
+  `hydra.lib.defaults` ([#568](https://github.com/CategoricalData/hydra/issues/568)).
+- Per-package JavaDoc/Scaladoc/Python-doc publishing
+  ([#616](https://github.com/CategoricalData/hydra/issues/616),
+  [#619](https://github.com/CategoricalData/hydra/issues/619),
+  [#620](https://github.com/CategoricalData/hydra/issues/620)).
+- Aligned Java-host Scala/TypeScript generation with Haskell on expression layout (line-wrapping,
+  declaration order) ([#612](https://github.com/CategoricalData/hydra/issues/612)).
+
+### Bug fixes
+
+- **TypeScript** — added the missing CI job (zero prior coverage)
+  ([#571](https://github.com/CategoricalData/hydra/issues/571)); fixed the
+  `verify-distribution.sh` smoke-test import so the gate actually gates
+  ([#578](https://github.com/CategoricalData/hydra/issues/578)); emit `hydra.parse.regex`'s
+  `regexSequence` before its alternation use (TS2448)
+  ([#604](https://github.com/CategoricalData/hydra/issues/604)).
+- **Build and sync** — `sync.sh` Phase 3 digest-cache now sees cross-package deps on moved kernel
+  symbols, fixing stale downstream output ([#606](https://github.com/CategoricalData/hydra/issues/606)).
+- **Numeric constraints** — `#566` polymorphism now reflected on the target hosts (targets were
+  monomorphizing `int32->int32->int32`) ([#618](https://github.com/CategoricalData/hydra/issues/618)).
+
+---
+
+## [0.17.1] - 2026-07-18
+
+Consolidation release on the 0.17.x line, built against published 0.17.0 hosts. Themes:
+generated term-reference DSLs, a translingual package-validation framework, promotion of the
+build system into Hydra (`hydra-build`), and broad TypeScript-host and cross-host hardening.
+
+### Highlights
+
 - **Generated term-reference DSLs** ([#467](https://github.com/CategoricalData/hydra/issues/467)):
-  kernel *term* modules now project generated DSL surfaces, completing the story begun with
-  type-module DSLs and the generated primitive wrappers (`hydra.dsl.lib.*`, 0.17.0). A
-  signature read-back in the DSL pass reuses the main pass's inference, and a demand-curated
-  set of 19 kernel term modules (plus the json/test/extract modules) emits one typed,
-  rename-safe reference per definition into every target language — e.g. Haskell
-  `Hydra.Dsl.Strip.deannotateType`, Java `hydra.dsl.Strip.deannotateType(...)`, Python
-  `hydra.dsl.strip.deannotate_type(...)`. The Java and Python coder sources were pivoted onto
-  the generated references, retiring ~700 stringly-typed inline `var("hydra....")` references
-  and shrinking Python's hand registry to the non-generatable remainder (byte-identical
-  generated output before and after). Follow-ups:
-  [#555](https://github.com/CategoricalData/hydra/issues/555) (typed references to derived
-  encode/decode/show functions via `TypedName`),
-  [#556](https://github.com/CategoricalData/hydra/issues/556) (non-kernel packages).
+  kernel term modules now emit one typed, rename-safe reference per definition into every target
+  language; the Java and Python coder sources were pivoted onto them, retiring ~700 stringly-typed
+  inline references.
 - **Package validation** ([#574](https://github.com/CategoricalData/hydra/issues/574),
   [#575](https://github.com/CategoricalData/hydra/issues/575)): a translingual `hydra.validate.*`
-  framework carries per-package `ValidationProfile`s (error/warning rules, error/warning caps) and a
-  catalog of checks — undeclared-package-dependency detection (now a fatal gate, #574),
-  definition-name convention (PascalCase), definition ordering, documentation completeness, and
-  conflicting-variant-name detection — layered on the existing core term/type well-formedness rules.
-  A kernel-strict / others-relaxed policy keeps `/sync` green fleet-wide while the documentation
-  backlog drains. See the new [Validation](https://github.com/CategoricalData/hydra/wiki/Validation)
-  wiki page for the full per-package constraint specification.
-- **DSL-authoring registration guards** ([#554](https://github.com/CategoricalData/hydra/issues/554)):
-  fail-fast authoring-time validation for the host-native DSL sources — every DSL-authoring module in
-  Java/`hydra-jvm`, Python, and Scala now asserts its definitions are fully registered
-  (`Defs.checkComplete` / `check_complete`), backed by a Haskell kernel-source registration-completeness
-  scanner, so a definition added to a source file but omitted from its `definitions` list fails loudly
-  instead of silently vanishing from the generated output.
-- **`hydra-build` package** ([#546](https://github.com/CategoricalData/hydra/issues/546),
-  [#529](https://github.com/CategoricalData/hydra/issues/529),
-  [#530](https://github.com/CategoricalData/hydra/issues/530)): the build-orchestration logic that had
-  lived only in host scripts is now translingual Hydra. Pure module-list utilities became
-  `hydra.build.modules` (#529) and the orphan-reconcile decision became `hydra.build.reconcile` (#530),
-  each with a translingual test suite; the `hydra.build.*` modules were then extracted into a dedicated
-  `hydra-build` package (#546), separate from the kernel.
-- **Metadata sidecar + content/version-addressed freshness**
-  ([#415](https://github.com/CategoricalData/hydra/issues/415)): dist manifests now carry a
-  `moduleFormatVersion` field, and the generator's freshness basis is content/version-addressed — the
-  groundwork for reproducible, cache-correct incremental generation.
-- **Structured generation-provenance record**
-  ([#523](https://github.com/CategoricalData/hydra/issues/523)): each generation run now records a
-  structured `Generation` provenance entry (digest v2), replacing the ad-hoc shell threading of
-  generation metadata.
-- **Worker + issue hierarchy** ([#557](https://github.com/CategoricalData/hydra/issues/557)): a
-  principled agent/worker framework — roles and parentage mirroring the GitHub issue tree, a
-  cross-worktree message transport with a verify-after-copy protocol, a blocking-aware design-question
-  (`decisions/`) channel, an issue-proposal queue with the `/issues` command, an autonomy-dial banner,
-  and cross-machine staging coordination. Contributor-facing process only; no change to generated code.
+  framework with per-package `ValidationProfile`s (undeclared-dependency gate, naming/ordering/docs
+  checks). See the [Validation](https://github.com/CategoricalData/hydra/wiki/Validation) wiki page.
+- **`hydra-build` package** ([#546](https://github.com/CategoricalData/hydra/issues/546)):
+  build-orchestration logic that lived only in host scripts is now translingual Hydra
+  (`hydra.build.*`), extracted into a dedicated package.
 
-### API and usability
+### New features
 
-- **DSL usability passes** ([#430](https://github.com/CategoricalData/hydra/issues/430),
-  [#553](https://github.com/CategoricalData/hydra/issues/553)): reviewed the host-native Java, Python,
-  and Scala DSL surfaces for ergonomics and cross-host parity (documented def shapes, added a Scala
-  projection helper), bringing the three authoring dialects into closer alignment.
+- Generated term-reference DSLs ([#467](https://github.com/CategoricalData/hydra/issues/467));
+  follow-ups: `TypedName` refs to derived encode/decode/show
+  ([#555](https://github.com/CategoricalData/hydra/issues/555)), non-kernel packages
+  ([#556](https://github.com/CategoricalData/hydra/issues/556)).
+- Translingual package-validation framework ([#574](https://github.com/CategoricalData/hydra/issues/574),
+  [#575](https://github.com/CategoricalData/hydra/issues/575)).
+- DSL-authoring registration guards: fail-fast completeness checks for the Java/Python/Scala DSL sources
+  ([#554](https://github.com/CategoricalData/hydra/issues/554)).
+- `hydra-build` package: `hydra.build.modules`
+  ([#529](https://github.com/CategoricalData/hydra/issues/529)), `hydra.build.reconcile`
+  ([#530](https://github.com/CategoricalData/hydra/issues/530)), extracted from the kernel
+  ([#546](https://github.com/CategoricalData/hydra/issues/546)).
+- Effectful `hydra.lib.system` primitive library ([#498](https://github.com/CategoricalData/hydra/issues/498)).
+- SHA-256 cryptographic hash primitive in `hydra.lib` ([#524](https://github.com/CategoricalData/hydra/issues/524)).
+- `hydra-jvm` package: shared JVM serde helpers relocated out of `hydra.java.serde`
+  ([#505](https://github.com/CategoricalData/hydra/issues/505)).
+- Internalized the Hydra-TinkerPop bindings (formerly HydraPop)
+  ([#442](https://github.com/CategoricalData/hydra/issues/442)).
+- Compact unit-valued variants in the JSON encoding ([#520](https://github.com/CategoricalData/hydra/issues/520)).
+- Structured generation-provenance record (digest v2) ([#413](https://github.com/CategoricalData/hydra/issues/413),
+  [#523](https://github.com/CategoricalData/hydra/issues/523)).
+- Metadata sidecar + content/version-addressed freshness (`moduleFormatVersion`)
+  ([#415](https://github.com/CategoricalData/hydra/issues/415)).
+- Worker + issue hierarchy: agent/worker framework, cross-worktree messaging, issue-proposal queue
+  (contributor process only) ([#557](https://github.com/CategoricalData/hydra/issues/557)).
 
-### Fixed
+### Improvements
 
-Bug fixes landed this cycle, grouped by area (see each issue for detail):
+- Type inference for annotations ([#229](https://github.com/CategoricalData/hydra/issues/229)).
+- Fixed the signature / definition split in primitive definitions
+  ([#502](https://github.com/CategoricalData/hydra/issues/502)).
+- DSL usability passes across the host-native Java/Python/Scala surfaces
+  ([#430](https://github.com/CategoricalData/hydra/issues/430),
+  [#553](https://github.com/CategoricalData/hydra/issues/553)).
+- Audited the Scala and Lisp-family coders for the unconditional `hydra.lib.*` overlay-import rewrite
+  ([#569](https://github.com/CategoricalData/hydra/issues/569)).
 
-- **TypeScript** — reactivated `hydra.lib.*` primitive tests surfaced encoder gaps: lazy show-calling
-  let bindings and compact bare-string `LiteralType` expansion in the test converter
-  ([#564](https://github.com/CategoricalData/hydra/issues/564)),
-  `binaryToBytes` registration + base64 binary decode in `decodeUtf8`
-  ([#561](https://github.com/CategoricalData/hydra/issues/561)),
+### Bug fixes
+
+- **TypeScript host** — V8 stack budget on ts→Java ([#390](https://github.com/CategoricalData/hydra/issues/390));
+  effectful libs not generated / 484 tsc errors ([#503](https://github.com/CategoricalData/hydra/issues/503));
+  15 effect/file inference cases ([#504](https://github.com/CategoricalData/hydra/issues/504));
+  ts→ts self-host regression ([#507](https://github.com/CategoricalData/hydra/issues/507)); npm packages
+  bundling a duplicate kernel ([#584](https://github.com/CategoricalData/hydra/issues/584)); broken npm
+  entry points ([#587](https://github.com/CategoricalData/hydra/issues/587));
+  `hydra.test.build.modules.allTests` gen-universe gap ([#588](https://github.com/CategoricalData/hydra/issues/588)).
+- **TypeScript coder** — reactivated `hydra.lib.*` tests: lazy show-calling let bindings + compact
+  `LiteralType` expansion ([#564](https://github.com/CategoricalData/hydra/issues/564)); `binaryToBytes`
+  registration + base64 decode in `decodeUtf8` ([#561](https://github.com/CategoricalData/hydra/issues/561));
   `hydra.test.build.*` emission after the #546 split
-  ([#570](https://github.com/CategoricalData/hydra/issues/570)), and `HYDRA_DEFAULT_IMPLS` support in
-  the test runner ([#536](https://github.com/CategoricalData/hydra/issues/536)).
-- **Tests and CI** — restored the default-primitive-implementation testing solution
-  ([#388](https://github.com/CategoricalData/hydra/issues/388),
-  [#549](https://github.com/CategoricalData/hydra/issues/549)), reactivated previously-ignored kernel
-  test cases ([#513](https://github.com/CategoricalData/hydra/issues/513),
-  [#550](https://github.com/CategoricalData/hydra/issues/550)), wired the regression harnesses into CI
-  and split them out of the monolithic Haskell job for timeout headroom
-  ([#535](https://github.com/CategoricalData/hydra/issues/535),
-  [#563](https://github.com/CategoricalData/hydra/issues/563)), added Scala/Go/Lisp
-  self-containment gates to `verify-distribution.sh`
-  ([#537](https://github.com/CategoricalData/hydra/issues/537)), a manifest-JSON-tracked CI check
-  ([#541](https://github.com/CategoricalData/hydra/issues/541)), a per-package test-digest freshness
-  fix ([#551](https://github.com/CategoricalData/hydra/issues/551)), overlay-file restoration in
-  `test-stale-output-prune.sh` ([#558](https://github.com/CategoricalData/hydra/issues/558)), and a
-  sync-freshness fingerprint that now sees host-native DSL sources
-  ([#562](https://github.com/CategoricalData/hydra/issues/562)).
+  ([#570](https://github.com/CategoricalData/hydra/issues/570)); `HYDRA_DEFAULT_IMPLS` in the test runner
+  ([#536](https://github.com/CategoricalData/hydra/issues/536)); overlay-import rewrite no longer captures
+  `hydra.lib.defaults` ([#565](https://github.com/CategoricalData/hydra/issues/565)).
+- **Lisp family** — clj→clj bootstrap hang in `generate_source_files`
+  ([#479](https://github.com/CategoricalData/hydra/issues/479)); Common Lisp `test_graph.lisp` loader
+  forward-reference ([#496](https://github.com/CategoricalData/hydra/issues/496)); Scheme maps
+  last-writer-wins in `union` ([#545](https://github.com/CategoricalData/hydra/issues/545)); Emacs Lisp
+  bootstrap `wrong-type-argument (listp :string)` ([#586](https://github.com/CategoricalData/hydra/issues/586));
+  `hydra.build.*` regeneration into the Lisp dialects ([#544](https://github.com/CategoricalData/hydra/issues/544)).
 - **Kernel and coders** — Java binary-literal signed-byte emission
-  ([#528](https://github.com/CategoricalData/hydra/issues/528)), `hydra.json.Decode.fromJson`
-  parametric-type (Application/Forall) support
-  ([#531](https://github.com/CategoricalData/hydra/issues/531)), stale 2-param `Coder` shape in
-  Java/Scala test bootstrap ([#552](https://github.com/CategoricalData/hydra/issues/552)), and a
-  kernel dead-code/TODO cleanup ([#538](https://github.com/CategoricalData/hydra/issues/538)).
+  ([#528](https://github.com/CategoricalData/hydra/issues/528)); `hydra.json.Decode.fromJson`
+  parametric-type support ([#531](https://github.com/CategoricalData/hydra/issues/531)); stale 2-param
+  `Coder` shape in Java/Scala test bootstrap ([#552](https://github.com/CategoricalData/hydra/issues/552));
+  Java Javadoc ampersand escaping ([#493](https://github.com/CategoricalData/hydra/issues/493)); Scala
+  coder over-generalizing `Schema[S,T,V,E]` args, breaking `hydra-pg`
+  ([#589](https://github.com/CategoricalData/hydra/issues/589)); kernel dead-code/TODO cleanup
+  ([#538](https://github.com/CategoricalData/hydra/issues/538)).
+- **Publishing and packaging** — self-broken 0.16.0 `hydra-kernel`/`hydra-python` wheels
+  ([#472](https://github.com/CategoricalData/hydra/issues/472)).
 - **Lib and build** — `hydra.lib.files` copy/removeDirectory/status overlays across all nine hosts
-  ([#525](https://github.com/CategoricalData/hydra/issues/525)), `hydra.build.*` regeneration into the
-  Lisp dialects ([#544](https://github.com/CategoricalData/hydra/issues/544)), Scheme maps
-  last-writer-wins in `union` ([#545](https://github.com/CategoricalData/hydra/issues/545)),
-  standalone-kernel SHA dependency ([#542](https://github.com/CategoricalData/hydra/issues/542)),
-  the lexicon's empty Types section ([#539](https://github.com/CategoricalData/hydra/issues/539)), and
-  a duplicated generated-file header in `generate-head-haskell-build.py`
-  ([#540](https://github.com/CategoricalData/hydra/issues/540)).
-
-- **TypeScript overlay-import rewrite** ([#565](https://github.com/CategoricalData/hydra/issues/565)):
-  the TypeScript coder's lib overlay-import rewrite no longer captures `hydra.lib.defaults`, which is a
-  generated (not overlaid) module; excluding it fixes spurious import references in generated TypeScript.
-
-- **Lexicon generation** (`bin/regenerate-lexicon.sh`): the generator had been failing
-  silently since the encoder/decoder modules moved to in-memory synthesis
-  ([#448](https://github.com/CategoricalData/hydra/issues/448)) — the script masked the
-  failure and left a stale `docs/hydra-lexicon.txt` missing the four effectful primitive
-  libraries (`hydra.lib.{effects,files,system,text}`). The synthesized coder modules are
-  now included in the lexicon universe, the script fails loudly, and the regenerated
-  lexicon covers all 267 primitives across 17 library modules.
-- **`bin/prepare-release.sh`**: the non-blocking Java quality check invoked Gradle
-  subprojects (`:hydra-rdf4j:test` etc.) that were removed in
-  [#511](https://github.com/CategoricalData/hydra/issues/511), so it always warned without
-  checking anything; it now runs the `dist/java/hydra-pg` package tests (the current home
-  of the former binding tests).
-- **`.gitignore`**: the ignore rules for the overlaid hand-written Haskell runtime still
-  named pre-[#501](https://github.com/CategoricalData/hydra/issues/501) paths, so 41
-  duplicate copies under `dist/haskell/` had become tracked; the rules now match the
-  `Hydra/Overlay/` location and the duplicates are untracked.
+  ([#525](https://github.com/CategoricalData/hydra/issues/525)); standalone-kernel SHA dependency
+  ([#542](https://github.com/CategoricalData/hydra/issues/542)); lexicon's empty Types section
+  ([#539](https://github.com/CategoricalData/hydra/issues/539)); silent lexicon-generation failure since
+  the coders moved to in-memory synthesis ([#448](https://github.com/CategoricalData/hydra/issues/448));
+  duplicated generated-file header in `generate-head-haskell-build.py`
+  ([#540](https://github.com/CategoricalData/hydra/issues/540)); `.gitignore` untracking 41 duplicate
+  overlaid-runtime copies under `dist/haskell/` ([#501](https://github.com/CategoricalData/hydra/issues/501));
+  `bin/prepare-release.sh` Java quality check repointed to `dist/java/hydra-pg` tests after
+  ([#511](https://github.com/CategoricalData/hydra/issues/511)).
+- **Tests and CI** — restored default-primitive-implementation testing
+  ([#388](https://github.com/CategoricalData/hydra/issues/388),
+  [#549](https://github.com/CategoricalData/hydra/issues/549)); reactivated ignored kernel test cases
+  ([#513](https://github.com/CategoricalData/hydra/issues/513),
+  [#550](https://github.com/CategoricalData/hydra/issues/550)); wired + split out the regression harnesses
+  ([#535](https://github.com/CategoricalData/hydra/issues/535),
+  [#563](https://github.com/CategoricalData/hydra/issues/563)); Scala/Go/Lisp self-containment gates
+  ([#537](https://github.com/CategoricalData/hydra/issues/537)); manifest-JSON-tracked CI check
+  ([#541](https://github.com/CategoricalData/hydra/issues/541)); per-package test-digest freshness
+  ([#551](https://github.com/CategoricalData/hydra/issues/551)); overlay-file restoration in
+  `test-stale-output-prune.sh` ([#558](https://github.com/CategoricalData/hydra/issues/558)); DSL-aware
+  sync-freshness fingerprint ([#562](https://github.com/CategoricalData/hydra/issues/562)).
 
 ### Documentation
 
-- Corrected the 0.17.0 Maven coordinates throughout (Java artifacts publish under group
-  `net.fortytwo.hydra.java`, Scala under `net.fortytwo.hydra.scala`,
-  [#519](https://github.com/CategoricalData/hydra/issues/519)); added the npm and Scala
-  release channels to the README; added TypeScript/Scala/Lisp sections to Getting started;
-  repointed stale pre-#418/#501 DSL paths in the architecture docs; added GitHub issue and
-  PR templates.
+- Corrected 0.17.0 Maven coordinates and added npm/Scala release channels, TypeScript/Scala/Lisp
+  Getting-started sections, and issue/PR templates
+  ([#519](https://github.com/CategoricalData/hydra/issues/519)).
 
 ---
 
diff --git a/hydra-pg.cabal b/hydra-pg.cabal
--- a/hydra-pg.cabal
+++ b/hydra-pg.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.38.1.
+-- This file has been generated from package.yaml by hpack version 0.39.1.
 --
 -- see: https://github.com/sol/hpack
 
 name:           hydra-pg
-version:        0.17.1
+version:        0.17.2
 synopsis:       Hydra's property-graph (TinkerPop/Gremlin) model and coder support
 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". Property graph support for Hydra
 category:       Data
@@ -61,7 +61,7 @@
       Hydra.Pg.Rdf.Mappings
       Hydra.Pg.TermsToElements
       Hydra.Pg.Utils
-      Hydra.Show.Error.Pg
+      Hydra.Print.Error.Pg
       Hydra.Tinkerpop.Examples.Modern
       Hydra.Tinkerpop.Features
       Hydra.Tinkerpop.Gremlin
@@ -77,7 +77,7 @@
       base >=4.19.0 && <4.22
     , bytestring >=0.11.5 && <0.13
     , containers >=0.6.7 && <0.8
-    , hydra-kernel ==0.17.1
-    , hydra-rdf ==0.17.1
+    , hydra-kernel ==0.17.2
+    , hydra-rdf ==0.17.2
     , scientific >=0.3.7 && <0.4
   default-language: Haskell2010
diff --git a/src/main/haskell/Com/Gdblab/PathAlgebra/Expressions.hs b/src/main/haskell/Com/Gdblab/PathAlgebra/Expressions.hs
--- a/src/main/haskell/Com/Gdblab/PathAlgebra/Expressions.hs
+++ b/src/main/haskell/Com/Gdblab/PathAlgebra/Expressions.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Algebraic expression trees for the path algebra by Angles et al., extended for GQL support
 
 module Com.Gdblab.PathAlgebra.Expressions where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -18,6 +21,7 @@
 import qualified Hydra.Parsing as Parsing
 import qualified Hydra.Paths as Paths
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.System as System
 import qualified Hydra.Tabular as Tabular
@@ -31,43 +35,20 @@
 import qualified Hydra.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
--- | Complete query with path algebra and result projection
-data QueryExpression =
-  QueryExpression {
-    queryExpressionPathExpression :: PathExpression,
-    queryExpressionResultProjection :: (Maybe ResultProjection)}
-  deriving (Eq, Ord, Read, Show)
-_QueryExpression = Core.Name "com.gdblab.pathAlgebra.expressions.QueryExpression"
-_QueryExpression_pathExpression = Core.Name "pathExpression"
-_QueryExpression_resultProjection = Core.Name "resultProjection"
--- | A path algebra expression that evaluates to a set of paths
-data PathExpression =
-  -- | Base case: extract paths from graph
-  PathExpressionBase BaseExpression |
-  -- | Selection operator (σ): filter paths by condition
-  PathExpressionSelection SelectionExpression |
-  -- | Join operator (⊲⊳): concatenate compatible paths
-  PathExpressionJoin JoinExpression |
-  -- | Union operator (∪): combine path sets
-  PathExpressionUnion UnionExpression |
-  -- | Recursive operator (φ): compute transitive closure with semantics
-  PathExpressionRecursive RecursiveExpression |
-  -- | Group-by operator (γ): organize paths into solution space
-  PathExpressionGroupBy GroupByExpression |
-  -- | Order-by operator (τ): sort solution space
-  PathExpressionOrderBy OrderByExpression |
-  -- | Projection operator (π): extract paths from solution space
-  PathExpressionProjection ProjectionExpression
+
+-- | A conjunction of two selection conditions
+data AndCondition =
+  AndCondition {
+    andConditionLeft :: SelectionCondition,
+    andConditionRight :: SelectionCondition}
   deriving (Eq, Ord, Read, Show)
-_PathExpression = Core.Name "com.gdblab.pathAlgebra.expressions.PathExpression"
-_PathExpression_base = Core.Name "base"
-_PathExpression_selection = Core.Name "selection"
-_PathExpression_join = Core.Name "join"
-_PathExpression_union = Core.Name "union"
-_PathExpression_recursive = Core.Name "recursive"
-_PathExpression_groupBy = Core.Name "groupBy"
-_PathExpression_orderBy = Core.Name "orderBy"
-_PathExpression_projection = Core.Name "projection"
+
+_AndCondition = Core.Name "com.gdblab.pathAlgebra.expressions.AndCondition"
+
+_AndCondition_left = Core.Name "left"
+
+_AndCondition_right = Core.Name "right"
+
 -- | Base path expressions that extract paths from graph
 data BaseExpression =
   -- | Paths0(G): all paths of length 0 (nodes)
@@ -77,98 +58,139 @@
   -- | Paths*(G): all paths in graph (infinite without restrictions)
   BaseExpressionPathsStar GraphReference
   deriving (Eq, Ord, Read, Show)
+
 _BaseExpression = Core.Name "com.gdblab.pathAlgebra.expressions.BaseExpression"
+
 _BaseExpression_paths0 = Core.Name "paths0"
+
 _BaseExpression_paths1 = Core.Name "paths1"
+
 _BaseExpression_pathsStar = Core.Name "pathsStar"
+
+-- | Comparison operators for property conditions
+data ComparisonOperator =
+  ComparisonOperatorEqual |
+  ComparisonOperatorNotEqual |
+  ComparisonOperatorLessThan |
+  ComparisonOperatorLessThanOrEqual |
+  ComparisonOperatorGreaterThan |
+  ComparisonOperatorGreaterThanOrEqual
+  deriving (Eq, Ord, Read, Show)
+
+_ComparisonOperator = Core.Name "com.gdblab.pathAlgebra.expressions.ComparisonOperator"
+
+_ComparisonOperator_equal = Core.Name "equal"
+
+_ComparisonOperator_notEqual = Core.Name "notEqual"
+
+_ComparisonOperator_lessThan = Core.Name "lessThan"
+
+_ComparisonOperator_lessThanOrEqual = Core.Name "lessThanOrEqual"
+
+_ComparisonOperator_greaterThan = Core.Name "greaterThan"
+
+_ComparisonOperator_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
+
+-- | Reference to an edge property: edge.property
+data EdgePropertyRef =
+  EdgePropertyRef {
+    edgePropertyRefElement :: PathElement,
+    edgePropertyRefProperty :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgePropertyRef = Core.Name "com.gdblab.pathAlgebra.expressions.EdgePropertyRef"
+
+_EdgePropertyRef_element = Core.Name "element"
+
+_EdgePropertyRef_property = Core.Name "property"
+
 -- | Reference to a property graph
 newtype GraphReference =
   GraphReference {
     unGraphReference :: String}
   deriving (Eq, Ord, Read, Show)
+
 _GraphReference = Core.Name "com.gdblab.pathAlgebra.expressions.GraphReference"
--- | Selection operator: σ_condition(expression)
-data SelectionExpression =
-  SelectionExpression {
-    selectionExpressionCondition :: SelectionCondition,
-    selectionExpressionExpression :: PathExpression}
+
+-- | Grouping criteria corresponding to paper's γ variants
+data GroupByCriterion =
+  GroupByCriterionNone |
+  GroupByCriterionSource |
+  GroupByCriterionTarget |
+  GroupByCriterionLength |
+  GroupByCriterionSourceTarget |
+  GroupByCriterionSourceLength |
+  GroupByCriterionTargetLength |
+  GroupByCriterionSourceTargetLength
   deriving (Eq, Ord, Read, Show)
-_SelectionExpression = Core.Name "com.gdblab.pathAlgebra.expressions.SelectionExpression"
-_SelectionExpression_condition = Core.Name "condition"
-_SelectionExpression_expression = Core.Name "expression"
--- | Conditions for filtering paths
-data SelectionCondition =
-  SelectionConditionSimple SimpleCondition |
-  SelectionConditionAnd AndCondition |
-  SelectionConditionOr OrCondition |
-  SelectionConditionNot NotCondition
+
+_GroupByCriterion = Core.Name "com.gdblab.pathAlgebra.expressions.GroupByCriterion"
+
+_GroupByCriterion_none = Core.Name "none"
+
+_GroupByCriterion_source = Core.Name "source"
+
+_GroupByCriterion_target = Core.Name "target"
+
+_GroupByCriterion_length = Core.Name "length"
+
+_GroupByCriterion_sourceTarget = Core.Name "sourceTarget"
+
+_GroupByCriterion_sourceLength = Core.Name "sourceLength"
+
+_GroupByCriterion_targetLength = Core.Name "targetLength"
+
+_GroupByCriterion_sourceTargetLength = Core.Name "sourceTargetLength"
+
+-- | Group-by operator: γ_criterion(expression)
+data GroupByExpression =
+  GroupByExpression {
+    groupByExpressionCriterion :: GroupByCriterion,
+    groupByExpressionExpression :: PathExpression}
   deriving (Eq, Ord, Read, Show)
-_SelectionCondition = Core.Name "com.gdblab.pathAlgebra.expressions.SelectionCondition"
-_SelectionCondition_simple = Core.Name "simple"
-_SelectionCondition_and = Core.Name "and"
-_SelectionCondition_or = Core.Name "or"
-_SelectionCondition_not = Core.Name "not"
--- | Atomic selection conditions
-data SimpleCondition =
-  SimpleConditionLabelEquals LabelCondition |
-  SimpleConditionPropertyEquals PropertyCondition |
-  SimpleConditionPropertyComparison PropertyComparisonCondition |
-  SimpleConditionLengthEquals LengthCondition
+
+_GroupByExpression = Core.Name "com.gdblab.pathAlgebra.expressions.GroupByExpression"
+
+_GroupByExpression_criterion = Core.Name "criterion"
+
+_GroupByExpression_expression = Core.Name "expression"
+
+-- | Join operator: expr1 ⊲⊳ expr2
+data JoinExpression =
+  JoinExpression {
+    joinExpressionLeft :: PathExpression,
+    joinExpressionRight :: PathExpression}
   deriving (Eq, Ord, Read, Show)
-_SimpleCondition = Core.Name "com.gdblab.pathAlgebra.expressions.SimpleCondition"
-_SimpleCondition_labelEquals = Core.Name "labelEquals"
-_SimpleCondition_propertyEquals = Core.Name "propertyEquals"
-_SimpleCondition_propertyComparison = Core.Name "propertyComparison"
-_SimpleCondition_lengthEquals = Core.Name "lengthEquals"
+
+_JoinExpression = Core.Name "com.gdblab.pathAlgebra.expressions.JoinExpression"
+
+_JoinExpression_left = Core.Name "left"
+
+_JoinExpression_right = Core.Name "right"
+
 -- | Conditions on node/edge labels: label(node(i)) = v
 data LabelCondition =
   LabelCondition {
     labelConditionTarget :: PathElement,
     labelConditionValue :: String}
   deriving (Eq, Ord, Read, Show)
+
 _LabelCondition = Core.Name "com.gdblab.pathAlgebra.expressions.LabelCondition"
+
 _LabelCondition_target = Core.Name "target"
+
 _LabelCondition_value = Core.Name "value"
--- | Property equality conditions: node(i).prop = v
-data PropertyCondition =
-  PropertyCondition {
-    propertyConditionTarget :: PathElement,
-    propertyConditionProperty :: String,
-    propertyConditionValue :: LiteralValue}
-  deriving (Eq, Ord, Read, Show)
-_PropertyCondition = Core.Name "com.gdblab.pathAlgebra.expressions.PropertyCondition"
-_PropertyCondition_target = Core.Name "target"
-_PropertyCondition_property = Core.Name "property"
-_PropertyCondition_value = Core.Name "value"
--- | Property comparison conditions: node(i).prop > v, etc.
-data PropertyComparisonCondition =
-  PropertyComparisonCondition {
-    propertyComparisonConditionTarget :: PathElement,
-    propertyComparisonConditionProperty :: String,
-    propertyComparisonConditionOperator :: ComparisonOperator,
-    propertyComparisonConditionValue :: LiteralValue}
-  deriving (Eq, Ord, Read, Show)
-_PropertyComparisonCondition = Core.Name "com.gdblab.pathAlgebra.expressions.PropertyComparisonCondition"
-_PropertyComparisonCondition_target = Core.Name "target"
-_PropertyComparisonCondition_property = Core.Name "property"
-_PropertyComparisonCondition_operator = Core.Name "operator"
-_PropertyComparisonCondition_value = Core.Name "value"
--- | Comparison operators for property conditions
-data ComparisonOperator =
-  ComparisonOperatorEqual |
-  ComparisonOperatorNotEqual |
-  ComparisonOperatorLessThan |
-  ComparisonOperatorLessThanOrEqual |
-  ComparisonOperatorGreaterThan |
-  ComparisonOperatorGreaterThanOrEqual
+
+-- | Condition on path length: len() = i
+data LengthCondition =
+  LengthCondition {
+    lengthConditionLength :: Int}
   deriving (Eq, Ord, Read, Show)
-_ComparisonOperator = Core.Name "com.gdblab.pathAlgebra.expressions.ComparisonOperator"
-_ComparisonOperator_equal = Core.Name "equal"
-_ComparisonOperator_notEqual = Core.Name "notEqual"
-_ComparisonOperator_lessThan = Core.Name "lessThan"
-_ComparisonOperator_lessThanOrEqual = Core.Name "lessThanOrEqual"
-_ComparisonOperator_greaterThan = Core.Name "greaterThan"
-_ComparisonOperator_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
+
+_LengthCondition = Core.Name "com.gdblab.pathAlgebra.expressions.LengthCondition"
+
+_LengthCondition_length = Core.Name "length"
+
 -- | Literal values for comparisons
 data LiteralValue =
   LiteralValueString String |
@@ -176,18 +198,93 @@
   LiteralValueFloat Double |
   LiteralValueBoolean Bool
   deriving (Eq, Ord, Read, Show)
+
 _LiteralValue = Core.Name "com.gdblab.pathAlgebra.expressions.LiteralValue"
+
 _LiteralValue_string = Core.Name "string"
+
 _LiteralValue_integer = Core.Name "integer"
+
 _LiteralValue_float = Core.Name "float"
+
 _LiteralValue_boolean = Core.Name "boolean"
--- | Condition on path length: len() = i
-data LengthCondition =
-  LengthCondition {
-    lengthConditionLength :: Int}
+
+-- | Reference to a node property: node.property
+data NodePropertyRef =
+  NodePropertyRef {
+    nodePropertyRefElement :: PathElement,
+    nodePropertyRefProperty :: String}
   deriving (Eq, Ord, Read, Show)
-_LengthCondition = Core.Name "com.gdblab.pathAlgebra.expressions.LengthCondition"
-_LengthCondition_length = Core.Name "length"
+
+_NodePropertyRef = Core.Name "com.gdblab.pathAlgebra.expressions.NodePropertyRef"
+
+_NodePropertyRef_element = Core.Name "element"
+
+_NodePropertyRef_property = Core.Name "property"
+
+-- | The negation of a selection condition
+data NotCondition =
+  NotCondition {
+    notConditionCondition :: SelectionCondition}
+  deriving (Eq, Ord, Read, Show)
+
+_NotCondition = Core.Name "com.gdblab.pathAlgebra.expressions.NotCondition"
+
+_NotCondition_condition = Core.Name "condition"
+
+-- | A disjunction of two selection conditions
+data OrCondition =
+  OrCondition {
+    orConditionLeft :: SelectionCondition,
+    orConditionRight :: SelectionCondition}
+  deriving (Eq, Ord, Read, Show)
+
+_OrCondition = Core.Name "com.gdblab.pathAlgebra.expressions.OrCondition"
+
+_OrCondition_left = Core.Name "left"
+
+_OrCondition_right = Core.Name "right"
+
+-- | Ordering criteria corresponding to paper's τ variants
+data OrderByCriterion =
+  OrderByCriterionPartition |
+  OrderByCriterionGroup |
+  OrderByCriterionPath |
+  OrderByCriterionPartitionGroup |
+  OrderByCriterionPartitionPath |
+  OrderByCriterionGroupPath |
+  OrderByCriterionPartitionGroupPath
+  deriving (Eq, Ord, Read, Show)
+
+_OrderByCriterion = Core.Name "com.gdblab.pathAlgebra.expressions.OrderByCriterion"
+
+_OrderByCriterion_partition = Core.Name "partition"
+
+_OrderByCriterion_group = Core.Name "group"
+
+_OrderByCriterion_path = Core.Name "path"
+
+_OrderByCriterion_partitionGroup = Core.Name "partitionGroup"
+
+_OrderByCriterion_partitionPath = Core.Name "partitionPath"
+
+_OrderByCriterion_groupPath = Core.Name "groupPath"
+
+_OrderByCriterion_partitionGroupPath = Core.Name "partitionGroupPath"
+
+-- | Order-by operator: τ_criterion(solutionSpace)
+data OrderByExpression =
+  OrderByExpression {
+    orderByExpressionCriterion :: OrderByCriterion,
+    orderByExpressionExpression :: SolutionSpaceExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_OrderByExpression = Core.Name "com.gdblab.pathAlgebra.expressions.OrderByExpression"
+
+_OrderByExpression_criterion = Core.Name "criterion"
+
+_OrderByExpression_expression = Core.Name "expression"
+
 -- | References to elements within a path
 data PathElement =
   PathElementNode Int |
@@ -195,60 +292,70 @@
   PathElementFirst |
   PathElementLast
   deriving (Eq, Ord, Read, Show)
+
 _PathElement = Core.Name "com.gdblab.pathAlgebra.expressions.PathElement"
+
 _PathElement_node = Core.Name "node"
+
 _PathElement_edge = Core.Name "edge"
+
 _PathElement_first = Core.Name "first"
+
 _PathElement_last = Core.Name "last"
-data AndCondition =
-  AndCondition {
-    andConditionLeft :: SelectionCondition,
-    andConditionRight :: SelectionCondition}
-  deriving (Eq, Ord, Read, Show)
-_AndCondition = Core.Name "com.gdblab.pathAlgebra.expressions.AndCondition"
-_AndCondition_left = Core.Name "left"
-_AndCondition_right = Core.Name "right"
-data OrCondition =
-  OrCondition {
-    orConditionLeft :: SelectionCondition,
-    orConditionRight :: SelectionCondition}
-  deriving (Eq, Ord, Read, Show)
-_OrCondition = Core.Name "com.gdblab.pathAlgebra.expressions.OrCondition"
-_OrCondition_left = Core.Name "left"
-_OrCondition_right = Core.Name "right"
-data NotCondition =
-  NotCondition {
-    notConditionCondition :: SelectionCondition}
-  deriving (Eq, Ord, Read, Show)
-_NotCondition = Core.Name "com.gdblab.pathAlgebra.expressions.NotCondition"
-_NotCondition_condition = Core.Name "condition"
--- | Join operator: expr1 ⊲⊳ expr2
-data JoinExpression =
-  JoinExpression {
-    joinExpressionLeft :: PathExpression,
-    joinExpressionRight :: PathExpression}
-  deriving (Eq, Ord, Read, Show)
-_JoinExpression = Core.Name "com.gdblab.pathAlgebra.expressions.JoinExpression"
-_JoinExpression_left = Core.Name "left"
-_JoinExpression_right = Core.Name "right"
--- | Union operator: expr1 ∪ expr2
-data UnionExpression =
-  UnionExpression {
-    unionExpressionLeft :: PathExpression,
-    unionExpressionRight :: PathExpression}
+
+-- | A path algebra expression that evaluates to a set of paths
+data PathExpression =
+  -- | Base case: extract paths from graph
+  PathExpressionBase BaseExpression |
+  -- | Selection operator (σ): filter paths by condition
+  PathExpressionSelection SelectionExpression |
+  -- | Join operator (⊲⊳): concatenate compatible paths
+  PathExpressionJoin JoinExpression |
+  -- | Union operator (∪): combine path sets
+  PathExpressionUnion UnionExpression |
+  -- | Recursive operator (φ): compute transitive closure with semantics
+  PathExpressionRecursive RecursiveExpression |
+  -- | Group-by operator (γ): organize paths into solution space
+  PathExpressionGroupBy GroupByExpression |
+  -- | Order-by operator (τ): sort solution space
+  PathExpressionOrderBy OrderByExpression |
+  -- | Projection operator (π): extract paths from solution space
+  PathExpressionProjection ProjectionExpression
   deriving (Eq, Ord, Read, Show)
-_UnionExpression = Core.Name "com.gdblab.pathAlgebra.expressions.UnionExpression"
-_UnionExpression_left = Core.Name "left"
-_UnionExpression_right = Core.Name "right"
--- | Recursive operator with path semantics
-data RecursiveExpression =
-  RecursiveExpression {
-    recursiveExpressionSemantics :: PathSemantics,
-    recursiveExpressionExpression :: PathExpression}
+
+_PathExpression = Core.Name "com.gdblab.pathAlgebra.expressions.PathExpression"
+
+_PathExpression_base = Core.Name "base"
+
+_PathExpression_selection = Core.Name "selection"
+
+_PathExpression_join = Core.Name "join"
+
+_PathExpression_union = Core.Name "union"
+
+_PathExpression_recursive = Core.Name "recursive"
+
+_PathExpression_groupBy = Core.Name "groupBy"
+
+_PathExpression_orderBy = Core.Name "orderBy"
+
+_PathExpression_projection = Core.Name "projection"
+
+-- | Reference to path-level properties: length, etc.
+data PathPropertyRef =
+  PathPropertyRefLength |
+  PathPropertyRefStartNode |
+  PathPropertyRefEndNode
   deriving (Eq, Ord, Read, Show)
-_RecursiveExpression = Core.Name "com.gdblab.pathAlgebra.expressions.RecursiveExpression"
-_RecursiveExpression_semantics = Core.Name "semantics"
-_RecursiveExpression_expression = Core.Name "expression"
+
+_PathPropertyRef = Core.Name "com.gdblab.pathAlgebra.expressions.PathPropertyRef"
+
+_PathPropertyRef_length = Core.Name "length"
+
+_PathPropertyRef_startNode = Core.Name "startNode"
+
+_PathPropertyRef_endNode = Core.Name "endNode"
+
 -- | Path semantics for recursive operations
 data PathSemantics =
   PathSemanticsWalk |
@@ -257,76 +364,19 @@
   PathSemanticsSimple |
   PathSemanticsShortest
   deriving (Eq, Ord, Read, Show)
+
 _PathSemantics = Core.Name "com.gdblab.pathAlgebra.expressions.PathSemantics"
+
 _PathSemantics_walk = Core.Name "walk"
+
 _PathSemantics_trail = Core.Name "trail"
+
 _PathSemantics_acyclic = Core.Name "acyclic"
+
 _PathSemantics_simple = Core.Name "simple"
+
 _PathSemantics_shortest = Core.Name "shortest"
--- | Expressions that work with solution spaces
-data SolutionSpaceExpression =
-  SolutionSpaceExpressionGroupBy GroupByExpression |
-  SolutionSpaceExpressionOrderBy OrderByExpression
-  deriving (Eq, Ord, Read, Show)
-_SolutionSpaceExpression = Core.Name "com.gdblab.pathAlgebra.expressions.SolutionSpaceExpression"
-_SolutionSpaceExpression_groupBy = Core.Name "groupBy"
-_SolutionSpaceExpression_orderBy = Core.Name "orderBy"
--- | Group-by operator: γ_criterion(expression)
-data GroupByExpression =
-  GroupByExpression {
-    groupByExpressionCriterion :: GroupByCriterion,
-    groupByExpressionExpression :: PathExpression}
-  deriving (Eq, Ord, Read, Show)
-_GroupByExpression = Core.Name "com.gdblab.pathAlgebra.expressions.GroupByExpression"
-_GroupByExpression_criterion = Core.Name "criterion"
-_GroupByExpression_expression = Core.Name "expression"
--- | Grouping criteria corresponding to paper's γ variants
-data GroupByCriterion =
-  GroupByCriterionNone |
-  GroupByCriterionSource |
-  GroupByCriterionTarget |
-  GroupByCriterionLength |
-  GroupByCriterionSourceTarget |
-  GroupByCriterionSourceLength |
-  GroupByCriterionTargetLength |
-  GroupByCriterionSourceTargetLength
-  deriving (Eq, Ord, Read, Show)
-_GroupByCriterion = Core.Name "com.gdblab.pathAlgebra.expressions.GroupByCriterion"
-_GroupByCriterion_none = Core.Name "none"
-_GroupByCriterion_source = Core.Name "source"
-_GroupByCriterion_target = Core.Name "target"
-_GroupByCriterion_length = Core.Name "length"
-_GroupByCriterion_sourceTarget = Core.Name "sourceTarget"
-_GroupByCriterion_sourceLength = Core.Name "sourceLength"
-_GroupByCriterion_targetLength = Core.Name "targetLength"
-_GroupByCriterion_sourceTargetLength = Core.Name "sourceTargetLength"
--- | Order-by operator: τ_criterion(solutionSpace)
-data OrderByExpression =
-  OrderByExpression {
-    orderByExpressionCriterion :: OrderByCriterion,
-    orderByExpressionExpression :: SolutionSpaceExpression}
-  deriving (Eq, Ord, Read, Show)
-_OrderByExpression = Core.Name "com.gdblab.pathAlgebra.expressions.OrderByExpression"
-_OrderByExpression_criterion = Core.Name "criterion"
-_OrderByExpression_expression = Core.Name "expression"
--- | Ordering criteria corresponding to paper's τ variants
-data OrderByCriterion =
-  OrderByCriterionPartition |
-  OrderByCriterionGroup |
-  OrderByCriterionPath |
-  OrderByCriterionPartitionGroup |
-  OrderByCriterionPartitionPath |
-  OrderByCriterionGroupPath |
-  OrderByCriterionPartitionGroupPath
-  deriving (Eq, Ord, Read, Show)
-_OrderByCriterion = Core.Name "com.gdblab.pathAlgebra.expressions.OrderByCriterion"
-_OrderByCriterion_partition = Core.Name "partition"
-_OrderByCriterion_group = Core.Name "group"
-_OrderByCriterion_path = Core.Name "path"
-_OrderByCriterion_partitionGroup = Core.Name "partitionGroup"
-_OrderByCriterion_partitionPath = Core.Name "partitionPath"
-_OrderByCriterion_groupPath = Core.Name "groupPath"
-_OrderByCriterion_partitionGroupPath = Core.Name "partitionGroupPath"
+
 -- | Projection operator: π_(#P,#G,#A)(solutionSpace)
 data ProjectionExpression =
   ProjectionExpression {
@@ -335,70 +385,198 @@
     projectionExpressionPaths :: ProjectionSpec,
     projectionExpressionExpression :: SolutionSpaceExpression}
   deriving (Eq, Ord, Read, Show)
+
 _ProjectionExpression = Core.Name "com.gdblab.pathAlgebra.expressions.ProjectionExpression"
+
 _ProjectionExpression_partitions = Core.Name "partitions"
+
 _ProjectionExpression_groups = Core.Name "groups"
+
 _ProjectionExpression_paths = Core.Name "paths"
+
 _ProjectionExpression_expression = Core.Name "expression"
+
 -- | Projection specification: * or specific number
 data ProjectionSpec =
   ProjectionSpecAll |
   ProjectionSpecLimited Int
   deriving (Eq, Ord, Read, Show)
+
 _ProjectionSpec = Core.Name "com.gdblab.pathAlgebra.expressions.ProjectionSpec"
+
 _ProjectionSpec_all = Core.Name "all"
+
 _ProjectionSpec_limited = Core.Name "limited"
--- | Extract specific values from paths for RETURN clause
-data ResultProjection =
-  ResultProjection {
-    resultProjectionProjections :: [PropertyExtraction]}
+
+-- | Property comparison conditions: node(i).prop > v, etc.
+data PropertyComparisonCondition =
+  PropertyComparisonCondition {
+    propertyComparisonConditionTarget :: PathElement,
+    propertyComparisonConditionProperty :: String,
+    propertyComparisonConditionOperator :: ComparisonOperator,
+    propertyComparisonConditionValue :: LiteralValue}
   deriving (Eq, Ord, Read, Show)
-_ResultProjection = Core.Name "com.gdblab.pathAlgebra.expressions.ResultProjection"
-_ResultProjection_projections = Core.Name "projections"
+
+_PropertyComparisonCondition = Core.Name "com.gdblab.pathAlgebra.expressions.PropertyComparisonCondition"
+
+_PropertyComparisonCondition_target = Core.Name "target"
+
+_PropertyComparisonCondition_property = Core.Name "property"
+
+_PropertyComparisonCondition_operator = Core.Name "operator"
+
+_PropertyComparisonCondition_value = Core.Name "value"
+
+-- | Property equality conditions: node(i).prop = v
+data PropertyCondition =
+  PropertyCondition {
+    propertyConditionTarget :: PathElement,
+    propertyConditionProperty :: String,
+    propertyConditionValue :: LiteralValue}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyCondition = Core.Name "com.gdblab.pathAlgebra.expressions.PropertyCondition"
+
+_PropertyCondition_target = Core.Name "target"
+
+_PropertyCondition_property = Core.Name "property"
+
+_PropertyCondition_value = Core.Name "value"
+
 -- | Extract properties from path elements
 data PropertyExtraction =
   PropertyExtraction {
     propertyExtractionAlias :: (Maybe String),
     propertyExtractionSource :: PropertySource}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyExtraction = Core.Name "com.gdblab.pathAlgebra.expressions.PropertyExtraction"
+
 _PropertyExtraction_alias = Core.Name "alias"
+
 _PropertyExtraction_source = Core.Name "source"
+
 -- | Source of a property value
 data PropertySource =
   PropertySourceNodeProperty NodePropertyRef |
   PropertySourceEdgeProperty EdgePropertyRef |
   PropertySourcePathProperty PathPropertyRef
   deriving (Eq, Ord, Read, Show)
+
 _PropertySource = Core.Name "com.gdblab.pathAlgebra.expressions.PropertySource"
+
 _PropertySource_nodeProperty = Core.Name "nodeProperty"
+
 _PropertySource_edgeProperty = Core.Name "edgeProperty"
+
 _PropertySource_pathProperty = Core.Name "pathProperty"
--- | Reference to a node property: node.property
-data NodePropertyRef =
-  NodePropertyRef {
-    nodePropertyRefElement :: PathElement,
-    nodePropertyRefProperty :: String}
+
+-- | Complete query with path algebra and result projection
+data QueryExpression =
+  QueryExpression {
+    queryExpressionPathExpression :: PathExpression,
+    queryExpressionResultProjection :: (Maybe ResultProjection)}
   deriving (Eq, Ord, Read, Show)
-_NodePropertyRef = Core.Name "com.gdblab.pathAlgebra.expressions.NodePropertyRef"
-_NodePropertyRef_element = Core.Name "element"
-_NodePropertyRef_property = Core.Name "property"
--- | Reference to an edge property: edge.property
-data EdgePropertyRef =
-  EdgePropertyRef {
-    edgePropertyRefElement :: PathElement,
-    edgePropertyRefProperty :: String}
+
+_QueryExpression = Core.Name "com.gdblab.pathAlgebra.expressions.QueryExpression"
+
+_QueryExpression_pathExpression = Core.Name "pathExpression"
+
+_QueryExpression_resultProjection = Core.Name "resultProjection"
+
+-- | Recursive operator with path semantics
+data RecursiveExpression =
+  RecursiveExpression {
+    recursiveExpressionSemantics :: PathSemantics,
+    recursiveExpressionExpression :: PathExpression}
   deriving (Eq, Ord, Read, Show)
-_EdgePropertyRef = Core.Name "com.gdblab.pathAlgebra.expressions.EdgePropertyRef"
-_EdgePropertyRef_element = Core.Name "element"
-_EdgePropertyRef_property = Core.Name "property"
--- | Reference to path-level properties: length, etc.
-data PathPropertyRef =
-  PathPropertyRefLength |
-  PathPropertyRefStartNode |
-  PathPropertyRefEndNode
+
+_RecursiveExpression = Core.Name "com.gdblab.pathAlgebra.expressions.RecursiveExpression"
+
+_RecursiveExpression_semantics = Core.Name "semantics"
+
+_RecursiveExpression_expression = Core.Name "expression"
+
+-- | Extract specific values from paths for RETURN clause
+data ResultProjection =
+  ResultProjection {
+    resultProjectionProjections :: [PropertyExtraction]}
   deriving (Eq, Ord, Read, Show)
-_PathPropertyRef = Core.Name "com.gdblab.pathAlgebra.expressions.PathPropertyRef"
-_PathPropertyRef_length = Core.Name "length"
-_PathPropertyRef_startNode = Core.Name "startNode"
-_PathPropertyRef_endNode = Core.Name "endNode"
+
+_ResultProjection = Core.Name "com.gdblab.pathAlgebra.expressions.ResultProjection"
+
+_ResultProjection_projections = Core.Name "projections"
+
+-- | Conditions for filtering paths
+data SelectionCondition =
+  SelectionConditionSimple SimpleCondition |
+  SelectionConditionAnd AndCondition |
+  SelectionConditionOr OrCondition |
+  SelectionConditionNot NotCondition
+  deriving (Eq, Ord, Read, Show)
+
+_SelectionCondition = Core.Name "com.gdblab.pathAlgebra.expressions.SelectionCondition"
+
+_SelectionCondition_simple = Core.Name "simple"
+
+_SelectionCondition_and = Core.Name "and"
+
+_SelectionCondition_or = Core.Name "or"
+
+_SelectionCondition_not = Core.Name "not"
+
+-- | Selection operator: σ_condition(expression)
+data SelectionExpression =
+  SelectionExpression {
+    selectionExpressionCondition :: SelectionCondition,
+    selectionExpressionExpression :: PathExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_SelectionExpression = Core.Name "com.gdblab.pathAlgebra.expressions.SelectionExpression"
+
+_SelectionExpression_condition = Core.Name "condition"
+
+_SelectionExpression_expression = Core.Name "expression"
+
+-- | Atomic selection conditions
+data SimpleCondition =
+  SimpleConditionLabelEquals LabelCondition |
+  SimpleConditionPropertyEquals PropertyCondition |
+  SimpleConditionPropertyComparison PropertyComparisonCondition |
+  SimpleConditionLengthEquals LengthCondition
+  deriving (Eq, Ord, Read, Show)
+
+_SimpleCondition = Core.Name "com.gdblab.pathAlgebra.expressions.SimpleCondition"
+
+_SimpleCondition_labelEquals = Core.Name "labelEquals"
+
+_SimpleCondition_propertyEquals = Core.Name "propertyEquals"
+
+_SimpleCondition_propertyComparison = Core.Name "propertyComparison"
+
+_SimpleCondition_lengthEquals = Core.Name "lengthEquals"
+
+-- | Expressions that work with solution spaces
+data SolutionSpaceExpression =
+  SolutionSpaceExpressionGroupBy GroupByExpression |
+  SolutionSpaceExpressionOrderBy OrderByExpression
+  deriving (Eq, Ord, Read, Show)
+
+_SolutionSpaceExpression = Core.Name "com.gdblab.pathAlgebra.expressions.SolutionSpaceExpression"
+
+_SolutionSpaceExpression_groupBy = Core.Name "groupBy"
+
+_SolutionSpaceExpression_orderBy = Core.Name "orderBy"
+
+-- | Union operator: expr1 ∪ expr2
+data UnionExpression =
+  UnionExpression {
+    unionExpressionLeft :: PathExpression,
+    unionExpressionRight :: PathExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_UnionExpression = Core.Name "com.gdblab.pathAlgebra.expressions.UnionExpression"
+
+_UnionExpression_left = Core.Name "left"
+
+_UnionExpression_right = Core.Name "right"
diff --git a/src/main/haskell/Com/Gdblab/PathAlgebra/Syntax.hs b/src/main/haskell/Com/Gdblab/PathAlgebra/Syntax.hs
--- a/src/main/haskell/Com/Gdblab/PathAlgebra/Syntax.hs
+++ b/src/main/haskell/Com/Gdblab/PathAlgebra/Syntax.hs
@@ -1,88 +1,267 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A syntax model for the path algebra grammar by Angles et al. See the paper "Path-based Algebraic Foundations of Graph Query Languages" and the ANTLR grammar at https://github.com/pathalgebra/AlgebraParser
 
 module Com.Gdblab.PathAlgebra.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
-type Number = Integer
-_Number = Core.Name "com.gdblab.pathAlgebra.syntax.Number"
-type Text = String
-_Text = Core.Name "com.gdblab.pathAlgebra.syntax.Text"
-type Label = String
-_Label = Core.Name "com.gdblab.pathAlgebra.syntax.Label"
-type Variable = String
-_Variable = Core.Name "com.gdblab.pathAlgebra.syntax.Variable"
-type PathName = String
-_PathName = Core.Name "com.gdblab.pathAlgebra.syntax.PathName"
-data PathQuery =
-  PathQuery {
-    pathQueryProjection :: Projection,
-    pathQueryRestrictorExt :: (Maybe RestrictorExt),
-    pathQueryPathPattern :: PathPattern,
-    pathQueryGroupBy :: (Maybe GroupBy),
-    pathQueryOrderBy :: (Maybe OrderBy)}
+
+-- | An RPQ alternation: either of two sub-expressions
+data Alternation =
+  Alternation {
+    alternationLeft :: Rpq,
+    alternationRight :: Rpq}
   deriving (Eq, Ord, Read, Show)
-_PathQuery = Core.Name "com.gdblab.pathAlgebra.syntax.PathQuery"
-_PathQuery_projection = Core.Name "projection"
-_PathQuery_restrictorExt = Core.Name "restrictorExt"
-_PathQuery_pathPattern = Core.Name "pathPattern"
-_PathQuery_groupBy = Core.Name "groupBy"
-_PathQuery_orderBy = Core.Name "orderBy"
-data Projection =
-  Projection {
-    projectionPartProj :: PartProj,
-    projectionGroupProj :: GroupProj,
-    projectionPathProj :: PathProj}
+
+_Alternation = Core.Name "com.gdblab.pathAlgebra.syntax.Alternation"
+
+_Alternation_left = Core.Name "left"
+
+_Alternation_right = Core.Name "right"
+
+-- | A boolean operator combining complex conditions: and or or
+data BoolOp =
+  BoolOpAnd |
+  BoolOpOr
   deriving (Eq, Ord, Read, Show)
-_Projection = Core.Name "com.gdblab.pathAlgebra.syntax.Projection"
-_Projection_partProj = Core.Name "partProj"
-_Projection_groupProj = Core.Name "groupProj"
-_Projection_pathProj = Core.Name "pathProj"
-data PartProj =
-  PartProjAll |
-  PartProjLimited Number
+
+_BoolOp = Core.Name "com.gdblab.pathAlgebra.syntax.BoolOp"
+
+_BoolOp_and = Core.Name "and"
+
+_BoolOp_or = Core.Name "or"
+
+-- | A comparison symbol used in a path algebra condition
+data CompareSym =
+  CompareSymEqual |
+  CompareSymNotEqual |
+  CompareSymLessThan |
+  CompareSymGreaterThan |
+  CompareSymLessThanOrEqual |
+  CompareSymGreaterThanOrEqual
   deriving (Eq, Ord, Read, Show)
-_PartProj = Core.Name "com.gdblab.pathAlgebra.syntax.PartProj"
-_PartProj_all = Core.Name "all"
-_PartProj_limited = Core.Name "limited"
+
+_CompareSym = Core.Name "com.gdblab.pathAlgebra.syntax.CompareSym"
+
+_CompareSym_equal = Core.Name "equal"
+
+_CompareSym_notEqual = Core.Name "notEqual"
+
+_CompareSym_lessThan = Core.Name "lessThan"
+
+_CompareSym_greaterThan = Core.Name "greaterThan"
+
+_CompareSym_lessThanOrEqual = Core.Name "lessThanOrEqual"
+
+_CompareSym_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
+
+-- | A complex condition: a simple condition or a compound of conditions
+data ComplexCondition =
+  ComplexConditionSimple Condition |
+  ComplexConditionCompound CompoundComplexCondition
+  deriving (Eq, Ord, Read, Show)
+
+_ComplexCondition = Core.Name "com.gdblab.pathAlgebra.syntax.ComplexCondition"
+
+_ComplexCondition_simple = Core.Name "simple"
+
+_ComplexCondition_compound = Core.Name "compound"
+
+-- | A complex path algebra function taking a name, an inner function, and an additional argument
+data ComplexFunction =
+  ComplexFunction {
+    complexFunctionName :: Text,
+    complexFunctionInnerFunction :: Function,
+    complexFunctionAdditionalArg :: Text}
+  deriving (Eq, Ord, Read, Show)
+
+_ComplexFunction = Core.Name "com.gdblab.pathAlgebra.syntax.ComplexFunction"
+
+_ComplexFunction_name = Core.Name "name"
+
+_ComplexFunction_innerFunction = Core.Name "innerFunction"
+
+_ComplexFunction_additionalArg = Core.Name "additionalArg"
+
+-- | A compound complex condition combining a simple condition and another complex condition with a boolean operator
+data CompoundComplexCondition =
+  CompoundComplexCondition {
+    compoundComplexConditionLhs :: Condition,
+    compoundComplexConditionOperator :: BoolOp,
+    compoundComplexConditionRhs :: ComplexCondition}
+  deriving (Eq, Ord, Read, Show)
+
+_CompoundComplexCondition = Core.Name "com.gdblab.pathAlgebra.syntax.CompoundComplexCondition"
+
+_CompoundComplexCondition_lhs = Core.Name "lhs"
+
+_CompoundComplexCondition_operator = Core.Name "operator"
+
+_CompoundComplexCondition_rhs = Core.Name "rhs"
+
+-- | An RPQ concatenation: two sub-expressions in sequence
+data Concatenation =
+  Concatenation {
+    concatenationLeft :: Rpq,
+    concatenationRight :: Rpq}
+  deriving (Eq, Ord, Read, Show)
+
+_Concatenation = Core.Name "com.gdblab.pathAlgebra.syntax.Concatenation"
+
+_Concatenation_left = Core.Name "left"
+
+_Concatenation_right = Core.Name "right"
+
+-- | A path algebra condition: a function, a comparison symbol, and a value
+data Condition =
+  Condition {
+    conditionFunction :: Function,
+    conditionCompareSym :: CompareSym,
+    conditionValue :: Text}
+  deriving (Eq, Ord, Read, Show)
+
+_Condition = Core.Name "com.gdblab.pathAlgebra.syntax.Condition"
+
+_Condition_function = Core.Name "function"
+
+_Condition_compareSym = Core.Name "compareSym"
+
+_Condition_value = Core.Name "value"
+
+-- | The direction of an edge pattern: outgoing, incoming, or undirected
+data EdgeDirection =
+  EdgeDirectionOutgoing |
+  EdgeDirectionIncoming |
+  EdgeDirectionUndirected
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeDirection = Core.Name "com.gdblab.pathAlgebra.syntax.EdgeDirection"
+
+_EdgeDirection_outgoing = Core.Name "outgoing"
+
+_EdgeDirection_incoming = Core.Name "incoming"
+
+_EdgeDirection_undirected = Core.Name "undirected"
+
+-- | A pattern matching an edge, with a direction and an optional regular path query
+data EdgePattern =
+  EdgePattern {
+    edgePatternDirection :: EdgeDirection,
+    edgePatternRpq :: (Maybe Rpq)}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgePattern = Core.Name "com.gdblab.pathAlgebra.syntax.EdgePattern"
+
+_EdgePattern_direction = Core.Name "direction"
+
+_EdgePattern_rpq = Core.Name "rpq"
+
+-- | A path algebra function: simple, nested, or complex
+data Function =
+  FunctionSimple SimpleFunction |
+  FunctionNested NestedFunction |
+  FunctionComplex ComplexFunction
+  deriving (Eq, Ord, Read, Show)
+
+_Function = Core.Name "com.gdblab.pathAlgebra.syntax.Function"
+
+_Function_simple = Core.Name "simple"
+
+_Function_nested = Core.Name "nested"
+
+_Function_complex = Core.Name "complex"
+
+-- | A group-by clause, wrapping a group-by option
+newtype GroupBy =
+  GroupBy {
+    unGroupBy :: GroupByOption}
+  deriving (Eq, Ord, Read, Show)
+
+_GroupBy = Core.Name "com.gdblab.pathAlgebra.syntax.GroupBy"
+
+-- | The grouping dimension of a group-by clause
+data GroupByOption =
+  GroupByOptionSource |
+  GroupByOptionTarget |
+  GroupByOptionLength |
+  GroupByOptionSourceTarget |
+  GroupByOptionSourceLength |
+  GroupByOptionTargetLength |
+  GroupByOptionSourceTargetLength
+  deriving (Eq, Ord, Read, Show)
+
+_GroupByOption = Core.Name "com.gdblab.pathAlgebra.syntax.GroupByOption"
+
+_GroupByOption_source = Core.Name "source"
+
+_GroupByOption_target = Core.Name "target"
+
+_GroupByOption_length = Core.Name "length"
+
+_GroupByOption_sourceTarget = Core.Name "sourceTarget"
+
+_GroupByOption_sourceLength = Core.Name "sourceLength"
+
+_GroupByOption_targetLength = Core.Name "targetLength"
+
+_GroupByOption_sourceTargetLength = Core.Name "sourceTargetLength"
+
+-- | The group-count projection of a path query: all groups, or a limited number
 data GroupProj =
   GroupProjAll |
   GroupProjLimited Number
   deriving (Eq, Ord, Read, Show)
+
 _GroupProj = Core.Name "com.gdblab.pathAlgebra.syntax.GroupProj"
+
 _GroupProj_all = Core.Name "all"
+
 _GroupProj_limited = Core.Name "limited"
-data PathProj =
-  PathProjAll |
-  PathProjLimited Number
+
+-- | An edge label
+type Label = String
+
+_Label = Core.Name "com.gdblab.pathAlgebra.syntax.Label"
+
+-- | A nested path algebra function taking a name and an inner function
+data NestedFunction =
+  NestedFunction {
+    nestedFunctionName :: Text,
+    nestedFunctionInnerFunction :: Function}
   deriving (Eq, Ord, Read, Show)
-_PathProj = Core.Name "com.gdblab.pathAlgebra.syntax.PathProj"
-_PathProj_all = Core.Name "all"
-_PathProj_limited = Core.Name "limited"
-data RestrictorExt =
-  RestrictorExtWalk |
-  RestrictorExtTrail |
-  RestrictorExtSimple |
-  RestrictorExtAcyclic |
-  RestrictorExtShortest
+
+_NestedFunction = Core.Name "com.gdblab.pathAlgebra.syntax.NestedFunction"
+
+_NestedFunction_name = Core.Name "name"
+
+_NestedFunction_innerFunction = Core.Name "innerFunction"
+
+-- | A pattern matching a node, with an optional binding variable
+data NodePattern =
+  NodePattern {
+    nodePatternVariable :: (Maybe Variable)}
   deriving (Eq, Ord, Read, Show)
-_RestrictorExt = Core.Name "com.gdblab.pathAlgebra.syntax.RestrictorExt"
-_RestrictorExt_walk = Core.Name "walk"
-_RestrictorExt_trail = Core.Name "trail"
-_RestrictorExt_simple = Core.Name "simple"
-_RestrictorExt_acyclic = Core.Name "acyclic"
-_RestrictorExt_shortest = Core.Name "shortest"
+
+_NodePattern = Core.Name "com.gdblab.pathAlgebra.syntax.NodePattern"
+
+_NodePattern_variable = Core.Name "variable"
+
+-- | A numeric literal
+type Number = Integer
+
+_Number = Core.Name "com.gdblab.pathAlgebra.syntax.Number"
+
+-- | An order-by clause, wrapping an order-by option
 newtype OrderBy =
   OrderBy {
     unOrderBy :: OrderByOption}
   deriving (Eq, Ord, Read, Show)
+
 _OrderBy = Core.Name "com.gdblab.pathAlgebra.syntax.OrderBy"
-newtype GroupBy =
-  GroupBy {
-    unGroupBy :: GroupByOption}
-  deriving (Eq, Ord, Read, Show)
-_GroupBy = Core.Name "com.gdblab.pathAlgebra.syntax.GroupBy"
+
+-- | The ordering dimension of an order-by clause
 data OrderByOption =
   OrderByOptionPartition |
   OrderByOptionGroup |
@@ -92,31 +271,41 @@
   OrderByOptionGroupPath |
   OrderByOptionPartitionGroupPath
   deriving (Eq, Ord, Read, Show)
+
 _OrderByOption = Core.Name "com.gdblab.pathAlgebra.syntax.OrderByOption"
+
 _OrderByOption_partition = Core.Name "partition"
+
 _OrderByOption_group = Core.Name "group"
+
 _OrderByOption_path = Core.Name "path"
+
 _OrderByOption_partitionGroup = Core.Name "partitionGroup"
+
 _OrderByOption_partitionPath = Core.Name "partitionPath"
+
 _OrderByOption_groupPath = Core.Name "groupPath"
+
 _OrderByOption_partitionGroupPath = Core.Name "partitionGroupPath"
-data GroupByOption =
-  GroupByOptionSource |
-  GroupByOptionTarget |
-  GroupByOptionLength |
-  GroupByOptionSourceTarget |
-  GroupByOptionSourceLength |
-  GroupByOptionTargetLength |
-  GroupByOptionSourceTargetLength
+
+-- | The path-count projection of a path query: all paths, or a limited number
+data PartProj =
+  PartProjAll |
+  PartProjLimited Number
   deriving (Eq, Ord, Read, Show)
-_GroupByOption = Core.Name "com.gdblab.pathAlgebra.syntax.GroupByOption"
-_GroupByOption_source = Core.Name "source"
-_GroupByOption_target = Core.Name "target"
-_GroupByOption_length = Core.Name "length"
-_GroupByOption_sourceTarget = Core.Name "sourceTarget"
-_GroupByOption_sourceLength = Core.Name "sourceLength"
-_GroupByOption_targetLength = Core.Name "targetLength"
-_GroupByOption_sourceTargetLength = Core.Name "sourceTargetLength"
+
+_PartProj = Core.Name "com.gdblab.pathAlgebra.syntax.PartProj"
+
+_PartProj_all = Core.Name "all"
+
+_PartProj_limited = Core.Name "limited"
+
+-- | The name bound to a matched path
+type PathName = String
+
+_PathName = Core.Name "com.gdblab.pathAlgebra.syntax.PathName"
+
+-- | A pattern matching a path: a name, start node, edge, end node, and an optional condition
 data PathPattern =
   PathPattern {
     pathPatternPathName :: PathName,
@@ -125,35 +314,104 @@
     pathPatternEndNode :: NodePattern,
     pathPatternCondition :: (Maybe ComplexCondition)}
   deriving (Eq, Ord, Read, Show)
+
 _PathPattern = Core.Name "com.gdblab.pathAlgebra.syntax.PathPattern"
+
 _PathPattern_pathName = Core.Name "pathName"
+
 _PathPattern_startNode = Core.Name "startNode"
+
 _PathPattern_edge = Core.Name "edge"
+
 _PathPattern_endNode = Core.Name "endNode"
+
 _PathPattern_condition = Core.Name "condition"
-data NodePattern =
-  NodePattern {
-    nodePatternVariable :: (Maybe Variable)}
+
+-- | The path projection of a path query: all paths, or a limited number
+data PathProj =
+  PathProjAll |
+  PathProjLimited Number
   deriving (Eq, Ord, Read, Show)
-_NodePattern = Core.Name "com.gdblab.pathAlgebra.syntax.NodePattern"
-_NodePattern_variable = Core.Name "variable"
-data EdgePattern =
-  EdgePattern {
-    edgePatternDirection :: EdgeDirection,
-    edgePatternRpq :: (Maybe Rpq)}
+
+_PathProj = Core.Name "com.gdblab.pathAlgebra.syntax.PathProj"
+
+_PathProj_all = Core.Name "all"
+
+_PathProj_limited = Core.Name "limited"
+
+-- | A path algebra query: a projection, optional restrictor, path pattern, and optional grouping/ordering
+data PathQuery =
+  PathQuery {
+    pathQueryProjection :: Projection,
+    pathQueryRestrictorExt :: (Maybe RestrictorExt),
+    pathQueryPathPattern :: PathPattern,
+    pathQueryGroupBy :: (Maybe GroupBy),
+    pathQueryOrderBy :: (Maybe OrderBy)}
   deriving (Eq, Ord, Read, Show)
-_EdgePattern = Core.Name "com.gdblab.pathAlgebra.syntax.EdgePattern"
-_EdgePattern_direction = Core.Name "direction"
-_EdgePattern_rpq = Core.Name "rpq"
-data EdgeDirection =
-  EdgeDirectionOutgoing |
-  EdgeDirectionIncoming |
-  EdgeDirectionUndirected
+
+_PathQuery = Core.Name "com.gdblab.pathAlgebra.syntax.PathQuery"
+
+_PathQuery_projection = Core.Name "projection"
+
+_PathQuery_restrictorExt = Core.Name "restrictorExt"
+
+_PathQuery_pathPattern = Core.Name "pathPattern"
+
+_PathQuery_groupBy = Core.Name "groupBy"
+
+_PathQuery_orderBy = Core.Name "orderBy"
+
+-- | An RPQ one-or-more repetition of a sub-expression, with an optional restrictor
+data Plus =
+  Plus {
+    plusExpression :: Rpq,
+    plusRestrictor :: (Maybe RpqRestrictor)}
   deriving (Eq, Ord, Read, Show)
-_EdgeDirection = Core.Name "com.gdblab.pathAlgebra.syntax.EdgeDirection"
-_EdgeDirection_outgoing = Core.Name "outgoing"
-_EdgeDirection_incoming = Core.Name "incoming"
-_EdgeDirection_undirected = Core.Name "undirected"
+
+_Plus = Core.Name "com.gdblab.pathAlgebra.syntax.Plus"
+
+_Plus_expression = Core.Name "expression"
+
+_Plus_restrictor = Core.Name "restrictor"
+
+-- | The projection of a path query: part, group, and path projections
+data Projection =
+  Projection {
+    projectionPartProj :: PartProj,
+    projectionGroupProj :: GroupProj,
+    projectionPathProj :: PathProj}
+  deriving (Eq, Ord, Read, Show)
+
+_Projection = Core.Name "com.gdblab.pathAlgebra.syntax.Projection"
+
+_Projection_partProj = Core.Name "partProj"
+
+_Projection_groupProj = Core.Name "groupProj"
+
+_Projection_pathProj = Core.Name "pathProj"
+
+-- | A path restrictor: walk, trail, simple, acyclic, or shortest
+data RestrictorExt =
+  RestrictorExtWalk |
+  RestrictorExtTrail |
+  RestrictorExtSimple |
+  RestrictorExtAcyclic |
+  RestrictorExtShortest
+  deriving (Eq, Ord, Read, Show)
+
+_RestrictorExt = Core.Name "com.gdblab.pathAlgebra.syntax.RestrictorExt"
+
+_RestrictorExt_walk = Core.Name "walk"
+
+_RestrictorExt_trail = Core.Name "trail"
+
+_RestrictorExt_simple = Core.Name "simple"
+
+_RestrictorExt_acyclic = Core.Name "acyclic"
+
+_RestrictorExt_shortest = Core.Name "shortest"
+
+-- | A regular path query expression
 data Rpq =
   RpqParenthesis Rpq |
   RpqLabel Label |
@@ -165,134 +423,67 @@
   RpqConcatenation Concatenation |
   RpqAlternation Alternation
   deriving (Eq, Ord, Read, Show)
+
 _Rpq = Core.Name "com.gdblab.pathAlgebra.syntax.Rpq"
+
 _Rpq_parenthesis = Core.Name "parenthesis"
+
 _Rpq_label = Core.Name "label"
+
 _Rpq_negated = Core.Name "negated"
+
 _Rpq_reverse = Core.Name "reverse"
+
 _Rpq_optional = Core.Name "optional"
+
 _Rpq_plus = Core.Name "plus"
+
 _Rpq_star = Core.Name "star"
+
 _Rpq_concatenation = Core.Name "concatenation"
+
 _Rpq_alternation = Core.Name "alternation"
-data Plus =
-  Plus {
-    plusExpression :: Rpq,
-    plusRestrictor :: (Maybe RpqRestrictor)}
-  deriving (Eq, Ord, Read, Show)
-_Plus = Core.Name "com.gdblab.pathAlgebra.syntax.Plus"
-_Plus_expression = Core.Name "expression"
-_Plus_restrictor = Core.Name "restrictor"
-data Star =
-  Star {
-    starExpression :: Rpq,
-    starRestrictor :: (Maybe RpqRestrictor)}
-  deriving (Eq, Ord, Read, Show)
-_Star = Core.Name "com.gdblab.pathAlgebra.syntax.Star"
-_Star_expression = Core.Name "expression"
-_Star_restrictor = Core.Name "restrictor"
-data Concatenation =
-  Concatenation {
-    concatenationLeft :: Rpq,
-    concatenationRight :: Rpq}
-  deriving (Eq, Ord, Read, Show)
-_Concatenation = Core.Name "com.gdblab.pathAlgebra.syntax.Concatenation"
-_Concatenation_left = Core.Name "left"
-_Concatenation_right = Core.Name "right"
-data Alternation =
-  Alternation {
-    alternationLeft :: Rpq,
-    alternationRight :: Rpq}
-  deriving (Eq, Ord, Read, Show)
-_Alternation = Core.Name "com.gdblab.pathAlgebra.syntax.Alternation"
-_Alternation_left = Core.Name "left"
-_Alternation_right = Core.Name "right"
+
+-- | A restrictor applied to a regular path query, wrapping a restrictor extension
 newtype RpqRestrictor =
   RpqRestrictor {
     unRpqRestrictor :: RestrictorExt}
   deriving (Eq, Ord, Read, Show)
+
 _RpqRestrictor = Core.Name "com.gdblab.pathAlgebra.syntax.RpqRestrictor"
-data ComplexCondition =
-  ComplexConditionSimple Condition |
-  ComplexConditionCompound CompoundComplexCondition
-  deriving (Eq, Ord, Read, Show)
-_ComplexCondition = Core.Name "com.gdblab.pathAlgebra.syntax.ComplexCondition"
-_ComplexCondition_simple = Core.Name "simple"
-_ComplexCondition_compound = Core.Name "compound"
-data CompoundComplexCondition =
-  CompoundComplexCondition {
-    compoundComplexConditionLhs :: Condition,
-    compoundComplexConditionOperator :: BoolOp,
-    compoundComplexConditionRhs :: ComplexCondition}
-  deriving (Eq, Ord, Read, Show)
-_CompoundComplexCondition = Core.Name "com.gdblab.pathAlgebra.syntax.CompoundComplexCondition"
-_CompoundComplexCondition_lhs = Core.Name "lhs"
-_CompoundComplexCondition_operator = Core.Name "operator"
-_CompoundComplexCondition_rhs = Core.Name "rhs"
-data Condition =
-  Condition {
-    conditionFunction :: Function,
-    conditionCompareSym :: CompareSym,
-    conditionValue :: Text}
-  deriving (Eq, Ord, Read, Show)
-_Condition = Core.Name "com.gdblab.pathAlgebra.syntax.Condition"
-_Condition_function = Core.Name "function"
-_Condition_compareSym = Core.Name "compareSym"
-_Condition_value = Core.Name "value"
-data CompareSym =
-  CompareSymEqual |
-  CompareSymNotEqual |
-  CompareSymLessThan |
-  CompareSymGreaterThan |
-  CompareSymLessThanOrEqual |
-  CompareSymGreaterThanOrEqual
-  deriving (Eq, Ord, Read, Show)
-_CompareSym = Core.Name "com.gdblab.pathAlgebra.syntax.CompareSym"
-_CompareSym_equal = Core.Name "equal"
-_CompareSym_notEqual = Core.Name "notEqual"
-_CompareSym_lessThan = Core.Name "lessThan"
-_CompareSym_greaterThan = Core.Name "greaterThan"
-_CompareSym_lessThanOrEqual = Core.Name "lessThanOrEqual"
-_CompareSym_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
-data Function =
-  FunctionSimple SimpleFunction |
-  FunctionNested NestedFunction |
-  FunctionComplex ComplexFunction
-  deriving (Eq, Ord, Read, Show)
-_Function = Core.Name "com.gdblab.pathAlgebra.syntax.Function"
-_Function_simple = Core.Name "simple"
-_Function_nested = Core.Name "nested"
-_Function_complex = Core.Name "complex"
+
+-- | A simple path algebra function taking a name and a single argument
 data SimpleFunction =
   SimpleFunction {
     simpleFunctionName :: Text,
     simpleFunctionArgument :: Text}
   deriving (Eq, Ord, Read, Show)
+
 _SimpleFunction = Core.Name "com.gdblab.pathAlgebra.syntax.SimpleFunction"
+
 _SimpleFunction_name = Core.Name "name"
+
 _SimpleFunction_argument = Core.Name "argument"
-data NestedFunction =
-  NestedFunction {
-    nestedFunctionName :: Text,
-    nestedFunctionInnerFunction :: Function}
-  deriving (Eq, Ord, Read, Show)
-_NestedFunction = Core.Name "com.gdblab.pathAlgebra.syntax.NestedFunction"
-_NestedFunction_name = Core.Name "name"
-_NestedFunction_innerFunction = Core.Name "innerFunction"
-data ComplexFunction =
-  ComplexFunction {
-    complexFunctionName :: Text,
-    complexFunctionInnerFunction :: Function,
-    complexFunctionAdditionalArg :: Text}
-  deriving (Eq, Ord, Read, Show)
-_ComplexFunction = Core.Name "com.gdblab.pathAlgebra.syntax.ComplexFunction"
-_ComplexFunction_name = Core.Name "name"
-_ComplexFunction_innerFunction = Core.Name "innerFunction"
-_ComplexFunction_additionalArg = Core.Name "additionalArg"
-data BoolOp =
-  BoolOpAnd |
-  BoolOpOr
+
+-- | An RPQ zero-or-more repetition of a sub-expression, with an optional restrictor
+data Star =
+  Star {
+    starExpression :: Rpq,
+    starRestrictor :: (Maybe RpqRestrictor)}
   deriving (Eq, Ord, Read, Show)
-_BoolOp = Core.Name "com.gdblab.pathAlgebra.syntax.BoolOp"
-_BoolOp_and = Core.Name "and"
-_BoolOp_or = Core.Name "or"
+
+_Star = Core.Name "com.gdblab.pathAlgebra.syntax.Star"
+
+_Star_expression = Core.Name "expression"
+
+_Star_restrictor = Core.Name "restrictor"
+
+-- | A text literal
+type Text = String
+
+_Text = Core.Name "com.gdblab.pathAlgebra.syntax.Text"
+
+-- | A variable name bound in a path pattern
+type Variable = String
+
+_Variable = Core.Name "com.gdblab.pathAlgebra.syntax.Variable"
diff --git a/src/main/haskell/Hydra/Cypher/Features.hs b/src/main/haskell/Hydra/Cypher/Features.hs
--- a/src/main/haskell/Hydra/Cypher/Features.hs
+++ b/src/main/haskell/Hydra/Cypher/Features.hs
@@ -1,1010 +1,1360 @@
 -- Note: this is an automatically generated file. Do not edit.
--- | A model for characterizing OpenCypher queries and implementations in terms of included features.Based on the OpenCypher grammar and the list of standard Cypher functions at https://neo4j.com/docs/cypher-manual/current/functions. Current as of August 2024.
-
-module Hydra.Cypher.Features where
-import qualified Hydra.Core as Core
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
-import qualified Data.Scientific as Sci
--- | A set of features which characterize an OpenCypher query or implementation. Any features which are omitted from the set are assumed to be unsupported or nonrequired.
-data CypherFeatures =
-  CypherFeatures {
-    -- | Arithmetic operations
-    cypherFeaturesArithmetic :: ArithmeticFeatures,
-    -- | Various kinds of atomic expressions
-    cypherFeaturesAtom :: AtomFeatures,
-    -- | Comparison operators and functions
-    cypherFeaturesComparison :: ComparisonFeatures,
-    -- | Delete operations
-    cypherFeaturesDelete :: DeleteFeatures,
-    -- | Standard Cypher functions
-    cypherFeaturesFunction :: FunctionFeatures,
-    -- | List functionality
-    cypherFeaturesList :: ListFeatures,
-    -- | Various types of literal values
-    cypherFeaturesLiteral :: LiteralFeatures,
-    -- | Logical operations
-    cypherFeaturesLogical :: LogicalFeatures,
-    -- | Match queries
-    cypherFeaturesMatch :: MatchFeatures,
-    -- | Merge operations
-    cypherFeaturesMerge :: MergeFeatures,
-    -- | Node patterns
-    cypherFeaturesNodePattern :: NodePatternFeatures,
-    -- | IS NULL / IS NOT NULL checks
-    cypherFeaturesNull :: NullFeatures,
-    -- | Path functions only found in OpenCypher
-    cypherFeaturesPath :: PathFeatures,
-    -- | Procedure calls
-    cypherFeaturesProcedureCall :: ProcedureCallFeatures,
-    -- | Projections
-    cypherFeaturesProjection :: ProjectionFeatures,
-    -- | Quantifier expressions
-    cypherFeaturesQuantifier :: QuantifierFeatures,
-    -- | Range literals within relationship patterns
-    cypherFeaturesRangeLiteral :: RangeLiteralFeatures,
-    -- | Specific syntax related to reading data from the graph.
-    cypherFeaturesReading :: ReadingFeatures,
-    -- | Relationship directions / arrow patterns
-    cypherFeaturesRelationshipDirection :: RelationshipDirectionFeatures,
-    -- | Relationship patterns
-    cypherFeaturesRelationshipPattern :: RelationshipPatternFeatures,
-    -- | REMOVE operations
-    cypherFeaturesRemove :: RemoveFeatures,
-    -- | Set definitions
-    cypherFeaturesSet :: SetFeatures,
-    -- | String functions/keywords only found in OpenCypher
-    cypherFeaturesString :: StringFeatures,
-    -- | Specific syntax related to updating data in the graph
-    cypherFeaturesUpdating :: UpdatingFeatures}
-  deriving (Eq, Ord, Read, Show)
-_CypherFeatures = Core.Name "hydra.cypher.features.CypherFeatures"
-_CypherFeatures_arithmetic = Core.Name "arithmetic"
-_CypherFeatures_atom = Core.Name "atom"
-_CypherFeatures_comparison = Core.Name "comparison"
-_CypherFeatures_delete = Core.Name "delete"
-_CypherFeatures_function = Core.Name "function"
-_CypherFeatures_list = Core.Name "list"
-_CypherFeatures_literal = Core.Name "literal"
-_CypherFeatures_logical = Core.Name "logical"
-_CypherFeatures_match = Core.Name "match"
-_CypherFeatures_merge = Core.Name "merge"
-_CypherFeatures_nodePattern = Core.Name "nodePattern"
-_CypherFeatures_null = Core.Name "null"
-_CypherFeatures_path = Core.Name "path"
-_CypherFeatures_procedureCall = Core.Name "procedureCall"
-_CypherFeatures_projection = Core.Name "projection"
-_CypherFeatures_quantifier = Core.Name "quantifier"
-_CypherFeatures_rangeLiteral = Core.Name "rangeLiteral"
-_CypherFeatures_reading = Core.Name "reading"
-_CypherFeatures_relationshipDirection = Core.Name "relationshipDirection"
-_CypherFeatures_relationshipPattern = Core.Name "relationshipPattern"
-_CypherFeatures_remove = Core.Name "remove"
-_CypherFeatures_set = Core.Name "set"
-_CypherFeatures_string = Core.Name "string"
-_CypherFeatures_updating = Core.Name "updating"
--- | Arithmetic operations
-data ArithmeticFeatures =
-  ArithmeticFeatures {
-    -- | The + operator
-    arithmeticFeaturesPlus :: Bool,
-    -- | The - operator
-    arithmeticFeaturesMinus :: Bool,
-    -- | The * operator
-    arithmeticFeaturesMultiply :: Bool,
-    -- | The / operator
-    arithmeticFeaturesDivide :: Bool,
-    -- | The % operator
-    arithmeticFeaturesModulus :: Bool,
-    -- | The ^ operator
-    arithmeticFeaturesPowerOf :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ArithmeticFeatures = Core.Name "hydra.cypher.features.ArithmeticFeatures"
-_ArithmeticFeatures_plus = Core.Name "plus"
-_ArithmeticFeatures_minus = Core.Name "minus"
-_ArithmeticFeatures_multiply = Core.Name "multiply"
-_ArithmeticFeatures_divide = Core.Name "divide"
-_ArithmeticFeatures_modulus = Core.Name "modulus"
-_ArithmeticFeatures_powerOf = Core.Name "powerOf"
--- | Various kinds of atomic expressions
-data AtomFeatures =
-  AtomFeatures {
-    -- | CASE expressions
-    atomFeaturesCaseExpression :: Bool,
-    -- | The COUNT (*) expression
-    atomFeaturesCount :: Bool,
-    -- | Existential subqueries
-    atomFeaturesExistentialSubquery :: Bool,
-    -- | Function invocation
-    atomFeaturesFunctionInvocation :: Bool,
-    -- | Parameter expressions
-    atomFeaturesParameter :: Bool,
-    -- | Pattern comprehensions
-    atomFeaturesPatternComprehension :: Bool,
-    -- | Relationship patterns as subexpressions
-    atomFeaturesPatternPredicate :: Bool,
-    -- | Variable expressions (note: included by most if not all implementations).
-    atomFeaturesVariable :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_AtomFeatures = Core.Name "hydra.cypher.features.AtomFeatures"
-_AtomFeatures_caseExpression = Core.Name "caseExpression"
-_AtomFeatures_count = Core.Name "count"
-_AtomFeatures_existentialSubquery = Core.Name "existentialSubquery"
-_AtomFeatures_functionInvocation = Core.Name "functionInvocation"
-_AtomFeatures_parameter = Core.Name "parameter"
-_AtomFeatures_patternComprehension = Core.Name "patternComprehension"
-_AtomFeatures_patternPredicate = Core.Name "patternPredicate"
-_AtomFeatures_variable = Core.Name "variable"
--- | Comparison operators and functions
-data ComparisonFeatures =
-  ComparisonFeatures {
-    -- | The = comparison operator
-    comparisonFeaturesEqual :: Bool,
-    -- | The > comparison operator
-    comparisonFeaturesGreaterThan :: Bool,
-    -- | The >= comparison operator
-    comparisonFeaturesGreaterThanOrEqual :: Bool,
-    -- | The < comparison operator
-    comparisonFeaturesLessThan :: Bool,
-    -- | The <= comparison operator
-    comparisonFeaturesLessThanOrEqual :: Bool,
-    -- | The <> comparison operator
-    comparisonFeaturesNotEqual :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ComparisonFeatures = Core.Name "hydra.cypher.features.ComparisonFeatures"
-_ComparisonFeatures_equal = Core.Name "equal"
-_ComparisonFeatures_greaterThan = Core.Name "greaterThan"
-_ComparisonFeatures_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
-_ComparisonFeatures_lessThan = Core.Name "lessThan"
-_ComparisonFeatures_lessThanOrEqual = Core.Name "lessThanOrEqual"
-_ComparisonFeatures_notEqual = Core.Name "notEqual"
--- | Delete operations
-data DeleteFeatures =
-  DeleteFeatures {
-    -- | The basic DELETE clause
-    deleteFeaturesDelete :: Bool,
-    -- | The DETACH DELETE clause
-    deleteFeaturesDetachDelete :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_DeleteFeatures = Core.Name "hydra.cypher.features.DeleteFeatures"
-_DeleteFeatures_delete = Core.Name "delete"
-_DeleteFeatures_detachDelete = Core.Name "detachDelete"
--- | Standard Cypher functions
-data FunctionFeatures =
-  FunctionFeatures {
-    -- | Aggregate functions
-    functionFeaturesAggregateFunction :: AggregateFunctionFeatures,
-    -- | Database functions
-    functionFeaturesDatabaseFunction :: DatabaseFunctionFeatures,
-    -- | GenAI functions
-    functionFeaturesGenAIFunction :: GenAIFunctionFeatures,
-    -- | Graph functions
-    functionFeaturesGraphFunction :: GraphFunctionFeatures,
-    -- | List functions
-    functionFeaturesListFunction :: ListFunctionFeatures,
-    -- | Load CSV functions
-    functionFeaturesLoadCSVFunction :: LoadCSVFunctionFeatures,
-    -- | Logarithmic functions
-    functionFeaturesLogarithmicFunction :: LogarithmicFunctionFeatures,
-    -- | Numeric functions
-    functionFeaturesNumericFunction :: NumericFunctionFeatures,
-    -- | Predicate functions
-    functionFeaturesPredicateFunction :: PredicateFunctionFeatures,
-    -- | Scalar functions
-    functionFeaturesScalarFunction :: ScalarFunctionFeatures,
-    -- | Spatial functions
-    functionFeaturesSpatialFunction :: SpatialFunctionFeatures,
-    -- | String functions
-    functionFeaturesStringFunction :: StringFunctionFeatures,
-    -- | Temporal duration functions
-    functionFeaturesTemporalDurationFunction :: TemporalDurationFunctionFeatures,
-    -- | Temporal instant functions
-    functionFeaturesTemporalInstantFunction :: TemporalInstantFunctionFeatures,
-    -- | Trigonometric functions
-    functionFeaturesTrigonometricFunction :: TrigonometricFunctionFeatures,
-    -- | Vector functions
-    functionFeaturesVectorFunction :: VectorFunctionFeatures}
-  deriving (Eq, Ord, Read, Show)
-_FunctionFeatures = Core.Name "hydra.cypher.features.FunctionFeatures"
-_FunctionFeatures_aggregateFunction = Core.Name "aggregateFunction"
-_FunctionFeatures_databaseFunction = Core.Name "databaseFunction"
-_FunctionFeatures_genAIFunction = Core.Name "genAIFunction"
-_FunctionFeatures_graphFunction = Core.Name "graphFunction"
-_FunctionFeatures_listFunction = Core.Name "listFunction"
-_FunctionFeatures_loadCSVFunction = Core.Name "loadCSVFunction"
-_FunctionFeatures_logarithmicFunction = Core.Name "logarithmicFunction"
-_FunctionFeatures_numericFunction = Core.Name "numericFunction"
-_FunctionFeatures_predicateFunction = Core.Name "predicateFunction"
-_FunctionFeatures_scalarFunction = Core.Name "scalarFunction"
-_FunctionFeatures_spatialFunction = Core.Name "spatialFunction"
-_FunctionFeatures_stringFunction = Core.Name "stringFunction"
-_FunctionFeatures_temporalDurationFunction = Core.Name "temporalDurationFunction"
-_FunctionFeatures_temporalInstantFunction = Core.Name "temporalInstantFunction"
-_FunctionFeatures_trigonometricFunction = Core.Name "trigonometricFunction"
-_FunctionFeatures_vectorFunction = Core.Name "vectorFunction"
--- | Aggregate functions
-data AggregateFunctionFeatures =
-  AggregateFunctionFeatures {
-    -- | The avg() function / AVG. Returns the average of a set of DURATION values.; Returns the average of a set of FLOAT values.; Returns the average of a set of INTEGER values.
-    aggregateFunctionFeaturesAvg :: Bool,
-    -- | The collect() function / COLLECT. Returns a list containing the values returned by an expression.
-    aggregateFunctionFeaturesCollect :: Bool,
-    -- | The count() function / COUNT. Returns the number of values or rows.
-    aggregateFunctionFeaturesCount :: Bool,
-    -- | The max() function / MAX. Returns the maximum value in a set of values.
-    aggregateFunctionFeaturesMax :: Bool,
-    -- | The min() function / MIN. Returns the minimum value in a set of values.
-    aggregateFunctionFeaturesMin :: Bool,
-    -- | The percentileCont() function. Returns the percentile of a value over a group using linear interpolation.
-    aggregateFunctionFeaturesPercentileCont :: Bool,
-    -- | The percentileDisc() function. Returns the nearest FLOAT value to the given percentile over a group using a rounding method.; Returns the nearest INTEGER value to the given percentile over a group using a rounding method.
-    aggregateFunctionFeaturesPercentileDisc :: Bool,
-    -- | The stdev() function. Returns the standard deviation for the given value over a group for a sample of a population.
-    aggregateFunctionFeaturesStdev :: Bool,
-    -- | The stdevp() function. Returns the standard deviation for the given value over a group for an entire population.
-    aggregateFunctionFeaturesStdevp :: Bool,
-    -- | The sum() function / SUM. Returns the sum of a set of DURATION values.; Returns the sum of a set of FLOAT values.; Returns the sum of a set of INTEGER values.
-    aggregateFunctionFeaturesSum :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_AggregateFunctionFeatures = Core.Name "hydra.cypher.features.AggregateFunctionFeatures"
-_AggregateFunctionFeatures_avg = Core.Name "avg"
-_AggregateFunctionFeatures_collect = Core.Name "collect"
-_AggregateFunctionFeatures_count = Core.Name "count"
-_AggregateFunctionFeatures_max = Core.Name "max"
-_AggregateFunctionFeatures_min = Core.Name "min"
-_AggregateFunctionFeatures_percentileCont = Core.Name "percentileCont"
-_AggregateFunctionFeatures_percentileDisc = Core.Name "percentileDisc"
-_AggregateFunctionFeatures_stdev = Core.Name "stdev"
-_AggregateFunctionFeatures_stdevp = Core.Name "stdevp"
-_AggregateFunctionFeatures_sum = Core.Name "sum"
--- | Database functions
-data DatabaseFunctionFeatures =
-  DatabaseFunctionFeatures {
-    -- | The db.nameFromElementId() function. Resolves the database name from the given element id. Introduced in 5.12.
-    databaseFunctionFeaturesDbNameFromElementId :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_DatabaseFunctionFeatures = Core.Name "hydra.cypher.features.DatabaseFunctionFeatures"
-_DatabaseFunctionFeatures_dbNameFromElementId = Core.Name "dbNameFromElementId"
--- | GenAI functions
-data GenAIFunctionFeatures =
-  GenAIFunctionFeatures {
-    -- | The genai.vector.encode() function. Encode a given resource as a vector using the named provider. Introduced in 5.17.
-    genAIFunctionFeaturesGenaiVectorEncode :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_GenAIFunctionFeatures = Core.Name "hydra.cypher.features.GenAIFunctionFeatures"
-_GenAIFunctionFeatures_genaiVectorEncode = Core.Name "genaiVectorEncode"
--- | Graph functions
-data GraphFunctionFeatures =
-  GraphFunctionFeatures {
-    -- | The graph.byElementId() function. Resolves the constituent graph to which a given element id belongs. Introduced in 5.13.
-    graphFunctionFeaturesGraphByElementId :: Bool,
-    -- | The graph.byName() function. Resolves a constituent graph by name.
-    graphFunctionFeaturesGraphByName :: Bool,
-    -- | The graph.names() function. Returns a list containing the names of all graphs in the current composite database.
-    graphFunctionFeaturesGraphNames :: Bool,
-    -- | The graph.propertiesByName() function. Returns a map containing the properties associated with the given graph.
-    graphFunctionFeaturesGraphPropertiesByName :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_GraphFunctionFeatures = Core.Name "hydra.cypher.features.GraphFunctionFeatures"
-_GraphFunctionFeatures_graphByElementId = Core.Name "graphByElementId"
-_GraphFunctionFeatures_graphByName = Core.Name "graphByName"
-_GraphFunctionFeatures_graphNames = Core.Name "graphNames"
-_GraphFunctionFeatures_graphPropertiesByName = Core.Name "graphPropertiesByName"
--- | List functions
-data ListFunctionFeatures =
-  ListFunctionFeatures {
-    -- | The keys() function. Returns a LIST<STRING> containing the STRING representations for all the property names of a MAP.; Returns a LIST<STRING> containing the STRING representations for all the property names of a NODE.; Returns a LIST<STRING> containing the STRING representations for all the property names of a RELATIONSHIP.
-    listFunctionFeaturesKeys :: Bool,
-    -- | The labels() function. Returns a LIST<STRING> containing the STRING representations for all the labels of a NODE.
-    listFunctionFeaturesLabels :: Bool,
-    -- | The nodes() function. Returns a LIST<NODE> containing all the NODE values in a PATH.
-    listFunctionFeaturesNodes :: Bool,
-    -- | The range() function. Returns a LIST<INTEGER> comprising all INTEGER values within a specified range.; Returns a LIST<INTEGER> comprising all INTEGER values within a specified range created with step length.
-    listFunctionFeaturesRange :: Bool,
-    -- | The reduce() function. Runs an expression against individual elements of a LIST<ANY>, storing the result of the expression in an accumulator.
-    listFunctionFeaturesReduce :: Bool,
-    -- | The relationships() function. Returns a LIST<RELATIONSHIP> containing all the RELATIONSHIP values in a PATH.
-    listFunctionFeaturesRelationships :: Bool,
-    -- | The reverse() function. Returns a LIST<ANY> in which the order of all elements in the given LIST<ANY> have been reversed.
-    listFunctionFeaturesReverse :: Bool,
-    -- | The tail() function. Returns all but the first element in a LIST<ANY>.
-    listFunctionFeaturesTail :: Bool,
-    -- | The toBooleanList() function. Converts a LIST<ANY> of values to a LIST<BOOLEAN> values. If any values are not convertible to BOOLEAN they will be null in the LIST<BOOLEAN> returned.
-    listFunctionFeaturesToBooleanList :: Bool,
-    -- | The toFloatList() function. Converts a LIST<ANY> to a LIST<FLOAT> values. If any values are not convertible to FLOAT they will be null in the LIST<FLOAT> returned.
-    listFunctionFeaturesToFloatList :: Bool,
-    -- | The toIntegerList() function. Converts a LIST<ANY> to a LIST<INTEGER> values. If any values are not convertible to INTEGER they will be null in the LIST<INTEGER> returned.
-    listFunctionFeaturesToIntegerList :: Bool,
-    -- | The toStringList() function. Converts a LIST<ANY> to a LIST<STRING> values. If any values are not convertible to STRING they will be null in the LIST<STRING> returned.
-    listFunctionFeaturesToStringList :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ListFunctionFeatures = Core.Name "hydra.cypher.features.ListFunctionFeatures"
-_ListFunctionFeatures_keys = Core.Name "keys"
-_ListFunctionFeatures_labels = Core.Name "labels"
-_ListFunctionFeatures_nodes = Core.Name "nodes"
-_ListFunctionFeatures_range = Core.Name "range"
-_ListFunctionFeatures_reduce = Core.Name "reduce"
-_ListFunctionFeatures_relationships = Core.Name "relationships"
-_ListFunctionFeatures_reverse = Core.Name "reverse"
-_ListFunctionFeatures_tail = Core.Name "tail"
-_ListFunctionFeatures_toBooleanList = Core.Name "toBooleanList"
-_ListFunctionFeatures_toFloatList = Core.Name "toFloatList"
-_ListFunctionFeatures_toIntegerList = Core.Name "toIntegerList"
-_ListFunctionFeatures_toStringList = Core.Name "toStringList"
--- | Load CSV functions
-data LoadCSVFunctionFeatures =
-  LoadCSVFunctionFeatures {
-    -- | The file() function. Returns the absolute path of the file that LOAD CSV is using.
-    loadCSVFunctionFeaturesFile :: Bool,
-    -- | The linenumber() function. Returns the line number that LOAD CSV is currently using.
-    loadCSVFunctionFeaturesLinenumber :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_LoadCSVFunctionFeatures = Core.Name "hydra.cypher.features.LoadCSVFunctionFeatures"
-_LoadCSVFunctionFeatures_file = Core.Name "file"
-_LoadCSVFunctionFeatures_linenumber = Core.Name "linenumber"
--- | Logarithmic functions
-data LogarithmicFunctionFeatures =
-  LogarithmicFunctionFeatures {
-    -- | The e() function. Returns the base of the natural logarithm, e.
-    logarithmicFunctionFeaturesE :: Bool,
-    -- | The exp() function. Returns e^n, where e is the base of the natural logarithm, and n is the value of the argument expression.
-    logarithmicFunctionFeaturesExp :: Bool,
-    -- | The log() function. Returns the natural logarithm of a FLOAT.
-    logarithmicFunctionFeaturesLog :: Bool,
-    -- | The log10() function. Returns the common logarithm (base 10) of a FLOAT.
-    logarithmicFunctionFeaturesLog10 :: Bool,
-    -- | The sqrt() function. Returns the square root of a FLOAT.
-    logarithmicFunctionFeaturesSqrt :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_LogarithmicFunctionFeatures = Core.Name "hydra.cypher.features.LogarithmicFunctionFeatures"
-_LogarithmicFunctionFeatures_e = Core.Name "e"
-_LogarithmicFunctionFeatures_exp = Core.Name "exp"
-_LogarithmicFunctionFeatures_log = Core.Name "log"
-_LogarithmicFunctionFeatures_log10 = Core.Name "log10"
-_LogarithmicFunctionFeatures_sqrt = Core.Name "sqrt"
--- | Numeric functions
-data NumericFunctionFeatures =
-  NumericFunctionFeatures {
-    -- | The abs() function. Returns the absolute value of a FLOAT.; Returns the absolute value of an INTEGER.
-    numericFunctionFeaturesAbs :: Bool,
-    -- | The ceil() function. Returns the smallest FLOAT that is greater than or equal to a number and equal to an INTEGER.
-    numericFunctionFeaturesCeil :: Bool,
-    -- | The floor() function. Returns the largest FLOAT that is less than or equal to a number and equal to an INTEGER.
-    numericFunctionFeaturesFloor :: Bool,
-    -- | The isNaN() function. Returns true if the floating point number is NaN.; Returns true if the integer number is NaN.
-    numericFunctionFeaturesIsNaN :: Bool,
-    -- | The rand() function. Returns a random FLOAT in the range from 0 (inclusive) to 1 (exclusive).
-    numericFunctionFeaturesRand :: Bool,
-    -- | The round() function. Returns the value of a number rounded to the nearest INTEGER.; Returns the value of a number rounded to the specified precision using rounding mode HALF_UP.; Returns the value of a number rounded to the specified precision with the specified rounding mode.
-    numericFunctionFeaturesRound :: Bool,
-    -- | The sign() function. Returns the signum of a FLOAT: 0 if the number is 0, -1 for any negative number, and 1 for any positive number.; Returns the signum of an INTEGER: 0 if the number is 0, -1 for any negative number, and 1 for any positive number.
-    numericFunctionFeaturesSign :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_NumericFunctionFeatures = Core.Name "hydra.cypher.features.NumericFunctionFeatures"
-_NumericFunctionFeatures_abs = Core.Name "abs"
-_NumericFunctionFeatures_ceil = Core.Name "ceil"
-_NumericFunctionFeatures_floor = Core.Name "floor"
-_NumericFunctionFeatures_isNaN = Core.Name "isNaN"
-_NumericFunctionFeatures_rand = Core.Name "rand"
-_NumericFunctionFeatures_round = Core.Name "round"
-_NumericFunctionFeatures_sign = Core.Name "sign"
--- | Predicate functions
-data PredicateFunctionFeatures =
-  PredicateFunctionFeatures {
-    -- | The all() function. Returns true if the predicate holds for all elements in the given LIST<ANY>.
-    predicateFunctionFeaturesAll :: Bool,
-    -- | The any() function. Returns true if the predicate holds for at least one element in the given LIST<ANY>.
-    predicateFunctionFeaturesAny :: Bool,
-    -- | The exists() function. Returns true if a match for the pattern exists in the graph.
-    predicateFunctionFeaturesExists :: Bool,
-    -- | The isEmpty() function. Checks whether a LIST<ANY> is empty.; Checks whether a MAP is empty.; Checks whether a STRING is empty.
-    predicateFunctionFeaturesIsEmpty :: Bool,
-    -- | The none() function. Returns true if the predicate holds for no element in the given LIST<ANY>.
-    predicateFunctionFeaturesNone :: Bool,
-    -- | The single() function. Returns true if the predicate holds for exactly one of the elements in the given LIST<ANY>.
-    predicateFunctionFeaturesSingle :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_PredicateFunctionFeatures = Core.Name "hydra.cypher.features.PredicateFunctionFeatures"
-_PredicateFunctionFeatures_all = Core.Name "all"
-_PredicateFunctionFeatures_any = Core.Name "any"
-_PredicateFunctionFeatures_exists = Core.Name "exists"
-_PredicateFunctionFeatures_isEmpty = Core.Name "isEmpty"
-_PredicateFunctionFeatures_none = Core.Name "none"
-_PredicateFunctionFeatures_single = Core.Name "single"
--- | Scalar functions
-data ScalarFunctionFeatures =
-  ScalarFunctionFeatures {
-    -- | The char_length() function. Returns the number of Unicode characters in a STRING.
-    scalarFunctionFeaturesChar_length :: Bool,
-    -- | The character_length() function. Returns the number of Unicode characters in a STRING.
-    scalarFunctionFeaturesCharacter_length :: Bool,
-    -- | The coalesce() function. Returns the first non-null value in a list of expressions.
-    scalarFunctionFeaturesCoalesce :: Bool,
-    -- | The elementId() function. Returns a node identifier, unique within a specific transaction and DBMS.; Returns a relationship identifier, unique within a specific transaction and DBMS.
-    scalarFunctionFeaturesElementId :: Bool,
-    -- | The endNode() function. Returns a relationship identifier, unique within a specific transaction and DBMS.
-    scalarFunctionFeaturesEndNode :: Bool,
-    -- | The head() function. Returns the first element in a LIST<ANY>.
-    scalarFunctionFeaturesHead :: Bool,
-    -- | The id() function. [Deprecated] Returns the id of a NODE. Replaced by elementId().; [Deprecated] Returns the id of a RELATIONSHIP. Replaced by elementId().
-    scalarFunctionFeaturesId :: Bool,
-    -- | The last() function. Returns the last element in a LIST<ANY>.
-    scalarFunctionFeaturesLast :: Bool,
-    -- | The length() function. Returns the length of a PATH.
-    scalarFunctionFeaturesLength :: Bool,
-    -- | The nullIf() function. Returns null if the two given parameters are equivalent, otherwise returns the value of the first parameter.
-    scalarFunctionFeaturesNullIf :: Bool,
-    -- | The properties() function. Returns a MAP containing all the properties of a MAP.; Returns a MAP containing all the properties of a NODE.; Returns a MAP containing all the properties of a RELATIONSHIP.
-    scalarFunctionFeaturesProperties :: Bool,
-    -- | The randomUUID() function. Generates a random UUID.
-    scalarFunctionFeaturesRandomUUID :: Bool,
-    -- | The size() function. Returns the number of items in a LIST<ANY>.; Returns the number of Unicode characters in a STRING.
-    scalarFunctionFeaturesSize :: Bool,
-    -- | The startNode() function. Returns the start NODE of a RELATIONSHIP.
-    scalarFunctionFeaturesStartNode :: Bool,
-    -- | The toBoolean() function. Converts a STRING value to a BOOLEAN value.; Converts a BOOLEAN value to a BOOLEAN value.; Converts an INTEGER value to a BOOLEAN value.
-    scalarFunctionFeaturesToBoolean :: Bool,
-    -- | The toBooleanOrNull() function. Converts a value to a BOOLEAN value, or null if the value cannot be converted.
-    scalarFunctionFeaturesToBooleanOrNull :: Bool,
-    -- | The toFloat() function. Converts an INTEGER value to a FLOAT value.; Converts a STRING value to a FLOAT value.
-    scalarFunctionFeaturesToFloat :: Bool,
-    -- | The toFloatOrNull() function. Converts a value to a FLOAT value, or null if the value cannot be converted.
-    scalarFunctionFeaturesToFloatOrNull :: Bool,
-    -- | The toInteger() function. Converts a FLOAT value to an INTEGER value.; Converts a BOOLEAN value to an INTEGER value.; Converts a STRING value to an INTEGER value.
-    scalarFunctionFeaturesToInteger :: Bool,
-    -- | The toIntegerOrNull() function. Converts a value to an INTEGER value, or null if the value cannot be converted.
-    scalarFunctionFeaturesToIntegerOrNull :: Bool,
-    -- | The type() function. Returns a STRING representation of the RELATIONSHIP type.
-    scalarFunctionFeaturesType :: Bool,
-    -- | The valueType() function. Returns a STRING representation of the most precise value type that the given expression evaluates to.
-    scalarFunctionFeaturesValueType :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ScalarFunctionFeatures = Core.Name "hydra.cypher.features.ScalarFunctionFeatures"
-_ScalarFunctionFeatures_char_length = Core.Name "char_length"
-_ScalarFunctionFeatures_character_length = Core.Name "character_length"
-_ScalarFunctionFeatures_coalesce = Core.Name "coalesce"
-_ScalarFunctionFeatures_elementId = Core.Name "elementId"
-_ScalarFunctionFeatures_endNode = Core.Name "endNode"
-_ScalarFunctionFeatures_head = Core.Name "head"
-_ScalarFunctionFeatures_id = Core.Name "id"
-_ScalarFunctionFeatures_last = Core.Name "last"
-_ScalarFunctionFeatures_length = Core.Name "length"
-_ScalarFunctionFeatures_nullIf = Core.Name "nullIf"
-_ScalarFunctionFeatures_properties = Core.Name "properties"
-_ScalarFunctionFeatures_randomUUID = Core.Name "randomUUID"
-_ScalarFunctionFeatures_size = Core.Name "size"
-_ScalarFunctionFeatures_startNode = Core.Name "startNode"
-_ScalarFunctionFeatures_toBoolean = Core.Name "toBoolean"
-_ScalarFunctionFeatures_toBooleanOrNull = Core.Name "toBooleanOrNull"
-_ScalarFunctionFeatures_toFloat = Core.Name "toFloat"
-_ScalarFunctionFeatures_toFloatOrNull = Core.Name "toFloatOrNull"
-_ScalarFunctionFeatures_toInteger = Core.Name "toInteger"
-_ScalarFunctionFeatures_toIntegerOrNull = Core.Name "toIntegerOrNull"
-_ScalarFunctionFeatures_type = Core.Name "type"
-_ScalarFunctionFeatures_valueType = Core.Name "valueType"
--- | Spatial functions
-data SpatialFunctionFeatures =
-  SpatialFunctionFeatures {
-    -- | The point.distance() function. Returns a FLOAT representing the geodesic distance between any two points in the same CRS.
-    spatialFunctionFeaturesPointDistance :: Bool,
-    -- | The point() function. Returns a 2D point object, given two coordinate values in the Cartesian coordinate system.; Returns a 3D point object, given three coordinate values in the Cartesian coordinate system.; Returns a 2D point object, given two coordinate values in the WGS 84 geographic coordinate system.; Returns a 3D point object, given three coordinate values in the WGS 84 geographic coordinate system.
-    spatialFunctionFeaturesPoint :: Bool,
-    -- | The point.withinBBox() function. Returns true if the provided point is within the bounding box defined by the two provided points, lowerLeft and upperRight.
-    spatialFunctionFeaturesPointWithinBBox :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_SpatialFunctionFeatures = Core.Name "hydra.cypher.features.SpatialFunctionFeatures"
-_SpatialFunctionFeatures_pointDistance = Core.Name "pointDistance"
-_SpatialFunctionFeatures_point = Core.Name "point"
-_SpatialFunctionFeatures_pointWithinBBox = Core.Name "pointWithinBBox"
--- | String functions
-data StringFunctionFeatures =
-  StringFunctionFeatures {
-    -- | The btrim() function. Returns the given STRING with leading and trailing whitespace removed.; Returns the given STRING with leading and trailing trimCharacterString characters removed. Introduced in 5.20.
-    stringFunctionFeaturesBtrim :: Bool,
-    -- | The left() function. Returns a STRING containing the specified number (INTEGER) of leftmost characters in the given STRING.
-    stringFunctionFeaturesLeft :: Bool,
-    -- | The lower() function. Returns the given STRING in lowercase. This function is an alias to the toLower() function, and it was introduced as part of Cypher's GQL conformance. Introduced in 5.21.
-    stringFunctionFeaturesLower :: Bool,
-    -- | The ltrim() function. Returns the given STRING with leading whitespace removed.; Returns the given STRING with leading trimCharacterString characters removed. Introduced in 5.20.
-    stringFunctionFeaturesLtrim :: Bool,
-    -- | The normalize() function. Returns the given STRING normalized according to the normalization CypherFunctionForm NFC. Introduced in 5.17.; Returns the given STRING normalized according to the specified normalization CypherFunctionForm. Introduced in 5.17.
-    stringFunctionFeaturesNormalize :: Bool,
-    -- | The replace() function. Returns a STRING in which all occurrences of a specified search STRING in the given STRING have been replaced by another (specified) replacement STRING.
-    stringFunctionFeaturesReplace :: Bool,
-    -- | The reverse() function. Returns a STRING in which the order of all characters in the given STRING have been reversed.
-    stringFunctionFeaturesReverse :: Bool,
-    -- | The right() function. Returns a STRING containing the specified number of rightmost characters in the given STRING.
-    stringFunctionFeaturesRight :: Bool,
-    -- | The rtrim() function. Returns the given STRING with trailing whitespace removed.; Returns the given STRING with trailing trimCharacterString characters removed. Introduced in 5.20.
-    stringFunctionFeaturesRtrim :: Bool,
-    -- | The split() function. Returns a LIST<STRING> resulting from the splitting of the given STRING around matches of the given delimiter.; Returns a LIST<STRING> resulting from the splitting of the given STRING around matches of any of the given delimiters.
-    stringFunctionFeaturesSplit :: Bool,
-    -- | The substring() function. Returns a substring of the given STRING, beginning with a 0-based index start.; Returns a substring of a given length from the given STRING, beginning with a 0-based index start.
-    stringFunctionFeaturesSubstring :: Bool,
-    -- | The toLower() function. Returns the given STRING in lowercase.
-    stringFunctionFeaturesToLower :: Bool,
-    -- | The toString() function. Converts an INTEGER, FLOAT, BOOLEAN, POINT or temporal type (i.e. DATE, ZONED TIME, LOCAL TIME, ZONED DATETIME, LOCAL DATETIME or DURATION) value to a STRING.
-    stringFunctionFeaturesToString :: Bool,
-    -- | The toStringOrNull() function. Converts an INTEGER, FLOAT, BOOLEAN, POINT or temporal type (i.e. DATE, ZONED TIME, LOCAL TIME, ZONED DATETIME, LOCAL DATETIME or DURATION) value to a STRING, or null if the value cannot be converted.
-    stringFunctionFeaturesToStringOrNull :: Bool,
-    -- | The toUpper() function. Returns the given STRING in uppercase.
-    stringFunctionFeaturesToUpper :: Bool,
-    -- | The trim() function. Returns the given STRING with leading and trailing whitespace removed.; Returns the given STRING with the leading and/or trailing trimCharacterString character removed. Introduced in 5.20.
-    stringFunctionFeaturesTrim :: Bool,
-    -- | The upper() function. Returns the given STRING in uppercase. This function is an alias to the toUpper() function, and it was introduced as part of Cypher's GQL conformance. Introduced in 5.21.
-    stringFunctionFeaturesUpper :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_StringFunctionFeatures = Core.Name "hydra.cypher.features.StringFunctionFeatures"
-_StringFunctionFeatures_btrim = Core.Name "btrim"
-_StringFunctionFeatures_left = Core.Name "left"
-_StringFunctionFeatures_lower = Core.Name "lower"
-_StringFunctionFeatures_ltrim = Core.Name "ltrim"
-_StringFunctionFeatures_normalize = Core.Name "normalize"
-_StringFunctionFeatures_replace = Core.Name "replace"
-_StringFunctionFeatures_reverse = Core.Name "reverse"
-_StringFunctionFeatures_right = Core.Name "right"
-_StringFunctionFeatures_rtrim = Core.Name "rtrim"
-_StringFunctionFeatures_split = Core.Name "split"
-_StringFunctionFeatures_substring = Core.Name "substring"
-_StringFunctionFeatures_toLower = Core.Name "toLower"
-_StringFunctionFeatures_toString = Core.Name "toString"
-_StringFunctionFeatures_toStringOrNull = Core.Name "toStringOrNull"
-_StringFunctionFeatures_toUpper = Core.Name "toUpper"
-_StringFunctionFeatures_trim = Core.Name "trim"
-_StringFunctionFeatures_upper = Core.Name "upper"
--- | Temporal duration functions
-data TemporalDurationFunctionFeatures =
-  TemporalDurationFunctionFeatures {
-    -- | The duration() function. Constructs a DURATION value.
-    temporalDurationFunctionFeaturesDuration :: Bool,
-    -- | The duration.between() function. Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in logical units.
-    temporalDurationFunctionFeaturesDurationBetween :: Bool,
-    -- | The duration.inDays() function. Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in days.
-    temporalDurationFunctionFeaturesDurationInDays :: Bool,
-    -- | The duration.inMonths() function. Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in months.
-    temporalDurationFunctionFeaturesDurationInMonths :: Bool,
-    -- | The duration.inSeconds() function. Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in seconds.
-    temporalDurationFunctionFeaturesDurationInSeconds :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_TemporalDurationFunctionFeatures = Core.Name "hydra.cypher.features.TemporalDurationFunctionFeatures"
-_TemporalDurationFunctionFeatures_duration = Core.Name "duration"
-_TemporalDurationFunctionFeatures_durationBetween = Core.Name "durationBetween"
-_TemporalDurationFunctionFeatures_durationInDays = Core.Name "durationInDays"
-_TemporalDurationFunctionFeatures_durationInMonths = Core.Name "durationInMonths"
-_TemporalDurationFunctionFeatures_durationInSeconds = Core.Name "durationInSeconds"
--- | Temporal instant functions
-data TemporalInstantFunctionFeatures =
-  TemporalInstantFunctionFeatures {
-    -- | The date() function. Creates a DATE instant.
-    temporalInstantFunctionFeaturesDate :: Bool,
-    -- | The date.realtime() function. Returns the current DATE instant using the realtime clock.
-    temporalInstantFunctionFeaturesDateRealtime :: Bool,
-    -- | The date.statement() function. Returns the current DATE instant using the statement clock.
-    temporalInstantFunctionFeaturesDateStatement :: Bool,
-    -- | The date.transaction() function. Returns the current DATE instant using the transaction clock.
-    temporalInstantFunctionFeaturesDateTransaction :: Bool,
-    -- | The date.truncate() function. Truncates the given temporal value to a DATE instant using the specified unit.
-    temporalInstantFunctionFeaturesDateTruncate :: Bool,
-    -- | The datetime() function. Creates a ZONED DATETIME instant.
-    temporalInstantFunctionFeaturesDatetime :: Bool,
-    -- | The datetime.fromepoch() function. Creates a ZONED DATETIME given the seconds and nanoseconds since the start of the epoch.
-    temporalInstantFunctionFeaturesDatetimeFromepoch :: Bool,
-    -- | The datetime.fromepochmillis() function. Creates a ZONED DATETIME given the milliseconds since the start of the epoch.
-    temporalInstantFunctionFeaturesDatetimeFromepochmillis :: Bool,
-    -- | The datetime.realtime() function. Returns the current ZONED DATETIME instant using the realtime clock.
-    temporalInstantFunctionFeaturesDatetimeRealtime :: Bool,
-    -- | The datetime.statement() function. Returns the current ZONED DATETIME instant using the statement clock.
-    temporalInstantFunctionFeaturesDatetimeStatement :: Bool,
-    -- | The datetime.transaction() function. Returns the current ZONED DATETIME instant using the transaction clock.
-    temporalInstantFunctionFeaturesDatetimeTransaction :: Bool,
-    -- | The datetime.truncate() function. Truncates the given temporal value to a ZONED DATETIME instant using the specified unit.
-    temporalInstantFunctionFeaturesDatetimeTruncate :: Bool,
-    -- | The localdatetime() function. Creates a LOCAL DATETIME instant.
-    temporalInstantFunctionFeaturesLocaldatetime :: Bool,
-    -- | The localdatetime.realtime() function. Returns the current LOCAL DATETIME instant using the realtime clock.
-    temporalInstantFunctionFeaturesLocaldatetimeRealtime :: Bool,
-    -- | The localdatetime.statement() function. Returns the current LOCAL DATETIME instant using the statement clock.
-    temporalInstantFunctionFeaturesLocaldatetimeStatement :: Bool,
-    -- | The localdatetime.transaction() function. Returns the current LOCAL DATETIME instant using the transaction clock.
-    temporalInstantFunctionFeaturesLocaldatetimeTransaction :: Bool,
-    -- | The localdatetime.truncate() function. Truncates the given temporal value to a LOCAL DATETIME instant using the specified unit.
-    temporalInstantFunctionFeaturesLocaldatetimeTruncate :: Bool,
-    -- | The localtime() function. Creates a LOCAL TIME instant.
-    temporalInstantFunctionFeaturesLocaltime :: Bool,
-    -- | The localtime.realtime() function. Returns the current LOCAL TIME instant using the realtime clock.
-    temporalInstantFunctionFeaturesLocaltimeRealtime :: Bool,
-    -- | The localtime.statement() function. Returns the current LOCAL TIME instant using the statement clock.
-    temporalInstantFunctionFeaturesLocaltimeStatement :: Bool,
-    -- | The localtime.transaction() function. Returns the current LOCAL TIME instant using the transaction clock.
-    temporalInstantFunctionFeaturesLocaltimeTransaction :: Bool,
-    -- | The localtime.truncate() function. Truncates the given temporal value to a LOCAL TIME instant using the specified unit.
-    temporalInstantFunctionFeaturesLocaltimeTruncate :: Bool,
-    -- | The time() function. Creates a ZONED TIME instant.
-    temporalInstantFunctionFeaturesTime :: Bool,
-    -- | The time.realtime() function. Returns the current ZONED TIME instant using the realtime clock.
-    temporalInstantFunctionFeaturesTimeRealtime :: Bool,
-    -- | The time.statement() function. Returns the current ZONED TIME instant using the statement clock.
-    temporalInstantFunctionFeaturesTimeStatement :: Bool,
-    -- | The time.transaction() function. Returns the current ZONED TIME instant using the transaction clock.
-    temporalInstantFunctionFeaturesTimeTransaction :: Bool,
-    -- | The time.truncate() function. Truncates the given temporal value to a ZONED TIME instant using the specified unit.
-    temporalInstantFunctionFeaturesTimeTruncate :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_TemporalInstantFunctionFeatures = Core.Name "hydra.cypher.features.TemporalInstantFunctionFeatures"
-_TemporalInstantFunctionFeatures_date = Core.Name "date"
-_TemporalInstantFunctionFeatures_dateRealtime = Core.Name "dateRealtime"
-_TemporalInstantFunctionFeatures_dateStatement = Core.Name "dateStatement"
-_TemporalInstantFunctionFeatures_dateTransaction = Core.Name "dateTransaction"
-_TemporalInstantFunctionFeatures_dateTruncate = Core.Name "dateTruncate"
-_TemporalInstantFunctionFeatures_datetime = Core.Name "datetime"
-_TemporalInstantFunctionFeatures_datetimeFromepoch = Core.Name "datetimeFromepoch"
-_TemporalInstantFunctionFeatures_datetimeFromepochmillis = Core.Name "datetimeFromepochmillis"
-_TemporalInstantFunctionFeatures_datetimeRealtime = Core.Name "datetimeRealtime"
-_TemporalInstantFunctionFeatures_datetimeStatement = Core.Name "datetimeStatement"
-_TemporalInstantFunctionFeatures_datetimeTransaction = Core.Name "datetimeTransaction"
-_TemporalInstantFunctionFeatures_datetimeTruncate = Core.Name "datetimeTruncate"
-_TemporalInstantFunctionFeatures_localdatetime = Core.Name "localdatetime"
-_TemporalInstantFunctionFeatures_localdatetimeRealtime = Core.Name "localdatetimeRealtime"
-_TemporalInstantFunctionFeatures_localdatetimeStatement = Core.Name "localdatetimeStatement"
-_TemporalInstantFunctionFeatures_localdatetimeTransaction = Core.Name "localdatetimeTransaction"
-_TemporalInstantFunctionFeatures_localdatetimeTruncate = Core.Name "localdatetimeTruncate"
-_TemporalInstantFunctionFeatures_localtime = Core.Name "localtime"
-_TemporalInstantFunctionFeatures_localtimeRealtime = Core.Name "localtimeRealtime"
-_TemporalInstantFunctionFeatures_localtimeStatement = Core.Name "localtimeStatement"
-_TemporalInstantFunctionFeatures_localtimeTransaction = Core.Name "localtimeTransaction"
-_TemporalInstantFunctionFeatures_localtimeTruncate = Core.Name "localtimeTruncate"
-_TemporalInstantFunctionFeatures_time = Core.Name "time"
-_TemporalInstantFunctionFeatures_timeRealtime = Core.Name "timeRealtime"
-_TemporalInstantFunctionFeatures_timeStatement = Core.Name "timeStatement"
-_TemporalInstantFunctionFeatures_timeTransaction = Core.Name "timeTransaction"
-_TemporalInstantFunctionFeatures_timeTruncate = Core.Name "timeTruncate"
--- | Trigonometric functions
-data TrigonometricFunctionFeatures =
-  TrigonometricFunctionFeatures {
-    -- | The acos() function. Returns the arccosine of a FLOAT in radians.
-    trigonometricFunctionFeaturesAcos :: Bool,
-    -- | The asin() function. Returns the arcsine of a FLOAT in radians.
-    trigonometricFunctionFeaturesAsin :: Bool,
-    -- | The atan() function. Returns the arctangent of a FLOAT in radians.
-    trigonometricFunctionFeaturesAtan :: Bool,
-    -- | The atan2() function. Returns the arctangent2 of a set of coordinates in radians.
-    trigonometricFunctionFeaturesAtan2 :: Bool,
-    -- | The cos() function. Returns the cosine of a FLOAT.
-    trigonometricFunctionFeaturesCos :: Bool,
-    -- | The cot() function. Returns the cotangent of a FLOAT.
-    trigonometricFunctionFeaturesCot :: Bool,
-    -- | The degrees() function. Converts radians to degrees.
-    trigonometricFunctionFeaturesDegrees :: Bool,
-    -- | The haversin() function. Returns half the versine of a number.
-    trigonometricFunctionFeaturesHaversin :: Bool,
-    -- | The pi() function. Returns the mathematical constant pi.
-    trigonometricFunctionFeaturesPi :: Bool,
-    -- | The radians() function. Converts degrees to radians.
-    trigonometricFunctionFeaturesRadians :: Bool,
-    -- | The sin() function. Returns the sine of a FLOAT.
-    trigonometricFunctionFeaturesSin :: Bool,
-    -- | The tan() function. Returns the tangent of a FLOAT.
-    trigonometricFunctionFeaturesTan :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_TrigonometricFunctionFeatures = Core.Name "hydra.cypher.features.TrigonometricFunctionFeatures"
-_TrigonometricFunctionFeatures_acos = Core.Name "acos"
-_TrigonometricFunctionFeatures_asin = Core.Name "asin"
-_TrigonometricFunctionFeatures_atan = Core.Name "atan"
-_TrigonometricFunctionFeatures_atan2 = Core.Name "atan2"
-_TrigonometricFunctionFeatures_cos = Core.Name "cos"
-_TrigonometricFunctionFeatures_cot = Core.Name "cot"
-_TrigonometricFunctionFeatures_degrees = Core.Name "degrees"
-_TrigonometricFunctionFeatures_haversin = Core.Name "haversin"
-_TrigonometricFunctionFeatures_pi = Core.Name "pi"
-_TrigonometricFunctionFeatures_radians = Core.Name "radians"
-_TrigonometricFunctionFeatures_sin = Core.Name "sin"
-_TrigonometricFunctionFeatures_tan = Core.Name "tan"
--- | Vector functions
-data VectorFunctionFeatures =
-  VectorFunctionFeatures {
-    -- | The vector.similarity.cosine() function. Returns a FLOAT representing the similarity between the argument vectors based on their cosine.
-    vectorFunctionFeaturesVectorSimilarityCosine :: Bool,
-    -- | The vector.similarity.euclidean() function. Returns a FLOAT representing the similarity between the argument vectors based on their Euclidean distance.
-    vectorFunctionFeaturesVectorSimilarityEuclidean :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_VectorFunctionFeatures = Core.Name "hydra.cypher.features.VectorFunctionFeatures"
-_VectorFunctionFeatures_vectorSimilarityCosine = Core.Name "vectorSimilarityCosine"
-_VectorFunctionFeatures_vectorSimilarityEuclidean = Core.Name "vectorSimilarityEuclidean"
--- | List functionality
-data ListFeatures =
-  ListFeatures {
-    -- | Basic list comprehensions
-    listFeaturesListComprehension :: Bool,
-    -- | List range comprehensions (e.g. [1..10])
-    listFeaturesListRange :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ListFeatures = Core.Name "hydra.cypher.features.ListFeatures"
-_ListFeatures_listComprehension = Core.Name "listComprehension"
-_ListFeatures_listRange = Core.Name "listRange"
--- | Various types of literal values
-data LiteralFeatures =
-  LiteralFeatures {
-    -- | Boolean literals (note: included by most if not all implementations).
-    literalFeaturesBoolean :: Bool,
-    -- | Double-precision floating-point literals
-    literalFeaturesDouble :: Bool,
-    -- | Integer literals
-    literalFeaturesInteger :: Bool,
-    -- | List literals
-    literalFeaturesList :: Bool,
-    -- | Map literals
-    literalFeaturesMap :: Bool,
-    -- | The NULL literal
-    literalFeaturesNull :: Bool,
-    -- | String literals (note: included by most if not all implementations).
-    literalFeaturesString :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_LiteralFeatures = Core.Name "hydra.cypher.features.LiteralFeatures"
-_LiteralFeatures_boolean = Core.Name "boolean"
-_LiteralFeatures_double = Core.Name "double"
-_LiteralFeatures_integer = Core.Name "integer"
-_LiteralFeatures_list = Core.Name "list"
-_LiteralFeatures_map = Core.Name "map"
-_LiteralFeatures_null = Core.Name "null"
-_LiteralFeatures_string = Core.Name "string"
--- | Logical operations
-data LogicalFeatures =
-  LogicalFeatures {
-    -- | The AND operator
-    logicalFeaturesAnd :: Bool,
-    -- | The NOT operator
-    logicalFeaturesNot :: Bool,
-    -- | The OR operator
-    logicalFeaturesOr :: Bool,
-    -- | The XOR operator
-    logicalFeaturesXor :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_LogicalFeatures = Core.Name "hydra.cypher.features.LogicalFeatures"
-_LogicalFeatures_and = Core.Name "and"
-_LogicalFeatures_not = Core.Name "not"
-_LogicalFeatures_or = Core.Name "or"
-_LogicalFeatures_xor = Core.Name "xor"
--- | Match queries
-data MatchFeatures =
-  MatchFeatures {
-    -- | The basic (non-optional) MATCH clause
-    matchFeaturesMatch :: Bool,
-    -- | OPTIONAL MATCH
-    matchFeaturesOptionalMatch :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_MatchFeatures = Core.Name "hydra.cypher.features.MatchFeatures"
-_MatchFeatures_match = Core.Name "match"
-_MatchFeatures_optionalMatch = Core.Name "optionalMatch"
--- | Merge operations
-data MergeFeatures =
-  MergeFeatures {
-    -- | The basic MERGE clause
-    mergeFeaturesMerge :: Bool,
-    -- | MERGE with the ON CREATE action
-    mergeFeaturesMergeOnCreate :: Bool,
-    -- | MERGE with the ON MATCH action
-    mergeFeaturesMergeOnMatch :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_MergeFeatures = Core.Name "hydra.cypher.features.MergeFeatures"
-_MergeFeatures_merge = Core.Name "merge"
-_MergeFeatures_mergeOnCreate = Core.Name "mergeOnCreate"
-_MergeFeatures_mergeOnMatch = Core.Name "mergeOnMatch"
--- | Node patterns
-data NodePatternFeatures =
-  NodePatternFeatures {
-    -- | Specifying multiple labels in a node pattern
-    nodePatternFeaturesMultipleLabels :: Bool,
-    -- | Specifying a parameter as part of a node pattern
-    nodePatternFeaturesParameter :: Bool,
-    -- | Specifying a key/value map of properties in a node pattern
-    nodePatternFeaturesPropertyMap :: Bool,
-    -- | Binding a variable to a node in a node pattern (note: included by most if not all implementations).
-    nodePatternFeaturesVariableNode :: Bool,
-    -- | Omitting labels from a node pattern
-    nodePatternFeaturesWildcardLabel :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_NodePatternFeatures = Core.Name "hydra.cypher.features.NodePatternFeatures"
-_NodePatternFeatures_multipleLabels = Core.Name "multipleLabels"
-_NodePatternFeatures_parameter = Core.Name "parameter"
-_NodePatternFeatures_propertyMap = Core.Name "propertyMap"
-_NodePatternFeatures_variableNode = Core.Name "variableNode"
-_NodePatternFeatures_wildcardLabel = Core.Name "wildcardLabel"
--- | IS NULL / IS NOT NULL checks
-data NullFeatures =
-  NullFeatures {
-    -- | The IS NULL operator
-    nullFeaturesIsNull :: Bool,
-    -- | The IS NOT NULL operator
-    nullFeaturesIsNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_NullFeatures = Core.Name "hydra.cypher.features.NullFeatures"
-_NullFeatures_isNull = Core.Name "isNull"
-_NullFeatures_isNotNull = Core.Name "isNotNull"
--- | Path functions only found in OpenCypher
-data PathFeatures =
-  PathFeatures {
-    -- | The shortestPath() function
-    pathFeaturesShortestPath :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_PathFeatures = Core.Name "hydra.cypher.features.PathFeatures"
-_PathFeatures_shortestPath = Core.Name "shortestPath"
--- | Procedure calls
-data ProcedureCallFeatures =
-  ProcedureCallFeatures {
-    -- | CALL within a query
-    procedureCallFeaturesInQueryCall :: Bool,
-    -- | Standalone / top-level CALL
-    procedureCallFeaturesStandaloneCall :: Bool,
-    -- | The YIELD clause in CALL
-    procedureCallFeaturesYield :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ProcedureCallFeatures = Core.Name "hydra.cypher.features.ProcedureCallFeatures"
-_ProcedureCallFeatures_inQueryCall = Core.Name "inQueryCall"
-_ProcedureCallFeatures_standaloneCall = Core.Name "standaloneCall"
-_ProcedureCallFeatures_yield = Core.Name "yield"
--- | Projections
-data ProjectionFeatures =
-  ProjectionFeatures {
-    -- | The LIMIT clause
-    projectionFeaturesLimit :: Bool,
-    -- | The ORDER BY clause
-    projectionFeaturesOrderBy :: Bool,
-    -- | The DISTINCT keyword
-    projectionFeaturesProjectDistinct :: Bool,
-    -- | The * projection
-    projectionFeaturesProjectAll :: Bool,
-    -- | The AS keyword
-    projectionFeaturesProjectAs :: Bool,
-    -- | The SKIP clause
-    projectionFeaturesSkip :: Bool,
-    -- | The ASC/ASCENDING and DESC/DESCENDING keywords
-    projectionFeaturesSortOrder :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ProjectionFeatures = Core.Name "hydra.cypher.features.ProjectionFeatures"
-_ProjectionFeatures_limit = Core.Name "limit"
-_ProjectionFeatures_orderBy = Core.Name "orderBy"
-_ProjectionFeatures_projectDistinct = Core.Name "projectDistinct"
-_ProjectionFeatures_projectAll = Core.Name "projectAll"
-_ProjectionFeatures_projectAs = Core.Name "projectAs"
-_ProjectionFeatures_skip = Core.Name "skip"
-_ProjectionFeatures_sortOrder = Core.Name "sortOrder"
--- | Quantifier expressions
-data QuantifierFeatures =
-  QuantifierFeatures {
-    -- | The ALL quantifier
-    quantifierFeaturesAll :: Bool,
-    -- | The ANY quantifier
-    quantifierFeaturesAny :: Bool,
-    -- | The NONE quantifier
-    quantifierFeaturesNone :: Bool,
-    -- | The SINGLE quantifier
-    quantifierFeaturesSingle :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_QuantifierFeatures = Core.Name "hydra.cypher.features.QuantifierFeatures"
-_QuantifierFeatures_all = Core.Name "all"
-_QuantifierFeatures_any = Core.Name "any"
-_QuantifierFeatures_none = Core.Name "none"
-_QuantifierFeatures_single = Core.Name "single"
--- | Range literals within relationship patterns
-data RangeLiteralFeatures =
-  RangeLiteralFeatures {
-    -- | Range literals with both lower and upper bounds
-    rangeLiteralFeaturesBounds :: Bool,
-    -- | Range literals providing an exact number of repetitions
-    rangeLiteralFeaturesExactRange :: Bool,
-    -- | Range literals with a lower bound (only)
-    rangeLiteralFeaturesLowerBound :: Bool,
-    -- | The * range literal
-    rangeLiteralFeaturesStarRange :: Bool,
-    -- | Range literals with an upper bound (only)
-    rangeLiteralFeaturesUpperBound :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_RangeLiteralFeatures = Core.Name "hydra.cypher.features.RangeLiteralFeatures"
-_RangeLiteralFeatures_bounds = Core.Name "bounds"
-_RangeLiteralFeatures_exactRange = Core.Name "exactRange"
-_RangeLiteralFeatures_lowerBound = Core.Name "lowerBound"
-_RangeLiteralFeatures_starRange = Core.Name "starRange"
-_RangeLiteralFeatures_upperBound = Core.Name "upperBound"
--- | Specific syntax related to reading data from the graph.
-data ReadingFeatures =
-  ReadingFeatures {
-    -- | The UNION operator
-    readingFeaturesUnion :: Bool,
-    -- | The UNION ALL operator
-    readingFeaturesUnionAll :: Bool,
-    -- | The UNWIND clause
-    readingFeaturesUnwind :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ReadingFeatures = Core.Name "hydra.cypher.features.ReadingFeatures"
-_ReadingFeatures_union = Core.Name "union"
-_ReadingFeatures_unionAll = Core.Name "unionAll"
-_ReadingFeatures_unwind = Core.Name "unwind"
--- | Relationship directions / arrow patterns
-data RelationshipDirectionFeatures =
-  RelationshipDirectionFeatures {
-    -- | The two-headed arrow (<-[]->) relationship direction
-    relationshipDirectionFeaturesBoth :: Bool,
-    -- | The left arrow (<-[]-) relationship direction
-    relationshipDirectionFeaturesLeft :: Bool,
-    -- | The headless arrow (-[]-) relationship direction
-    relationshipDirectionFeaturesNeither :: Bool,
-    -- | The right arrow (-[]->) relationship direction
-    relationshipDirectionFeaturesRight :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_RelationshipDirectionFeatures = Core.Name "hydra.cypher.features.RelationshipDirectionFeatures"
-_RelationshipDirectionFeatures_both = Core.Name "both"
-_RelationshipDirectionFeatures_left = Core.Name "left"
-_RelationshipDirectionFeatures_neither = Core.Name "neither"
-_RelationshipDirectionFeatures_right = Core.Name "right"
--- | Relationship patterns
-data RelationshipPatternFeatures =
-  RelationshipPatternFeatures {
-    -- | Specifying a disjunction of multiple types in a relationship pattern
-    relationshipPatternFeaturesMultipleTypes :: Bool,
-    -- | Binding a variable to a relationship in a relationship pattern (note: included by most if not all implementations).
-    relationshipPatternFeaturesVariableRelationship :: Bool,
-    -- | Omitting types from a relationship pattern
-    relationshipPatternFeaturesWildcardType :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_RelationshipPatternFeatures = Core.Name "hydra.cypher.features.RelationshipPatternFeatures"
-_RelationshipPatternFeatures_multipleTypes = Core.Name "multipleTypes"
-_RelationshipPatternFeatures_variableRelationship = Core.Name "variableRelationship"
-_RelationshipPatternFeatures_wildcardType = Core.Name "wildcardType"
--- | REMOVE operations
-data RemoveFeatures =
-  RemoveFeatures {
-    -- | REMOVE Variable:NodeLabels
-    removeFeaturesByLabel :: Bool,
-    -- | REMOVE PropertyExpression
-    removeFeaturesByProperty :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_RemoveFeatures = Core.Name "hydra.cypher.features.RemoveFeatures"
-_RemoveFeatures_byLabel = Core.Name "byLabel"
-_RemoveFeatures_byProperty = Core.Name "byProperty"
--- | Set definitions
-data SetFeatures =
-  SetFeatures {
-    -- | Defining a set using PropertyExpression = Expression
-    setFeaturesPropertyEquals :: Bool,
-    -- | Defining a set using Variable = Expression
-    setFeaturesVariableEquals :: Bool,
-    -- | Defining a set using Variable += Expression
-    setFeaturesVariablePlusEquals :: Bool,
-    -- | Defining a set using Variable:NodeLabels
-    setFeaturesVariableWithNodeLabels :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_SetFeatures = Core.Name "hydra.cypher.features.SetFeatures"
-_SetFeatures_propertyEquals = Core.Name "propertyEquals"
-_SetFeatures_variableEquals = Core.Name "variableEquals"
-_SetFeatures_variablePlusEquals = Core.Name "variablePlusEquals"
-_SetFeatures_variableWithNodeLabels = Core.Name "variableWithNodeLabels"
--- | String functions/keywords only found in OpenCypher
-data StringFeatures =
-  StringFeatures {
-    -- | The contains() function / CONTAINS
-    stringFeaturesContains :: Bool,
-    -- | The endsWith() function / ENDS WITH
-    stringFeaturesEndsWith :: Bool,
-    -- | The in() function / IN
-    stringFeaturesIn :: Bool,
-    -- | The startsWith() function / STARTS WITH
-    stringFeaturesStartsWith :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_StringFeatures = Core.Name "hydra.cypher.features.StringFeatures"
-_StringFeatures_contains = Core.Name "contains"
-_StringFeatures_endsWith = Core.Name "endsWith"
-_StringFeatures_in = Core.Name "in"
-_StringFeatures_startsWith = Core.Name "startsWith"
--- | Specific syntax related to updating data in the graph
-data UpdatingFeatures =
-  UpdatingFeatures {
-    -- | The CREATE clause
-    updatingFeaturesCreate :: Bool,
-    -- | The SET clause
-    updatingFeaturesSet :: Bool,
-    -- | Multi-part queries using WITH
-    updatingFeaturesWith :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_UpdatingFeatures = Core.Name "hydra.cypher.features.UpdatingFeatures"
-_UpdatingFeatures_create = Core.Name "create"
-_UpdatingFeatures_set = Core.Name "set"
-_UpdatingFeatures_with = Core.Name "with"
+
+-- | A model for characterizing OpenCypher queries and implementations in terms of included features.Based on the OpenCypher grammar and the list of standard Cypher functions at https://neo4j.com/docs/cypher-manual/current/functions. Current as of August 2024.
+
+module Hydra.Cypher.Features where
+
+import qualified Hydra.Core as Core
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
+import qualified Data.Scientific as Sci
+
+-- | Aggregate functions
+data AggregateFunctionFeatures =
+  AggregateFunctionFeatures {
+    -- | The avg() function / AVG. Returns the average of a set of DURATION values.; Returns the average of a set of FLOAT values.; Returns the average of a set of INTEGER values.
+    aggregateFunctionFeaturesAvg :: Bool,
+    -- | The collect() function / COLLECT. Returns a list containing the values returned by an expression.
+    aggregateFunctionFeaturesCollect :: Bool,
+    -- | The count() function / COUNT. Returns the number of values or rows.
+    aggregateFunctionFeaturesCount :: Bool,
+    -- | The max() function / MAX. Returns the maximum value in a set of values.
+    aggregateFunctionFeaturesMax :: Bool,
+    -- | The min() function / MIN. Returns the minimum value in a set of values.
+    aggregateFunctionFeaturesMin :: Bool,
+    -- | The percentileCont() function. Returns the percentile of a value over a group using linear interpolation.
+    aggregateFunctionFeaturesPercentileCont :: Bool,
+    -- | The percentileDisc() function. Returns the nearest FLOAT value to the given percentile over a group using a rounding method.; Returns the nearest INTEGER value to the given percentile over a group using a rounding method.
+    aggregateFunctionFeaturesPercentileDisc :: Bool,
+    -- | The stdev() function. Returns the standard deviation for the given value over a group for a sample of a population.
+    aggregateFunctionFeaturesStdev :: Bool,
+    -- | The stdevp() function. Returns the standard deviation for the given value over a group for an entire population.
+    aggregateFunctionFeaturesStdevp :: Bool,
+    -- | The sum() function / SUM. Returns the sum of a set of DURATION values.; Returns the sum of a set of FLOAT values.; Returns the sum of a set of INTEGER values.
+    aggregateFunctionFeaturesSum :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_AggregateFunctionFeatures = Core.Name "hydra.cypher.features.AggregateFunctionFeatures"
+
+_AggregateFunctionFeatures_avg = Core.Name "avg"
+
+_AggregateFunctionFeatures_collect = Core.Name "collect"
+
+_AggregateFunctionFeatures_count = Core.Name "count"
+
+_AggregateFunctionFeatures_max = Core.Name "max"
+
+_AggregateFunctionFeatures_min = Core.Name "min"
+
+_AggregateFunctionFeatures_percentileCont = Core.Name "percentileCont"
+
+_AggregateFunctionFeatures_percentileDisc = Core.Name "percentileDisc"
+
+_AggregateFunctionFeatures_stdev = Core.Name "stdev"
+
+_AggregateFunctionFeatures_stdevp = Core.Name "stdevp"
+
+_AggregateFunctionFeatures_sum = Core.Name "sum"
+
+-- | Arithmetic operations
+data ArithmeticFeatures =
+  ArithmeticFeatures {
+    -- | The + operator
+    arithmeticFeaturesPlus :: Bool,
+    -- | The - operator
+    arithmeticFeaturesMinus :: Bool,
+    -- | The * operator
+    arithmeticFeaturesMultiply :: Bool,
+    -- | The / operator
+    arithmeticFeaturesDivide :: Bool,
+    -- | The % operator
+    arithmeticFeaturesModulus :: Bool,
+    -- | The ^ operator
+    arithmeticFeaturesPowerOf :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ArithmeticFeatures = Core.Name "hydra.cypher.features.ArithmeticFeatures"
+
+_ArithmeticFeatures_plus = Core.Name "plus"
+
+_ArithmeticFeatures_minus = Core.Name "minus"
+
+_ArithmeticFeatures_multiply = Core.Name "multiply"
+
+_ArithmeticFeatures_divide = Core.Name "divide"
+
+_ArithmeticFeatures_modulus = Core.Name "modulus"
+
+_ArithmeticFeatures_powerOf = Core.Name "powerOf"
+
+-- | Various kinds of atomic expressions
+data AtomFeatures =
+  AtomFeatures {
+    -- | CASE expressions
+    atomFeaturesCaseExpression :: Bool,
+    -- | The COUNT (*) expression
+    atomFeaturesCount :: Bool,
+    -- | Existential subqueries
+    atomFeaturesExistentialSubquery :: Bool,
+    -- | Function invocation
+    atomFeaturesFunctionInvocation :: Bool,
+    -- | Parameter expressions
+    atomFeaturesParameter :: Bool,
+    -- | Pattern comprehensions
+    atomFeaturesPatternComprehension :: Bool,
+    -- | Relationship patterns as subexpressions
+    atomFeaturesPatternPredicate :: Bool,
+    -- | Variable expressions (note: included by most if not all implementations).
+    atomFeaturesVariable :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_AtomFeatures = Core.Name "hydra.cypher.features.AtomFeatures"
+
+_AtomFeatures_caseExpression = Core.Name "caseExpression"
+
+_AtomFeatures_count = Core.Name "count"
+
+_AtomFeatures_existentialSubquery = Core.Name "existentialSubquery"
+
+_AtomFeatures_functionInvocation = Core.Name "functionInvocation"
+
+_AtomFeatures_parameter = Core.Name "parameter"
+
+_AtomFeatures_patternComprehension = Core.Name "patternComprehension"
+
+_AtomFeatures_patternPredicate = Core.Name "patternPredicate"
+
+_AtomFeatures_variable = Core.Name "variable"
+
+-- | Comparison operators and functions
+data ComparisonFeatures =
+  ComparisonFeatures {
+    -- | The = comparison operator
+    comparisonFeaturesEqual :: Bool,
+    -- | The > comparison operator
+    comparisonFeaturesGreaterThan :: Bool,
+    -- | The >= comparison operator
+    comparisonFeaturesGreaterThanOrEqual :: Bool,
+    -- | The < comparison operator
+    comparisonFeaturesLessThan :: Bool,
+    -- | The <= comparison operator
+    comparisonFeaturesLessThanOrEqual :: Bool,
+    -- | The <> comparison operator
+    comparisonFeaturesNotEqual :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ComparisonFeatures = Core.Name "hydra.cypher.features.ComparisonFeatures"
+
+_ComparisonFeatures_equal = Core.Name "equal"
+
+_ComparisonFeatures_greaterThan = Core.Name "greaterThan"
+
+_ComparisonFeatures_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
+
+_ComparisonFeatures_lessThan = Core.Name "lessThan"
+
+_ComparisonFeatures_lessThanOrEqual = Core.Name "lessThanOrEqual"
+
+_ComparisonFeatures_notEqual = Core.Name "notEqual"
+
+-- | A set of features which characterize an OpenCypher query or implementation. Any features which are omitted from the set are assumed to be unsupported or nonrequired.
+data CypherFeatures =
+  CypherFeatures {
+    -- | Arithmetic operations
+    cypherFeaturesArithmetic :: ArithmeticFeatures,
+    -- | Various kinds of atomic expressions
+    cypherFeaturesAtom :: AtomFeatures,
+    -- | Comparison operators and functions
+    cypherFeaturesComparison :: ComparisonFeatures,
+    -- | Delete operations
+    cypherFeaturesDelete :: DeleteFeatures,
+    -- | Standard Cypher functions
+    cypherFeaturesFunction :: FunctionFeatures,
+    -- | List functionality
+    cypherFeaturesList :: ListFeatures,
+    -- | Various types of literal values
+    cypherFeaturesLiteral :: LiteralFeatures,
+    -- | Logical operations
+    cypherFeaturesLogical :: LogicalFeatures,
+    -- | Match queries
+    cypherFeaturesMatch :: MatchFeatures,
+    -- | Merge operations
+    cypherFeaturesMerge :: MergeFeatures,
+    -- | Node patterns
+    cypherFeaturesNodePattern :: NodePatternFeatures,
+    -- | IS NULL / IS NOT NULL checks
+    cypherFeaturesNull :: NullFeatures,
+    -- | Path functions only found in OpenCypher
+    cypherFeaturesPath :: PathFeatures,
+    -- | Procedure calls
+    cypherFeaturesProcedureCall :: ProcedureCallFeatures,
+    -- | Projections
+    cypherFeaturesProjection :: ProjectionFeatures,
+    -- | Quantifier expressions
+    cypherFeaturesQuantifier :: QuantifierFeatures,
+    -- | Range literals within relationship patterns
+    cypherFeaturesRangeLiteral :: RangeLiteralFeatures,
+    -- | Specific syntax related to reading data from the graph.
+    cypherFeaturesReading :: ReadingFeatures,
+    -- | Relationship directions / arrow patterns
+    cypherFeaturesRelationshipDirection :: RelationshipDirectionFeatures,
+    -- | Relationship patterns
+    cypherFeaturesRelationshipPattern :: RelationshipPatternFeatures,
+    -- | REMOVE operations
+    cypherFeaturesRemove :: RemoveFeatures,
+    -- | Set definitions
+    cypherFeaturesSet :: SetFeatures,
+    -- | String functions/keywords only found in OpenCypher
+    cypherFeaturesString :: StringFeatures,
+    -- | Specific syntax related to updating data in the graph
+    cypherFeaturesUpdating :: UpdatingFeatures}
+  deriving (Eq, Ord, Read, Show)
+
+_CypherFeatures = Core.Name "hydra.cypher.features.CypherFeatures"
+
+_CypherFeatures_arithmetic = Core.Name "arithmetic"
+
+_CypherFeatures_atom = Core.Name "atom"
+
+_CypherFeatures_comparison = Core.Name "comparison"
+
+_CypherFeatures_delete = Core.Name "delete"
+
+_CypherFeatures_function = Core.Name "function"
+
+_CypherFeatures_list = Core.Name "list"
+
+_CypherFeatures_literal = Core.Name "literal"
+
+_CypherFeatures_logical = Core.Name "logical"
+
+_CypherFeatures_match = Core.Name "match"
+
+_CypherFeatures_merge = Core.Name "merge"
+
+_CypherFeatures_nodePattern = Core.Name "nodePattern"
+
+_CypherFeatures_null = Core.Name "null"
+
+_CypherFeatures_path = Core.Name "path"
+
+_CypherFeatures_procedureCall = Core.Name "procedureCall"
+
+_CypherFeatures_projection = Core.Name "projection"
+
+_CypherFeatures_quantifier = Core.Name "quantifier"
+
+_CypherFeatures_rangeLiteral = Core.Name "rangeLiteral"
+
+_CypherFeatures_reading = Core.Name "reading"
+
+_CypherFeatures_relationshipDirection = Core.Name "relationshipDirection"
+
+_CypherFeatures_relationshipPattern = Core.Name "relationshipPattern"
+
+_CypherFeatures_remove = Core.Name "remove"
+
+_CypherFeatures_set = Core.Name "set"
+
+_CypherFeatures_string = Core.Name "string"
+
+_CypherFeatures_updating = Core.Name "updating"
+
+-- | Database functions
+data DatabaseFunctionFeatures =
+  DatabaseFunctionFeatures {
+    -- | The db.nameFromElementId() function. Resolves the database name from the given element id. Introduced in 5.12.
+    databaseFunctionFeaturesDbNameFromElementId :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_DatabaseFunctionFeatures = Core.Name "hydra.cypher.features.DatabaseFunctionFeatures"
+
+_DatabaseFunctionFeatures_dbNameFromElementId = Core.Name "dbNameFromElementId"
+
+-- | Delete operations
+data DeleteFeatures =
+  DeleteFeatures {
+    -- | The basic DELETE clause
+    deleteFeaturesDelete :: Bool,
+    -- | The DETACH DELETE clause
+    deleteFeaturesDetachDelete :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_DeleteFeatures = Core.Name "hydra.cypher.features.DeleteFeatures"
+
+_DeleteFeatures_delete = Core.Name "delete"
+
+_DeleteFeatures_detachDelete = Core.Name "detachDelete"
+
+-- | Standard Cypher functions
+data FunctionFeatures =
+  FunctionFeatures {
+    -- | Aggregate functions
+    functionFeaturesAggregateFunction :: AggregateFunctionFeatures,
+    -- | Database functions
+    functionFeaturesDatabaseFunction :: DatabaseFunctionFeatures,
+    -- | GenAI functions
+    functionFeaturesGenAIFunction :: GenAIFunctionFeatures,
+    -- | Graph functions
+    functionFeaturesGraphFunction :: GraphFunctionFeatures,
+    -- | List functions
+    functionFeaturesListFunction :: ListFunctionFeatures,
+    -- | Load CSV functions
+    functionFeaturesLoadCSVFunction :: LoadCSVFunctionFeatures,
+    -- | Logarithmic functions
+    functionFeaturesLogarithmicFunction :: LogarithmicFunctionFeatures,
+    -- | Numeric functions
+    functionFeaturesNumericFunction :: NumericFunctionFeatures,
+    -- | Predicate functions
+    functionFeaturesPredicateFunction :: PredicateFunctionFeatures,
+    -- | Scalar functions
+    functionFeaturesScalarFunction :: ScalarFunctionFeatures,
+    -- | Spatial functions
+    functionFeaturesSpatialFunction :: SpatialFunctionFeatures,
+    -- | String functions
+    functionFeaturesStringFunction :: StringFunctionFeatures,
+    -- | Temporal duration functions
+    functionFeaturesTemporalDurationFunction :: TemporalDurationFunctionFeatures,
+    -- | Temporal instant functions
+    functionFeaturesTemporalInstantFunction :: TemporalInstantFunctionFeatures,
+    -- | Trigonometric functions
+    functionFeaturesTrigonometricFunction :: TrigonometricFunctionFeatures,
+    -- | Vector functions
+    functionFeaturesVectorFunction :: VectorFunctionFeatures}
+  deriving (Eq, Ord, Read, Show)
+
+_FunctionFeatures = Core.Name "hydra.cypher.features.FunctionFeatures"
+
+_FunctionFeatures_aggregateFunction = Core.Name "aggregateFunction"
+
+_FunctionFeatures_databaseFunction = Core.Name "databaseFunction"
+
+_FunctionFeatures_genAIFunction = Core.Name "genAIFunction"
+
+_FunctionFeatures_graphFunction = Core.Name "graphFunction"
+
+_FunctionFeatures_listFunction = Core.Name "listFunction"
+
+_FunctionFeatures_loadCSVFunction = Core.Name "loadCSVFunction"
+
+_FunctionFeatures_logarithmicFunction = Core.Name "logarithmicFunction"
+
+_FunctionFeatures_numericFunction = Core.Name "numericFunction"
+
+_FunctionFeatures_predicateFunction = Core.Name "predicateFunction"
+
+_FunctionFeatures_scalarFunction = Core.Name "scalarFunction"
+
+_FunctionFeatures_spatialFunction = Core.Name "spatialFunction"
+
+_FunctionFeatures_stringFunction = Core.Name "stringFunction"
+
+_FunctionFeatures_temporalDurationFunction = Core.Name "temporalDurationFunction"
+
+_FunctionFeatures_temporalInstantFunction = Core.Name "temporalInstantFunction"
+
+_FunctionFeatures_trigonometricFunction = Core.Name "trigonometricFunction"
+
+_FunctionFeatures_vectorFunction = Core.Name "vectorFunction"
+
+-- | GenAI functions
+data GenAIFunctionFeatures =
+  GenAIFunctionFeatures {
+    -- | The genai.vector.encode() function. Encode a given resource as a vector using the named provider. Introduced in 5.17.
+    genAIFunctionFeaturesGenaiVectorEncode :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_GenAIFunctionFeatures = Core.Name "hydra.cypher.features.GenAIFunctionFeatures"
+
+_GenAIFunctionFeatures_genaiVectorEncode = Core.Name "genaiVectorEncode"
+
+-- | Graph functions
+data GraphFunctionFeatures =
+  GraphFunctionFeatures {
+    -- | The graph.byElementId() function. Resolves the constituent graph to which a given element id belongs. Introduced in 5.13.
+    graphFunctionFeaturesGraphByElementId :: Bool,
+    -- | The graph.byName() function. Resolves a constituent graph by name.
+    graphFunctionFeaturesGraphByName :: Bool,
+    -- | The graph.names() function. Returns a list containing the names of all graphs in the current composite database.
+    graphFunctionFeaturesGraphNames :: Bool,
+    -- | The graph.propertiesByName() function. Returns a map containing the properties associated with the given graph.
+    graphFunctionFeaturesGraphPropertiesByName :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_GraphFunctionFeatures = Core.Name "hydra.cypher.features.GraphFunctionFeatures"
+
+_GraphFunctionFeatures_graphByElementId = Core.Name "graphByElementId"
+
+_GraphFunctionFeatures_graphByName = Core.Name "graphByName"
+
+_GraphFunctionFeatures_graphNames = Core.Name "graphNames"
+
+_GraphFunctionFeatures_graphPropertiesByName = Core.Name "graphPropertiesByName"
+
+-- | List functionality
+data ListFeatures =
+  ListFeatures {
+    -- | Basic list comprehensions
+    listFeaturesListComprehension :: Bool,
+    -- | List range comprehensions (e.g. [1..10])
+    listFeaturesListRange :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ListFeatures = Core.Name "hydra.cypher.features.ListFeatures"
+
+_ListFeatures_listComprehension = Core.Name "listComprehension"
+
+_ListFeatures_listRange = Core.Name "listRange"
+
+-- | List functions
+data ListFunctionFeatures =
+  ListFunctionFeatures {
+    -- | The keys() function. Returns a LIST<STRING> containing the STRING representations for all the property names of a MAP.; Returns a LIST<STRING> containing the STRING representations for all the property names of a NODE.; Returns a LIST<STRING> containing the STRING representations for all the property names of a RELATIONSHIP.
+    listFunctionFeaturesKeys :: Bool,
+    -- | The labels() function. Returns a LIST<STRING> containing the STRING representations for all the labels of a NODE.
+    listFunctionFeaturesLabels :: Bool,
+    -- | The nodes() function. Returns a LIST<NODE> containing all the NODE values in a PATH.
+    listFunctionFeaturesNodes :: Bool,
+    -- | The range() function. Returns a LIST<INTEGER> comprising all INTEGER values within a specified range.; Returns a LIST<INTEGER> comprising all INTEGER values within a specified range created with step length.
+    listFunctionFeaturesRange :: Bool,
+    -- | The reduce() function. Runs an expression against individual elements of a LIST<ANY>, storing the result of the expression in an accumulator.
+    listFunctionFeaturesReduce :: Bool,
+    -- | The relationships() function. Returns a LIST<RELATIONSHIP> containing all the RELATIONSHIP values in a PATH.
+    listFunctionFeaturesRelationships :: Bool,
+    -- | The reverse() function. Returns a LIST<ANY> in which the order of all elements in the given LIST<ANY> have been reversed.
+    listFunctionFeaturesReverse :: Bool,
+    -- | The tail() function. Returns all but the first element in a LIST<ANY>.
+    listFunctionFeaturesTail :: Bool,
+    -- | The toBooleanList() function. Converts a LIST<ANY> of values to a LIST<BOOLEAN> values. If any values are not convertible to BOOLEAN they will be null in the LIST<BOOLEAN> returned.
+    listFunctionFeaturesToBooleanList :: Bool,
+    -- | The toFloatList() function. Converts a LIST<ANY> to a LIST<FLOAT> values. If any values are not convertible to FLOAT they will be null in the LIST<FLOAT> returned.
+    listFunctionFeaturesToFloatList :: Bool,
+    -- | The toIntegerList() function. Converts a LIST<ANY> to a LIST<INTEGER> values. If any values are not convertible to INTEGER they will be null in the LIST<INTEGER> returned.
+    listFunctionFeaturesToIntegerList :: Bool,
+    -- | The toStringList() function. Converts a LIST<ANY> to a LIST<STRING> values. If any values are not convertible to STRING they will be null in the LIST<STRING> returned.
+    listFunctionFeaturesToStringList :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ListFunctionFeatures = Core.Name "hydra.cypher.features.ListFunctionFeatures"
+
+_ListFunctionFeatures_keys = Core.Name "keys"
+
+_ListFunctionFeatures_labels = Core.Name "labels"
+
+_ListFunctionFeatures_nodes = Core.Name "nodes"
+
+_ListFunctionFeatures_range = Core.Name "range"
+
+_ListFunctionFeatures_reduce = Core.Name "reduce"
+
+_ListFunctionFeatures_relationships = Core.Name "relationships"
+
+_ListFunctionFeatures_reverse = Core.Name "reverse"
+
+_ListFunctionFeatures_tail = Core.Name "tail"
+
+_ListFunctionFeatures_toBooleanList = Core.Name "toBooleanList"
+
+_ListFunctionFeatures_toFloatList = Core.Name "toFloatList"
+
+_ListFunctionFeatures_toIntegerList = Core.Name "toIntegerList"
+
+_ListFunctionFeatures_toStringList = Core.Name "toStringList"
+
+-- | Various types of literal values
+data LiteralFeatures =
+  LiteralFeatures {
+    -- | Boolean literals (note: included by most if not all implementations).
+    literalFeaturesBoolean :: Bool,
+    -- | Double-precision floating-point literals
+    literalFeaturesDouble :: Bool,
+    -- | Integer literals
+    literalFeaturesInteger :: Bool,
+    -- | List literals
+    literalFeaturesList :: Bool,
+    -- | Map literals
+    literalFeaturesMap :: Bool,
+    -- | The NULL literal
+    literalFeaturesNull :: Bool,
+    -- | String literals (note: included by most if not all implementations).
+    literalFeaturesString :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_LiteralFeatures = Core.Name "hydra.cypher.features.LiteralFeatures"
+
+_LiteralFeatures_boolean = Core.Name "boolean"
+
+_LiteralFeatures_double = Core.Name "double"
+
+_LiteralFeatures_integer = Core.Name "integer"
+
+_LiteralFeatures_list = Core.Name "list"
+
+_LiteralFeatures_map = Core.Name "map"
+
+_LiteralFeatures_null = Core.Name "null"
+
+_LiteralFeatures_string = Core.Name "string"
+
+-- | Load CSV functions
+data LoadCSVFunctionFeatures =
+  LoadCSVFunctionFeatures {
+    -- | The file() function. Returns the absolute path of the file that LOAD CSV is using.
+    loadCSVFunctionFeaturesFile :: Bool,
+    -- | The linenumber() function. Returns the line number that LOAD CSV is currently using.
+    loadCSVFunctionFeaturesLinenumber :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_LoadCSVFunctionFeatures = Core.Name "hydra.cypher.features.LoadCSVFunctionFeatures"
+
+_LoadCSVFunctionFeatures_file = Core.Name "file"
+
+_LoadCSVFunctionFeatures_linenumber = Core.Name "linenumber"
+
+-- | Logarithmic functions
+data LogarithmicFunctionFeatures =
+  LogarithmicFunctionFeatures {
+    -- | The e() function. Returns the base of the natural logarithm, e.
+    logarithmicFunctionFeaturesE :: Bool,
+    -- | The exp() function. Returns e^n, where e is the base of the natural logarithm, and n is the value of the argument expression.
+    logarithmicFunctionFeaturesExp :: Bool,
+    -- | The log() function. Returns the natural logarithm of a FLOAT.
+    logarithmicFunctionFeaturesLog :: Bool,
+    -- | The log10() function. Returns the common logarithm (base 10) of a FLOAT.
+    logarithmicFunctionFeaturesLog10 :: Bool,
+    -- | The sqrt() function. Returns the square root of a FLOAT.
+    logarithmicFunctionFeaturesSqrt :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_LogarithmicFunctionFeatures = Core.Name "hydra.cypher.features.LogarithmicFunctionFeatures"
+
+_LogarithmicFunctionFeatures_e = Core.Name "e"
+
+_LogarithmicFunctionFeatures_exp = Core.Name "exp"
+
+_LogarithmicFunctionFeatures_log = Core.Name "log"
+
+_LogarithmicFunctionFeatures_log10 = Core.Name "log10"
+
+_LogarithmicFunctionFeatures_sqrt = Core.Name "sqrt"
+
+-- | Logical operations
+data LogicalFeatures =
+  LogicalFeatures {
+    -- | The AND operator
+    logicalFeaturesAnd :: Bool,
+    -- | The NOT operator
+    logicalFeaturesNot :: Bool,
+    -- | The OR operator
+    logicalFeaturesOr :: Bool,
+    -- | The XOR operator
+    logicalFeaturesXor :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_LogicalFeatures = Core.Name "hydra.cypher.features.LogicalFeatures"
+
+_LogicalFeatures_and = Core.Name "and"
+
+_LogicalFeatures_not = Core.Name "not"
+
+_LogicalFeatures_or = Core.Name "or"
+
+_LogicalFeatures_xor = Core.Name "xor"
+
+-- | Match queries
+data MatchFeatures =
+  MatchFeatures {
+    -- | The basic (non-optional) MATCH clause
+    matchFeaturesMatch :: Bool,
+    -- | OPTIONAL MATCH
+    matchFeaturesOptionalMatch :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_MatchFeatures = Core.Name "hydra.cypher.features.MatchFeatures"
+
+_MatchFeatures_match = Core.Name "match"
+
+_MatchFeatures_optionalMatch = Core.Name "optionalMatch"
+
+-- | Merge operations
+data MergeFeatures =
+  MergeFeatures {
+    -- | The basic MERGE clause
+    mergeFeaturesMerge :: Bool,
+    -- | MERGE with the ON CREATE action
+    mergeFeaturesMergeOnCreate :: Bool,
+    -- | MERGE with the ON MATCH action
+    mergeFeaturesMergeOnMatch :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_MergeFeatures = Core.Name "hydra.cypher.features.MergeFeatures"
+
+_MergeFeatures_merge = Core.Name "merge"
+
+_MergeFeatures_mergeOnCreate = Core.Name "mergeOnCreate"
+
+_MergeFeatures_mergeOnMatch = Core.Name "mergeOnMatch"
+
+-- | Node patterns
+data NodePatternFeatures =
+  NodePatternFeatures {
+    -- | Specifying multiple labels in a node pattern
+    nodePatternFeaturesMultipleLabels :: Bool,
+    -- | Specifying a parameter as part of a node pattern
+    nodePatternFeaturesParameter :: Bool,
+    -- | Specifying a key/value map of properties in a node pattern
+    nodePatternFeaturesPropertyMap :: Bool,
+    -- | Binding a variable to a node in a node pattern (note: included by most if not all implementations).
+    nodePatternFeaturesVariableNode :: Bool,
+    -- | Omitting labels from a node pattern
+    nodePatternFeaturesWildcardLabel :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_NodePatternFeatures = Core.Name "hydra.cypher.features.NodePatternFeatures"
+
+_NodePatternFeatures_multipleLabels = Core.Name "multipleLabels"
+
+_NodePatternFeatures_parameter = Core.Name "parameter"
+
+_NodePatternFeatures_propertyMap = Core.Name "propertyMap"
+
+_NodePatternFeatures_variableNode = Core.Name "variableNode"
+
+_NodePatternFeatures_wildcardLabel = Core.Name "wildcardLabel"
+
+-- | IS NULL / IS NOT NULL checks
+data NullFeatures =
+  NullFeatures {
+    -- | The IS NULL operator
+    nullFeaturesIsNull :: Bool,
+    -- | The IS NOT NULL operator
+    nullFeaturesIsNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_NullFeatures = Core.Name "hydra.cypher.features.NullFeatures"
+
+_NullFeatures_isNull = Core.Name "isNull"
+
+_NullFeatures_isNotNull = Core.Name "isNotNull"
+
+-- | Numeric functions
+data NumericFunctionFeatures =
+  NumericFunctionFeatures {
+    -- | The abs() function. Returns the absolute value of a FLOAT.; Returns the absolute value of an INTEGER.
+    numericFunctionFeaturesAbs :: Bool,
+    -- | The ceil() function. Returns the smallest FLOAT that is greater than or equal to a number and equal to an INTEGER.
+    numericFunctionFeaturesCeil :: Bool,
+    -- | The floor() function. Returns the largest FLOAT that is less than or equal to a number and equal to an INTEGER.
+    numericFunctionFeaturesFloor :: Bool,
+    -- | The isNaN() function. Returns true if the floating point number is NaN.; Returns true if the integer number is NaN.
+    numericFunctionFeaturesIsNaN :: Bool,
+    -- | The rand() function. Returns a random FLOAT in the range from 0 (inclusive) to 1 (exclusive).
+    numericFunctionFeaturesRand :: Bool,
+    -- | The round() function. Returns the value of a number rounded to the nearest INTEGER.; Returns the value of a number rounded to the specified precision using rounding mode HALF_UP.; Returns the value of a number rounded to the specified precision with the specified rounding mode.
+    numericFunctionFeaturesRound :: Bool,
+    -- | The sign() function. Returns the signum of a FLOAT: 0 if the number is 0, -1 for any negative number, and 1 for any positive number.; Returns the signum of an INTEGER: 0 if the number is 0, -1 for any negative number, and 1 for any positive number.
+    numericFunctionFeaturesSign :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_NumericFunctionFeatures = Core.Name "hydra.cypher.features.NumericFunctionFeatures"
+
+_NumericFunctionFeatures_abs = Core.Name "abs"
+
+_NumericFunctionFeatures_ceil = Core.Name "ceil"
+
+_NumericFunctionFeatures_floor = Core.Name "floor"
+
+_NumericFunctionFeatures_isNaN = Core.Name "isNaN"
+
+_NumericFunctionFeatures_rand = Core.Name "rand"
+
+_NumericFunctionFeatures_round = Core.Name "round"
+
+_NumericFunctionFeatures_sign = Core.Name "sign"
+
+-- | Path functions only found in OpenCypher
+data PathFeatures =
+  PathFeatures {
+    -- | The shortestPath() function
+    pathFeaturesShortestPath :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_PathFeatures = Core.Name "hydra.cypher.features.PathFeatures"
+
+_PathFeatures_shortestPath = Core.Name "shortestPath"
+
+-- | Predicate functions
+data PredicateFunctionFeatures =
+  PredicateFunctionFeatures {
+    -- | The all() function. Returns true if the predicate holds for all elements in the given LIST<ANY>.
+    predicateFunctionFeaturesAll :: Bool,
+    -- | The any() function. Returns true if the predicate holds for at least one element in the given LIST<ANY>.
+    predicateFunctionFeaturesAny :: Bool,
+    -- | The exists() function. Returns true if a match for the pattern exists in the graph.
+    predicateFunctionFeaturesExists :: Bool,
+    -- | The isEmpty() function. Checks whether a LIST<ANY> is empty.; Checks whether a MAP is empty.; Checks whether a STRING is empty.
+    predicateFunctionFeaturesIsEmpty :: Bool,
+    -- | The none() function. Returns true if the predicate holds for no element in the given LIST<ANY>.
+    predicateFunctionFeaturesNone :: Bool,
+    -- | The single() function. Returns true if the predicate holds for exactly one of the elements in the given LIST<ANY>.
+    predicateFunctionFeaturesSingle :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_PredicateFunctionFeatures = Core.Name "hydra.cypher.features.PredicateFunctionFeatures"
+
+_PredicateFunctionFeatures_all = Core.Name "all"
+
+_PredicateFunctionFeatures_any = Core.Name "any"
+
+_PredicateFunctionFeatures_exists = Core.Name "exists"
+
+_PredicateFunctionFeatures_isEmpty = Core.Name "isEmpty"
+
+_PredicateFunctionFeatures_none = Core.Name "none"
+
+_PredicateFunctionFeatures_single = Core.Name "single"
+
+-- | Procedure calls
+data ProcedureCallFeatures =
+  ProcedureCallFeatures {
+    -- | CALL within a query
+    procedureCallFeaturesInQueryCall :: Bool,
+    -- | Standalone / top-level CALL
+    procedureCallFeaturesStandaloneCall :: Bool,
+    -- | The YIELD clause in CALL
+    procedureCallFeaturesYield :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ProcedureCallFeatures = Core.Name "hydra.cypher.features.ProcedureCallFeatures"
+
+_ProcedureCallFeatures_inQueryCall = Core.Name "inQueryCall"
+
+_ProcedureCallFeatures_standaloneCall = Core.Name "standaloneCall"
+
+_ProcedureCallFeatures_yield = Core.Name "yield"
+
+-- | Projections
+data ProjectionFeatures =
+  ProjectionFeatures {
+    -- | The LIMIT clause
+    projectionFeaturesLimit :: Bool,
+    -- | The ORDER BY clause
+    projectionFeaturesOrderBy :: Bool,
+    -- | The DISTINCT keyword
+    projectionFeaturesProjectDistinct :: Bool,
+    -- | The * projection
+    projectionFeaturesProjectAll :: Bool,
+    -- | The AS keyword
+    projectionFeaturesProjectAs :: Bool,
+    -- | The SKIP clause
+    projectionFeaturesSkip :: Bool,
+    -- | The ASC/ASCENDING and DESC/DESCENDING keywords
+    projectionFeaturesSortOrder :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ProjectionFeatures = Core.Name "hydra.cypher.features.ProjectionFeatures"
+
+_ProjectionFeatures_limit = Core.Name "limit"
+
+_ProjectionFeatures_orderBy = Core.Name "orderBy"
+
+_ProjectionFeatures_projectDistinct = Core.Name "projectDistinct"
+
+_ProjectionFeatures_projectAll = Core.Name "projectAll"
+
+_ProjectionFeatures_projectAs = Core.Name "projectAs"
+
+_ProjectionFeatures_skip = Core.Name "skip"
+
+_ProjectionFeatures_sortOrder = Core.Name "sortOrder"
+
+-- | Quantifier expressions
+data QuantifierFeatures =
+  QuantifierFeatures {
+    -- | The ALL quantifier
+    quantifierFeaturesAll :: Bool,
+    -- | The ANY quantifier
+    quantifierFeaturesAny :: Bool,
+    -- | The NONE quantifier
+    quantifierFeaturesNone :: Bool,
+    -- | The SINGLE quantifier
+    quantifierFeaturesSingle :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_QuantifierFeatures = Core.Name "hydra.cypher.features.QuantifierFeatures"
+
+_QuantifierFeatures_all = Core.Name "all"
+
+_QuantifierFeatures_any = Core.Name "any"
+
+_QuantifierFeatures_none = Core.Name "none"
+
+_QuantifierFeatures_single = Core.Name "single"
+
+-- | Range literals within relationship patterns
+data RangeLiteralFeatures =
+  RangeLiteralFeatures {
+    -- | Range literals with both lower and upper bounds
+    rangeLiteralFeaturesBounds :: Bool,
+    -- | Range literals providing an exact number of repetitions
+    rangeLiteralFeaturesExactRange :: Bool,
+    -- | Range literals with a lower bound (only)
+    rangeLiteralFeaturesLowerBound :: Bool,
+    -- | The * range literal
+    rangeLiteralFeaturesStarRange :: Bool,
+    -- | Range literals with an upper bound (only)
+    rangeLiteralFeaturesUpperBound :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_RangeLiteralFeatures = Core.Name "hydra.cypher.features.RangeLiteralFeatures"
+
+_RangeLiteralFeatures_bounds = Core.Name "bounds"
+
+_RangeLiteralFeatures_exactRange = Core.Name "exactRange"
+
+_RangeLiteralFeatures_lowerBound = Core.Name "lowerBound"
+
+_RangeLiteralFeatures_starRange = Core.Name "starRange"
+
+_RangeLiteralFeatures_upperBound = Core.Name "upperBound"
+
+-- | Specific syntax related to reading data from the graph.
+data ReadingFeatures =
+  ReadingFeatures {
+    -- | The UNION operator
+    readingFeaturesUnion :: Bool,
+    -- | The UNION ALL operator
+    readingFeaturesUnionAll :: Bool,
+    -- | The UNWIND clause
+    readingFeaturesUnwind :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ReadingFeatures = Core.Name "hydra.cypher.features.ReadingFeatures"
+
+_ReadingFeatures_union = Core.Name "union"
+
+_ReadingFeatures_unionAll = Core.Name "unionAll"
+
+_ReadingFeatures_unwind = Core.Name "unwind"
+
+-- | Relationship directions / arrow patterns
+data RelationshipDirectionFeatures =
+  RelationshipDirectionFeatures {
+    -- | The two-headed arrow (<-[]->) relationship direction
+    relationshipDirectionFeaturesBoth :: Bool,
+    -- | The left arrow (<-[]-) relationship direction
+    relationshipDirectionFeaturesLeft :: Bool,
+    -- | The headless arrow (-[]-) relationship direction
+    relationshipDirectionFeaturesNeither :: Bool,
+    -- | The right arrow (-[]->) relationship direction
+    relationshipDirectionFeaturesRight :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationshipDirectionFeatures = Core.Name "hydra.cypher.features.RelationshipDirectionFeatures"
+
+_RelationshipDirectionFeatures_both = Core.Name "both"
+
+_RelationshipDirectionFeatures_left = Core.Name "left"
+
+_RelationshipDirectionFeatures_neither = Core.Name "neither"
+
+_RelationshipDirectionFeatures_right = Core.Name "right"
+
+-- | Relationship patterns
+data RelationshipPatternFeatures =
+  RelationshipPatternFeatures {
+    -- | Specifying a disjunction of multiple types in a relationship pattern
+    relationshipPatternFeaturesMultipleTypes :: Bool,
+    -- | Binding a variable to a relationship in a relationship pattern (note: included by most if not all implementations).
+    relationshipPatternFeaturesVariableRelationship :: Bool,
+    -- | Omitting types from a relationship pattern
+    relationshipPatternFeaturesWildcardType :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationshipPatternFeatures = Core.Name "hydra.cypher.features.RelationshipPatternFeatures"
+
+_RelationshipPatternFeatures_multipleTypes = Core.Name "multipleTypes"
+
+_RelationshipPatternFeatures_variableRelationship = Core.Name "variableRelationship"
+
+_RelationshipPatternFeatures_wildcardType = Core.Name "wildcardType"
+
+-- | REMOVE operations
+data RemoveFeatures =
+  RemoveFeatures {
+    -- | REMOVE Variable:NodeLabels
+    removeFeaturesByLabel :: Bool,
+    -- | REMOVE PropertyExpression
+    removeFeaturesByProperty :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_RemoveFeatures = Core.Name "hydra.cypher.features.RemoveFeatures"
+
+_RemoveFeatures_byLabel = Core.Name "byLabel"
+
+_RemoveFeatures_byProperty = Core.Name "byProperty"
+
+-- | Scalar functions
+data ScalarFunctionFeatures =
+  ScalarFunctionFeatures {
+    -- | The char_length() function. Returns the number of Unicode characters in a STRING.
+    scalarFunctionFeaturesChar_length :: Bool,
+    -- | The character_length() function. Returns the number of Unicode characters in a STRING.
+    scalarFunctionFeaturesCharacter_length :: Bool,
+    -- | The coalesce() function. Returns the first non-null value in a list of expressions.
+    scalarFunctionFeaturesCoalesce :: Bool,
+    -- | The elementId() function. Returns a node identifier, unique within a specific transaction and DBMS.; Returns a relationship identifier, unique within a specific transaction and DBMS.
+    scalarFunctionFeaturesElementId :: Bool,
+    -- | The endNode() function. Returns a relationship identifier, unique within a specific transaction and DBMS.
+    scalarFunctionFeaturesEndNode :: Bool,
+    -- | The head() function. Returns the first element in a LIST<ANY>.
+    scalarFunctionFeaturesHead :: Bool,
+    -- | The id() function. [Deprecated] Returns the id of a NODE. Replaced by elementId().; [Deprecated] Returns the id of a RELATIONSHIP. Replaced by elementId().
+    scalarFunctionFeaturesId :: Bool,
+    -- | The last() function. Returns the last element in a LIST<ANY>.
+    scalarFunctionFeaturesLast :: Bool,
+    -- | The length() function. Returns the length of a PATH.
+    scalarFunctionFeaturesLength :: Bool,
+    -- | The nullIf() function. Returns null if the two given parameters are equivalent, otherwise returns the value of the first parameter.
+    scalarFunctionFeaturesNullIf :: Bool,
+    -- | The properties() function. Returns a MAP containing all the properties of a MAP.; Returns a MAP containing all the properties of a NODE.; Returns a MAP containing all the properties of a RELATIONSHIP.
+    scalarFunctionFeaturesProperties :: Bool,
+    -- | The randomUUID() function. Generates a random UUID.
+    scalarFunctionFeaturesRandomUUID :: Bool,
+    -- | The size() function. Returns the number of items in a LIST<ANY>.; Returns the number of Unicode characters in a STRING.
+    scalarFunctionFeaturesSize :: Bool,
+    -- | The startNode() function. Returns the start NODE of a RELATIONSHIP.
+    scalarFunctionFeaturesStartNode :: Bool,
+    -- | The toBoolean() function. Converts a STRING value to a BOOLEAN value.; Converts a BOOLEAN value to a BOOLEAN value.; Converts an INTEGER value to a BOOLEAN value.
+    scalarFunctionFeaturesToBoolean :: Bool,
+    -- | The toBooleanOrNull() function. Converts a value to a BOOLEAN value, or null if the value cannot be converted.
+    scalarFunctionFeaturesToBooleanOrNull :: Bool,
+    -- | The toFloat() function. Converts an INTEGER value to a FLOAT value.; Converts a STRING value to a FLOAT value.
+    scalarFunctionFeaturesToFloat :: Bool,
+    -- | The toFloatOrNull() function. Converts a value to a FLOAT value, or null if the value cannot be converted.
+    scalarFunctionFeaturesToFloatOrNull :: Bool,
+    -- | The toInteger() function. Converts a FLOAT value to an INTEGER value.; Converts a BOOLEAN value to an INTEGER value.; Converts a STRING value to an INTEGER value.
+    scalarFunctionFeaturesToInteger :: Bool,
+    -- | The toIntegerOrNull() function. Converts a value to an INTEGER value, or null if the value cannot be converted.
+    scalarFunctionFeaturesToIntegerOrNull :: Bool,
+    -- | The type() function. Returns a STRING representation of the RELATIONSHIP type.
+    scalarFunctionFeaturesType :: Bool,
+    -- | The valueType() function. Returns a STRING representation of the most precise value type that the given expression evaluates to.
+    scalarFunctionFeaturesValueType :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ScalarFunctionFeatures = Core.Name "hydra.cypher.features.ScalarFunctionFeatures"
+
+_ScalarFunctionFeatures_char_length = Core.Name "char_length"
+
+_ScalarFunctionFeatures_character_length = Core.Name "character_length"
+
+_ScalarFunctionFeatures_coalesce = Core.Name "coalesce"
+
+_ScalarFunctionFeatures_elementId = Core.Name "elementId"
+
+_ScalarFunctionFeatures_endNode = Core.Name "endNode"
+
+_ScalarFunctionFeatures_head = Core.Name "head"
+
+_ScalarFunctionFeatures_id = Core.Name "id"
+
+_ScalarFunctionFeatures_last = Core.Name "last"
+
+_ScalarFunctionFeatures_length = Core.Name "length"
+
+_ScalarFunctionFeatures_nullIf = Core.Name "nullIf"
+
+_ScalarFunctionFeatures_properties = Core.Name "properties"
+
+_ScalarFunctionFeatures_randomUUID = Core.Name "randomUUID"
+
+_ScalarFunctionFeatures_size = Core.Name "size"
+
+_ScalarFunctionFeatures_startNode = Core.Name "startNode"
+
+_ScalarFunctionFeatures_toBoolean = Core.Name "toBoolean"
+
+_ScalarFunctionFeatures_toBooleanOrNull = Core.Name "toBooleanOrNull"
+
+_ScalarFunctionFeatures_toFloat = Core.Name "toFloat"
+
+_ScalarFunctionFeatures_toFloatOrNull = Core.Name "toFloatOrNull"
+
+_ScalarFunctionFeatures_toInteger = Core.Name "toInteger"
+
+_ScalarFunctionFeatures_toIntegerOrNull = Core.Name "toIntegerOrNull"
+
+_ScalarFunctionFeatures_type = Core.Name "type"
+
+_ScalarFunctionFeatures_valueType = Core.Name "valueType"
+
+-- | Set definitions
+data SetFeatures =
+  SetFeatures {
+    -- | Defining a set using PropertyExpression = Expression
+    setFeaturesPropertyEquals :: Bool,
+    -- | Defining a set using Variable = Expression
+    setFeaturesVariableEquals :: Bool,
+    -- | Defining a set using Variable += Expression
+    setFeaturesVariablePlusEquals :: Bool,
+    -- | Defining a set using Variable:NodeLabels
+    setFeaturesVariableWithNodeLabels :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_SetFeatures = Core.Name "hydra.cypher.features.SetFeatures"
+
+_SetFeatures_propertyEquals = Core.Name "propertyEquals"
+
+_SetFeatures_variableEquals = Core.Name "variableEquals"
+
+_SetFeatures_variablePlusEquals = Core.Name "variablePlusEquals"
+
+_SetFeatures_variableWithNodeLabels = Core.Name "variableWithNodeLabels"
+
+-- | Spatial functions
+data SpatialFunctionFeatures =
+  SpatialFunctionFeatures {
+    -- | The point.distance() function. Returns a FLOAT representing the geodesic distance between any two points in the same CRS.
+    spatialFunctionFeaturesPointDistance :: Bool,
+    -- | The point() function. Returns a 2D point object, given two coordinate values in the Cartesian coordinate system.; Returns a 3D point object, given three coordinate values in the Cartesian coordinate system.; Returns a 2D point object, given two coordinate values in the WGS 84 geographic coordinate system.; Returns a 3D point object, given three coordinate values in the WGS 84 geographic coordinate system.
+    spatialFunctionFeaturesPoint :: Bool,
+    -- | The point.withinBBox() function. Returns true if the provided point is within the bounding box defined by the two provided points, lowerLeft and upperRight.
+    spatialFunctionFeaturesPointWithinBBox :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_SpatialFunctionFeatures = Core.Name "hydra.cypher.features.SpatialFunctionFeatures"
+
+_SpatialFunctionFeatures_pointDistance = Core.Name "pointDistance"
+
+_SpatialFunctionFeatures_point = Core.Name "point"
+
+_SpatialFunctionFeatures_pointWithinBBox = Core.Name "pointWithinBBox"
+
+-- | String functions/keywords only found in OpenCypher
+data StringFeatures =
+  StringFeatures {
+    -- | The contains() function / CONTAINS
+    stringFeaturesContains :: Bool,
+    -- | The endsWith() function / ENDS WITH
+    stringFeaturesEndsWith :: Bool,
+    -- | The in() function / IN
+    stringFeaturesIn :: Bool,
+    -- | The startsWith() function / STARTS WITH
+    stringFeaturesStartsWith :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_StringFeatures = Core.Name "hydra.cypher.features.StringFeatures"
+
+_StringFeatures_contains = Core.Name "contains"
+
+_StringFeatures_endsWith = Core.Name "endsWith"
+
+_StringFeatures_in = Core.Name "in"
+
+_StringFeatures_startsWith = Core.Name "startsWith"
+
+-- | String functions
+data StringFunctionFeatures =
+  StringFunctionFeatures {
+    -- | The btrim() function. Returns the given STRING with leading and trailing whitespace removed.; Returns the given STRING with leading and trailing trimCharacterString characters removed. Introduced in 5.20.
+    stringFunctionFeaturesBtrim :: Bool,
+    -- | The left() function. Returns a STRING containing the specified number (INTEGER) of leftmost characters in the given STRING.
+    stringFunctionFeaturesLeft :: Bool,
+    -- | The lower() function. Returns the given STRING in lowercase. This function is an alias to the toLower() function, and it was introduced as part of Cypher's GQL conformance. Introduced in 5.21.
+    stringFunctionFeaturesLower :: Bool,
+    -- | The ltrim() function. Returns the given STRING with leading whitespace removed.; Returns the given STRING with leading trimCharacterString characters removed. Introduced in 5.20.
+    stringFunctionFeaturesLtrim :: Bool,
+    -- | The normalize() function. Returns the given STRING normalized according to the normalization CypherFunctionForm NFC. Introduced in 5.17.; Returns the given STRING normalized according to the specified normalization CypherFunctionForm. Introduced in 5.17.
+    stringFunctionFeaturesNormalize :: Bool,
+    -- | The replace() function. Returns a STRING in which all occurrences of a specified search STRING in the given STRING have been replaced by another (specified) replacement STRING.
+    stringFunctionFeaturesReplace :: Bool,
+    -- | The reverse() function. Returns a STRING in which the order of all characters in the given STRING have been reversed.
+    stringFunctionFeaturesReverse :: Bool,
+    -- | The right() function. Returns a STRING containing the specified number of rightmost characters in the given STRING.
+    stringFunctionFeaturesRight :: Bool,
+    -- | The rtrim() function. Returns the given STRING with trailing whitespace removed.; Returns the given STRING with trailing trimCharacterString characters removed. Introduced in 5.20.
+    stringFunctionFeaturesRtrim :: Bool,
+    -- | The split() function. Returns a LIST<STRING> resulting from the splitting of the given STRING around matches of the given delimiter.; Returns a LIST<STRING> resulting from the splitting of the given STRING around matches of any of the given delimiters.
+    stringFunctionFeaturesSplit :: Bool,
+    -- | The substring() function. Returns a substring of the given STRING, beginning with a 0-based index start.; Returns a substring of a given length from the given STRING, beginning with a 0-based index start.
+    stringFunctionFeaturesSubstring :: Bool,
+    -- | The toLower() function. Returns the given STRING in lowercase.
+    stringFunctionFeaturesToLower :: Bool,
+    -- | The toString() function. Converts an INTEGER, FLOAT, BOOLEAN, POINT or temporal type (i.e. DATE, ZONED TIME, LOCAL TIME, ZONED DATETIME, LOCAL DATETIME or DURATION) value to a STRING.
+    stringFunctionFeaturesToString :: Bool,
+    -- | The toStringOrNull() function. Converts an INTEGER, FLOAT, BOOLEAN, POINT or temporal type (i.e. DATE, ZONED TIME, LOCAL TIME, ZONED DATETIME, LOCAL DATETIME or DURATION) value to a STRING, or null if the value cannot be converted.
+    stringFunctionFeaturesToStringOrNull :: Bool,
+    -- | The toUpper() function. Returns the given STRING in uppercase.
+    stringFunctionFeaturesToUpper :: Bool,
+    -- | The trim() function. Returns the given STRING with leading and trailing whitespace removed.; Returns the given STRING with the leading and/or trailing trimCharacterString character removed. Introduced in 5.20.
+    stringFunctionFeaturesTrim :: Bool,
+    -- | The upper() function. Returns the given STRING in uppercase. This function is an alias to the toUpper() function, and it was introduced as part of Cypher's GQL conformance. Introduced in 5.21.
+    stringFunctionFeaturesUpper :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_StringFunctionFeatures = Core.Name "hydra.cypher.features.StringFunctionFeatures"
+
+_StringFunctionFeatures_btrim = Core.Name "btrim"
+
+_StringFunctionFeatures_left = Core.Name "left"
+
+_StringFunctionFeatures_lower = Core.Name "lower"
+
+_StringFunctionFeatures_ltrim = Core.Name "ltrim"
+
+_StringFunctionFeatures_normalize = Core.Name "normalize"
+
+_StringFunctionFeatures_replace = Core.Name "replace"
+
+_StringFunctionFeatures_reverse = Core.Name "reverse"
+
+_StringFunctionFeatures_right = Core.Name "right"
+
+_StringFunctionFeatures_rtrim = Core.Name "rtrim"
+
+_StringFunctionFeatures_split = Core.Name "split"
+
+_StringFunctionFeatures_substring = Core.Name "substring"
+
+_StringFunctionFeatures_toLower = Core.Name "toLower"
+
+_StringFunctionFeatures_toString = Core.Name "toString"
+
+_StringFunctionFeatures_toStringOrNull = Core.Name "toStringOrNull"
+
+_StringFunctionFeatures_toUpper = Core.Name "toUpper"
+
+_StringFunctionFeatures_trim = Core.Name "trim"
+
+_StringFunctionFeatures_upper = Core.Name "upper"
+
+-- | Temporal duration functions
+data TemporalDurationFunctionFeatures =
+  TemporalDurationFunctionFeatures {
+    -- | The duration() function. Constructs a DURATION value.
+    temporalDurationFunctionFeaturesDuration :: Bool,
+    -- | The duration.between() function. Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in logical units.
+    temporalDurationFunctionFeaturesDurationBetween :: Bool,
+    -- | The duration.inDays() function. Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in days.
+    temporalDurationFunctionFeaturesDurationInDays :: Bool,
+    -- | The duration.inMonths() function. Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in months.
+    temporalDurationFunctionFeaturesDurationInMonths :: Bool,
+    -- | The duration.inSeconds() function. Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in seconds.
+    temporalDurationFunctionFeaturesDurationInSeconds :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TemporalDurationFunctionFeatures = Core.Name "hydra.cypher.features.TemporalDurationFunctionFeatures"
+
+_TemporalDurationFunctionFeatures_duration = Core.Name "duration"
+
+_TemporalDurationFunctionFeatures_durationBetween = Core.Name "durationBetween"
+
+_TemporalDurationFunctionFeatures_durationInDays = Core.Name "durationInDays"
+
+_TemporalDurationFunctionFeatures_durationInMonths = Core.Name "durationInMonths"
+
+_TemporalDurationFunctionFeatures_durationInSeconds = Core.Name "durationInSeconds"
+
+-- | Temporal instant functions
+data TemporalInstantFunctionFeatures =
+  TemporalInstantFunctionFeatures {
+    -- | The date() function. Creates a DATE instant.
+    temporalInstantFunctionFeaturesDate :: Bool,
+    -- | The date.realtime() function. Returns the current DATE instant using the realtime clock.
+    temporalInstantFunctionFeaturesDateRealtime :: Bool,
+    -- | The date.statement() function. Returns the current DATE instant using the statement clock.
+    temporalInstantFunctionFeaturesDateStatement :: Bool,
+    -- | The date.transaction() function. Returns the current DATE instant using the transaction clock.
+    temporalInstantFunctionFeaturesDateTransaction :: Bool,
+    -- | The date.truncate() function. Truncates the given temporal value to a DATE instant using the specified unit.
+    temporalInstantFunctionFeaturesDateTruncate :: Bool,
+    -- | The datetime() function. Creates a ZONED DATETIME instant.
+    temporalInstantFunctionFeaturesDatetime :: Bool,
+    -- | The datetime.fromepoch() function. Creates a ZONED DATETIME given the seconds and nanoseconds since the start of the epoch.
+    temporalInstantFunctionFeaturesDatetimeFromepoch :: Bool,
+    -- | The datetime.fromepochmillis() function. Creates a ZONED DATETIME given the milliseconds since the start of the epoch.
+    temporalInstantFunctionFeaturesDatetimeFromepochmillis :: Bool,
+    -- | The datetime.realtime() function. Returns the current ZONED DATETIME instant using the realtime clock.
+    temporalInstantFunctionFeaturesDatetimeRealtime :: Bool,
+    -- | The datetime.statement() function. Returns the current ZONED DATETIME instant using the statement clock.
+    temporalInstantFunctionFeaturesDatetimeStatement :: Bool,
+    -- | The datetime.transaction() function. Returns the current ZONED DATETIME instant using the transaction clock.
+    temporalInstantFunctionFeaturesDatetimeTransaction :: Bool,
+    -- | The datetime.truncate() function. Truncates the given temporal value to a ZONED DATETIME instant using the specified unit.
+    temporalInstantFunctionFeaturesDatetimeTruncate :: Bool,
+    -- | The localdatetime() function. Creates a LOCAL DATETIME instant.
+    temporalInstantFunctionFeaturesLocaldatetime :: Bool,
+    -- | The localdatetime.realtime() function. Returns the current LOCAL DATETIME instant using the realtime clock.
+    temporalInstantFunctionFeaturesLocaldatetimeRealtime :: Bool,
+    -- | The localdatetime.statement() function. Returns the current LOCAL DATETIME instant using the statement clock.
+    temporalInstantFunctionFeaturesLocaldatetimeStatement :: Bool,
+    -- | The localdatetime.transaction() function. Returns the current LOCAL DATETIME instant using the transaction clock.
+    temporalInstantFunctionFeaturesLocaldatetimeTransaction :: Bool,
+    -- | The localdatetime.truncate() function. Truncates the given temporal value to a LOCAL DATETIME instant using the specified unit.
+    temporalInstantFunctionFeaturesLocaldatetimeTruncate :: Bool,
+    -- | The localtime() function. Creates a LOCAL TIME instant.
+    temporalInstantFunctionFeaturesLocaltime :: Bool,
+    -- | The localtime.realtime() function. Returns the current LOCAL TIME instant using the realtime clock.
+    temporalInstantFunctionFeaturesLocaltimeRealtime :: Bool,
+    -- | The localtime.statement() function. Returns the current LOCAL TIME instant using the statement clock.
+    temporalInstantFunctionFeaturesLocaltimeStatement :: Bool,
+    -- | The localtime.transaction() function. Returns the current LOCAL TIME instant using the transaction clock.
+    temporalInstantFunctionFeaturesLocaltimeTransaction :: Bool,
+    -- | The localtime.truncate() function. Truncates the given temporal value to a LOCAL TIME instant using the specified unit.
+    temporalInstantFunctionFeaturesLocaltimeTruncate :: Bool,
+    -- | The time() function. Creates a ZONED TIME instant.
+    temporalInstantFunctionFeaturesTime :: Bool,
+    -- | The time.realtime() function. Returns the current ZONED TIME instant using the realtime clock.
+    temporalInstantFunctionFeaturesTimeRealtime :: Bool,
+    -- | The time.statement() function. Returns the current ZONED TIME instant using the statement clock.
+    temporalInstantFunctionFeaturesTimeStatement :: Bool,
+    -- | The time.transaction() function. Returns the current ZONED TIME instant using the transaction clock.
+    temporalInstantFunctionFeaturesTimeTransaction :: Bool,
+    -- | The time.truncate() function. Truncates the given temporal value to a ZONED TIME instant using the specified unit.
+    temporalInstantFunctionFeaturesTimeTruncate :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TemporalInstantFunctionFeatures = Core.Name "hydra.cypher.features.TemporalInstantFunctionFeatures"
+
+_TemporalInstantFunctionFeatures_date = Core.Name "date"
+
+_TemporalInstantFunctionFeatures_dateRealtime = Core.Name "dateRealtime"
+
+_TemporalInstantFunctionFeatures_dateStatement = Core.Name "dateStatement"
+
+_TemporalInstantFunctionFeatures_dateTransaction = Core.Name "dateTransaction"
+
+_TemporalInstantFunctionFeatures_dateTruncate = Core.Name "dateTruncate"
+
+_TemporalInstantFunctionFeatures_datetime = Core.Name "datetime"
+
+_TemporalInstantFunctionFeatures_datetimeFromepoch = Core.Name "datetimeFromepoch"
+
+_TemporalInstantFunctionFeatures_datetimeFromepochmillis = Core.Name "datetimeFromepochmillis"
+
+_TemporalInstantFunctionFeatures_datetimeRealtime = Core.Name "datetimeRealtime"
+
+_TemporalInstantFunctionFeatures_datetimeStatement = Core.Name "datetimeStatement"
+
+_TemporalInstantFunctionFeatures_datetimeTransaction = Core.Name "datetimeTransaction"
+
+_TemporalInstantFunctionFeatures_datetimeTruncate = Core.Name "datetimeTruncate"
+
+_TemporalInstantFunctionFeatures_localdatetime = Core.Name "localdatetime"
+
+_TemporalInstantFunctionFeatures_localdatetimeRealtime = Core.Name "localdatetimeRealtime"
+
+_TemporalInstantFunctionFeatures_localdatetimeStatement = Core.Name "localdatetimeStatement"
+
+_TemporalInstantFunctionFeatures_localdatetimeTransaction = Core.Name "localdatetimeTransaction"
+
+_TemporalInstantFunctionFeatures_localdatetimeTruncate = Core.Name "localdatetimeTruncate"
+
+_TemporalInstantFunctionFeatures_localtime = Core.Name "localtime"
+
+_TemporalInstantFunctionFeatures_localtimeRealtime = Core.Name "localtimeRealtime"
+
+_TemporalInstantFunctionFeatures_localtimeStatement = Core.Name "localtimeStatement"
+
+_TemporalInstantFunctionFeatures_localtimeTransaction = Core.Name "localtimeTransaction"
+
+_TemporalInstantFunctionFeatures_localtimeTruncate = Core.Name "localtimeTruncate"
+
+_TemporalInstantFunctionFeatures_time = Core.Name "time"
+
+_TemporalInstantFunctionFeatures_timeRealtime = Core.Name "timeRealtime"
+
+_TemporalInstantFunctionFeatures_timeStatement = Core.Name "timeStatement"
+
+_TemporalInstantFunctionFeatures_timeTransaction = Core.Name "timeTransaction"
+
+_TemporalInstantFunctionFeatures_timeTruncate = Core.Name "timeTruncate"
+
+-- | Trigonometric functions
+data TrigonometricFunctionFeatures =
+  TrigonometricFunctionFeatures {
+    -- | The acos() function. Returns the arccosine of a FLOAT in radians.
+    trigonometricFunctionFeaturesAcos :: Bool,
+    -- | The asin() function. Returns the arcsine of a FLOAT in radians.
+    trigonometricFunctionFeaturesAsin :: Bool,
+    -- | The atan() function. Returns the arctangent of a FLOAT in radians.
+    trigonometricFunctionFeaturesAtan :: Bool,
+    -- | The atan2() function. Returns the arctangent2 of a set of coordinates in radians.
+    trigonometricFunctionFeaturesAtan2 :: Bool,
+    -- | The cos() function. Returns the cosine of a FLOAT.
+    trigonometricFunctionFeaturesCos :: Bool,
+    -- | The cot() function. Returns the cotangent of a FLOAT.
+    trigonometricFunctionFeaturesCot :: Bool,
+    -- | The degrees() function. Converts radians to degrees.
+    trigonometricFunctionFeaturesDegrees :: Bool,
+    -- | The haversin() function. Returns half the versine of a number.
+    trigonometricFunctionFeaturesHaversin :: Bool,
+    -- | The pi() function. Returns the mathematical constant pi.
+    trigonometricFunctionFeaturesPi :: Bool,
+    -- | The radians() function. Converts degrees to radians.
+    trigonometricFunctionFeaturesRadians :: Bool,
+    -- | The sin() function. Returns the sine of a FLOAT.
+    trigonometricFunctionFeaturesSin :: Bool,
+    -- | The tan() function. Returns the tangent of a FLOAT.
+    trigonometricFunctionFeaturesTan :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TrigonometricFunctionFeatures = Core.Name "hydra.cypher.features.TrigonometricFunctionFeatures"
+
+_TrigonometricFunctionFeatures_acos = Core.Name "acos"
+
+_TrigonometricFunctionFeatures_asin = Core.Name "asin"
+
+_TrigonometricFunctionFeatures_atan = Core.Name "atan"
+
+_TrigonometricFunctionFeatures_atan2 = Core.Name "atan2"
+
+_TrigonometricFunctionFeatures_cos = Core.Name "cos"
+
+_TrigonometricFunctionFeatures_cot = Core.Name "cot"
+
+_TrigonometricFunctionFeatures_degrees = Core.Name "degrees"
+
+_TrigonometricFunctionFeatures_haversin = Core.Name "haversin"
+
+_TrigonometricFunctionFeatures_pi = Core.Name "pi"
+
+_TrigonometricFunctionFeatures_radians = Core.Name "radians"
+
+_TrigonometricFunctionFeatures_sin = Core.Name "sin"
+
+_TrigonometricFunctionFeatures_tan = Core.Name "tan"
+
+-- | Specific syntax related to updating data in the graph
+data UpdatingFeatures =
+  UpdatingFeatures {
+    -- | The CREATE clause
+    updatingFeaturesCreate :: Bool,
+    -- | The SET clause
+    updatingFeaturesSet :: Bool,
+    -- | Multi-part queries using WITH
+    updatingFeaturesWith :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_UpdatingFeatures = Core.Name "hydra.cypher.features.UpdatingFeatures"
+
+_UpdatingFeatures_create = Core.Name "create"
+
+_UpdatingFeatures_set = Core.Name "set"
+
+_UpdatingFeatures_with = Core.Name "with"
+
+-- | Vector functions
+data VectorFunctionFeatures =
+  VectorFunctionFeatures {
+    -- | The vector.similarity.cosine() function. Returns a FLOAT representing the similarity between the argument vectors based on their cosine.
+    vectorFunctionFeaturesVectorSimilarityCosine :: Bool,
+    -- | The vector.similarity.euclidean() function. Returns a FLOAT representing the similarity between the argument vectors based on their Euclidean distance.
+    vectorFunctionFeaturesVectorSimilarityEuclidean :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_VectorFunctionFeatures = Core.Name "hydra.cypher.features.VectorFunctionFeatures"
+
+_VectorFunctionFeatures_vectorSimilarityCosine = Core.Name "vectorSimilarityCosine"
+
+_VectorFunctionFeatures_vectorSimilarityEuclidean = Core.Name "vectorSimilarityEuclidean"
diff --git a/src/main/haskell/Hydra/Cypher/OpenCypher.hs b/src/main/haskell/Hydra/Cypher/OpenCypher.hs
--- a/src/main/haskell/Hydra/Cypher/OpenCypher.hs
+++ b/src/main/haskell/Hydra/Cypher/OpenCypher.hs
@@ -1,874 +1,1418 @@
 -- Note: this is an automatically generated file. Do not edit.
--- | A Cypher model based on the OpenCypher specification (version 23), copyright Neo Technology, available at:
--- |   https://opencypher.org/resources/
-
-module Hydra.Cypher.OpenCypher 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 Query =
-  QueryRegular RegularQuery |
-  QueryStandalone StandaloneCall
-  deriving (Eq, Ord, Read, Show)
-_Query = Core.Name "hydra.cypher.openCypher.Query"
-_Query_regular = Core.Name "regular"
-_Query_standalone = Core.Name "standalone"
-data RegularQuery =
-  RegularQuery {
-    regularQueryHead :: SingleQuery,
-    regularQueryRest :: [Union]}
-  deriving (Eq, Ord, Read, Show)
-_RegularQuery = Core.Name "hydra.cypher.openCypher.RegularQuery"
-_RegularQuery_head = Core.Name "head"
-_RegularQuery_rest = Core.Name "rest"
-data Union =
-  Union {
-    unionAll :: Bool,
-    unionQuery :: SingleQuery}
-  deriving (Eq, Ord, Read, Show)
-_Union = Core.Name "hydra.cypher.openCypher.Union"
-_Union_all = Core.Name "all"
-_Union_query = Core.Name "query"
-data SingleQuery =
-  SingleQuerySinglePart SinglePartQuery |
-  SingleQueryMultiPart MultiPartQuery
-  deriving (Eq, Ord, Read, Show)
-_SingleQuery = Core.Name "hydra.cypher.openCypher.SingleQuery"
-_SingleQuery_singlePart = Core.Name "singlePart"
-_SingleQuery_multiPart = Core.Name "multiPart"
-data SinglePartQuery =
-  SinglePartQuery {
-    singlePartQueryReading :: [ReadingClause],
-    singlePartQueryUpdating :: [UpdatingClause],
-    singlePartQueryReturn :: (Maybe Return)}
-  deriving (Eq, Ord, Read, Show)
-_SinglePartQuery = Core.Name "hydra.cypher.openCypher.SinglePartQuery"
-_SinglePartQuery_reading = Core.Name "reading"
-_SinglePartQuery_updating = Core.Name "updating"
-_SinglePartQuery_return = Core.Name "return"
-data WithClause =
-  WithClause {
-    withClauseReading :: [ReadingClause],
-    withClauseUpdating :: [UpdatingClause],
-    withClauseWith :: With}
-  deriving (Eq, Ord, Read, Show)
-_WithClause = Core.Name "hydra.cypher.openCypher.WithClause"
-_WithClause_reading = Core.Name "reading"
-_WithClause_updating = Core.Name "updating"
-_WithClause_with = Core.Name "with"
-data MultiPartQuery =
-  MultiPartQuery {
-    multiPartQueryWith :: [WithClause],
-    multiPartQueryBody :: SinglePartQuery}
-  deriving (Eq, Ord, Read, Show)
-_MultiPartQuery = Core.Name "hydra.cypher.openCypher.MultiPartQuery"
-_MultiPartQuery_with = Core.Name "with"
-_MultiPartQuery_body = Core.Name "body"
-data UpdatingClause =
-  UpdatingClauseCreate Create |
-  UpdatingClauseMerge Merge |
-  UpdatingClauseDelete Delete |
-  UpdatingClauseSet Set |
-  UpdatingClauseRemove Remove
-  deriving (Eq, Ord, Read, Show)
-_UpdatingClause = Core.Name "hydra.cypher.openCypher.UpdatingClause"
-_UpdatingClause_create = Core.Name "create"
-_UpdatingClause_merge = Core.Name "merge"
-_UpdatingClause_delete = Core.Name "delete"
-_UpdatingClause_set = Core.Name "set"
-_UpdatingClause_remove = Core.Name "remove"
-data ReadingClause =
-  ReadingClauseMatch Match |
-  ReadingClauseUnwind Unwind |
-  ReadingClauseInQueryCall InQueryCall
-  deriving (Eq, Ord, Read, Show)
-_ReadingClause = Core.Name "hydra.cypher.openCypher.ReadingClause"
-_ReadingClause_match = Core.Name "match"
-_ReadingClause_unwind = Core.Name "unwind"
-_ReadingClause_inQueryCall = Core.Name "inQueryCall"
-data Match =
-  Match {
-    matchOptional :: Bool,
-    matchPattern :: Pattern,
-    matchWhere :: (Maybe Where)}
-  deriving (Eq, Ord, Read, Show)
-_Match = Core.Name "hydra.cypher.openCypher.Match"
-_Match_optional = Core.Name "optional"
-_Match_pattern = Core.Name "pattern"
-_Match_where = Core.Name "where"
-data Unwind =
-  Unwind {
-    unwindExpression :: Expression,
-    unwindVariable :: Variable}
-  deriving (Eq, Ord, Read, Show)
-_Unwind = Core.Name "hydra.cypher.openCypher.Unwind"
-_Unwind_expression = Core.Name "expression"
-_Unwind_variable = Core.Name "variable"
-data Merge =
-  Merge {
-    mergePatternPart :: PatternPart,
-    mergeActions :: [MergeAction]}
-  deriving (Eq, Ord, Read, Show)
-_Merge = Core.Name "hydra.cypher.openCypher.Merge"
-_Merge_patternPart = Core.Name "patternPart"
-_Merge_actions = Core.Name "actions"
-data MatchOrCreate =
-  MatchOrCreateMatch |
-  MatchOrCreateCreate
-  deriving (Eq, Ord, Read, Show)
-_MatchOrCreate = Core.Name "hydra.cypher.openCypher.MatchOrCreate"
-_MatchOrCreate_match = Core.Name "match"
-_MatchOrCreate_create = Core.Name "create"
-data MergeAction =
-  MergeAction {
-    mergeActionAction :: MatchOrCreate,
-    mergeActionSet :: Set}
-  deriving (Eq, Ord, Read, Show)
-_MergeAction = Core.Name "hydra.cypher.openCypher.MergeAction"
-_MergeAction_action = Core.Name "action"
-_MergeAction_set = Core.Name "set"
-newtype Create =
-  Create {
-    unCreate :: Pattern}
-  deriving (Eq, Ord, Read, Show)
-_Create = Core.Name "hydra.cypher.openCypher.Create"
-newtype Set =
-  Set {
-    unSet :: [SetItem]}
-  deriving (Eq, Ord, Read, Show)
-_Set = Core.Name "hydra.cypher.openCypher.Set"
-data SetItem =
-  SetItemProperty PropertyEquals |
-  SetItemVariableEqual VariableEquals |
-  SetItemVariablePlusEqual VariablePlusEquals |
-  SetItemVariableLabels VariableAndNodeLabels
-  deriving (Eq, Ord, Read, Show)
-_SetItem = Core.Name "hydra.cypher.openCypher.SetItem"
-_SetItem_property = Core.Name "property"
-_SetItem_variableEqual = Core.Name "variableEqual"
-_SetItem_variablePlusEqual = Core.Name "variablePlusEqual"
-_SetItem_variableLabels = Core.Name "variableLabels"
-data PropertyEquals =
-  PropertyEquals {
-    propertyEqualsLhs :: PropertyExpression,
-    propertyEqualsRhs :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_PropertyEquals = Core.Name "hydra.cypher.openCypher.PropertyEquals"
-_PropertyEquals_lhs = Core.Name "lhs"
-_PropertyEquals_rhs = Core.Name "rhs"
-data VariableEquals =
-  VariableEquals {
-    variableEqualsLhs :: Variable,
-    variableEqualsRhs :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_VariableEquals = Core.Name "hydra.cypher.openCypher.VariableEquals"
-_VariableEquals_lhs = Core.Name "lhs"
-_VariableEquals_rhs = Core.Name "rhs"
-data VariablePlusEquals =
-  VariablePlusEquals {
-    variablePlusEqualsLhs :: Variable,
-    variablePlusEqualsRhs :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_VariablePlusEquals = Core.Name "hydra.cypher.openCypher.VariablePlusEquals"
-_VariablePlusEquals_lhs = Core.Name "lhs"
-_VariablePlusEquals_rhs = Core.Name "rhs"
-data VariableAndNodeLabels =
-  VariableAndNodeLabels {
-    variableAndNodeLabelsVariable :: Variable,
-    variableAndNodeLabelsLabels :: NodeLabels}
-  deriving (Eq, Ord, Read, Show)
-_VariableAndNodeLabels = Core.Name "hydra.cypher.openCypher.VariableAndNodeLabels"
-_VariableAndNodeLabels_variable = Core.Name "variable"
-_VariableAndNodeLabels_labels = Core.Name "labels"
-data Delete =
-  Delete {
-    deleteDetach :: Bool,
-    deleteExpressions :: [Expression]}
-  deriving (Eq, Ord, Read, Show)
-_Delete = Core.Name "hydra.cypher.openCypher.Delete"
-_Delete_detach = Core.Name "detach"
-_Delete_expressions = Core.Name "expressions"
-newtype Remove =
-  Remove {
-    unRemove :: [RemoveItem]}
-  deriving (Eq, Ord, Read, Show)
-_Remove = Core.Name "hydra.cypher.openCypher.Remove"
-data RemoveItem =
-  RemoveItemVariableLabels VariableAndNodeLabels |
-  RemoveItemProperty PropertyExpression
-  deriving (Eq, Ord, Read, Show)
-_RemoveItem = Core.Name "hydra.cypher.openCypher.RemoveItem"
-_RemoveItem_variableLabels = Core.Name "variableLabels"
-_RemoveItem_property = Core.Name "property"
-data InQueryCall =
-  InQueryCall {
-    inQueryCallCall :: ExplicitProcedureInvocation,
-    inQueryCallYieldItems :: (Maybe YieldItems)}
-  deriving (Eq, Ord, Read, Show)
-_InQueryCall = Core.Name "hydra.cypher.openCypher.InQueryCall"
-_InQueryCall_call = Core.Name "call"
-_InQueryCall_yieldItems = Core.Name "yieldItems"
-data ProcedureInvocation =
-  ProcedureInvocationExplicit ExplicitProcedureInvocation |
-  ProcedureInvocationImplicit ImplicitProcedureInvocation
-  deriving (Eq, Ord, Read, Show)
-_ProcedureInvocation = Core.Name "hydra.cypher.openCypher.ProcedureInvocation"
-_ProcedureInvocation_explicit = Core.Name "explicit"
-_ProcedureInvocation_implicit = Core.Name "implicit"
-data StarOrYieldItems =
-  StarOrYieldItemsStar |
-  StarOrYieldItemsItems YieldItems
-  deriving (Eq, Ord, Read, Show)
-_StarOrYieldItems = Core.Name "hydra.cypher.openCypher.StarOrYieldItems"
-_StarOrYieldItems_star = Core.Name "star"
-_StarOrYieldItems_items = Core.Name "items"
-data StandaloneCall =
-  StandaloneCall {
-    standaloneCallCall :: ProcedureInvocation,
-    standaloneCallYieldItems :: (Maybe StarOrYieldItems)}
-  deriving (Eq, Ord, Read, Show)
-_StandaloneCall = Core.Name "hydra.cypher.openCypher.StandaloneCall"
-_StandaloneCall_call = Core.Name "call"
-_StandaloneCall_yieldItems = Core.Name "yieldItems"
-data YieldItems =
-  YieldItems {
-    yieldItemsItems :: [YieldItem],
-    yieldItemsWhere :: (Maybe Where)}
-  deriving (Eq, Ord, Read, Show)
-_YieldItems = Core.Name "hydra.cypher.openCypher.YieldItems"
-_YieldItems_items = Core.Name "items"
-_YieldItems_where = Core.Name "where"
-data YieldItem =
-  YieldItem {
-    yieldItemField :: (Maybe ProcedureResultField),
-    yieldItemVariable :: Variable}
-  deriving (Eq, Ord, Read, Show)
-_YieldItem = Core.Name "hydra.cypher.openCypher.YieldItem"
-_YieldItem_field = Core.Name "field"
-_YieldItem_variable = Core.Name "variable"
-data With =
-  With {
-    withProjection :: ProjectionBody,
-    withWhere :: (Maybe Where)}
-  deriving (Eq, Ord, Read, Show)
-_With = Core.Name "hydra.cypher.openCypher.With"
-_With_projection = Core.Name "projection"
-_With_where = Core.Name "where"
-newtype Return =
-  Return {
-    unReturn :: ProjectionBody}
-  deriving (Eq, Ord, Read, Show)
-_Return = Core.Name "hydra.cypher.openCypher.Return"
-data ProjectionBody =
-  ProjectionBody {
-    projectionBodyDistinct :: Bool,
-    projectionBodyProjectionItems :: ProjectionItems,
-    projectionBodyOrder :: (Maybe Order),
-    projectionBodySkip :: (Maybe Skip),
-    projectionBodyLimit :: (Maybe Limit)}
-  deriving (Eq, Ord, Read, Show)
-_ProjectionBody = Core.Name "hydra.cypher.openCypher.ProjectionBody"
-_ProjectionBody_distinct = Core.Name "distinct"
-_ProjectionBody_projectionItems = Core.Name "projectionItems"
-_ProjectionBody_order = Core.Name "order"
-_ProjectionBody_skip = Core.Name "skip"
-_ProjectionBody_limit = Core.Name "limit"
-data ProjectionItems =
-  ProjectionItems {
-    projectionItemsStar :: Bool,
-    projectionItemsExplicit :: [ProjectionItem]}
-  deriving (Eq, Ord, Read, Show)
-_ProjectionItems = Core.Name "hydra.cypher.openCypher.ProjectionItems"
-_ProjectionItems_star = Core.Name "star"
-_ProjectionItems_explicit = Core.Name "explicit"
-data ProjectionItem =
-  ProjectionItem {
-    projectionItemExpression :: Expression,
-    projectionItemVariable :: (Maybe Variable)}
-  deriving (Eq, Ord, Read, Show)
-_ProjectionItem = Core.Name "hydra.cypher.openCypher.ProjectionItem"
-_ProjectionItem_expression = Core.Name "expression"
-_ProjectionItem_variable = Core.Name "variable"
-newtype Order =
-  Order {
-    unOrder :: [SortItem]}
-  deriving (Eq, Ord, Read, Show)
-_Order = Core.Name "hydra.cypher.openCypher.Order"
-newtype Skip =
-  Skip {
-    unSkip :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_Skip = Core.Name "hydra.cypher.openCypher.Skip"
-newtype Limit =
-  Limit {
-    unLimit :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_Limit = Core.Name "hydra.cypher.openCypher.Limit"
-data SortOrder =
-  SortOrderAscending |
-  SortOrderDescending
-  deriving (Eq, Ord, Read, Show)
-_SortOrder = Core.Name "hydra.cypher.openCypher.SortOrder"
-_SortOrder_ascending = Core.Name "ascending"
-_SortOrder_descending = Core.Name "descending"
-data SortItem =
-  SortItem {
-    sortItemExpression :: Expression,
-    sortItemOrder :: (Maybe SortOrder)}
-  deriving (Eq, Ord, Read, Show)
-_SortItem = Core.Name "hydra.cypher.openCypher.SortItem"
-_SortItem_expression = Core.Name "expression"
-_SortItem_order = Core.Name "order"
-newtype Where =
-  Where {
-    unWhere :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_Where = Core.Name "hydra.cypher.openCypher.Where"
-newtype Pattern =
-  Pattern {
-    unPattern :: [PatternPart]}
-  deriving (Eq, Ord, Read, Show)
-_Pattern = Core.Name "hydra.cypher.openCypher.Pattern"
-data PatternPart =
-  PatternPart {
-    patternPartVariable :: (Maybe Variable),
-    patternPartPattern :: AnonymousPatternPart}
-  deriving (Eq, Ord, Read, Show)
-_PatternPart = Core.Name "hydra.cypher.openCypher.PatternPart"
-_PatternPart_variable = Core.Name "variable"
-_PatternPart_pattern = Core.Name "pattern"
-newtype AnonymousPatternPart =
-  AnonymousPatternPart {
-    unAnonymousPatternPart :: PatternElement}
-  deriving (Eq, Ord, Read, Show)
-_AnonymousPatternPart = Core.Name "hydra.cypher.openCypher.AnonymousPatternPart"
-data NodePatternChain =
-  NodePatternChain {
-    nodePatternChainNodePattern :: NodePattern,
-    nodePatternChainChain :: [PatternElementChain]}
-  deriving (Eq, Ord, Read, Show)
-_NodePatternChain = Core.Name "hydra.cypher.openCypher.NodePatternChain"
-_NodePatternChain_nodePattern = Core.Name "nodePattern"
-_NodePatternChain_chain = Core.Name "chain"
-data PatternElement =
-  PatternElementChained NodePatternChain |
-  PatternElementParenthesized PatternElement
-  deriving (Eq, Ord, Read, Show)
-_PatternElement = Core.Name "hydra.cypher.openCypher.PatternElement"
-_PatternElement_chained = Core.Name "chained"
-_PatternElement_parenthesized = Core.Name "parenthesized"
-data RelationshipsPattern =
-  RelationshipsPattern {
-    relationshipsPatternNodePattern :: NodePattern,
-    relationshipsPatternChain :: [PatternElementChain]}
-  deriving (Eq, Ord, Read, Show)
-_RelationshipsPattern = Core.Name "hydra.cypher.openCypher.RelationshipsPattern"
-_RelationshipsPattern_nodePattern = Core.Name "nodePattern"
-_RelationshipsPattern_chain = Core.Name "chain"
-data NodePattern =
-  NodePattern {
-    nodePatternVariable :: (Maybe Variable),
-    nodePatternLabels :: (Maybe NodeLabels),
-    nodePatternProperties :: (Maybe Properties)}
-  deriving (Eq, Ord, Read, Show)
-_NodePattern = Core.Name "hydra.cypher.openCypher.NodePattern"
-_NodePattern_variable = Core.Name "variable"
-_NodePattern_labels = Core.Name "labels"
-_NodePattern_properties = Core.Name "properties"
-data PatternElementChain =
-  PatternElementChain {
-    patternElementChainRelationship :: RelationshipPattern,
-    patternElementChainNode :: NodePattern}
-  deriving (Eq, Ord, Read, Show)
-_PatternElementChain = Core.Name "hydra.cypher.openCypher.PatternElementChain"
-_PatternElementChain_relationship = Core.Name "relationship"
-_PatternElementChain_node = Core.Name "node"
-data RelationshipPattern =
-  RelationshipPattern {
-    relationshipPatternLeftArrow :: Bool,
-    relationshipPatternDetail :: (Maybe RelationshipDetail),
-    relationshipPatternRightArrow :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_RelationshipPattern = Core.Name "hydra.cypher.openCypher.RelationshipPattern"
-_RelationshipPattern_leftArrow = Core.Name "leftArrow"
-_RelationshipPattern_detail = Core.Name "detail"
-_RelationshipPattern_rightArrow = Core.Name "rightArrow"
-data RelationshipDetail =
-  RelationshipDetail {
-    relationshipDetailVariable :: (Maybe Variable),
-    relationshipDetailTypes :: (Maybe RelationshipTypes),
-    relationshipDetailRange :: (Maybe RangeLiteral),
-    relationshipDetailProperties :: (Maybe Properties)}
-  deriving (Eq, Ord, Read, Show)
-_RelationshipDetail = Core.Name "hydra.cypher.openCypher.RelationshipDetail"
-_RelationshipDetail_variable = Core.Name "variable"
-_RelationshipDetail_types = Core.Name "types"
-_RelationshipDetail_range = Core.Name "range"
-_RelationshipDetail_properties = Core.Name "properties"
-data Properties =
-  PropertiesMap MapLiteral |
-  PropertiesParameter Parameter
-  deriving (Eq, Ord, Read, Show)
-_Properties = Core.Name "hydra.cypher.openCypher.Properties"
-_Properties_map = Core.Name "map"
-_Properties_parameter = Core.Name "parameter"
-newtype RelationshipTypes =
-  RelationshipTypes {
-    unRelationshipTypes :: [RelTypeName]}
-  deriving (Eq, Ord, Read, Show)
-_RelationshipTypes = Core.Name "hydra.cypher.openCypher.RelationshipTypes"
-newtype NodeLabels =
-  NodeLabels {
-    unNodeLabels :: [NodeLabel]}
-  deriving (Eq, Ord, Read, Show)
-_NodeLabels = Core.Name "hydra.cypher.openCypher.NodeLabels"
-newtype NodeLabel =
-  NodeLabel {
-    unNodeLabel :: String}
-  deriving (Eq, Ord, Read, Show)
-_NodeLabel = Core.Name "hydra.cypher.openCypher.NodeLabel"
-data RangeLiteral =
-  RangeLiteral {
-    rangeLiteralStart :: (Maybe Integer),
-    rangeLiteralEnd :: (Maybe Integer)}
-  deriving (Eq, Ord, Read, Show)
-_RangeLiteral = Core.Name "hydra.cypher.openCypher.RangeLiteral"
-_RangeLiteral_start = Core.Name "start"
-_RangeLiteral_end = Core.Name "end"
-newtype RelTypeName =
-  RelTypeName {
-    unRelTypeName :: String}
-  deriving (Eq, Ord, Read, Show)
-_RelTypeName = Core.Name "hydra.cypher.openCypher.RelTypeName"
-data PropertyExpression =
-  PropertyExpression {
-    propertyExpressionAtom :: Atom,
-    propertyExpressionLookups :: [PropertyLookup]}
-  deriving (Eq, Ord, Read, Show)
-_PropertyExpression = Core.Name "hydra.cypher.openCypher.PropertyExpression"
-_PropertyExpression_atom = Core.Name "atom"
-_PropertyExpression_lookups = Core.Name "lookups"
-newtype Expression =
-  Expression {
-    unExpression :: OrExpression}
-  deriving (Eq, Ord, Read, Show)
-_Expression = Core.Name "hydra.cypher.openCypher.Expression"
-newtype OrExpression =
-  OrExpression {
-    unOrExpression :: [XorExpression]}
-  deriving (Eq, Ord, Read, Show)
-_OrExpression = Core.Name "hydra.cypher.openCypher.OrExpression"
-newtype XorExpression =
-  XorExpression {
-    unXorExpression :: [AndExpression]}
-  deriving (Eq, Ord, Read, Show)
-_XorExpression = Core.Name "hydra.cypher.openCypher.XorExpression"
-newtype AndExpression =
-  AndExpression {
-    unAndExpression :: [NotExpression]}
-  deriving (Eq, Ord, Read, Show)
-_AndExpression = Core.Name "hydra.cypher.openCypher.AndExpression"
-data NotExpression =
-  NotExpression {
-    notExpressionNot :: Bool,
-    notExpressionExpression :: ComparisonExpression}
-  deriving (Eq, Ord, Read, Show)
-_NotExpression = Core.Name "hydra.cypher.openCypher.NotExpression"
-_NotExpression_not = Core.Name "not"
-_NotExpression_expression = Core.Name "expression"
-data ComparisonExpression =
-  ComparisonExpression {
-    comparisonExpressionLeft :: StringListNullPredicateExpression,
-    comparisonExpressionRight :: [PartialComparisonExpression]}
-  deriving (Eq, Ord, Read, Show)
-_ComparisonExpression = Core.Name "hydra.cypher.openCypher.ComparisonExpression"
-_ComparisonExpression_left = Core.Name "left"
-_ComparisonExpression_right = Core.Name "right"
-data ComparisonOperator =
-  ComparisonOperatorEq |
-  ComparisonOperatorNeq |
-  ComparisonOperatorLt |
-  ComparisonOperatorGt |
-  ComparisonOperatorLte |
-  ComparisonOperatorGte
-  deriving (Eq, Ord, Read, Show)
-_ComparisonOperator = Core.Name "hydra.cypher.openCypher.ComparisonOperator"
-_ComparisonOperator_eq = Core.Name "eq"
-_ComparisonOperator_neq = Core.Name "neq"
-_ComparisonOperator_lt = Core.Name "lt"
-_ComparisonOperator_gt = Core.Name "gt"
-_ComparisonOperator_lte = Core.Name "lte"
-_ComparisonOperator_gte = Core.Name "gte"
-data PartialComparisonExpression =
-  PartialComparisonExpression {
-    partialComparisonExpressionOperator :: ComparisonOperator,
-    partialComparisonExpressionRight :: StringListNullPredicateExpression}
-  deriving (Eq, Ord, Read, Show)
-_PartialComparisonExpression = Core.Name "hydra.cypher.openCypher.PartialComparisonExpression"
-_PartialComparisonExpression_operator = Core.Name "operator"
-_PartialComparisonExpression_right = Core.Name "right"
-data StringListNullPredicateExpression =
-  StringListNullPredicateExpression {
-    stringListNullPredicateExpressionLeft :: AddOrSubtractExpression,
-    stringListNullPredicateExpressionRight :: [StringListNullPredicateRightHandSide]}
-  deriving (Eq, Ord, Read, Show)
-_StringListNullPredicateExpression = Core.Name "hydra.cypher.openCypher.StringListNullPredicateExpression"
-_StringListNullPredicateExpression_left = Core.Name "left"
-_StringListNullPredicateExpression_right = Core.Name "right"
-data StringListNullPredicateRightHandSide =
-  StringListNullPredicateRightHandSideString StringPredicateExpression |
-  StringListNullPredicateRightHandSideList ListPredicateExpression |
-  StringListNullPredicateRightHandSideNull NullPredicateExpression
-  deriving (Eq, Ord, Read, Show)
-_StringListNullPredicateRightHandSide = Core.Name "hydra.cypher.openCypher.StringListNullPredicateRightHandSide"
-_StringListNullPredicateRightHandSide_string = Core.Name "string"
-_StringListNullPredicateRightHandSide_list = Core.Name "list"
-_StringListNullPredicateRightHandSide_null = Core.Name "null"
-data StringPredicateExpression =
-  StringPredicateExpression {
-    stringPredicateExpressionOperator :: StringPredicateOperator,
-    stringPredicateExpressionExpression :: AddOrSubtractExpression}
-  deriving (Eq, Ord, Read, Show)
-_StringPredicateExpression = Core.Name "hydra.cypher.openCypher.StringPredicateExpression"
-_StringPredicateExpression_operator = Core.Name "operator"
-_StringPredicateExpression_expression = Core.Name "expression"
-data StringPredicateOperator =
-  StringPredicateOperatorStartsWith |
-  StringPredicateOperatorEndsWith |
-  StringPredicateOperatorContains
-  deriving (Eq, Ord, Read, Show)
-_StringPredicateOperator = Core.Name "hydra.cypher.openCypher.StringPredicateOperator"
-_StringPredicateOperator_startsWith = Core.Name "startsWith"
-_StringPredicateOperator_endsWith = Core.Name "endsWith"
-_StringPredicateOperator_contains = Core.Name "contains"
-newtype ListPredicateExpression =
-  ListPredicateExpression {
-    unListPredicateExpression :: AddOrSubtractExpression}
-  deriving (Eq, Ord, Read, Show)
-_ListPredicateExpression = Core.Name "hydra.cypher.openCypher.ListPredicateExpression"
-newtype NullPredicateExpression =
-  NullPredicateExpression {
-    unNullPredicateExpression :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_NullPredicateExpression = Core.Name "hydra.cypher.openCypher.NullPredicateExpression"
-data AddOrSubtractExpression =
-  AddOrSubtractExpression {
-    addOrSubtractExpressionLeft :: MultiplyDivideModuloExpression,
-    addOrSubtractExpressionRight :: [AddOrSubtractRightHandSide]}
-  deriving (Eq, Ord, Read, Show)
-_AddOrSubtractExpression = Core.Name "hydra.cypher.openCypher.AddOrSubtractExpression"
-_AddOrSubtractExpression_left = Core.Name "left"
-_AddOrSubtractExpression_right = Core.Name "right"
-data AddOrSubtractRightHandSide =
-  AddOrSubtractRightHandSide {
-    addOrSubtractRightHandSideOperator :: AddOrSubtractOperator,
-    addOrSubtractRightHandSideExpression :: MultiplyDivideModuloExpression}
-  deriving (Eq, Ord, Read, Show)
-_AddOrSubtractRightHandSide = Core.Name "hydra.cypher.openCypher.AddOrSubtractRightHandSide"
-_AddOrSubtractRightHandSide_operator = Core.Name "operator"
-_AddOrSubtractRightHandSide_expression = Core.Name "expression"
-data AddOrSubtractOperator =
-  AddOrSubtractOperatorAdd |
-  AddOrSubtractOperatorSubtract
-  deriving (Eq, Ord, Read, Show)
-_AddOrSubtractOperator = Core.Name "hydra.cypher.openCypher.AddOrSubtractOperator"
-_AddOrSubtractOperator_add = Core.Name "add"
-_AddOrSubtractOperator_subtract = Core.Name "subtract"
-data MultiplyDivideModuloExpression =
-  MultiplyDivideModuloExpression {
-    multiplyDivideModuloExpressionLeft :: PowerOfExpression,
-    multiplyDivideModuloExpressionRight :: [MultiplyDivideModuloRightHandSide]}
-  deriving (Eq, Ord, Read, Show)
-_MultiplyDivideModuloExpression = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloExpression"
-_MultiplyDivideModuloExpression_left = Core.Name "left"
-_MultiplyDivideModuloExpression_right = Core.Name "right"
-data MultiplyDivideModuloRightHandSide =
-  MultiplyDivideModuloRightHandSide {
-    multiplyDivideModuloRightHandSideOperator :: MultiplyDivideModuloOperator,
-    multiplyDivideModuloRightHandSideExpression :: PowerOfExpression}
-  deriving (Eq, Ord, Read, Show)
-_MultiplyDivideModuloRightHandSide = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloRightHandSide"
-_MultiplyDivideModuloRightHandSide_operator = Core.Name "operator"
-_MultiplyDivideModuloRightHandSide_expression = Core.Name "expression"
-data MultiplyDivideModuloOperator =
-  MultiplyDivideModuloOperatorMultiply |
-  MultiplyDivideModuloOperatorDivide |
-  MultiplyDivideModuloOperatorModulo
-  deriving (Eq, Ord, Read, Show)
-_MultiplyDivideModuloOperator = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloOperator"
-_MultiplyDivideModuloOperator_multiply = Core.Name "multiply"
-_MultiplyDivideModuloOperator_divide = Core.Name "divide"
-_MultiplyDivideModuloOperator_modulo = Core.Name "modulo"
-newtype PowerOfExpression =
-  PowerOfExpression {
-    unPowerOfExpression :: [UnaryAddOrSubtractExpression]}
-  deriving (Eq, Ord, Read, Show)
-_PowerOfExpression = Core.Name "hydra.cypher.openCypher.PowerOfExpression"
-data UnaryAddOrSubtractExpression =
-  UnaryAddOrSubtractExpression {
-    unaryAddOrSubtractExpressionOperator :: (Maybe AddOrSubtractOperator),
-    unaryAddOrSubtractExpressionExpression :: NonArithmeticOperatorExpression}
-  deriving (Eq, Ord, Read, Show)
-_UnaryAddOrSubtractExpression = Core.Name "hydra.cypher.openCypher.UnaryAddOrSubtractExpression"
-_UnaryAddOrSubtractExpression_operator = Core.Name "operator"
-_UnaryAddOrSubtractExpression_expression = Core.Name "expression"
-data ListOperatorExpressionOrPropertyLookup =
-  ListOperatorExpressionOrPropertyLookupList ListOperatorExpression |
-  ListOperatorExpressionOrPropertyLookupProperty PropertyLookup
-  deriving (Eq, Ord, Read, Show)
-_ListOperatorExpressionOrPropertyLookup = Core.Name "hydra.cypher.openCypher.ListOperatorExpressionOrPropertyLookup"
-_ListOperatorExpressionOrPropertyLookup_list = Core.Name "list"
-_ListOperatorExpressionOrPropertyLookup_property = Core.Name "property"
-data NonArithmeticOperatorExpression =
-  NonArithmeticOperatorExpression {
-    nonArithmeticOperatorExpressionAtom :: Atom,
-    nonArithmeticOperatorExpressionListsAndLookups :: [ListOperatorExpressionOrPropertyLookup],
-    nonArithmeticOperatorExpressionLabels :: (Maybe NodeLabels)}
-  deriving (Eq, Ord, Read, Show)
-_NonArithmeticOperatorExpression = Core.Name "hydra.cypher.openCypher.NonArithmeticOperatorExpression"
-_NonArithmeticOperatorExpression_atom = Core.Name "atom"
-_NonArithmeticOperatorExpression_listsAndLookups = Core.Name "listsAndLookups"
-_NonArithmeticOperatorExpression_labels = Core.Name "labels"
-data RangeExpression =
-  RangeExpression {
-    rangeExpressionStart :: (Maybe Expression),
-    rangeExpressionEnd :: (Maybe Expression)}
-  deriving (Eq, Ord, Read, Show)
-_RangeExpression = Core.Name "hydra.cypher.openCypher.RangeExpression"
-_RangeExpression_start = Core.Name "start"
-_RangeExpression_end = Core.Name "end"
-data ListOperatorExpression =
-  ListOperatorExpressionSingle Expression |
-  ListOperatorExpressionRange RangeExpression
-  deriving (Eq, Ord, Read, Show)
-_ListOperatorExpression = Core.Name "hydra.cypher.openCypher.ListOperatorExpression"
-_ListOperatorExpression_single = Core.Name "single"
-_ListOperatorExpression_range = Core.Name "range"
-newtype PropertyLookup =
-  PropertyLookup {
-    unPropertyLookup :: PropertyKeyName}
-  deriving (Eq, Ord, Read, Show)
-_PropertyLookup = Core.Name "hydra.cypher.openCypher.PropertyLookup"
-data Atom =
-  AtomLiteral Literal |
-  AtomParameter Parameter |
-  AtomCase CaseExpression |
-  AtomCountStar |
-  AtomListComprehension ListComprehension |
-  AtomPatternComprehension PatternComprehension |
-  AtomQuantifier Quantifier |
-  AtomPatternPredicate PatternPredicate |
-  AtomParenthesized ParenthesizedExpression |
-  AtomFunctionInvocation FunctionInvocation |
-  AtomExistentialSubquery ExistentialSubquery |
-  AtomVariable Variable
-  deriving (Eq, Ord, Read, Show)
-_Atom = Core.Name "hydra.cypher.openCypher.Atom"
-_Atom_literal = Core.Name "literal"
-_Atom_parameter = Core.Name "parameter"
-_Atom_case = Core.Name "case"
-_Atom_countStar = Core.Name "countStar"
-_Atom_listComprehension = Core.Name "listComprehension"
-_Atom_patternComprehension = Core.Name "patternComprehension"
-_Atom_quantifier = Core.Name "quantifier"
-_Atom_patternPredicate = Core.Name "patternPredicate"
-_Atom_parenthesized = Core.Name "parenthesized"
-_Atom_functionInvocation = Core.Name "functionInvocation"
-_Atom_existentialSubquery = Core.Name "existentialSubquery"
-_Atom_variable = Core.Name "variable"
-data CaseExpression =
-  CaseExpression {
-    caseExpressionExpression :: (Maybe Expression),
-    caseExpressionAlternatives :: [CaseAlternative],
-    caseExpressionElse :: (Maybe Expression)}
-  deriving (Eq, Ord, Read, Show)
-_CaseExpression = Core.Name "hydra.cypher.openCypher.CaseExpression"
-_CaseExpression_expression = Core.Name "expression"
-_CaseExpression_alternatives = Core.Name "alternatives"
-_CaseExpression_else = Core.Name "else"
-data CaseAlternative =
-  CaseAlternative {
-    caseAlternativeCondition :: Expression,
-    caseAlternativeResult :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_CaseAlternative = Core.Name "hydra.cypher.openCypher.CaseAlternative"
-_CaseAlternative_condition = Core.Name "condition"
-_CaseAlternative_result = Core.Name "result"
-data ListComprehension =
-  ListComprehension {
-    listComprehensionLeft :: FilterExpression,
-    listComprehensionRight :: (Maybe Expression)}
-  deriving (Eq, Ord, Read, Show)
-_ListComprehension = Core.Name "hydra.cypher.openCypher.ListComprehension"
-_ListComprehension_left = Core.Name "left"
-_ListComprehension_right = Core.Name "right"
-data PatternComprehension =
-  PatternComprehension {
-    patternComprehensionVariable :: (Maybe Variable),
-    patternComprehensionPattern :: RelationshipsPattern,
-    patternComprehensionWhere :: (Maybe Where),
-    patternComprehensionRight :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_PatternComprehension = Core.Name "hydra.cypher.openCypher.PatternComprehension"
-_PatternComprehension_variable = Core.Name "variable"
-_PatternComprehension_pattern = Core.Name "pattern"
-_PatternComprehension_where = Core.Name "where"
-_PatternComprehension_right = Core.Name "right"
-data Quantifier =
-  Quantifier {
-    quantifierOperator :: QuantifierOperator,
-    quantifierExpression :: FilterExpression}
-  deriving (Eq, Ord, Read, Show)
-_Quantifier = Core.Name "hydra.cypher.openCypher.Quantifier"
-_Quantifier_operator = Core.Name "operator"
-_Quantifier_expression = Core.Name "expression"
-data QuantifierOperator =
-  QuantifierOperatorAll |
-  QuantifierOperatorAny |
-  QuantifierOperatorNone |
-  QuantifierOperatorSingle
-  deriving (Eq, Ord, Read, Show)
-_QuantifierOperator = Core.Name "hydra.cypher.openCypher.QuantifierOperator"
-_QuantifierOperator_all = Core.Name "all"
-_QuantifierOperator_any = Core.Name "any"
-_QuantifierOperator_none = Core.Name "none"
-_QuantifierOperator_single = Core.Name "single"
-data FilterExpression =
-  FilterExpression {
-    filterExpressionIdInColl :: IdInColl,
-    filterExpressionWhere :: (Maybe Where)}
-  deriving (Eq, Ord, Read, Show)
-_FilterExpression = Core.Name "hydra.cypher.openCypher.FilterExpression"
-_FilterExpression_idInColl = Core.Name "idInColl"
-_FilterExpression_where = Core.Name "where"
-newtype PatternPredicate =
-  PatternPredicate {
-    unPatternPredicate :: RelationshipsPattern}
-  deriving (Eq, Ord, Read, Show)
-_PatternPredicate = Core.Name "hydra.cypher.openCypher.PatternPredicate"
-newtype ParenthesizedExpression =
-  ParenthesizedExpression {
-    unParenthesizedExpression :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_ParenthesizedExpression = Core.Name "hydra.cypher.openCypher.ParenthesizedExpression"
-data IdInColl =
-  IdInColl {
-    idInCollVariable :: Variable,
-    idInCollExpression :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_IdInColl = Core.Name "hydra.cypher.openCypher.IdInColl"
-_IdInColl_variable = Core.Name "variable"
-_IdInColl_expression = Core.Name "expression"
-data FunctionInvocation =
-  FunctionInvocation {
-    functionInvocationName :: QualifiedName,
-    functionInvocationDistinct :: Bool,
-    functionInvocationArguments :: [Expression]}
-  deriving (Eq, Ord, Read, Show)
-_FunctionInvocation = Core.Name "hydra.cypher.openCypher.FunctionInvocation"
-_FunctionInvocation_name = Core.Name "name"
-_FunctionInvocation_distinct = Core.Name "distinct"
-_FunctionInvocation_arguments = Core.Name "arguments"
-data QualifiedName =
-  QualifiedName {
-    qualifiedNameNamespace :: String,
-    qualifiedNameLocal :: String}
-  deriving (Eq, Ord, Read, Show)
-_QualifiedName = Core.Name "hydra.cypher.openCypher.QualifiedName"
-_QualifiedName_namespace = Core.Name "namespace"
-_QualifiedName_local = Core.Name "local"
-data PatternWhere =
-  PatternWhere {
-    patternWherePattern :: Pattern,
-    patternWhereWhere :: (Maybe Where)}
-  deriving (Eq, Ord, Read, Show)
-_PatternWhere = Core.Name "hydra.cypher.openCypher.PatternWhere"
-_PatternWhere_pattern = Core.Name "pattern"
-_PatternWhere_where = Core.Name "where"
-data ExistentialSubquery =
-  ExistentialSubqueryRegular RegularQuery |
-  ExistentialSubqueryPattern PatternWhere
-  deriving (Eq, Ord, Read, Show)
-_ExistentialSubquery = Core.Name "hydra.cypher.openCypher.ExistentialSubquery"
-_ExistentialSubquery_regular = Core.Name "regular"
-_ExistentialSubquery_pattern = Core.Name "pattern"
-data ExplicitProcedureInvocation =
-  ExplicitProcedureInvocation {
-    explicitProcedureInvocationName :: QualifiedName,
-    explicitProcedureInvocationArguments :: [Expression]}
-  deriving (Eq, Ord, Read, Show)
-_ExplicitProcedureInvocation = Core.Name "hydra.cypher.openCypher.ExplicitProcedureInvocation"
-_ExplicitProcedureInvocation_name = Core.Name "name"
-_ExplicitProcedureInvocation_arguments = Core.Name "arguments"
-newtype ImplicitProcedureInvocation =
-  ImplicitProcedureInvocation {
-    unImplicitProcedureInvocation :: QualifiedName}
-  deriving (Eq, Ord, Read, Show)
-_ImplicitProcedureInvocation = Core.Name "hydra.cypher.openCypher.ImplicitProcedureInvocation"
-newtype ProcedureResultField =
-  ProcedureResultField {
-    unProcedureResultField :: String}
-  deriving (Eq, Ord, Read, Show)
-_ProcedureResultField = Core.Name "hydra.cypher.openCypher.ProcedureResultField"
-newtype Variable =
-  Variable {
-    unVariable :: String}
-  deriving (Eq, Ord, Read, Show)
-_Variable = Core.Name "hydra.cypher.openCypher.Variable"
-data Literal =
-  LiteralBoolean Bool |
-  LiteralNull |
-  LiteralNumber NumberLiteral |
-  LiteralString StringLiteral |
-  LiteralList ListLiteral |
-  LiteralMap MapLiteral
-  deriving (Eq, Ord, Read, Show)
-_Literal = Core.Name "hydra.cypher.openCypher.Literal"
-_Literal_boolean = Core.Name "boolean"
-_Literal_null = Core.Name "null"
-_Literal_number = Core.Name "number"
-_Literal_string = Core.Name "string"
-_Literal_list = Core.Name "list"
-_Literal_map = Core.Name "map"
-data NumberLiteral =
-  NumberLiteralDouble Double |
-  NumberLiteralInteger Integer
-  deriving (Eq, Ord, Read, Show)
-_NumberLiteral = Core.Name "hydra.cypher.openCypher.NumberLiteral"
-_NumberLiteral_double = Core.Name "double"
-_NumberLiteral_integer = Core.Name "integer"
-newtype StringLiteral =
-  StringLiteral {
-    unStringLiteral :: String}
-  deriving (Eq, Ord, Read, Show)
-_StringLiteral = Core.Name "hydra.cypher.openCypher.StringLiteral"
-newtype ListLiteral =
-  ListLiteral {
-    unListLiteral :: [Expression]}
-  deriving (Eq, Ord, Read, Show)
-_ListLiteral = Core.Name "hydra.cypher.openCypher.ListLiteral"
-newtype MapLiteral =
-  MapLiteral {
-    unMapLiteral :: [KeyValuePair]}
-  deriving (Eq, Ord, Read, Show)
-_MapLiteral = Core.Name "hydra.cypher.openCypher.MapLiteral"
-data KeyValuePair =
-  KeyValuePair {
-    keyValuePairKey :: PropertyKeyName,
-    keyValuePairValue :: Expression}
-  deriving (Eq, Ord, Read, Show)
-_KeyValuePair = Core.Name "hydra.cypher.openCypher.KeyValuePair"
-_KeyValuePair_key = Core.Name "key"
-_KeyValuePair_value = Core.Name "value"
-newtype PropertyKeyName =
-  PropertyKeyName {
-    unPropertyKeyName :: String}
-  deriving (Eq, Ord, Read, Show)
-_PropertyKeyName = Core.Name "hydra.cypher.openCypher.PropertyKeyName"
-data Parameter =
-  ParameterSymbolic String |
-  ParameterInteger Integer
-  deriving (Eq, Ord, Read, Show)
-_Parameter = Core.Name "hydra.cypher.openCypher.Parameter"
-_Parameter_symbolic = Core.Name "symbolic"
-_Parameter_integer = Core.Name "integer"
+
+-- | A Cypher model based on the OpenCypher specification (version 23), copyright Neo Technology, available at:
+-- |   https://opencypher.org/resources/
+
+module Hydra.Cypher.OpenCypher where
+
+import qualified Hydra.Core as Core
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
+import qualified Data.Scientific as Sci
+
+-- | An additive expression: a multiply/divide/modulo expression with zero or more +/- terms
+data AddOrSubtractExpression =
+  AddOrSubtractExpression {
+    addOrSubtractExpressionLeft :: MultiplyDivideModuloExpression,
+    addOrSubtractExpressionRight :: [AddOrSubtractRightHandSide]}
+  deriving (Eq, Ord, Read, Show)
+
+_AddOrSubtractExpression = Core.Name "hydra.cypher.openCypher.AddOrSubtractExpression"
+
+_AddOrSubtractExpression_left = Core.Name "left"
+
+_AddOrSubtractExpression_right = Core.Name "right"
+
+-- | An additive operator: + or -
+data AddOrSubtractOperator =
+  AddOrSubtractOperatorAdd |
+  AddOrSubtractOperatorSubtract
+  deriving (Eq, Ord, Read, Show)
+
+_AddOrSubtractOperator = Core.Name "hydra.cypher.openCypher.AddOrSubtractOperator"
+
+_AddOrSubtractOperator_add = Core.Name "add"
+
+_AddOrSubtractOperator_subtract = Core.Name "subtract"
+
+-- | An additive operator applied to a right-hand multiply/divide/modulo expression
+data AddOrSubtractRightHandSide =
+  AddOrSubtractRightHandSide {
+    addOrSubtractRightHandSideOperator :: AddOrSubtractOperator,
+    addOrSubtractRightHandSideExpression :: MultiplyDivideModuloExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_AddOrSubtractRightHandSide = Core.Name "hydra.cypher.openCypher.AddOrSubtractRightHandSide"
+
+_AddOrSubtractRightHandSide_operator = Core.Name "operator"
+
+_AddOrSubtractRightHandSide_expression = Core.Name "expression"
+
+-- | A conjunction of NOT expressions
+newtype AndExpression =
+  AndExpression {
+    unAndExpression :: [NotExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_AndExpression = Core.Name "hydra.cypher.openCypher.AndExpression"
+
+-- | A pattern part with no bound path variable
+newtype AnonymousPatternPart =
+  AnonymousPatternPart {
+    unAnonymousPatternPart :: PatternElement}
+  deriving (Eq, Ord, Read, Show)
+
+_AnonymousPatternPart = Core.Name "hydra.cypher.openCypher.AnonymousPatternPart"
+
+-- | An atomic expression: a literal, variable, parenthesized expression, or function-like construct
+data Atom =
+  AtomLiteral Literal |
+  AtomParameter Parameter |
+  AtomCase CaseExpression |
+  AtomCountStar |
+  AtomListComprehension ListComprehension |
+  AtomPatternComprehension PatternComprehension |
+  AtomQuantifier Quantifier |
+  AtomPatternPredicate PatternPredicate |
+  AtomParenthesized ParenthesizedExpression |
+  AtomFunctionInvocation FunctionInvocation |
+  AtomExistentialSubquery ExistentialSubquery |
+  AtomVariable Variable
+  deriving (Eq, Ord, Read, Show)
+
+_Atom = Core.Name "hydra.cypher.openCypher.Atom"
+
+_Atom_literal = Core.Name "literal"
+
+_Atom_parameter = Core.Name "parameter"
+
+_Atom_case = Core.Name "case"
+
+_Atom_countStar = Core.Name "countStar"
+
+_Atom_listComprehension = Core.Name "listComprehension"
+
+_Atom_patternComprehension = Core.Name "patternComprehension"
+
+_Atom_quantifier = Core.Name "quantifier"
+
+_Atom_patternPredicate = Core.Name "patternPredicate"
+
+_Atom_parenthesized = Core.Name "parenthesized"
+
+_Atom_functionInvocation = Core.Name "functionInvocation"
+
+_Atom_existentialSubquery = Core.Name "existentialSubquery"
+
+_Atom_variable = Core.Name "variable"
+
+-- | One WHEN/THEN alternative of a CASE expression
+data CaseAlternative =
+  CaseAlternative {
+    caseAlternativeCondition :: Expression,
+    caseAlternativeResult :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_CaseAlternative = Core.Name "hydra.cypher.openCypher.CaseAlternative"
+
+_CaseAlternative_condition = Core.Name "condition"
+
+_CaseAlternative_result = Core.Name "result"
+
+-- | A CASE expression, with an optional test and one or more alternatives
+data CaseExpression =
+  CaseExpression {
+    caseExpressionExpression :: (Maybe Expression),
+    caseExpressionAlternatives :: [CaseAlternative],
+    caseExpressionElse :: (Maybe Expression)}
+  deriving (Eq, Ord, Read, Show)
+
+_CaseExpression = Core.Name "hydra.cypher.openCypher.CaseExpression"
+
+_CaseExpression_expression = Core.Name "expression"
+
+_CaseExpression_alternatives = Core.Name "alternatives"
+
+_CaseExpression_else = Core.Name "else"
+
+-- | A comparison expression: an add/subtract expression with zero or more partial comparisons
+data ComparisonExpression =
+  ComparisonExpression {
+    comparisonExpressionLeft :: StringListNullPredicateExpression,
+    comparisonExpressionRight :: [PartialComparisonExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_ComparisonExpression = Core.Name "hydra.cypher.openCypher.ComparisonExpression"
+
+_ComparisonExpression_left = Core.Name "left"
+
+_ComparisonExpression_right = Core.Name "right"
+
+-- | A comparison operator: equality, inequality, or an ordering relation
+data ComparisonOperator =
+  ComparisonOperatorEq |
+  ComparisonOperatorNeq |
+  ComparisonOperatorLt |
+  ComparisonOperatorGt |
+  ComparisonOperatorLte |
+  ComparisonOperatorGte
+  deriving (Eq, Ord, Read, Show)
+
+_ComparisonOperator = Core.Name "hydra.cypher.openCypher.ComparisonOperator"
+
+_ComparisonOperator_eq = Core.Name "eq"
+
+_ComparisonOperator_neq = Core.Name "neq"
+
+_ComparisonOperator_lt = Core.Name "lt"
+
+_ComparisonOperator_gt = Core.Name "gt"
+
+_ComparisonOperator_lte = Core.Name "lte"
+
+_ComparisonOperator_gte = Core.Name "gte"
+
+-- | A CREATE clause creating a pattern
+newtype Create =
+  Create {
+    unCreate :: Pattern}
+  deriving (Eq, Ord, Read, Show)
+
+_Create = Core.Name "hydra.cypher.openCypher.Create"
+
+-- | A DELETE clause, optionally DETACH, removing nodes or relationships
+data Delete =
+  Delete {
+    deleteDetach :: Bool,
+    deleteExpressions :: [Expression]}
+  deriving (Eq, Ord, Read, Show)
+
+_Delete = Core.Name "hydra.cypher.openCypher.Delete"
+
+_Delete_detach = Core.Name "detach"
+
+_Delete_expressions = Core.Name "expressions"
+
+-- | An EXISTS subquery pattern with an optional WHERE clause
+data ExistentialSubquery =
+  ExistentialSubqueryRegular RegularQuery |
+  ExistentialSubqueryPattern PatternWhere
+  deriving (Eq, Ord, Read, Show)
+
+_ExistentialSubquery = Core.Name "hydra.cypher.openCypher.ExistentialSubquery"
+
+_ExistentialSubquery_regular = Core.Name "regular"
+
+_ExistentialSubquery_pattern = Core.Name "pattern"
+
+-- | A procedure call with an explicit, parenthesized argument list
+data ExplicitProcedureInvocation =
+  ExplicitProcedureInvocation {
+    explicitProcedureInvocationName :: QualifiedName,
+    explicitProcedureInvocationArguments :: [Expression]}
+  deriving (Eq, Ord, Read, Show)
+
+_ExplicitProcedureInvocation = Core.Name "hydra.cypher.openCypher.ExplicitProcedureInvocation"
+
+_ExplicitProcedureInvocation_name = Core.Name "name"
+
+_ExplicitProcedureInvocation_arguments = Core.Name "arguments"
+
+-- | The top-level openCypher expression production: an OR expression
+newtype Expression =
+  Expression {
+    unExpression :: OrExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_Expression = Core.Name "hydra.cypher.openCypher.Expression"
+
+-- | An id-in-collection clause with an optional WHERE filter
+data FilterExpression =
+  FilterExpression {
+    filterExpressionIdInColl :: IdInColl,
+    filterExpressionWhere :: (Maybe Where)}
+  deriving (Eq, Ord, Read, Show)
+
+_FilterExpression = Core.Name "hydra.cypher.openCypher.FilterExpression"
+
+_FilterExpression_idInColl = Core.Name "idInColl"
+
+_FilterExpression_where = Core.Name "where"
+
+-- | A function call: a qualified name, an optional DISTINCT, and arguments
+data FunctionInvocation =
+  FunctionInvocation {
+    functionInvocationName :: QualifiedName,
+    functionInvocationDistinct :: Bool,
+    functionInvocationArguments :: [Expression]}
+  deriving (Eq, Ord, Read, Show)
+
+_FunctionInvocation = Core.Name "hydra.cypher.openCypher.FunctionInvocation"
+
+_FunctionInvocation_name = Core.Name "name"
+
+_FunctionInvocation_distinct = Core.Name "distinct"
+
+_FunctionInvocation_arguments = Core.Name "arguments"
+
+-- | A variable bound over a list expression, as in x IN list
+data IdInColl =
+  IdInColl {
+    idInCollVariable :: Variable,
+    idInCollExpression :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_IdInColl = Core.Name "hydra.cypher.openCypher.IdInColl"
+
+_IdInColl_variable = Core.Name "variable"
+
+_IdInColl_expression = Core.Name "expression"
+
+-- | A procedure call with no argument list, taking its arguments from bound variables
+newtype ImplicitProcedureInvocation =
+  ImplicitProcedureInvocation {
+    unImplicitProcedureInvocation :: QualifiedName}
+  deriving (Eq, Ord, Read, Show)
+
+_ImplicitProcedureInvocation = Core.Name "hydra.cypher.openCypher.ImplicitProcedureInvocation"
+
+-- | An in-query CALL to a procedure
+data InQueryCall =
+  InQueryCall {
+    inQueryCallCall :: ExplicitProcedureInvocation,
+    inQueryCallYieldItems :: (Maybe YieldItems)}
+  deriving (Eq, Ord, Read, Show)
+
+_InQueryCall = Core.Name "hydra.cypher.openCypher.InQueryCall"
+
+_InQueryCall_call = Core.Name "call"
+
+_InQueryCall_yieldItems = Core.Name "yieldItems"
+
+-- | A key-value pair in a map literal
+data KeyValuePair =
+  KeyValuePair {
+    keyValuePairKey :: PropertyKeyName,
+    keyValuePairValue :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_KeyValuePair = Core.Name "hydra.cypher.openCypher.KeyValuePair"
+
+_KeyValuePair_key = Core.Name "key"
+
+_KeyValuePair_value = Core.Name "value"
+
+-- | A LIMIT clause limiting the number of results
+newtype Limit =
+  Limit {
+    unLimit :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_Limit = Core.Name "hydra.cypher.openCypher.Limit"
+
+-- | A list comprehension: a filter expression with an optional projection
+data ListComprehension =
+  ListComprehension {
+    listComprehensionLeft :: FilterExpression,
+    listComprehensionRight :: (Maybe Expression)}
+  deriving (Eq, Ord, Read, Show)
+
+_ListComprehension = Core.Name "hydra.cypher.openCypher.ListComprehension"
+
+_ListComprehension_left = Core.Name "left"
+
+_ListComprehension_right = Core.Name "right"
+
+-- | A list literal
+newtype ListLiteral =
+  ListLiteral {
+    unListLiteral :: [Expression]}
+  deriving (Eq, Ord, Read, Show)
+
+_ListLiteral = Core.Name "hydra.cypher.openCypher.ListLiteral"
+
+-- | A list operator applied to a non-arithmetic operator expression: indexing or slicing
+data ListOperatorExpression =
+  ListOperatorExpressionSingle Expression |
+  ListOperatorExpressionRange RangeExpression
+  deriving (Eq, Ord, Read, Show)
+
+_ListOperatorExpression = Core.Name "hydra.cypher.openCypher.ListOperatorExpression"
+
+_ListOperatorExpression_single = Core.Name "single"
+
+_ListOperatorExpression_range = Core.Name "range"
+
+-- | A list operator or property lookup applied to an atom
+data ListOperatorExpressionOrPropertyLookup =
+  ListOperatorExpressionOrPropertyLookupList ListOperatorExpression |
+  ListOperatorExpressionOrPropertyLookupProperty PropertyLookup
+  deriving (Eq, Ord, Read, Show)
+
+_ListOperatorExpressionOrPropertyLookup = Core.Name "hydra.cypher.openCypher.ListOperatorExpressionOrPropertyLookup"
+
+_ListOperatorExpressionOrPropertyLookup_list = Core.Name "list"
+
+_ListOperatorExpressionOrPropertyLookup_property = Core.Name "property"
+
+-- | An IN predicate testing list membership
+newtype ListPredicateExpression =
+  ListPredicateExpression {
+    unListPredicateExpression :: AddOrSubtractExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ListPredicateExpression = Core.Name "hydra.cypher.openCypher.ListPredicateExpression"
+
+-- | A literal value: a number, string, boolean, null, list, or map
+data Literal =
+  LiteralBoolean Bool |
+  LiteralNull |
+  LiteralNumber NumberLiteral |
+  LiteralString StringLiteral |
+  LiteralList ListLiteral |
+  LiteralMap MapLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_Literal = Core.Name "hydra.cypher.openCypher.Literal"
+
+_Literal_boolean = Core.Name "boolean"
+
+_Literal_null = Core.Name "null"
+
+_Literal_number = Core.Name "number"
+
+_Literal_string = Core.Name "string"
+
+_Literal_list = Core.Name "list"
+
+_Literal_map = Core.Name "map"
+
+-- | A map literal
+newtype MapLiteral =
+  MapLiteral {
+    unMapLiteral :: [KeyValuePair]}
+  deriving (Eq, Ord, Read, Show)
+
+_MapLiteral = Core.Name "hydra.cypher.openCypher.MapLiteral"
+
+-- | A MATCH clause, optionally OPTIONAL, over a pattern with an optional WHERE clause
+data Match =
+  Match {
+    matchOptional :: Bool,
+    matchPattern :: Pattern,
+    matchWhere :: (Maybe Where)}
+  deriving (Eq, Ord, Read, Show)
+
+_Match = Core.Name "hydra.cypher.openCypher.Match"
+
+_Match_optional = Core.Name "optional"
+
+_Match_pattern = Core.Name "pattern"
+
+_Match_where = Core.Name "where"
+
+-- | Either a MATCH or a CREATE, used within a MERGE action
+data MatchOrCreate =
+  MatchOrCreateMatch |
+  MatchOrCreateCreate
+  deriving (Eq, Ord, Read, Show)
+
+_MatchOrCreate = Core.Name "hydra.cypher.openCypher.MatchOrCreate"
+
+_MatchOrCreate_match = Core.Name "match"
+
+_MatchOrCreate_create = Core.Name "create"
+
+-- | A MERGE clause matching or creating a pattern, with optional merge actions
+data Merge =
+  Merge {
+    mergePatternPart :: PatternPart,
+    mergeActions :: [MergeAction]}
+  deriving (Eq, Ord, Read, Show)
+
+_Merge = Core.Name "hydra.cypher.openCypher.Merge"
+
+_Merge_patternPart = Core.Name "patternPart"
+
+_Merge_actions = Core.Name "actions"
+
+-- | An ON MATCH or ON CREATE action attached to a MERGE clause
+data MergeAction =
+  MergeAction {
+    mergeActionAction :: MatchOrCreate,
+    mergeActionSet :: Set}
+  deriving (Eq, Ord, Read, Show)
+
+_MergeAction = Core.Name "hydra.cypher.openCypher.MergeAction"
+
+_MergeAction_action = Core.Name "action"
+
+_MergeAction_set = Core.Name "set"
+
+-- | A multi-part query: one or more WITH-delimited parts followed by a single-part query
+data MultiPartQuery =
+  MultiPartQuery {
+    multiPartQueryWith :: [WithClause],
+    multiPartQueryBody :: SinglePartQuery}
+  deriving (Eq, Ord, Read, Show)
+
+_MultiPartQuery = Core.Name "hydra.cypher.openCypher.MultiPartQuery"
+
+_MultiPartQuery_with = Core.Name "with"
+
+_MultiPartQuery_body = Core.Name "body"
+
+-- | A multiplicative expression: a power expression with zero or more */÷/% terms
+data MultiplyDivideModuloExpression =
+  MultiplyDivideModuloExpression {
+    multiplyDivideModuloExpressionLeft :: PowerOfExpression,
+    multiplyDivideModuloExpressionRight :: [MultiplyDivideModuloRightHandSide]}
+  deriving (Eq, Ord, Read, Show)
+
+_MultiplyDivideModuloExpression = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloExpression"
+
+_MultiplyDivideModuloExpression_left = Core.Name "left"
+
+_MultiplyDivideModuloExpression_right = Core.Name "right"
+
+-- | A multiplicative operator: *, /, or %
+data MultiplyDivideModuloOperator =
+  MultiplyDivideModuloOperatorMultiply |
+  MultiplyDivideModuloOperatorDivide |
+  MultiplyDivideModuloOperatorModulo
+  deriving (Eq, Ord, Read, Show)
+
+_MultiplyDivideModuloOperator = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloOperator"
+
+_MultiplyDivideModuloOperator_multiply = Core.Name "multiply"
+
+_MultiplyDivideModuloOperator_divide = Core.Name "divide"
+
+_MultiplyDivideModuloOperator_modulo = Core.Name "modulo"
+
+-- | A multiplicative operator applied to a right-hand power expression
+data MultiplyDivideModuloRightHandSide =
+  MultiplyDivideModuloRightHandSide {
+    multiplyDivideModuloRightHandSideOperator :: MultiplyDivideModuloOperator,
+    multiplyDivideModuloRightHandSideExpression :: PowerOfExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_MultiplyDivideModuloRightHandSide = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloRightHandSide"
+
+_MultiplyDivideModuloRightHandSide_operator = Core.Name "operator"
+
+_MultiplyDivideModuloRightHandSide_expression = Core.Name "expression"
+
+-- | A single node label
+newtype NodeLabel =
+  NodeLabel {
+    unNodeLabel :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeLabel = Core.Name "hydra.cypher.openCypher.NodeLabel"
+
+-- | One or more node labels attached to a node pattern
+newtype NodeLabels =
+  NodeLabels {
+    unNodeLabels :: [NodeLabel]}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeLabels = Core.Name "hydra.cypher.openCypher.NodeLabels"
+
+-- | A node pattern: an optional variable, node labels, and properties
+data NodePattern =
+  NodePattern {
+    nodePatternVariable :: (Maybe Variable),
+    nodePatternLabels :: (Maybe NodeLabels),
+    nodePatternProperties :: (Maybe Properties)}
+  deriving (Eq, Ord, Read, Show)
+
+_NodePattern = Core.Name "hydra.cypher.openCypher.NodePattern"
+
+_NodePattern_variable = Core.Name "variable"
+
+_NodePattern_labels = Core.Name "labels"
+
+_NodePattern_properties = Core.Name "properties"
+
+-- | A node pattern followed by a chain of pattern-element continuations
+data NodePatternChain =
+  NodePatternChain {
+    nodePatternChainNodePattern :: NodePattern,
+    nodePatternChainChain :: [PatternElementChain]}
+  deriving (Eq, Ord, Read, Show)
+
+_NodePatternChain = Core.Name "hydra.cypher.openCypher.NodePatternChain"
+
+_NodePatternChain_nodePattern = Core.Name "nodePattern"
+
+_NodePatternChain_chain = Core.Name "chain"
+
+-- | An atom followed by zero or more list operators, property lookups, or node labels
+data NonArithmeticOperatorExpression =
+  NonArithmeticOperatorExpression {
+    nonArithmeticOperatorExpressionAtom :: Atom,
+    nonArithmeticOperatorExpressionListsAndLookups :: [ListOperatorExpressionOrPropertyLookup],
+    nonArithmeticOperatorExpressionLabels :: (Maybe NodeLabels)}
+  deriving (Eq, Ord, Read, Show)
+
+_NonArithmeticOperatorExpression = Core.Name "hydra.cypher.openCypher.NonArithmeticOperatorExpression"
+
+_NonArithmeticOperatorExpression_atom = Core.Name "atom"
+
+_NonArithmeticOperatorExpression_listsAndLookups = Core.Name "listsAndLookups"
+
+_NonArithmeticOperatorExpression_labels = Core.Name "labels"
+
+-- | A possibly-negated comparison expression
+data NotExpression =
+  NotExpression {
+    notExpressionNot :: Bool,
+    notExpressionExpression :: ComparisonExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_NotExpression = Core.Name "hydra.cypher.openCypher.NotExpression"
+
+_NotExpression_not = Core.Name "not"
+
+_NotExpression_expression = Core.Name "expression"
+
+-- | An IS NULL or IS NOT NULL predicate
+newtype NullPredicateExpression =
+  NullPredicateExpression {
+    unNullPredicateExpression :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_NullPredicateExpression = Core.Name "hydra.cypher.openCypher.NullPredicateExpression"
+
+-- | A numeric literal: a double or an integer
+data NumberLiteral =
+  NumberLiteralDouble Double |
+  NumberLiteralInteger Integer
+  deriving (Eq, Ord, Read, Show)
+
+_NumberLiteral = Core.Name "hydra.cypher.openCypher.NumberLiteral"
+
+_NumberLiteral_double = Core.Name "double"
+
+_NumberLiteral_integer = Core.Name "integer"
+
+-- | A disjunction of XOR expressions
+newtype OrExpression =
+  OrExpression {
+    unOrExpression :: [XorExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_OrExpression = Core.Name "hydra.cypher.openCypher.OrExpression"
+
+-- | An ORDER BY clause
+newtype Order =
+  Order {
+    unOrder :: [SortItem]}
+  deriving (Eq, Ord, Read, Show)
+
+_Order = Core.Name "hydra.cypher.openCypher.Order"
+
+-- | A named or positional query parameter
+data Parameter =
+  ParameterSymbolic String |
+  ParameterInteger Integer
+  deriving (Eq, Ord, Read, Show)
+
+_Parameter = Core.Name "hydra.cypher.openCypher.Parameter"
+
+_Parameter_symbolic = Core.Name "symbolic"
+
+_Parameter_integer = Core.Name "integer"
+
+-- | A parenthesized expression
+newtype ParenthesizedExpression =
+  ParenthesizedExpression {
+    unParenthesizedExpression :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_ParenthesizedExpression = Core.Name "hydra.cypher.openCypher.ParenthesizedExpression"
+
+-- | A comparison operator applied to a right-hand add/subtract expression
+data PartialComparisonExpression =
+  PartialComparisonExpression {
+    partialComparisonExpressionOperator :: ComparisonOperator,
+    partialComparisonExpressionRight :: StringListNullPredicateExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_PartialComparisonExpression = Core.Name "hydra.cypher.openCypher.PartialComparisonExpression"
+
+_PartialComparisonExpression_operator = Core.Name "operator"
+
+_PartialComparisonExpression_right = Core.Name "right"
+
+-- | A graph pattern: one or more pattern parts
+newtype Pattern =
+  Pattern {
+    unPattern :: [PatternPart]}
+  deriving (Eq, Ord, Read, Show)
+
+_Pattern = Core.Name "hydra.cypher.openCypher.Pattern"
+
+-- | A pattern comprehension: a pattern with optional filter and projection expressions
+data PatternComprehension =
+  PatternComprehension {
+    patternComprehensionVariable :: (Maybe Variable),
+    patternComprehensionPattern :: RelationshipsPattern,
+    patternComprehensionWhere :: (Maybe Where),
+    patternComprehensionRight :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_PatternComprehension = Core.Name "hydra.cypher.openCypher.PatternComprehension"
+
+_PatternComprehension_variable = Core.Name "variable"
+
+_PatternComprehension_pattern = Core.Name "pattern"
+
+_PatternComprehension_where = Core.Name "where"
+
+_PatternComprehension_right = Core.Name "right"
+
+-- | A pattern element: a node pattern chain or a parenthesized pattern element
+data PatternElement =
+  PatternElementChained NodePatternChain |
+  PatternElementParenthesized PatternElement
+  deriving (Eq, Ord, Read, Show)
+
+_PatternElement = Core.Name "hydra.cypher.openCypher.PatternElement"
+
+_PatternElement_chained = Core.Name "chained"
+
+_PatternElement_parenthesized = Core.Name "parenthesized"
+
+-- | A relationship pattern followed by the node pattern it connects to
+data PatternElementChain =
+  PatternElementChain {
+    patternElementChainRelationship :: RelationshipPattern,
+    patternElementChainNode :: NodePattern}
+  deriving (Eq, Ord, Read, Show)
+
+_PatternElementChain = Core.Name "hydra.cypher.openCypher.PatternElementChain"
+
+_PatternElementChain_relationship = Core.Name "relationship"
+
+_PatternElementChain_node = Core.Name "node"
+
+-- | One part of a graph pattern, optionally bound to a variable
+data PatternPart =
+  PatternPart {
+    patternPartVariable :: (Maybe Variable),
+    patternPartPattern :: AnonymousPatternPart}
+  deriving (Eq, Ord, Read, Show)
+
+_PatternPart = Core.Name "hydra.cypher.openCypher.PatternPart"
+
+_PatternPart_variable = Core.Name "variable"
+
+_PatternPart_pattern = Core.Name "pattern"
+
+-- | A pattern used as a boolean existence predicate
+newtype PatternPredicate =
+  PatternPredicate {
+    unPatternPredicate :: RelationshipsPattern}
+  deriving (Eq, Ord, Read, Show)
+
+_PatternPredicate = Core.Name "hydra.cypher.openCypher.PatternPredicate"
+
+-- | A pattern together with an optional WHERE clause, used in an existential subquery
+data PatternWhere =
+  PatternWhere {
+    patternWherePattern :: Pattern,
+    patternWhereWhere :: (Maybe Where)}
+  deriving (Eq, Ord, Read, Show)
+
+_PatternWhere = Core.Name "hydra.cypher.openCypher.PatternWhere"
+
+_PatternWhere_pattern = Core.Name "pattern"
+
+_PatternWhere_where = Core.Name "where"
+
+-- | An exponentiation expression: a unary expression with zero or more ^ terms
+newtype PowerOfExpression =
+  PowerOfExpression {
+    unPowerOfExpression :: [UnaryAddOrSubtractExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_PowerOfExpression = Core.Name "hydra.cypher.openCypher.PowerOfExpression"
+
+-- | A procedure invocation: explicit (with arguments) or implicit
+data ProcedureInvocation =
+  ProcedureInvocationExplicit ExplicitProcedureInvocation |
+  ProcedureInvocationImplicit ImplicitProcedureInvocation
+  deriving (Eq, Ord, Read, Show)
+
+_ProcedureInvocation = Core.Name "hydra.cypher.openCypher.ProcedureInvocation"
+
+_ProcedureInvocation_explicit = Core.Name "explicit"
+
+_ProcedureInvocation_implicit = Core.Name "implicit"
+
+-- | The name of a single field yielded by a procedure
+newtype ProcedureResultField =
+  ProcedureResultField {
+    unProcedureResultField :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_ProcedureResultField = Core.Name "hydra.cypher.openCypher.ProcedureResultField"
+
+-- | The body of a WITH or RETURN clause: distinctness, projection items, and ordering/paging
+data ProjectionBody =
+  ProjectionBody {
+    projectionBodyDistinct :: Bool,
+    projectionBodyProjectionItems :: ProjectionItems,
+    projectionBodyOrder :: (Maybe Order),
+    projectionBodySkip :: (Maybe Skip),
+    projectionBodyLimit :: (Maybe Limit)}
+  deriving (Eq, Ord, Read, Show)
+
+_ProjectionBody = Core.Name "hydra.cypher.openCypher.ProjectionBody"
+
+_ProjectionBody_distinct = Core.Name "distinct"
+
+_ProjectionBody_projectionItems = Core.Name "projectionItems"
+
+_ProjectionBody_order = Core.Name "order"
+
+_ProjectionBody_skip = Core.Name "skip"
+
+_ProjectionBody_limit = Core.Name "limit"
+
+-- | One item of a projection: an expression, optionally aliased
+data ProjectionItem =
+  ProjectionItem {
+    projectionItemExpression :: Expression,
+    projectionItemVariable :: (Maybe Variable)}
+  deriving (Eq, Ord, Read, Show)
+
+_ProjectionItem = Core.Name "hydra.cypher.openCypher.ProjectionItem"
+
+_ProjectionItem_expression = Core.Name "expression"
+
+_ProjectionItem_variable = Core.Name "variable"
+
+-- | The list of items in a projection, or a star for all variables
+data ProjectionItems =
+  ProjectionItems {
+    projectionItemsStar :: Bool,
+    projectionItemsExplicit :: [ProjectionItem]}
+  deriving (Eq, Ord, Read, Show)
+
+_ProjectionItems = Core.Name "hydra.cypher.openCypher.ProjectionItems"
+
+_ProjectionItems_star = Core.Name "star"
+
+_ProjectionItems_explicit = Core.Name "explicit"
+
+-- | A property map or parameter attached to a node or relationship pattern
+data Properties =
+  PropertiesMap MapLiteral |
+  PropertiesParameter Parameter
+  deriving (Eq, Ord, Read, Show)
+
+_Properties = Core.Name "hydra.cypher.openCypher.Properties"
+
+_Properties_map = Core.Name "map"
+
+_Properties_parameter = Core.Name "parameter"
+
+-- | A property assignment of the form property = expression
+data PropertyEquals =
+  PropertyEquals {
+    propertyEqualsLhs :: PropertyExpression,
+    propertyEqualsRhs :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyEquals = Core.Name "hydra.cypher.openCypher.PropertyEquals"
+
+_PropertyEquals_lhs = Core.Name "lhs"
+
+_PropertyEquals_rhs = Core.Name "rhs"
+
+-- | An atom followed by one or more property lookups
+data PropertyExpression =
+  PropertyExpression {
+    propertyExpressionAtom :: Atom,
+    propertyExpressionLookups :: [PropertyLookup]}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyExpression = Core.Name "hydra.cypher.openCypher.PropertyExpression"
+
+_PropertyExpression_atom = Core.Name "atom"
+
+_PropertyExpression_lookups = Core.Name "lookups"
+
+-- | The name of a property key
+newtype PropertyKeyName =
+  PropertyKeyName {
+    unPropertyKeyName :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyKeyName = Core.Name "hydra.cypher.openCypher.PropertyKeyName"
+
+-- | A single property access, as in .property
+newtype PropertyLookup =
+  PropertyLookup {
+    unPropertyLookup :: PropertyKeyName}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyLookup = Core.Name "hydra.cypher.openCypher.PropertyLookup"
+
+-- | A namespace-qualified function or procedure name
+data QualifiedName =
+  QualifiedName {
+    qualifiedNameNamespace :: String,
+    qualifiedNameLocal :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_QualifiedName = Core.Name "hydra.cypher.openCypher.QualifiedName"
+
+_QualifiedName_namespace = Core.Name "namespace"
+
+_QualifiedName_local = Core.Name "local"
+
+-- | A quantifier over a list predicate: all, any, none, or single
+data Quantifier =
+  Quantifier {
+    quantifierOperator :: QuantifierOperator,
+    quantifierExpression :: FilterExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_Quantifier = Core.Name "hydra.cypher.openCypher.Quantifier"
+
+_Quantifier_operator = Core.Name "operator"
+
+_Quantifier_expression = Core.Name "expression"
+
+-- | The keyword of a quantifier: ALL, ANY, NONE, or SINGLE
+data QuantifierOperator =
+  QuantifierOperatorAll |
+  QuantifierOperatorAny |
+  QuantifierOperatorNone |
+  QuantifierOperatorSingle
+  deriving (Eq, Ord, Read, Show)
+
+_QuantifierOperator = Core.Name "hydra.cypher.openCypher.QuantifierOperator"
+
+_QuantifierOperator_all = Core.Name "all"
+
+_QuantifierOperator_any = Core.Name "any"
+
+_QuantifierOperator_none = Core.Name "none"
+
+_QuantifierOperator_single = Core.Name "single"
+
+-- | An openCypher query: a regular query or a standalone procedure call
+data Query =
+  QueryRegular RegularQuery |
+  QueryStandalone StandaloneCall
+  deriving (Eq, Ord, Read, Show)
+
+_Query = Core.Name "hydra.cypher.openCypher.Query"
+
+_Query_regular = Core.Name "regular"
+
+_Query_standalone = Core.Name "standalone"
+
+-- | The bracketed range of a list-slice operator
+data RangeExpression =
+  RangeExpression {
+    rangeExpressionStart :: (Maybe Expression),
+    rangeExpressionEnd :: (Maybe Expression)}
+  deriving (Eq, Ord, Read, Show)
+
+_RangeExpression = Core.Name "hydra.cypher.openCypher.RangeExpression"
+
+_RangeExpression_start = Core.Name "start"
+
+_RangeExpression_end = Core.Name "end"
+
+-- | A variable-length relationship range, as in *1..3
+data RangeLiteral =
+  RangeLiteral {
+    rangeLiteralStart :: (Maybe Integer),
+    rangeLiteralEnd :: (Maybe Integer)}
+  deriving (Eq, Ord, Read, Show)
+
+_RangeLiteral = Core.Name "hydra.cypher.openCypher.RangeLiteral"
+
+_RangeLiteral_start = Core.Name "start"
+
+_RangeLiteral_end = Core.Name "end"
+
+-- | A reading clause: MATCH, UNWIND, or an in-query CALL
+data ReadingClause =
+  ReadingClauseMatch Match |
+  ReadingClauseUnwind Unwind |
+  ReadingClauseInQueryCall InQueryCall
+  deriving (Eq, Ord, Read, Show)
+
+_ReadingClause = Core.Name "hydra.cypher.openCypher.ReadingClause"
+
+_ReadingClause_match = Core.Name "match"
+
+_ReadingClause_unwind = Core.Name "unwind"
+
+_ReadingClause_inQueryCall = Core.Name "inQueryCall"
+
+-- | A regular openCypher query: a single query, optionally unioned with further queries
+data RegularQuery =
+  RegularQuery {
+    regularQueryHead :: SingleQuery,
+    regularQueryRest :: [Union]}
+  deriving (Eq, Ord, Read, Show)
+
+_RegularQuery = Core.Name "hydra.cypher.openCypher.RegularQuery"
+
+_RegularQuery_head = Core.Name "head"
+
+_RegularQuery_rest = Core.Name "rest"
+
+-- | The name of a relationship type
+newtype RelTypeName =
+  RelTypeName {
+    unRelTypeName :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_RelTypeName = Core.Name "hydra.cypher.openCypher.RelTypeName"
+
+-- | The bracketed detail of a relationship pattern: variable, types, range, and properties
+data RelationshipDetail =
+  RelationshipDetail {
+    relationshipDetailVariable :: (Maybe Variable),
+    relationshipDetailTypes :: (Maybe RelationshipTypes),
+    relationshipDetailRange :: (Maybe RangeLiteral),
+    relationshipDetailProperties :: (Maybe Properties)}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationshipDetail = Core.Name "hydra.cypher.openCypher.RelationshipDetail"
+
+_RelationshipDetail_variable = Core.Name "variable"
+
+_RelationshipDetail_types = Core.Name "types"
+
+_RelationshipDetail_range = Core.Name "range"
+
+_RelationshipDetail_properties = Core.Name "properties"
+
+-- | A relationship pattern: direction markers around an optional relationship detail
+data RelationshipPattern =
+  RelationshipPattern {
+    relationshipPatternLeftArrow :: Bool,
+    relationshipPatternDetail :: (Maybe RelationshipDetail),
+    relationshipPatternRightArrow :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationshipPattern = Core.Name "hydra.cypher.openCypher.RelationshipPattern"
+
+_RelationshipPattern_leftArrow = Core.Name "leftArrow"
+
+_RelationshipPattern_detail = Core.Name "detail"
+
+_RelationshipPattern_rightArrow = Core.Name "rightArrow"
+
+-- | The relationship type disjunction of a relationship pattern
+newtype RelationshipTypes =
+  RelationshipTypes {
+    unRelationshipTypes :: [RelTypeName]}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationshipTypes = Core.Name "hydra.cypher.openCypher.RelationshipTypes"
+
+-- | A relationship pattern chain anchored at a node pattern
+data RelationshipsPattern =
+  RelationshipsPattern {
+    relationshipsPatternNodePattern :: NodePattern,
+    relationshipsPatternChain :: [PatternElementChain]}
+  deriving (Eq, Ord, Read, Show)
+
+_RelationshipsPattern = Core.Name "hydra.cypher.openCypher.RelationshipsPattern"
+
+_RelationshipsPattern_nodePattern = Core.Name "nodePattern"
+
+_RelationshipsPattern_chain = Core.Name "chain"
+
+-- | A REMOVE clause removing properties or labels
+newtype Remove =
+  Remove {
+    unRemove :: [RemoveItem]}
+  deriving (Eq, Ord, Read, Show)
+
+_Remove = Core.Name "hydra.cypher.openCypher.Remove"
+
+-- | One item of a REMOVE clause
+data RemoveItem =
+  RemoveItemVariableLabels VariableAndNodeLabels |
+  RemoveItemProperty PropertyExpression
+  deriving (Eq, Ord, Read, Show)
+
+_RemoveItem = Core.Name "hydra.cypher.openCypher.RemoveItem"
+
+_RemoveItem_variableLabels = Core.Name "variableLabels"
+
+_RemoveItem_property = Core.Name "property"
+
+-- | The RETURN clause: a projection body producing the query's result
+newtype Return =
+  Return {
+    unReturn :: ProjectionBody}
+  deriving (Eq, Ord, Read, Show)
+
+_Return = Core.Name "hydra.cypher.openCypher.Return"
+
+-- | A SET clause updating properties or labels
+newtype Set =
+  Set {
+    unSet :: [SetItem]}
+  deriving (Eq, Ord, Read, Show)
+
+_Set = Core.Name "hydra.cypher.openCypher.Set"
+
+-- | One item of a SET clause
+data SetItem =
+  SetItemProperty PropertyEquals |
+  SetItemVariableEqual VariableEquals |
+  SetItemVariablePlusEqual VariablePlusEquals |
+  SetItemVariableLabels VariableAndNodeLabels
+  deriving (Eq, Ord, Read, Show)
+
+_SetItem = Core.Name "hydra.cypher.openCypher.SetItem"
+
+_SetItem_property = Core.Name "property"
+
+_SetItem_variableEqual = Core.Name "variableEqual"
+
+_SetItem_variablePlusEqual = Core.Name "variablePlusEqual"
+
+_SetItem_variableLabels = Core.Name "variableLabels"
+
+-- | A single-part query: reading and updating clauses followed by an optional RETURN clause
+data SinglePartQuery =
+  SinglePartQuery {
+    singlePartQueryReading :: [ReadingClause],
+    singlePartQueryUpdating :: [UpdatingClause],
+    singlePartQueryReturn :: (Maybe Return)}
+  deriving (Eq, Ord, Read, Show)
+
+_SinglePartQuery = Core.Name "hydra.cypher.openCypher.SinglePartQuery"
+
+_SinglePartQuery_reading = Core.Name "reading"
+
+_SinglePartQuery_updating = Core.Name "updating"
+
+_SinglePartQuery_return = Core.Name "return"
+
+-- | A single openCypher query: a single-part query or a multi-part query
+data SingleQuery =
+  SingleQuerySinglePart SinglePartQuery |
+  SingleQueryMultiPart MultiPartQuery
+  deriving (Eq, Ord, Read, Show)
+
+_SingleQuery = Core.Name "hydra.cypher.openCypher.SingleQuery"
+
+_SingleQuery_singlePart = Core.Name "singlePart"
+
+_SingleQuery_multiPart = Core.Name "multiPart"
+
+-- | A SKIP clause limiting the starting offset of results
+newtype Skip =
+  Skip {
+    unSkip :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_Skip = Core.Name "hydra.cypher.openCypher.Skip"
+
+-- | One item of an ORDER BY clause: an expression and its sort order
+data SortItem =
+  SortItem {
+    sortItemExpression :: Expression,
+    sortItemOrder :: (Maybe SortOrder)}
+  deriving (Eq, Ord, Read, Show)
+
+_SortItem = Core.Name "hydra.cypher.openCypher.SortItem"
+
+_SortItem_expression = Core.Name "expression"
+
+_SortItem_order = Core.Name "order"
+
+-- | The sort order of a sort item: ascending or descending
+data SortOrder =
+  SortOrderAscending |
+  SortOrderDescending
+  deriving (Eq, Ord, Read, Show)
+
+_SortOrder = Core.Name "hydra.cypher.openCypher.SortOrder"
+
+_SortOrder_ascending = Core.Name "ascending"
+
+_SortOrder_descending = Core.Name "descending"
+
+-- | A standalone CALL statement invoking a procedure without a surrounding query
+data StandaloneCall =
+  StandaloneCall {
+    standaloneCallCall :: ProcedureInvocation,
+    standaloneCallYieldItems :: (Maybe StarOrYieldItems)}
+  deriving (Eq, Ord, Read, Show)
+
+_StandaloneCall = Core.Name "hydra.cypher.openCypher.StandaloneCall"
+
+_StandaloneCall_call = Core.Name "call"
+
+_StandaloneCall_yieldItems = Core.Name "yieldItems"
+
+-- | The result-selection clause of a standalone CALL: a star, or explicit YIELD items
+data StarOrYieldItems =
+  StarOrYieldItemsStar |
+  StarOrYieldItemsItems YieldItems
+  deriving (Eq, Ord, Read, Show)
+
+_StarOrYieldItems = Core.Name "hydra.cypher.openCypher.StarOrYieldItems"
+
+_StarOrYieldItems_star = Core.Name "star"
+
+_StarOrYieldItems_items = Core.Name "items"
+
+-- | An add/subtract expression with zero or more string, list, or null predicates
+data StringListNullPredicateExpression =
+  StringListNullPredicateExpression {
+    stringListNullPredicateExpressionLeft :: AddOrSubtractExpression,
+    stringListNullPredicateExpressionRight :: [StringListNullPredicateRightHandSide]}
+  deriving (Eq, Ord, Read, Show)
+
+_StringListNullPredicateExpression = Core.Name "hydra.cypher.openCypher.StringListNullPredicateExpression"
+
+_StringListNullPredicateExpression_left = Core.Name "left"
+
+_StringListNullPredicateExpression_right = Core.Name "right"
+
+-- | A string, list, or null predicate applied to an expression
+data StringListNullPredicateRightHandSide =
+  StringListNullPredicateRightHandSideString StringPredicateExpression |
+  StringListNullPredicateRightHandSideList ListPredicateExpression |
+  StringListNullPredicateRightHandSideNull NullPredicateExpression
+  deriving (Eq, Ord, Read, Show)
+
+_StringListNullPredicateRightHandSide = Core.Name "hydra.cypher.openCypher.StringListNullPredicateRightHandSide"
+
+_StringListNullPredicateRightHandSide_string = Core.Name "string"
+
+_StringListNullPredicateRightHandSide_list = Core.Name "list"
+
+_StringListNullPredicateRightHandSide_null = Core.Name "null"
+
+-- | A string literal
+newtype StringLiteral =
+  StringLiteral {
+    unStringLiteral :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_StringLiteral = Core.Name "hydra.cypher.openCypher.StringLiteral"
+
+-- | A string predicate: STARTS WITH, ENDS WITH, or CONTAINS
+data StringPredicateExpression =
+  StringPredicateExpression {
+    stringPredicateExpressionOperator :: StringPredicateOperator,
+    stringPredicateExpressionExpression :: AddOrSubtractExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_StringPredicateExpression = Core.Name "hydra.cypher.openCypher.StringPredicateExpression"
+
+_StringPredicateExpression_operator = Core.Name "operator"
+
+_StringPredicateExpression_expression = Core.Name "expression"
+
+-- | A string predicate operator: STARTS WITH, ENDS WITH, or CONTAINS
+data StringPredicateOperator =
+  StringPredicateOperatorStartsWith |
+  StringPredicateOperatorEndsWith |
+  StringPredicateOperatorContains
+  deriving (Eq, Ord, Read, Show)
+
+_StringPredicateOperator = Core.Name "hydra.cypher.openCypher.StringPredicateOperator"
+
+_StringPredicateOperator_startsWith = Core.Name "startsWith"
+
+_StringPredicateOperator_endsWith = Core.Name "endsWith"
+
+_StringPredicateOperator_contains = Core.Name "contains"
+
+-- | A unary plus or minus applied to a list-operator expression
+data UnaryAddOrSubtractExpression =
+  UnaryAddOrSubtractExpression {
+    unaryAddOrSubtractExpressionOperator :: (Maybe AddOrSubtractOperator),
+    unaryAddOrSubtractExpressionExpression :: NonArithmeticOperatorExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_UnaryAddOrSubtractExpression = Core.Name "hydra.cypher.openCypher.UnaryAddOrSubtractExpression"
+
+_UnaryAddOrSubtractExpression_operator = Core.Name "operator"
+
+_UnaryAddOrSubtractExpression_expression = Core.Name "expression"
+
+-- | A UNION combining a single query with a preceding query, with optional ALL semantics
+data Union =
+  Union {
+    unionAll :: Bool,
+    unionQuery :: SingleQuery}
+  deriving (Eq, Ord, Read, Show)
+
+_Union = Core.Name "hydra.cypher.openCypher.Union"
+
+_Union_all = Core.Name "all"
+
+_Union_query = Core.Name "query"
+
+-- | An UNWIND clause expanding a list expression into bound rows
+data Unwind =
+  Unwind {
+    unwindExpression :: Expression,
+    unwindVariable :: Variable}
+  deriving (Eq, Ord, Read, Show)
+
+_Unwind = Core.Name "hydra.cypher.openCypher.Unwind"
+
+_Unwind_expression = Core.Name "expression"
+
+_Unwind_variable = Core.Name "variable"
+
+-- | An updating clause: CREATE, MERGE, SET, DELETE, or REMOVE
+data UpdatingClause =
+  UpdatingClauseCreate Create |
+  UpdatingClauseMerge Merge |
+  UpdatingClauseDelete Delete |
+  UpdatingClauseSet Set |
+  UpdatingClauseRemove Remove
+  deriving (Eq, Ord, Read, Show)
+
+_UpdatingClause = Core.Name "hydra.cypher.openCypher.UpdatingClause"
+
+_UpdatingClause_create = Core.Name "create"
+
+_UpdatingClause_merge = Core.Name "merge"
+
+_UpdatingClause_delete = Core.Name "delete"
+
+_UpdatingClause_set = Core.Name "set"
+
+_UpdatingClause_remove = Core.Name "remove"
+
+-- | A variable name
+newtype Variable =
+  Variable {
+    unVariable :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_Variable = Core.Name "hydra.cypher.openCypher.Variable"
+
+-- | A variable together with node labels to set, as in SET n:Label
+data VariableAndNodeLabels =
+  VariableAndNodeLabels {
+    variableAndNodeLabelsVariable :: Variable,
+    variableAndNodeLabelsLabels :: NodeLabels}
+  deriving (Eq, Ord, Read, Show)
+
+_VariableAndNodeLabels = Core.Name "hydra.cypher.openCypher.VariableAndNodeLabels"
+
+_VariableAndNodeLabels_variable = Core.Name "variable"
+
+_VariableAndNodeLabels_labels = Core.Name "labels"
+
+-- | A variable assignment of the form variable = expression
+data VariableEquals =
+  VariableEquals {
+    variableEqualsLhs :: Variable,
+    variableEqualsRhs :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_VariableEquals = Core.Name "hydra.cypher.openCypher.VariableEquals"
+
+_VariableEquals_lhs = Core.Name "lhs"
+
+_VariableEquals_rhs = Core.Name "rhs"
+
+-- | A variable increment assignment of the form variable += expression
+data VariablePlusEquals =
+  VariablePlusEquals {
+    variablePlusEqualsLhs :: Variable,
+    variablePlusEqualsRhs :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_VariablePlusEquals = Core.Name "hydra.cypher.openCypher.VariablePlusEquals"
+
+_VariablePlusEquals_lhs = Core.Name "lhs"
+
+_VariablePlusEquals_rhs = Core.Name "rhs"
+
+-- | A WHERE clause filtering by an expression
+newtype Where =
+  Where {
+    unWhere :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_Where = Core.Name "hydra.cypher.openCypher.Where"
+
+-- | The WITH keyword clause: a projection body carrying values forward
+data With =
+  With {
+    withProjection :: ProjectionBody,
+    withWhere :: (Maybe Where)}
+  deriving (Eq, Ord, Read, Show)
+
+_With = Core.Name "hydra.cypher.openCypher.With"
+
+_With_projection = Core.Name "projection"
+
+_With_where = Core.Name "where"
+
+-- | A WITH clause carrying projected values forward, with optional WHERE filtering
+data WithClause =
+  WithClause {
+    withClauseReading :: [ReadingClause],
+    withClauseUpdating :: [UpdatingClause],
+    withClauseWith :: With}
+  deriving (Eq, Ord, Read, Show)
+
+_WithClause = Core.Name "hydra.cypher.openCypher.WithClause"
+
+_WithClause_reading = Core.Name "reading"
+
+_WithClause_updating = Core.Name "updating"
+
+_WithClause_with = Core.Name "with"
+
+-- | An exclusive-or of AND expressions
+newtype XorExpression =
+  XorExpression {
+    unXorExpression :: [AndExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_XorExpression = Core.Name "hydra.cypher.openCypher.XorExpression"
+
+-- | One yielded field of a procedure call, with an optional alias
+data YieldItem =
+  YieldItem {
+    yieldItemField :: (Maybe ProcedureResultField),
+    yieldItemVariable :: Variable}
+  deriving (Eq, Ord, Read, Show)
+
+_YieldItem = Core.Name "hydra.cypher.openCypher.YieldItem"
+
+_YieldItem_field = Core.Name "field"
+
+_YieldItem_variable = Core.Name "variable"
+
+-- | The YIELD items of a standalone CALL, with an optional WHERE clause
+data YieldItems =
+  YieldItems {
+    yieldItemsItems :: [YieldItem],
+    yieldItemsWhere :: (Maybe Where)}
+  deriving (Eq, Ord, Read, Show)
+
+_YieldItems = Core.Name "hydra.cypher.openCypher.YieldItems"
+
+_YieldItems_items = Core.Name "items"
+
+_YieldItems_where = Core.Name "where"
diff --git a/src/main/haskell/Hydra/Decode/Neo4j/Model.hs b/src/main/haskell/Hydra/Decode/Neo4j/Model.hs
--- a/src/main/haskell/Hydra/Decode/Neo4j/Model.hs
+++ b/src/main/haskell/Hydra/Decode/Neo4j/Model.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Term decoders for hydra.neo4j.model
 
 module Hydra.Decode.Neo4j.Model where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Decode.Core as DecodeCore
 import qualified Hydra.Errors as Errors
@@ -17,6 +19,7 @@
 import qualified Hydra.Util as Util
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Decoder for hydra.neo4j.model.Constraint
 constraint :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Constraint
 constraint cx raw =
@@ -42,6 +45,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.ConstraintDefinition
 constraintDefinition :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.ConstraintDefinition
 constraintDefinition cx raw =
@@ -56,6 +60,7 @@
           Model.constraintDefinitionName = field_name,
           Model.constraintDefinitionBody = field_body}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.ConstraintDefinition")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.Element
 element :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Element
 element cx raw =
@@ -73,6 +78,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.ElementId
 elementId :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.ElementId
 elementId cx raw =
@@ -83,6 +89,7 @@
           _ -> Left (Errors.DecodingError "expected string literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.GraphType
 graphType :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.GraphType
 graphType cx raw =
@@ -93,6 +100,7 @@
           Model.graphTypeNodes = field_nodes,
           Model.graphTypeRelationships = field_relationships}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.GraphType")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.IsoDuration
 isoDuration :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.IsoDuration
 isoDuration cx raw =
@@ -129,6 +137,7 @@
           Model.isoDurationSeconds = field_seconds,
           Model.isoDurationNanoseconds = field_nanoseconds}))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.IsoDuration")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.Key
 key :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Key
 key cx raw =
@@ -139,6 +148,7 @@
           _ -> Left (Errors.DecodingError "expected string literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.KeyConstraint
 keyConstraint :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.KeyConstraint
 keyConstraint cx raw =
@@ -148,6 +158,7 @@
         in (Eithers.bind (ExtractCore.requireField "properties" (ExtractCore.decodeList key) fieldMap cx) (\field_properties -> Right (Model.KeyConstraint {
           Model.keyConstraintProperties = field_properties})))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.KeyConstraint")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.LocalDate
 localDate :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.LocalDate
 localDate cx raw =
@@ -177,6 +188,7 @@
           Model.localDateMonth = field_month,
           Model.localDateDay = field_day})))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.LocalDate")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.LocalDateTime
 localDateTime :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.LocalDateTime
 localDateTime cx raw =
@@ -187,6 +199,7 @@
           Model.localDateTimeDate = field_date,
           Model.localDateTimeTime = field_time}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.LocalDateTime")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.LocalTime
 localTime :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.LocalTime
 localTime cx raw =
@@ -223,6 +236,7 @@
           Model.localTimeSecond = field_second,
           Model.localTimeNanosecond = field_nanosecond}))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.LocalTime")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.Node
 node :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Node
 node cx raw =
@@ -234,6 +248,7 @@
           Model.nodeLabels = field_labels,
           Model.nodeProperties = field_properties})))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.Node")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.NodeElementType
 nodeElementType :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.NodeElementType
 nodeElementType cx raw =
@@ -245,6 +260,7 @@
           Model.nodeElementTypeImpliedLabels = field_impliedLabels,
           Model.nodeElementTypeConstraints = field_constraints})))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.NodeElementType")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.NodeLabel
 nodeLabel :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.NodeLabel
 nodeLabel cx raw =
@@ -255,6 +271,7 @@
           _ -> Left (Errors.DecodingError "expected string literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.OffsetTime
 offsetTime :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.OffsetTime
 offsetTime cx raw =
@@ -265,6 +282,7 @@
           Model.offsetTimeTime = field_time,
           Model.offsetTimeOffset = field_offset}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.OffsetTime")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.Path
 path :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Path
 path cx raw =
@@ -275,6 +293,7 @@
           Model.pathStart = field_start,
           Model.pathSegments = field_segments}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.Path")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.Point
 point :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Point
 point cx raw =
@@ -305,6 +324,7 @@
           Model.pointY = field_y,
           Model.pointZ = field_z}))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.Point")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.PropertyExistenceConstraint
 propertyExistenceConstraint :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.PropertyExistenceConstraint
 propertyExistenceConstraint cx raw =
@@ -314,6 +334,7 @@
         in (Eithers.bind (ExtractCore.requireField "property" key fieldMap cx) (\field_property -> Right (Model.PropertyExistenceConstraint {
           Model.propertyExistenceConstraintProperty = field_property})))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.PropertyExistenceConstraint")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.PropertyTypeConstraint
 propertyTypeConstraint :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.PropertyTypeConstraint
 propertyTypeConstraint cx raw =
@@ -324,6 +345,7 @@
           Model.propertyTypeConstraintProperty = field_property,
           Model.propertyTypeConstraintType = field_type}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.PropertyTypeConstraint")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.PropertyUniquenessConstraint
 propertyUniquenessConstraint :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.PropertyUniquenessConstraint
 propertyUniquenessConstraint cx raw =
@@ -333,6 +355,7 @@
         in (Eithers.bind (ExtractCore.requireField "properties" (ExtractCore.decodeList key) fieldMap cx) (\field_properties -> Right (Model.PropertyUniquenessConstraint {
           Model.propertyUniquenessConstraintProperties = field_properties})))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.PropertyUniquenessConstraint")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.Relationship
 relationship :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Relationship
 relationship cx raw =
@@ -346,6 +369,7 @@
           Model.relationshipStart = field_start,
           Model.relationshipEnd = field_end})))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.Relationship")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.RelationshipElementType
 relationshipElementType :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.RelationshipElementType
 relationshipElementType cx raw =
@@ -358,6 +382,7 @@
           Model.relationshipElementTypeEndLabel = field_endLabel,
           Model.relationshipElementTypeConstraints = field_constraints}))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.RelationshipElementType")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.RelationshipType
 relationshipType :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.RelationshipType
 relationshipType cx raw =
@@ -368,6 +393,7 @@
           _ -> Left (Errors.DecodingError "expected string literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.Segment
 segment :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Segment
 segment cx raw =
@@ -378,6 +404,7 @@
           Model.segmentRelationship = field_relationship,
           Model.segmentEnd = field_end}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.Segment")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.SpatialReferenceIdentifier
 spatialReferenceIdentifier :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.SpatialReferenceIdentifier
 spatialReferenceIdentifier cx raw =
@@ -390,6 +417,7 @@
           _ -> Left (Errors.DecodingError "expected int32 literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.Value
 value :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Value
 value cx raw =
@@ -457,6 +485,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.ValueType
 valueType :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.ValueType
 valueType cx raw =
@@ -490,6 +519,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.VectorType
 vectorType :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.VectorType
 vectorType cx raw =
@@ -506,6 +536,7 @@
           Model.vectorTypeElement = field_element,
           Model.vectorTypeDimension = field_dimension}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.neo4j.model.VectorType")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.ZoneId
 zoneId :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.ZoneId
 zoneId cx raw =
@@ -516,6 +547,7 @@
           _ -> Left (Errors.DecodingError "expected string literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.ZoneOffset
 zoneOffset :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.ZoneOffset
 zoneOffset cx raw =
@@ -528,6 +560,7 @@
           _ -> Left (Errors.DecodingError "expected int32 literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.neo4j.model.ZonedDateTime
 zonedDateTime :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.ZonedDateTime
 zonedDateTime cx raw =
diff --git a/src/main/haskell/Hydra/Decode/Pg/Mapping.hs b/src/main/haskell/Hydra/Decode/Pg/Mapping.hs
--- a/src/main/haskell/Hydra/Decode/Pg/Mapping.hs
+++ b/src/main/haskell/Hydra/Decode/Pg/Mapping.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Term decoders for hydra.pg.mapping
 
 module Hydra.Decode.Pg.Mapping where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Decode.Coders as Coders
 import qualified Hydra.Decode.Core as DecodeCore
@@ -19,6 +21,7 @@
 import qualified Hydra.Util as Util
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Decoder for hydra.pg.mapping.AnnotationSchema
 annotationSchema :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Mapping.AnnotationSchema
 annotationSchema cx raw =
@@ -102,6 +105,7 @@
           Mapping.annotationSchemaInEdgeLabel = field_inEdgeLabel,
           Mapping.annotationSchemaIgnore = field_ignore})))))))))))))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.mapping.AnnotationSchema")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.mapping.EdgeSpec
 edgeSpec :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Mapping.EdgeSpec
 edgeSpec cx raw =
@@ -115,6 +119,7 @@
           Mapping.edgeSpecIn = field_in,
           Mapping.edgeSpecProperties = field_properties})))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.mapping.EdgeSpec")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.mapping.ElementSpec
 elementSpec :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Mapping.ElementSpec
 elementSpec cx raw =
@@ -132,6 +137,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.mapping.PropertySpec
 propertySpec :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Mapping.PropertySpec
 propertySpec cx raw =
@@ -142,6 +148,7 @@
           Mapping.propertySpecKey = field_key,
           Mapping.propertySpecValue = field_value}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.mapping.PropertySpec")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.mapping.ValueSpec
 valueSpec :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Mapping.ValueSpec
 valueSpec cx raw =
@@ -165,6 +172,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.mapping.VertexSpec
 vertexSpec :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Mapping.VertexSpec
 vertexSpec cx raw =
diff --git a/src/main/haskell/Hydra/Decode/Pg/Model.hs b/src/main/haskell/Hydra/Decode/Pg/Model.hs
--- a/src/main/haskell/Hydra/Decode/Pg/Model.hs
+++ b/src/main/haskell/Hydra/Decode/Pg/Model.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Term decoders for hydra.pg.model
 
 module Hydra.Decode.Pg.Model where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Decode.Core as DecodeCore
 import qualified Hydra.Errors as Errors
@@ -17,6 +19,7 @@
 import qualified Hydra.Util as Util
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Decoder for hydra.pg.model.AdjacentEdge
 adjacentEdge :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.AdjacentEdge v)
 adjacentEdge v cx raw =
@@ -29,6 +32,7 @@
           Model.adjacentEdgeVertex = field_vertex,
           Model.adjacentEdgeProperties = field_properties}))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.AdjacentEdge")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.Direction
 direction :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Direction
 direction cx raw =
@@ -48,6 +52,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.Edge
 edge :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Edge v)
 edge v cx raw =
@@ -61,6 +66,7 @@
           Model.edgeIn = field_in,
           Model.edgeProperties = field_properties})))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.Edge")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.EdgeLabel
 edgeLabel :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.EdgeLabel
 edgeLabel cx raw =
@@ -71,6 +77,7 @@
           _ -> Left (Errors.DecodingError "expected string literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.EdgeType
 edgeType :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.EdgeType t)
 edgeType t cx raw =
@@ -84,6 +91,7 @@
           Model.edgeTypeIn = field_in,
           Model.edgeTypeProperties = field_properties})))))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.EdgeType")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.Element
 element :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Element v)
 element v cx raw =
@@ -101,6 +109,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.ElementKind
 elementKind :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.ElementKind
 elementKind cx raw =
@@ -118,6 +127,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.ElementTree
 elementTree :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.ElementTree v)
 elementTree v cx raw =
@@ -128,6 +138,7 @@
           Model.elementTreeSelf = field_self,
           Model.elementTreeDependencies = field_dependencies}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.ElementTree")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.ElementType
 elementType :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.ElementType t)
 elementType t cx raw =
@@ -145,6 +156,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.ElementTypeTree
 elementTypeTree :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.ElementTypeTree t)
 elementTypeTree t cx raw =
@@ -155,6 +167,7 @@
           Model.elementTypeTreeSelf = field_self,
           Model.elementTypeTreeDependencies = field_dependencies}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.ElementTypeTree")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.Graph
 graph :: Ord v => ((Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Graph v))
 graph v cx raw =
@@ -165,6 +178,7 @@
           Model.graphVertices = field_vertices,
           Model.graphEdges = field_edges}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.Graph")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.GraphSchema
 graphSchema :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.GraphSchema t)
 graphSchema t cx raw =
@@ -175,6 +189,7 @@
           Model.graphSchemaVertices = field_vertices,
           Model.graphSchemaEdges = field_edges}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.GraphSchema")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.Label
 label :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.Label
 label cx raw =
@@ -192,6 +207,7 @@
           (Core.unName fname),
           " in union"]))) (\f -> f fterm))
       _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.LazyGraph
 lazyGraph :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.LazyGraph v)
 lazyGraph v cx raw =
@@ -202,6 +218,7 @@
           Model.lazyGraphVertices = field_vertices,
           Model.lazyGraphEdges = field_edges}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.LazyGraph")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.Property
 property :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Property v)
 property v cx raw =
@@ -212,6 +229,7 @@
           Model.propertyKey = field_key,
           Model.propertyValue = field_value}))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.Property")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.PropertyKey
 propertyKey :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.PropertyKey
 propertyKey cx raw =
@@ -222,6 +240,7 @@
           _ -> Left (Errors.DecodingError "expected string literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.PropertyType
 propertyType :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.PropertyType t)
 propertyType t cx raw =
@@ -237,6 +256,7 @@
           Model.propertyTypeValue = field_value,
           Model.propertyTypeRequired = field_required})))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.PropertyType")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.Vertex
 vertex :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Vertex v)
 vertex v cx raw =
@@ -248,6 +268,7 @@
           Model.vertexId = field_id,
           Model.vertexProperties = field_properties})))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.Vertex")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.VertexLabel
 vertexLabel :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Model.VertexLabel
 vertexLabel cx raw =
@@ -258,6 +279,7 @@
           _ -> Left (Errors.DecodingError "expected string literal")
         _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx raw2)) (Core.wrappedTermBody v0))
       _ -> Left (Errors.DecodingError "expected wrapped type")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.VertexType
 vertexType :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.VertexType t)
 vertexType t cx raw =
@@ -269,6 +291,7 @@
           Model.vertexTypeId = field_id,
           Model.vertexTypeProperties = field_properties})))))
       _ -> Left (Errors.DecodingError "expected a record of type hydra.pg.model.VertexType")) (ExtractCore.stripWithDecodingError cx raw)
+
 -- | Decoder for hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdges :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.VertexWithAdjacentEdges v)
 vertexWithAdjacentEdges v cx raw =
diff --git a/src/main/haskell/Hydra/Demos/Genpg/Transform.hs b/src/main/haskell/Hydra/Demos/Genpg/Transform.hs
--- a/src/main/haskell/Hydra/Demos/Genpg/Transform.hs
+++ b/src/main/haskell/Hydra/Demos/Genpg/Transform.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Functions for transforming property graph mappings into property graph elements.
 
 module Hydra.Demos.Genpg.Transform where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -32,6 +35,7 @@
 import qualified Hydra.Pg.Model as PgModel
 import qualified Hydra.Query as Query
 import qualified Hydra.Reduction as Reduction
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.Rewriting as Rewriting
 import qualified Hydra.Strip as Strip
@@ -49,9 +53,11 @@
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
 import qualified Data.Set as S
+
 -- | Concatenate two pairs of lists
 concatPairs :: ([t0], [t1]) -> ([t0], [t1]) -> ([t0], [t1])
 concatPairs acc p = (Lists.concat2 (Pairs.first acc) (Pairs.first p), (Lists.concat2 (Pairs.second acc) (Pairs.second p)))
+
 -- | Decode a single cell value based on its column type
 decodeCell :: Tabular.ColumnType -> Maybe String -> Either String (Maybe Core.Term)
 decodeCell colType mvalue =
@@ -89,6 +95,7 @@
                         "Unsupported type for column ",
                         cname])
       in (Optionals.cases mvalue (Right Nothing) decodeValue)
+
 -- | Decode a single data row based on column types
 decodeRow :: [Tabular.ColumnType] -> Tabular.DataRow String -> Either String (Tabular.DataRow Core.Term)
 decodeRow colTypes row =
@@ -98,6 +105,7 @@
         let colType = Pairs.first pair
             mvalue = Pairs.second pair
         in (decodeCell colType mvalue)) (Lists.zip colTypes cells)))
+
 -- | Decode a table of strings into a table of terms based on column type specifications
 decodeTable :: Tabular.TableType -> Tabular.Table String -> Either String (Tabular.Table Core.Term)
 decodeTable tableType table =
@@ -108,18 +116,21 @@
       in (Eithers.map (\decodedRows -> Tabular.Table {
         Tabular.tableHeader = header,
         Tabular.tableData = decodedRows}) (Eithers.mapList (\row -> decodeRow colTypes row) rows))
+
 -- | Check if an element is an edge
 elementIsEdge :: PgModel.Element t0 -> Bool
 elementIsEdge el =
     (\x -> case x of
       PgModel.ElementEdge _ -> True
       _ -> False) el
+
 -- | Check if an element is a vertex
 elementIsVertex :: PgModel.Element t0 -> Bool
 elementIsVertex el =
     (\x -> case x of
       PgModel.ElementVertex _ -> True
       _ -> False) el
+
 -- | Group element specifications by their source table
 elementSpecsByTable :: PgModel.LazyGraph Core.Term -> Either String (M.Map String ([PgModel.Vertex Core.Term], [PgModel.Edge Core.Term]))
 elementSpecsByTable graph =
@@ -143,6 +154,7 @@
                       in (Maps.insert table (Pairs.first current, (Lists.cons e (Pairs.second current))) m)
             vertexMap = Lists.foldl addVertex Maps.empty vertexPairs
         in (Right (Lists.foldl addEdge vertexMap edgePairs)))))
+
 -- | Evaluate an edge specification against a record term to produce an optional edge
 evaluateEdge :: t0 -> Graph.Graph -> PgModel.Edge Core.Term -> Core.Term -> Either Errors.Error (Maybe (PgModel.Edge Core.Term))
 evaluateEdge cx g edgeSpec record =
@@ -164,6 +176,7 @@
         PgModel.edgeOut = outId,
         PgModel.edgeIn = inId,
         PgModel.edgeProperties = props}) mInId)))))))
+
 -- | Evaluate property specifications against a record term
 evaluateProperties :: Ord t1 => (t0 -> Graph.Graph -> M.Map t1 Core.Term -> Core.Term -> Either Errors.Error (M.Map t1 Core.Term))
 evaluateProperties cx g specs record =
@@ -177,6 +190,7 @@
         in (Eithers.bind (Reduction.reduceTerm cx g True (Core.TermApplication (Core.Application {
           Core.applicationFunction = spec,
           Core.applicationArgument = record}))) (\value -> extractMaybe k (Strip.deannotateTerm value)))) (Maps.toList specs)))
+
 -- | Evaluate a vertex specification against a record term to produce an optional vertex
 evaluateVertex :: t0 -> Graph.Graph -> PgModel.Vertex Core.Term -> Core.Term -> Either Errors.Error (Maybe (PgModel.Vertex Core.Term))
 evaluateVertex cx g vertexSpec record =
@@ -190,27 +204,33 @@
         PgModel.vertexLabel = label,
         PgModel.vertexId = id,
         PgModel.vertexProperties = props}) mId))))
+
 -- | Find table names referenced in a term by looking for record projections
 findTablesInTerm :: Core.Term -> S.Set String
 findTablesInTerm term =
     Rewriting.foldOverTerm Coders.TraversalOrderPre (\names -> \t -> case t of
       Core.TermProject v0 -> Sets.insert (Core.unName (Core.projectionTypeName v0)) names
       _ -> names) Sets.empty term
+
 -- | Find table names referenced in multiple terms
 findTablesInTerms :: [Core.Term] -> S.Set String
 findTablesInTerms terms = Sets.unions (Lists.map findTablesInTerm terms)
+
 -- | Check if any element in a list satisfies a predicate
 listAny :: (t0 -> Bool) -> [t0] -> Bool
 listAny pred xs = Logic.not (Lists.null (Lists.filter pred xs))
+
 -- | Construct a LazyGraph from vertices and edges
 makeLazyGraph :: [PgModel.Vertex t0] -> [PgModel.Edge t0] -> PgModel.LazyGraph t0
 makeLazyGraph vertices edges =
     PgModel.LazyGraph {
       PgModel.lazyGraphVertices = vertices,
       PgModel.lazyGraphEdges = edges}
+
 -- | Normalize a CSV field value - empty becomes Nothing
 normalizeField :: String -> Maybe String
 normalizeField s = Logic.ifElse (Strings.null s) Nothing (Just s)
+
 -- | Process a single character during CSV parsing
 parseCsvChar :: (([Maybe String], String), Bool) -> Int -> (([Maybe String], String), Bool)
 parseCsvChar state c =
@@ -220,6 +240,7 @@
           inQuotes = Pairs.second state
       in (Logic.ifElse (Equality.equal c 34) (Logic.ifElse inQuotes ((acc, field), False) (Logic.ifElse (Strings.null field) ((acc, field), True) ((acc, (Strings.cat2 field "\"")), inQuotes))) (Logic.ifElse (Logic.and (Equality.equal c 44) (Logic.not inQuotes)) ((Lists.cons (normalizeField field) acc, ""), False) ((acc, (Strings.cat2 field (Strings.fromList [
         c]))), inQuotes)))
+
 -- | Parse a CSV line into fields. Empty fields become Nothing.
 parseCsvLine :: String -> Either String [Maybe String]
 parseCsvLine line =
@@ -231,12 +252,14 @@
           field = Pairs.second (Pairs.first finalState)
           inQuotes = Pairs.second finalState
       in (Logic.ifElse inQuotes (Left "Unclosed quoted field") (Right (Lists.reverse (Lists.cons (normalizeField field) acc))))
+
 -- | Parse a single CSV line, returning Nothing for empty lines
 parseSingleLine :: String -> Either String (Maybe [Maybe String])
 parseSingleLine line =
 
       let trimmed = stripWhitespace line
       in (Logic.ifElse (Strings.null trimmed) (Right Nothing) (Eithers.map (\x -> Just x) (parseCsvLine trimmed)))
+
 -- | Parse raw CSV lines into a Table of strings
 parseTableLines :: Bool -> [String] -> Either String (Tabular.Table String)
 parseTableLines hasHeader rawLines =
@@ -250,6 +273,7 @@
           Tabular.tableData = (Lists.map (\r -> Tabular.DataRow r) dataRows)}))))) (Right (Tabular.Table {
         Tabular.tableHeader = Nothing,
         Tabular.tableData = (Lists.map (\r -> Tabular.DataRow r) rows)}))))
+
 -- | Strip leading and trailing whitespace from a string
 stripWhitespace :: String -> String
 stripWhitespace s =
@@ -259,6 +283,7 @@
           trimLeft = Lists.dropWhile isSpaceChar chars
           trimRight = Lists.reverse (Lists.dropWhile isSpaceChar (Lists.reverse trimLeft))
       in (Strings.fromList trimRight)
+
 -- | Get the table name for an edge specification. Returns an error if not exactly one table is referenced.
 tableForEdge :: PgModel.Edge Core.Term -> Either String String
 tableForEdge edge =
@@ -277,6 +302,7 @@
         "Specification for ",
         (PgModel.unEdgeLabel label),
         " edges has wrong number of tables"])))
+
 -- | Get the table name for a vertex specification. Returns an error if not exactly one table is referenced.
 tableForVertex :: PgModel.Vertex Core.Term -> Either String String
 tableForVertex vertex =
@@ -289,9 +315,11 @@
         "Specification for ",
         (PgModel.unVertexLabel label),
         " vertices has wrong number of tables"])))
+
 -- | Build a map from table name to table type
 tableTypesByName :: [Tabular.TableType] -> M.Map Relational.RelationName Tabular.TableType
 tableTypesByName tableTypes = Maps.fromList (Lists.map (\t -> (Tabular.tableTypeName t, t)) tableTypes)
+
 -- | Convert a data row to a record term given a table type
 termRowToRecord :: Tabular.TableType -> Tabular.DataRow Core.Term -> Core.Term
 termRowToRecord tableType row =
@@ -306,10 +334,12 @@
           in Core.Field {
             Core.fieldName = (Core.Name cname),
             Core.fieldTerm = (Core.TermOptional mvalue)}) colTypes cells)}))
+
 -- | Transform a record through vertex and edge specifications to produce vertices and edges
 transformRecord :: t0 -> Graph.Graph -> [PgModel.Vertex Core.Term] -> [PgModel.Edge Core.Term] -> Core.Term -> Either Errors.Error ([PgModel.Vertex Core.Term], [PgModel.Edge Core.Term])
 transformRecord cx g vspecs especs record =
     Eithers.bind (Eithers.mapList (\spec -> evaluateVertex cx g spec record) vspecs) (\mVertices -> Eithers.bind (Eithers.mapList (\spec -> evaluateEdge cx g spec record) especs) (\mEdges -> Right (Optionals.cat mVertices, (Optionals.cat mEdges))))
+
 -- | Transform all rows from a table through vertex/edge specifications
 transformTableRows :: t0 -> Graph.Graph -> [PgModel.Vertex Core.Term] -> [PgModel.Edge Core.Term] -> Tabular.TableType -> [Tabular.DataRow Core.Term] -> Either Errors.Error ([PgModel.Vertex Core.Term], [PgModel.Edge Core.Term])
 transformTableRows cx g vspecs especs tableType rows =
diff --git a/src/main/haskell/Hydra/Dsl/Pg/Model.hs b/src/main/haskell/Hydra/Dsl/Pg/Model.hs
--- a/src/main/haskell/Hydra/Dsl/Pg/Model.hs
+++ b/src/main/haskell/Hydra/Dsl/Pg/Model.hs
@@ -1,14 +1,21 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | DSL functions for hydra.pg.model
 
 module Hydra.Dsl.Pg.Model where
+
 import qualified Hydra.Core as Core
+import qualified Hydra.Decode.Pg.Model as DecodePgModel
 import qualified Hydra.Dsl.Core as DslCore
+import qualified Hydra.Encode.Pg.Model as EncodePgModel
+import qualified Hydra.Errors as Errors
+import qualified Hydra.Graph as Graph
 import qualified Hydra.Pg.Model as Model
 import qualified Hydra.Typed as Typed
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | DSL constructor for hydra.pg.model.AdjacentEdge
 adjacentEdge :: Typed.TypedTerm Model.EdgeLabel -> Typed.TypedTerm v -> Typed.TypedTerm v -> Typed.TypedTerm (M.Map Model.PropertyKey v) -> Typed.TypedTerm (Model.AdjacentEdge v)
 adjacentEdge label id vertex properties =
@@ -27,6 +34,11 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm properties)}]}))
+
+-- | DSL name token for hydra.pg.model.AdjacentEdge
+adjacentEdgeAdjacentEdge :: Typed.TypedName (Model.AdjacentEdge v)
+adjacentEdgeAdjacentEdge = Typed.TypedName (Core.Name "hydra.pg.model.AdjacentEdge")
+
 -- | DSL accessor for the id field of hydra.pg.model.AdjacentEdge
 adjacentEdgeId :: Typed.TypedTerm (Model.AdjacentEdge v) -> Typed.TypedTerm v
 adjacentEdgeId x =
@@ -35,6 +47,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.AdjacentEdge"),
         Core.projectionFieldName = (Core.Name "id")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the label field of hydra.pg.model.AdjacentEdge
 adjacentEdgeLabel :: Typed.TypedTerm (Model.AdjacentEdge v) -> Typed.TypedTerm Model.EdgeLabel
 adjacentEdgeLabel x =
@@ -43,6 +56,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.AdjacentEdge"),
         Core.projectionFieldName = (Core.Name "label")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the properties field of hydra.pg.model.AdjacentEdge
 adjacentEdgeProperties :: Typed.TypedTerm (Model.AdjacentEdge v) -> Typed.TypedTerm (M.Map Model.PropertyKey v)
 adjacentEdgeProperties x =
@@ -51,6 +65,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.AdjacentEdge"),
         Core.projectionFieldName = (Core.Name "properties")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the vertex field of hydra.pg.model.AdjacentEdge
 adjacentEdgeVertex :: Typed.TypedTerm (Model.AdjacentEdge v) -> Typed.TypedTerm v
 adjacentEdgeVertex x =
@@ -59,6 +74,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.AdjacentEdge"),
         Core.projectionFieldName = (Core.Name "vertex")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the id field of hydra.pg.model.AdjacentEdge
 adjacentEdgeWithId :: Typed.TypedTerm (Model.AdjacentEdge v) -> Typed.TypedTerm v -> Typed.TypedTerm (Model.AdjacentEdge v)
 adjacentEdgeWithId original newVal =
@@ -89,6 +105,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.AdjacentEdge"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the label field of hydra.pg.model.AdjacentEdge
 adjacentEdgeWithLabel :: Typed.TypedTerm (Model.AdjacentEdge v) -> Typed.TypedTerm Model.EdgeLabel -> Typed.TypedTerm (Model.AdjacentEdge v)
 adjacentEdgeWithLabel original newVal =
@@ -119,6 +136,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.AdjacentEdge"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the properties field of hydra.pg.model.AdjacentEdge
 adjacentEdgeWithProperties :: Typed.TypedTerm (Model.AdjacentEdge v) -> Typed.TypedTerm (M.Map Model.PropertyKey v) -> Typed.TypedTerm (Model.AdjacentEdge v)
 adjacentEdgeWithProperties original newVal =
@@ -149,6 +167,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the vertex field of hydra.pg.model.AdjacentEdge
 adjacentEdgeWithVertex :: Typed.TypedTerm (Model.AdjacentEdge v) -> Typed.TypedTerm v -> Typed.TypedTerm (Model.AdjacentEdge v)
 adjacentEdgeWithVertex original newVal =
@@ -179,6 +198,112 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.AdjacentEdge"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.AdjacentEdge
+decodeAdjacentEdge :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.AdjacentEdge v))
+decodeAdjacentEdge v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.adjacentEdge")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.Edge
+decodeEdge :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Edge v))
+decodeEdge v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.edge")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.EdgeType
+decodeEdgeType :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.EdgeType t))
+decodeEdgeType t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.edgeType")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.Element
+decodeElement :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Element v))
+decodeElement v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.element")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.ElementTree
+decodeElementTree :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.ElementTree v))
+decodeElementTree v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.elementTree")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.ElementType
+decodeElementType :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.ElementType t))
+decodeElementType t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.elementType")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.ElementTypeTree
+decodeElementTypeTree :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.ElementTypeTree t))
+decodeElementTypeTree t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.elementTypeTree")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.Graph
+decodeGraph :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Graph v))
+decodeGraph v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.graph")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.GraphSchema
+decodeGraphSchema :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.GraphSchema t))
+decodeGraphSchema t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.graphSchema")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.LazyGraph
+decodeLazyGraph :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.LazyGraph v))
+decodeLazyGraph v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.lazyGraph")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.Property
+decodeProperty :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Property v))
+decodeProperty v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.property")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.PropertyType
+decodePropertyType :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.PropertyType t))
+decodePropertyType t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.propertyType")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.Vertex
+decodeVertex :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.Vertex v))
+decodeVertex v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.vertex")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.VertexType
+decodeVertexType :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError t) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.VertexType t))
+decodeVertexType t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.vertexType")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the decoder of hydra.pg.model.VertexWithAdjacentEdges
+decodeVertexWithAdjacentEdges :: Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError v) -> Typed.TypedTerm (Graph.Graph -> Core.Term -> Either Errors.DecodingError (Model.VertexWithAdjacentEdges v))
+decodeVertexWithAdjacentEdges v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.decode.pg.model.vertexWithAdjacentEdges")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
 -- | DSL injection for the both variant of hydra.pg.model.Direction
 directionBoth :: Typed.TypedTerm Model.Direction
 directionBoth =
@@ -187,6 +312,11 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "both"),
         Core.fieldTerm = Core.TermUnit}}))
+
+-- | DSL name token for hydra.pg.model.Direction
+directionDirection :: Typed.TypedName Model.Direction
+directionDirection = Typed.TypedName (Core.Name "hydra.pg.model.Direction")
+
 -- | DSL injection for the in variant of hydra.pg.model.Direction
 directionIn :: Typed.TypedTerm Model.Direction
 directionIn =
@@ -195,6 +325,7 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "in"),
         Core.fieldTerm = Core.TermUnit}}))
+
 -- | DSL injection for the out variant of hydra.pg.model.Direction
 directionOut :: Typed.TypedTerm Model.Direction
 directionOut =
@@ -203,6 +334,7 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "out"),
         Core.fieldTerm = Core.TermUnit}}))
+
 -- | DSL injection for the undirected variant of hydra.pg.model.Direction
 directionUndirected :: Typed.TypedTerm Model.Direction
 directionUndirected =
@@ -211,6 +343,7 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "undirected"),
         Core.fieldTerm = Core.TermUnit}}))
+
 -- | DSL constructor for hydra.pg.model.Edge
 edge :: Typed.TypedTerm Model.EdgeLabel -> Typed.TypedTerm v -> Typed.TypedTerm v -> Typed.TypedTerm v -> Typed.TypedTerm (M.Map Model.PropertyKey v) -> Typed.TypedTerm (Model.Edge v)
 edge label id out in_ properties =
@@ -232,6 +365,11 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm properties)}]}))
+
+-- | DSL name token for hydra.pg.model.Edge
+edgeEdge :: Typed.TypedName (Model.Edge v)
+edgeEdge = Typed.TypedName (Core.Name "hydra.pg.model.Edge")
+
 -- | DSL accessor for the id field of hydra.pg.model.Edge
 edgeId :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm v
 edgeId x =
@@ -240,6 +378,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
         Core.projectionFieldName = (Core.Name "id")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the in field of hydra.pg.model.Edge
 edgeIn :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm v
 edgeIn x =
@@ -248,6 +387,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
         Core.projectionFieldName = (Core.Name "in")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the label field of hydra.pg.model.Edge
 edgeLabel :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm Model.EdgeLabel
 edgeLabel x =
@@ -256,12 +396,18 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
         Core.projectionFieldName = (Core.Name "label")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL constructor for the hydra.pg.model.EdgeLabel wrapper
 edgeLabel2 :: Typed.TypedTerm String -> Typed.TypedTerm Model.EdgeLabel
 edgeLabel2 x =
     Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.pg.model.EdgeLabel"),
       Core.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.EdgeLabel
+edgeLabelEdgeLabel :: Typed.TypedName Model.EdgeLabel
+edgeLabelEdgeLabel = Typed.TypedName (Core.Name "hydra.pg.model.EdgeLabel")
+
 -- | DSL accessor for the out field of hydra.pg.model.Edge
 edgeOut :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm v
 edgeOut x =
@@ -270,6 +416,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
         Core.projectionFieldName = (Core.Name "out")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the properties field of hydra.pg.model.Edge
 edgeProperties :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm (M.Map Model.PropertyKey v)
 edgeProperties x =
@@ -278,6 +425,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
         Core.projectionFieldName = (Core.Name "properties")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL constructor for hydra.pg.model.EdgeType
 edgeType :: Typed.TypedTerm Model.EdgeLabel -> Typed.TypedTerm t -> Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm [Model.PropertyType t] -> Typed.TypedTerm (Model.EdgeType t)
 edgeType label id out in_ properties =
@@ -299,6 +447,11 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm properties)}]}))
+
+-- | DSL name token for hydra.pg.model.EdgeType
+edgeTypeEdgeType :: Typed.TypedName (Model.EdgeType t)
+edgeTypeEdgeType = Typed.TypedName (Core.Name "hydra.pg.model.EdgeType")
+
 -- | DSL accessor for the id field of hydra.pg.model.EdgeType
 edgeTypeId :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm t
 edgeTypeId x =
@@ -307,6 +460,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
         Core.projectionFieldName = (Core.Name "id")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the in field of hydra.pg.model.EdgeType
 edgeTypeIn :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm Model.VertexLabel
 edgeTypeIn x =
@@ -315,6 +469,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
         Core.projectionFieldName = (Core.Name "in")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the label field of hydra.pg.model.EdgeType
 edgeTypeLabel :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm Model.EdgeLabel
 edgeTypeLabel x =
@@ -323,6 +478,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
         Core.projectionFieldName = (Core.Name "label")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the out field of hydra.pg.model.EdgeType
 edgeTypeOut :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm Model.VertexLabel
 edgeTypeOut x =
@@ -331,6 +487,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
         Core.projectionFieldName = (Core.Name "out")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the properties field of hydra.pg.model.EdgeType
 edgeTypeProperties :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm [Model.PropertyType t]
 edgeTypeProperties x =
@@ -339,6 +496,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
         Core.projectionFieldName = (Core.Name "properties")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the id field of hydra.pg.model.EdgeType
 edgeTypeWithId :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm t -> Typed.TypedTerm (Model.EdgeType t)
 edgeTypeWithId original newVal =
@@ -376,6 +534,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the in field of hydra.pg.model.EdgeType
 edgeTypeWithIn :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm (Model.EdgeType t)
 edgeTypeWithIn original newVal =
@@ -413,6 +572,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the label field of hydra.pg.model.EdgeType
 edgeTypeWithLabel :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm Model.EdgeLabel -> Typed.TypedTerm (Model.EdgeType t)
 edgeTypeWithLabel original newVal =
@@ -450,6 +610,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the out field of hydra.pg.model.EdgeType
 edgeTypeWithOut :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm (Model.EdgeType t)
 edgeTypeWithOut original newVal =
@@ -487,6 +648,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.EdgeType"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the properties field of hydra.pg.model.EdgeType
 edgeTypeWithProperties :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm [Model.PropertyType t] -> Typed.TypedTerm (Model.EdgeType t)
 edgeTypeWithProperties original newVal =
@@ -524,6 +686,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the id field of hydra.pg.model.Edge
 edgeWithId :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm v -> Typed.TypedTerm (Model.Edge v)
 edgeWithId original newVal =
@@ -561,6 +724,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the in field of hydra.pg.model.Edge
 edgeWithIn :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm v -> Typed.TypedTerm (Model.Edge v)
 edgeWithIn original newVal =
@@ -598,6 +762,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the label field of hydra.pg.model.Edge
 edgeWithLabel :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm Model.EdgeLabel -> Typed.TypedTerm (Model.Edge v)
 edgeWithLabel original newVal =
@@ -635,6 +800,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the out field of hydra.pg.model.Edge
 edgeWithOut :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm v -> Typed.TypedTerm (Model.Edge v)
 edgeWithOut original newVal =
@@ -672,6 +838,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.Edge"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the properties field of hydra.pg.model.Edge
 edgeWithProperties :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm (M.Map Model.PropertyKey v) -> Typed.TypedTerm (Model.Edge v)
 edgeWithProperties original newVal =
@@ -709,6 +876,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL injection for the edge variant of hydra.pg.model.Element
 elementEdge :: Typed.TypedTerm (Model.Edge v) -> Typed.TypedTerm (Model.Element v)
 elementEdge x =
@@ -717,6 +885,11 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "edge"),
         Core.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.pg.model.Element
+elementElement :: Typed.TypedName (Model.Element v)
+elementElement = Typed.TypedName (Core.Name "hydra.pg.model.Element")
+
 -- | DSL injection for the edge variant of hydra.pg.model.ElementKind
 elementKindEdge :: Typed.TypedTerm Model.ElementKind
 elementKindEdge =
@@ -725,6 +898,11 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "edge"),
         Core.fieldTerm = Core.TermUnit}}))
+
+-- | DSL name token for hydra.pg.model.ElementKind
+elementKindElementKind :: Typed.TypedName Model.ElementKind
+elementKindElementKind = Typed.TypedName (Core.Name "hydra.pg.model.ElementKind")
+
 -- | DSL injection for the vertex variant of hydra.pg.model.ElementKind
 elementKindVertex :: Typed.TypedTerm Model.ElementKind
 elementKindVertex =
@@ -733,6 +911,7 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "vertex"),
         Core.fieldTerm = Core.TermUnit}}))
+
 -- | DSL constructor for hydra.pg.model.ElementTree
 elementTree :: Typed.TypedTerm (Model.Element v) -> Typed.TypedTerm [Model.ElementTree v] -> Typed.TypedTerm (Model.ElementTree v)
 elementTree self dependencies =
@@ -745,6 +924,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "dependencies"),
           Core.fieldTerm = (Typed.unTypedTerm dependencies)}]}))
+
 -- | DSL accessor for the dependencies field of hydra.pg.model.ElementTree
 elementTreeDependencies :: Typed.TypedTerm (Model.ElementTree v) -> Typed.TypedTerm [Model.ElementTree v]
 elementTreeDependencies x =
@@ -753,6 +933,11 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.ElementTree"),
         Core.projectionFieldName = (Core.Name "dependencies")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.ElementTree
+elementTreeElementTree :: Typed.TypedName (Model.ElementTree v)
+elementTreeElementTree = Typed.TypedName (Core.Name "hydra.pg.model.ElementTree")
+
 -- | DSL accessor for the self field of hydra.pg.model.ElementTree
 elementTreeSelf :: Typed.TypedTerm (Model.ElementTree v) -> Typed.TypedTerm (Model.Element v)
 elementTreeSelf x =
@@ -761,6 +946,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.ElementTree"),
         Core.projectionFieldName = (Core.Name "self")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the dependencies field of hydra.pg.model.ElementTree
 elementTreeWithDependencies :: Typed.TypedTerm (Model.ElementTree v) -> Typed.TypedTerm [Model.ElementTree v] -> Typed.TypedTerm (Model.ElementTree v)
 elementTreeWithDependencies original newVal =
@@ -777,6 +963,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "dependencies"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the self field of hydra.pg.model.ElementTree
 elementTreeWithSelf :: Typed.TypedTerm (Model.ElementTree v) -> Typed.TypedTerm (Model.Element v) -> Typed.TypedTerm (Model.ElementTree v)
 elementTreeWithSelf original newVal =
@@ -793,6 +980,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.ElementTree"),
               Core.projectionFieldName = (Core.Name "dependencies")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL injection for the edge variant of hydra.pg.model.ElementType
 elementTypeEdge :: Typed.TypedTerm (Model.EdgeType t) -> Typed.TypedTerm (Model.ElementType t)
 elementTypeEdge x =
@@ -801,6 +989,11 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "edge"),
         Core.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.pg.model.ElementType
+elementTypeElementType :: Typed.TypedName (Model.ElementType t)
+elementTypeElementType = Typed.TypedName (Core.Name "hydra.pg.model.ElementType")
+
 -- | DSL constructor for hydra.pg.model.ElementTypeTree
 elementTypeTree :: Typed.TypedTerm (Model.ElementType t) -> Typed.TypedTerm [Model.ElementTypeTree t] -> Typed.TypedTerm (Model.ElementTypeTree t)
 elementTypeTree self dependencies =
@@ -813,6 +1006,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "dependencies"),
           Core.fieldTerm = (Typed.unTypedTerm dependencies)}]}))
+
 -- | DSL accessor for the dependencies field of hydra.pg.model.ElementTypeTree
 elementTypeTreeDependencies :: Typed.TypedTerm (Model.ElementTypeTree t) -> Typed.TypedTerm [Model.ElementTypeTree t]
 elementTypeTreeDependencies x =
@@ -821,6 +1015,11 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.ElementTypeTree"),
         Core.projectionFieldName = (Core.Name "dependencies")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.ElementTypeTree
+elementTypeTreeElementTypeTree :: Typed.TypedName (Model.ElementTypeTree t)
+elementTypeTreeElementTypeTree = Typed.TypedName (Core.Name "hydra.pg.model.ElementTypeTree")
+
 -- | DSL accessor for the self field of hydra.pg.model.ElementTypeTree
 elementTypeTreeSelf :: Typed.TypedTerm (Model.ElementTypeTree t) -> Typed.TypedTerm (Model.ElementType t)
 elementTypeTreeSelf x =
@@ -829,6 +1028,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.ElementTypeTree"),
         Core.projectionFieldName = (Core.Name "self")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the dependencies field of hydra.pg.model.ElementTypeTree
 elementTypeTreeWithDependencies :: Typed.TypedTerm (Model.ElementTypeTree t) -> Typed.TypedTerm [Model.ElementTypeTree t] -> Typed.TypedTerm (Model.ElementTypeTree t)
 elementTypeTreeWithDependencies original newVal =
@@ -845,6 +1045,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "dependencies"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the self field of hydra.pg.model.ElementTypeTree
 elementTypeTreeWithSelf :: Typed.TypedTerm (Model.ElementTypeTree t) -> Typed.TypedTerm (Model.ElementType t) -> Typed.TypedTerm (Model.ElementTypeTree t)
 elementTypeTreeWithSelf original newVal =
@@ -861,6 +1062,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.ElementTypeTree"),
               Core.projectionFieldName = (Core.Name "dependencies")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL injection for the vertex variant of hydra.pg.model.ElementType
 elementTypeVertex :: Typed.TypedTerm (Model.VertexType t) -> Typed.TypedTerm (Model.ElementType t)
 elementTypeVertex x =
@@ -869,6 +1071,7 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "vertex"),
         Core.fieldTerm = (Typed.unTypedTerm x)}}))
+
 -- | DSL injection for the vertex variant of hydra.pg.model.Element
 elementVertex :: Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm (Model.Element v)
 elementVertex x =
@@ -877,6 +1080,112 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "vertex"),
         Core.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.AdjacentEdge
+encodeAdjacentEdge :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.AdjacentEdge v -> Core.Term)
+encodeAdjacentEdge v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.adjacentEdge")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.Edge
+encodeEdge :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.Edge v -> Core.Term)
+encodeEdge v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.edge")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.EdgeType
+encodeEdgeType :: Typed.TypedTerm (t -> Core.Term) -> Typed.TypedTerm (Model.EdgeType t -> Core.Term)
+encodeEdgeType t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.edgeType")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.Element
+encodeElement :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.Element v -> Core.Term)
+encodeElement v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.element")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.ElementTree
+encodeElementTree :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.ElementTree v -> Core.Term)
+encodeElementTree v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.elementTree")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.ElementType
+encodeElementType :: Typed.TypedTerm (t -> Core.Term) -> Typed.TypedTerm (Model.ElementType t -> Core.Term)
+encodeElementType t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.elementType")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.ElementTypeTree
+encodeElementTypeTree :: Typed.TypedTerm (t -> Core.Term) -> Typed.TypedTerm (Model.ElementTypeTree t -> Core.Term)
+encodeElementTypeTree t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.elementTypeTree")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.Graph
+encodeGraph :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.Graph v -> Core.Term)
+encodeGraph v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.graph")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.GraphSchema
+encodeGraphSchema :: Typed.TypedTerm (t -> Core.Term) -> Typed.TypedTerm (Model.GraphSchema t -> Core.Term)
+encodeGraphSchema t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.graphSchema")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.LazyGraph
+encodeLazyGraph :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.LazyGraph v -> Core.Term)
+encodeLazyGraph v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.lazyGraph")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.Property
+encodeProperty :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.Property v -> Core.Term)
+encodeProperty v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.property")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.PropertyType
+encodePropertyType :: Typed.TypedTerm (t -> Core.Term) -> Typed.TypedTerm (Model.PropertyType t -> Core.Term)
+encodePropertyType t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.propertyType")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.Vertex
+encodeVertex :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.Vertex v -> Core.Term)
+encodeVertex v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.vertex")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.VertexType
+encodeVertexType :: Typed.TypedTerm (t -> Core.Term) -> Typed.TypedTerm (Model.VertexType t -> Core.Term)
+encodeVertexType t =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.vertexType")),
+      Core.applicationArgument = (Typed.unTypedTerm t)}))
+
+-- | DSL composition builder for the encoder of hydra.pg.model.VertexWithAdjacentEdges
+encodeVertexWithAdjacentEdges :: Typed.TypedTerm (v -> Core.Term) -> Typed.TypedTerm (Model.VertexWithAdjacentEdges v -> Core.Term)
+encodeVertexWithAdjacentEdges v =
+    Typed.TypedTerm (Core.TermApplication (Core.Application {
+      Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.encode.pg.model.vertexWithAdjacentEdges")),
+      Core.applicationArgument = (Typed.unTypedTerm v)}))
+
 -- | DSL constructor for hydra.pg.model.Graph
 graph :: Ord v => (Typed.TypedTerm (M.Map v (Model.Vertex v)) -> Typed.TypedTerm (M.Map v (Model.Edge v)) -> Typed.TypedTerm (Model.Graph v))
 graph vertices edges =
@@ -889,6 +1198,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = (Typed.unTypedTerm edges)}]}))
+
 -- | DSL accessor for the edges field of hydra.pg.model.Graph
 graphEdges :: Ord v => (Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Edge v)))
 graphEdges x =
@@ -897,6 +1207,11 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Graph"),
         Core.projectionFieldName = (Core.Name "edges")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.Graph
+graphGraph :: Typed.TypedName (Model.Graph v)
+graphGraph = Typed.TypedName (Core.Name "hydra.pg.model.Graph")
+
 -- | DSL constructor for hydra.pg.model.GraphSchema
 graphSchema :: Typed.TypedTerm (M.Map Model.VertexLabel (Model.VertexType t)) -> Typed.TypedTerm (M.Map Model.EdgeLabel (Model.EdgeType t)) -> Typed.TypedTerm (Model.GraphSchema t)
 graphSchema vertices edges =
@@ -909,6 +1224,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = (Typed.unTypedTerm edges)}]}))
+
 -- | DSL accessor for the edges field of hydra.pg.model.GraphSchema
 graphSchemaEdges :: Typed.TypedTerm (Model.GraphSchema t) -> Typed.TypedTerm (M.Map Model.EdgeLabel (Model.EdgeType t))
 graphSchemaEdges x =
@@ -917,6 +1233,11 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.GraphSchema"),
         Core.projectionFieldName = (Core.Name "edges")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.GraphSchema
+graphSchemaGraphSchema :: Typed.TypedName (Model.GraphSchema t)
+graphSchemaGraphSchema = Typed.TypedName (Core.Name "hydra.pg.model.GraphSchema")
+
 -- | DSL accessor for the vertices field of hydra.pg.model.GraphSchema
 graphSchemaVertices :: Typed.TypedTerm (Model.GraphSchema t) -> Typed.TypedTerm (M.Map Model.VertexLabel (Model.VertexType t))
 graphSchemaVertices x =
@@ -925,6 +1246,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.GraphSchema"),
         Core.projectionFieldName = (Core.Name "vertices")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the edges field of hydra.pg.model.GraphSchema
 graphSchemaWithEdges :: Typed.TypedTerm (Model.GraphSchema t) -> Typed.TypedTerm (M.Map Model.EdgeLabel (Model.EdgeType t)) -> Typed.TypedTerm (Model.GraphSchema t)
 graphSchemaWithEdges original newVal =
@@ -941,6 +1263,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the vertices field of hydra.pg.model.GraphSchema
 graphSchemaWithVertices :: Typed.TypedTerm (Model.GraphSchema t) -> Typed.TypedTerm (M.Map Model.VertexLabel (Model.VertexType t)) -> Typed.TypedTerm (Model.GraphSchema t)
 graphSchemaWithVertices original newVal =
@@ -957,6 +1280,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.GraphSchema"),
               Core.projectionFieldName = (Core.Name "edges")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL accessor for the vertices field of hydra.pg.model.Graph
 graphVertices :: Ord v => (Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Vertex v)))
 graphVertices x =
@@ -965,6 +1289,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Graph"),
         Core.projectionFieldName = (Core.Name "vertices")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the edges field of hydra.pg.model.Graph
 graphWithEdges :: Ord v => (Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Edge v)) -> Typed.TypedTerm (Model.Graph v))
 graphWithEdges original newVal =
@@ -981,6 +1306,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the vertices field of hydra.pg.model.Graph
 graphWithVertices :: Ord v => (Typed.TypedTerm (Model.Graph v) -> Typed.TypedTerm (M.Map v (Model.Vertex v)) -> Typed.TypedTerm (Model.Graph v))
 graphWithVertices original newVal =
@@ -997,6 +1323,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.Graph"),
               Core.projectionFieldName = (Core.Name "edges")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL injection for the edge variant of hydra.pg.model.Label
 labelEdge :: Typed.TypedTerm Model.EdgeLabel -> Typed.TypedTerm Model.Label
 labelEdge x =
@@ -1005,6 +1332,11 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "edge"),
         Core.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.pg.model.Label
+labelLabel :: Typed.TypedName Model.Label
+labelLabel = Typed.TypedName (Core.Name "hydra.pg.model.Label")
+
 -- | DSL injection for the vertex variant of hydra.pg.model.Label
 labelVertex :: Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm Model.Label
 labelVertex x =
@@ -1013,6 +1345,7 @@
       Core.injectionField = Core.Field {
         Core.fieldName = (Core.Name "vertex"),
         Core.fieldTerm = (Typed.unTypedTerm x)}}))
+
 -- | DSL constructor for hydra.pg.model.LazyGraph
 lazyGraph :: Typed.TypedTerm [Model.Vertex v] -> Typed.TypedTerm [Model.Edge v] -> Typed.TypedTerm (Model.LazyGraph v)
 lazyGraph vertices edges =
@@ -1025,6 +1358,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = (Typed.unTypedTerm edges)}]}))
+
 -- | DSL accessor for the edges field of hydra.pg.model.LazyGraph
 lazyGraphEdges :: Typed.TypedTerm (Model.LazyGraph v) -> Typed.TypedTerm [Model.Edge v]
 lazyGraphEdges x =
@@ -1033,6 +1367,11 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.LazyGraph"),
         Core.projectionFieldName = (Core.Name "edges")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.LazyGraph
+lazyGraphLazyGraph :: Typed.TypedName (Model.LazyGraph v)
+lazyGraphLazyGraph = Typed.TypedName (Core.Name "hydra.pg.model.LazyGraph")
+
 -- | DSL accessor for the vertices field of hydra.pg.model.LazyGraph
 lazyGraphVertices :: Typed.TypedTerm (Model.LazyGraph v) -> Typed.TypedTerm [Model.Vertex v]
 lazyGraphVertices x =
@@ -1041,6 +1380,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.LazyGraph"),
         Core.projectionFieldName = (Core.Name "vertices")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the edges field of hydra.pg.model.LazyGraph
 lazyGraphWithEdges :: Typed.TypedTerm (Model.LazyGraph v) -> Typed.TypedTerm [Model.Edge v] -> Typed.TypedTerm (Model.LazyGraph v)
 lazyGraphWithEdges original newVal =
@@ -1057,6 +1397,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the vertices field of hydra.pg.model.LazyGraph
 lazyGraphWithVertices :: Typed.TypedTerm (Model.LazyGraph v) -> Typed.TypedTerm [Model.Vertex v] -> Typed.TypedTerm (Model.LazyGraph v)
 lazyGraphWithVertices original newVal =
@@ -1073,6 +1414,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.LazyGraph"),
               Core.projectionFieldName = (Core.Name "edges")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL constructor for hydra.pg.model.Property
 property :: Typed.TypedTerm Model.PropertyKey -> Typed.TypedTerm v -> Typed.TypedTerm (Model.Property v)
 property key value =
@@ -1085,6 +1427,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "value"),
           Core.fieldTerm = (Typed.unTypedTerm value)}]}))
+
 -- | DSL accessor for the key field of hydra.pg.model.Property
 propertyKey :: Typed.TypedTerm (Model.Property v) -> Typed.TypedTerm Model.PropertyKey
 propertyKey x =
@@ -1093,12 +1436,22 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Property"),
         Core.projectionFieldName = (Core.Name "key")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL constructor for the hydra.pg.model.PropertyKey wrapper
 propertyKey2 :: Typed.TypedTerm String -> Typed.TypedTerm Model.PropertyKey
 propertyKey2 x =
     Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.pg.model.PropertyKey"),
       Core.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.PropertyKey
+propertyKeyPropertyKey :: Typed.TypedName Model.PropertyKey
+propertyKeyPropertyKey = Typed.TypedName (Core.Name "hydra.pg.model.PropertyKey")
+
+-- | DSL name token for hydra.pg.model.Property
+propertyProperty :: Typed.TypedName (Model.Property v)
+propertyProperty = Typed.TypedName (Core.Name "hydra.pg.model.Property")
+
 -- | DSL constructor for hydra.pg.model.PropertyType
 propertyType :: Typed.TypedTerm Model.PropertyKey -> Typed.TypedTerm t -> Typed.TypedTerm Bool -> Typed.TypedTerm (Model.PropertyType t)
 propertyType key value required =
@@ -1114,6 +1467,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "required"),
           Core.fieldTerm = (Typed.unTypedTerm required)}]}))
+
 -- | DSL accessor for the key field of hydra.pg.model.PropertyType
 propertyTypeKey :: Typed.TypedTerm (Model.PropertyType t) -> Typed.TypedTerm Model.PropertyKey
 propertyTypeKey x =
@@ -1122,6 +1476,11 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.PropertyType"),
         Core.projectionFieldName = (Core.Name "key")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.PropertyType
+propertyTypePropertyType :: Typed.TypedName (Model.PropertyType t)
+propertyTypePropertyType = Typed.TypedName (Core.Name "hydra.pg.model.PropertyType")
+
 -- | DSL accessor for the required field of hydra.pg.model.PropertyType
 propertyTypeRequired :: Typed.TypedTerm (Model.PropertyType t) -> Typed.TypedTerm Bool
 propertyTypeRequired x =
@@ -1130,6 +1489,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.PropertyType"),
         Core.projectionFieldName = (Core.Name "required")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the value field of hydra.pg.model.PropertyType
 propertyTypeValue :: Typed.TypedTerm (Model.PropertyType t) -> Typed.TypedTerm t
 propertyTypeValue x =
@@ -1138,6 +1498,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.PropertyType"),
         Core.projectionFieldName = (Core.Name "value")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the key field of hydra.pg.model.PropertyType
 propertyTypeWithKey :: Typed.TypedTerm (Model.PropertyType t) -> Typed.TypedTerm Model.PropertyKey -> Typed.TypedTerm (Model.PropertyType t)
 propertyTypeWithKey original newVal =
@@ -1161,6 +1522,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.PropertyType"),
               Core.projectionFieldName = (Core.Name "required")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the required field of hydra.pg.model.PropertyType
 propertyTypeWithRequired :: Typed.TypedTerm (Model.PropertyType t) -> Typed.TypedTerm Bool -> Typed.TypedTerm (Model.PropertyType t)
 propertyTypeWithRequired original newVal =
@@ -1184,6 +1546,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "required"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the value field of hydra.pg.model.PropertyType
 propertyTypeWithValue :: Typed.TypedTerm (Model.PropertyType t) -> Typed.TypedTerm t -> Typed.TypedTerm (Model.PropertyType t)
 propertyTypeWithValue original newVal =
@@ -1207,6 +1570,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.PropertyType"),
               Core.projectionFieldName = (Core.Name "required")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL accessor for the value field of hydra.pg.model.Property
 propertyValue :: Typed.TypedTerm (Model.Property v) -> Typed.TypedTerm v
 propertyValue x =
@@ -1215,6 +1579,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Property"),
         Core.projectionFieldName = (Core.Name "value")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL updater for the key field of hydra.pg.model.Property
 propertyWithKey :: Typed.TypedTerm (Model.Property v) -> Typed.TypedTerm Model.PropertyKey -> Typed.TypedTerm (Model.Property v)
 propertyWithKey original newVal =
@@ -1231,6 +1596,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.Property"),
               Core.projectionFieldName = (Core.Name "value")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the value field of hydra.pg.model.Property
 propertyWithValue :: Typed.TypedTerm (Model.Property v) -> Typed.TypedTerm v -> Typed.TypedTerm (Model.Property v)
 propertyWithValue original newVal =
@@ -1247,24 +1613,28 @@
         Core.Field {
           Core.fieldName = (Core.Name "value"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL accessor for the body of hydra.pg.model.EdgeLabel
 unEdgeLabel :: Typed.TypedTerm Model.EdgeLabel -> Typed.TypedTerm String
 unEdgeLabel x =
     Typed.TypedTerm (Core.TermApplication (Core.Application {
       Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.pg.model.EdgeLabel")),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the body of hydra.pg.model.PropertyKey
 unPropertyKey :: Typed.TypedTerm Model.PropertyKey -> Typed.TypedTerm String
 unPropertyKey x =
     Typed.TypedTerm (Core.TermApplication (Core.Application {
       Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.pg.model.PropertyKey")),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the body of hydra.pg.model.VertexLabel
 unVertexLabel :: Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm String
 unVertexLabel x =
     Typed.TypedTerm (Core.TermApplication (Core.Application {
       Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.pg.model.VertexLabel")),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL constructor for hydra.pg.model.Vertex
 vertex :: Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm v -> Typed.TypedTerm (M.Map Model.PropertyKey v) -> Typed.TypedTerm (Model.Vertex v)
 vertex label id properties =
@@ -1280,6 +1650,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm properties)}]}))
+
 -- | DSL accessor for the id field of hydra.pg.model.Vertex
 vertexId :: Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm v
 vertexId x =
@@ -1288,6 +1659,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Vertex"),
         Core.projectionFieldName = (Core.Name "id")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the label field of hydra.pg.model.Vertex
 vertexLabel :: Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm Model.VertexLabel
 vertexLabel x =
@@ -1296,12 +1668,18 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Vertex"),
         Core.projectionFieldName = (Core.Name "label")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL constructor for the hydra.pg.model.VertexLabel wrapper
 vertexLabel2 :: Typed.TypedTerm String -> Typed.TypedTerm Model.VertexLabel
 vertexLabel2 x =
     Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.pg.model.VertexLabel"),
       Core.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.VertexLabel
+vertexLabelVertexLabel :: Typed.TypedName Model.VertexLabel
+vertexLabelVertexLabel = Typed.TypedName (Core.Name "hydra.pg.model.VertexLabel")
+
 -- | DSL accessor for the properties field of hydra.pg.model.Vertex
 vertexProperties :: Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm (M.Map Model.PropertyKey v)
 vertexProperties x =
@@ -1310,6 +1688,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.Vertex"),
         Core.projectionFieldName = (Core.Name "properties")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL constructor for hydra.pg.model.VertexType
 vertexType :: Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm t -> Typed.TypedTerm [Model.PropertyType t] -> Typed.TypedTerm (Model.VertexType t)
 vertexType label id properties =
@@ -1325,6 +1704,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm properties)}]}))
+
 -- | DSL accessor for the id field of hydra.pg.model.VertexType
 vertexTypeId :: Typed.TypedTerm (Model.VertexType t) -> Typed.TypedTerm t
 vertexTypeId x =
@@ -1333,6 +1713,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexType"),
         Core.projectionFieldName = (Core.Name "id")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the label field of hydra.pg.model.VertexType
 vertexTypeLabel :: Typed.TypedTerm (Model.VertexType t) -> Typed.TypedTerm Model.VertexLabel
 vertexTypeLabel x =
@@ -1341,6 +1722,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexType"),
         Core.projectionFieldName = (Core.Name "label")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the properties field of hydra.pg.model.VertexType
 vertexTypeProperties :: Typed.TypedTerm (Model.VertexType t) -> Typed.TypedTerm [Model.PropertyType t]
 vertexTypeProperties x =
@@ -1349,6 +1731,11 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexType"),
         Core.projectionFieldName = (Core.Name "properties")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.VertexType
+vertexTypeVertexType :: Typed.TypedName (Model.VertexType t)
+vertexTypeVertexType = Typed.TypedName (Core.Name "hydra.pg.model.VertexType")
+
 -- | DSL updater for the id field of hydra.pg.model.VertexType
 vertexTypeWithId :: Typed.TypedTerm (Model.VertexType t) -> Typed.TypedTerm t -> Typed.TypedTerm (Model.VertexType t)
 vertexTypeWithId original newVal =
@@ -1372,6 +1759,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexType"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the label field of hydra.pg.model.VertexType
 vertexTypeWithLabel :: Typed.TypedTerm (Model.VertexType t) -> Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm (Model.VertexType t)
 vertexTypeWithLabel original newVal =
@@ -1395,6 +1783,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexType"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the properties field of hydra.pg.model.VertexType
 vertexTypeWithProperties :: Typed.TypedTerm (Model.VertexType t) -> Typed.TypedTerm [Model.PropertyType t] -> Typed.TypedTerm (Model.VertexType t)
 vertexTypeWithProperties original newVal =
@@ -1418,6 +1807,11 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL name token for hydra.pg.model.Vertex
+vertexVertex :: Typed.TypedName (Model.Vertex v)
+vertexVertex = Typed.TypedName (Core.Name "hydra.pg.model.Vertex")
+
 -- | DSL constructor for hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdges :: Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm [Model.AdjacentEdge v] -> Typed.TypedTerm [Model.AdjacentEdge v] -> Typed.TypedTerm (Model.VertexWithAdjacentEdges v)
 vertexWithAdjacentEdges vertex ins outs =
@@ -1433,6 +1827,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "outs"),
           Core.fieldTerm = (Typed.unTypedTerm outs)}]}))
+
 -- | DSL accessor for the ins field of hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdgesIns :: Typed.TypedTerm (Model.VertexWithAdjacentEdges v) -> Typed.TypedTerm [Model.AdjacentEdge v]
 vertexWithAdjacentEdgesIns x =
@@ -1441,6 +1836,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexWithAdjacentEdges"),
         Core.projectionFieldName = (Core.Name "ins")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the outs field of hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdgesOuts :: Typed.TypedTerm (Model.VertexWithAdjacentEdges v) -> Typed.TypedTerm [Model.AdjacentEdge v]
 vertexWithAdjacentEdgesOuts x =
@@ -1449,6 +1845,7 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexWithAdjacentEdges"),
         Core.projectionFieldName = (Core.Name "outs")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
 -- | DSL accessor for the vertex field of hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdgesVertex :: Typed.TypedTerm (Model.VertexWithAdjacentEdges v) -> Typed.TypedTerm (Model.Vertex v)
 vertexWithAdjacentEdgesVertex x =
@@ -1457,6 +1854,11 @@
         Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexWithAdjacentEdges"),
         Core.projectionFieldName = (Core.Name "vertex")})),
       Core.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.pg.model.VertexWithAdjacentEdges
+vertexWithAdjacentEdgesVertexWithAdjacentEdges :: Typed.TypedName (Model.VertexWithAdjacentEdges v)
+vertexWithAdjacentEdgesVertexWithAdjacentEdges = Typed.TypedName (Core.Name "hydra.pg.model.VertexWithAdjacentEdges")
+
 -- | DSL updater for the ins field of hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdgesWithIns :: Typed.TypedTerm (Model.VertexWithAdjacentEdges v) -> Typed.TypedTerm [Model.AdjacentEdge v] -> Typed.TypedTerm (Model.VertexWithAdjacentEdges v)
 vertexWithAdjacentEdgesWithIns original newVal =
@@ -1480,6 +1882,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexWithAdjacentEdges"),
               Core.projectionFieldName = (Core.Name "outs")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the outs field of hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdgesWithOuts :: Typed.TypedTerm (Model.VertexWithAdjacentEdges v) -> Typed.TypedTerm [Model.AdjacentEdge v] -> Typed.TypedTerm (Model.VertexWithAdjacentEdges v)
 vertexWithAdjacentEdgesWithOuts original newVal =
@@ -1503,6 +1906,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "outs"),
           Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
 -- | DSL updater for the vertex field of hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdgesWithVertex :: Typed.TypedTerm (Model.VertexWithAdjacentEdges v) -> Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm (Model.VertexWithAdjacentEdges v)
 vertexWithAdjacentEdgesWithVertex original newVal =
@@ -1526,6 +1930,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.VertexWithAdjacentEdges"),
               Core.projectionFieldName = (Core.Name "outs")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the id field of hydra.pg.model.Vertex
 vertexWithId :: Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm v -> Typed.TypedTerm (Model.Vertex v)
 vertexWithId original newVal =
@@ -1549,6 +1954,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.Vertex"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the label field of hydra.pg.model.Vertex
 vertexWithLabel :: Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm Model.VertexLabel -> Typed.TypedTerm (Model.Vertex v)
 vertexWithLabel original newVal =
@@ -1572,6 +1978,7 @@
               Core.projectionTypeName = (Core.Name "hydra.pg.model.Vertex"),
               Core.projectionFieldName = (Core.Name "properties")})),
             Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
 -- | DSL updater for the properties field of hydra.pg.model.Vertex
 vertexWithProperties :: Typed.TypedTerm (Model.Vertex v) -> Typed.TypedTerm (M.Map Model.PropertyKey v) -> Typed.TypedTerm (Model.Vertex v)
 vertexWithProperties original newVal =
diff --git a/src/main/haskell/Hydra/Encode/Neo4j/Model.hs b/src/main/haskell/Hydra/Encode/Neo4j/Model.hs
--- a/src/main/haskell/Hydra/Encode/Neo4j/Model.hs
+++ b/src/main/haskell/Hydra/Encode/Neo4j/Model.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Term encoders for hydra.neo4j.model
 
 module Hydra.Encode.Neo4j.Model where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Encode.Core as EncodeCore
 import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
@@ -11,6 +13,7 @@
 import qualified Hydra.Neo4j.Model as Model
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Encoder for hydra.neo4j.model.Constraint
 constraint :: Model.Constraint -> Core.Term
 constraint x =
@@ -35,6 +38,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "propertyUniqueness"),
           Core.fieldTerm = (propertyUniquenessConstraint v0)}})
+
 -- | Encoder for hydra.neo4j.model.ConstraintDefinition
 constraintDefinition :: Model.ConstraintDefinition -> Core.Term
 constraintDefinition x =
@@ -47,6 +51,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "body"),
           Core.fieldTerm = (constraint (Model.constraintDefinitionBody x))}]})
+
 -- | Encoder for hydra.neo4j.model.Element
 element :: Model.Element -> Core.Term
 element x =
@@ -61,12 +66,14 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "relationship"),
           Core.fieldTerm = (relationship v0)}})
+
 -- | Encoder for hydra.neo4j.model.ElementId
 elementId :: Model.ElementId -> Core.Term
 elementId x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.neo4j.model.ElementId"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Model.unElementId x))})
+
 -- | Encoder for hydra.neo4j.model.GraphType
 graphType :: Model.GraphType -> Core.Term
 graphType x =
@@ -79,6 +86,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "relationships"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map relationshipElementType xs)) (Model.graphTypeRelationships x))}]})
+
 -- | Encoder for hydra.neo4j.model.IsoDuration
 isoDuration :: Model.IsoDuration -> Core.Term
 isoDuration x =
@@ -97,12 +105,14 @@
         Core.Field {
           Core.fieldName = (Core.Name "nanoseconds"),
           Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Model.isoDurationNanoseconds x))}]})
+
 -- | Encoder for hydra.neo4j.model.Key
 key :: Model.Key -> Core.Term
 key x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.neo4j.model.Key"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Model.unKey x))})
+
 -- | Encoder for hydra.neo4j.model.KeyConstraint
 keyConstraint :: Model.KeyConstraint -> Core.Term
 keyConstraint x =
@@ -112,6 +122,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map key xs)) (Model.keyConstraintProperties x))}]})
+
 -- | Encoder for hydra.neo4j.model.LocalDate
 localDate :: Model.LocalDate -> Core.Term
 localDate x =
@@ -127,6 +138,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "day"),
           Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Model.localDateDay x))}]})
+
 -- | Encoder for hydra.neo4j.model.LocalDateTime
 localDateTime :: Model.LocalDateTime -> Core.Term
 localDateTime x =
@@ -139,6 +151,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "time"),
           Core.fieldTerm = (localTime (Model.localDateTimeTime x))}]})
+
 -- | Encoder for hydra.neo4j.model.LocalTime
 localTime :: Model.LocalTime -> Core.Term
 localTime x =
@@ -157,6 +170,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "nanosecond"),
           Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Model.localTimeNanosecond x))}]})
+
 -- | Encoder for hydra.neo4j.model.Node
 node :: Model.Node -> Core.Term
 node x =
@@ -172,6 +186,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\m -> Core.TermMap (Maps.bimap key value m)) (Model.nodeProperties x))}]})
+
 -- | Encoder for hydra.neo4j.model.NodeElementType
 nodeElementType :: Model.NodeElementType -> Core.Term
 nodeElementType x =
@@ -187,12 +202,14 @@
         Core.Field {
           Core.fieldName = (Core.Name "constraints"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map constraintDefinition xs)) (Model.nodeElementTypeConstraints x))}]})
+
 -- | Encoder for hydra.neo4j.model.NodeLabel
 nodeLabel :: Model.NodeLabel -> Core.Term
 nodeLabel x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.neo4j.model.NodeLabel"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Model.unNodeLabel x))})
+
 -- | Encoder for hydra.neo4j.model.OffsetTime
 offsetTime :: Model.OffsetTime -> Core.Term
 offsetTime x =
@@ -205,6 +222,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "offset"),
           Core.fieldTerm = (zoneOffset (Model.offsetTimeOffset x))}]})
+
 -- | Encoder for hydra.neo4j.model.Path
 path :: Model.Path -> Core.Term
 path x =
@@ -217,6 +235,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "segments"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map segment xs)) (Model.pathSegments x))}]})
+
 -- | Encoder for hydra.neo4j.model.Point
 point :: Model.Point -> Core.Term
 point x =
@@ -235,6 +254,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "z"),
           Core.fieldTerm = ((\opt -> Core.TermOptional (Optionals.map (\x2 -> Core.TermLiteral (Core.LiteralFloat (Core.FloatValueFloat64 x2))) opt)) (Model.pointZ x))}]})
+
 -- | Encoder for hydra.neo4j.model.PropertyExistenceConstraint
 propertyExistenceConstraint :: Model.PropertyExistenceConstraint -> Core.Term
 propertyExistenceConstraint x =
@@ -244,6 +264,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "property"),
           Core.fieldTerm = (key (Model.propertyExistenceConstraintProperty x))}]})
+
 -- | Encoder for hydra.neo4j.model.PropertyTypeConstraint
 propertyTypeConstraint :: Model.PropertyTypeConstraint -> Core.Term
 propertyTypeConstraint x =
@@ -256,6 +277,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "type"),
           Core.fieldTerm = (valueType (Model.propertyTypeConstraintType x))}]})
+
 -- | Encoder for hydra.neo4j.model.PropertyUniquenessConstraint
 propertyUniquenessConstraint :: Model.PropertyUniquenessConstraint -> Core.Term
 propertyUniquenessConstraint x =
@@ -265,6 +287,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map key xs)) (Model.propertyUniquenessConstraintProperties x))}]})
+
 -- | Encoder for hydra.neo4j.model.Relationship
 relationship :: Model.Relationship -> Core.Term
 relationship x =
@@ -286,6 +309,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "end"),
           Core.fieldTerm = (elementId (Model.relationshipEnd x))}]})
+
 -- | Encoder for hydra.neo4j.model.RelationshipElementType
 relationshipElementType :: Model.RelationshipElementType -> Core.Term
 relationshipElementType x =
@@ -304,12 +328,14 @@
         Core.Field {
           Core.fieldName = (Core.Name "constraints"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map constraintDefinition xs)) (Model.relationshipElementTypeConstraints x))}]})
+
 -- | Encoder for hydra.neo4j.model.RelationshipType
 relationshipType :: Model.RelationshipType -> Core.Term
 relationshipType x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.neo4j.model.RelationshipType"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Model.unRelationshipType x))})
+
 -- | Encoder for hydra.neo4j.model.Segment
 segment :: Model.Segment -> Core.Term
 segment x =
@@ -322,12 +348,14 @@
         Core.Field {
           Core.fieldName = (Core.Name "end"),
           Core.fieldTerm = (node (Model.segmentEnd x))}]})
+
 -- | Encoder for hydra.neo4j.model.SpatialReferenceIdentifier
 spatialReferenceIdentifier :: Model.SpatialReferenceIdentifier -> Core.Term
 spatialReferenceIdentifier x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.neo4j.model.SpatialReferenceIdentifier"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Model.unSpatialReferenceIdentifier x))})
+
 -- | Encoder for hydra.neo4j.model.Value
 value :: Model.Value -> Core.Term
 value x =
@@ -422,6 +450,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "time"),
           Core.fieldTerm = (offsetTime v0)}})
+
 -- | Encoder for hydra.neo4j.model.ValueType
 valueType :: Model.ValueType -> Core.Term
 valueType x =
@@ -496,6 +525,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "union"),
           Core.fieldTerm = (Core.TermList (Lists.map valueType v0))}})
+
 -- | Encoder for hydra.neo4j.model.VectorType
 vectorType :: Model.VectorType -> Core.Term
 vectorType x =
@@ -508,18 +538,21 @@
         Core.Field {
           Core.fieldName = (Core.Name "dimension"),
           Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Model.vectorTypeDimension x))}]})
+
 -- | Encoder for hydra.neo4j.model.ZoneId
 zoneId :: Model.ZoneId -> Core.Term
 zoneId x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.neo4j.model.ZoneId"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Model.unZoneId x))})
+
 -- | Encoder for hydra.neo4j.model.ZoneOffset
 zoneOffset :: Model.ZoneOffset -> Core.Term
 zoneOffset x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.neo4j.model.ZoneOffset"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Model.unZoneOffset x))})
+
 -- | Encoder for hydra.neo4j.model.ZonedDateTime
 zonedDateTime :: Model.ZonedDateTime -> Core.Term
 zonedDateTime x =
diff --git a/src/main/haskell/Hydra/Encode/Pg/Mapping.hs b/src/main/haskell/Hydra/Encode/Pg/Mapping.hs
--- a/src/main/haskell/Hydra/Encode/Pg/Mapping.hs
+++ b/src/main/haskell/Hydra/Encode/Pg/Mapping.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Term encoders for hydra.pg.mapping
 
 module Hydra.Encode.Pg.Mapping where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Encode.Coders as Coders
 import qualified Hydra.Encode.Core as EncodeCore
@@ -10,6 +12,7 @@
 import qualified Hydra.Pg.Mapping as Mapping
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Encoder for hydra.pg.mapping.AnnotationSchema
 annotationSchema :: Mapping.AnnotationSchema -> Core.Term
 annotationSchema x =
@@ -61,6 +64,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "ignore"),
           Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Mapping.annotationSchemaIgnore x))}]})
+
 -- | Encoder for hydra.pg.mapping.EdgeSpec
 edgeSpec :: Mapping.EdgeSpec -> Core.Term
 edgeSpec x =
@@ -82,6 +86,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map propertySpec xs)) (Mapping.edgeSpecProperties x))}]})
+
 -- | Encoder for hydra.pg.mapping.ElementSpec
 elementSpec :: Mapping.ElementSpec -> Core.Term
 elementSpec x =
@@ -96,6 +101,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "edge"),
           Core.fieldTerm = (edgeSpec v0)}})
+
 -- | Encoder for hydra.pg.mapping.PropertySpec
 propertySpec :: Mapping.PropertySpec -> Core.Term
 propertySpec x =
@@ -108,6 +114,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "value"),
           Core.fieldTerm = (valueSpec (Mapping.propertySpecValue x))}]})
+
 -- | Encoder for hydra.pg.mapping.ValueSpec
 valueSpec :: Mapping.ValueSpec -> Core.Term
 valueSpec x =
@@ -122,6 +129,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "pattern"),
           Core.fieldTerm = (Core.TermLiteral (Core.LiteralString v0))}})
+
 -- | Encoder for hydra.pg.mapping.VertexSpec
 vertexSpec :: Mapping.VertexSpec -> Core.Term
 vertexSpec x =
diff --git a/src/main/haskell/Hydra/Encode/Pg/Model.hs b/src/main/haskell/Hydra/Encode/Pg/Model.hs
--- a/src/main/haskell/Hydra/Encode/Pg/Model.hs
+++ b/src/main/haskell/Hydra/Encode/Pg/Model.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Term encoders for hydra.pg.model
 
 module Hydra.Encode.Pg.Model where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Encode.Core as EncodeCore
 import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
@@ -9,6 +11,7 @@
 import qualified Hydra.Pg.Model as Model
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Encoder for hydra.pg.model.AdjacentEdge
 adjacentEdge :: (v -> Core.Term) -> Model.AdjacentEdge v -> Core.Term
 adjacentEdge v x =
@@ -27,6 +30,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\m -> Core.TermMap (Maps.bimap propertyKey v m)) (Model.adjacentEdgeProperties x))}]})
+
 -- | Encoder for hydra.pg.model.Direction
 direction :: Model.Direction -> Core.Term
 direction x =
@@ -51,6 +55,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "undirected"),
           Core.fieldTerm = Core.TermUnit}})
+
 -- | Encoder for hydra.pg.model.Edge
 edge :: (v -> Core.Term) -> Model.Edge v -> Core.Term
 edge v x =
@@ -72,12 +77,14 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\m -> Core.TermMap (Maps.bimap propertyKey v m)) (Model.edgeProperties x))}]})
+
 -- | Encoder for hydra.pg.model.EdgeLabel
 edgeLabel :: Model.EdgeLabel -> Core.Term
 edgeLabel x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.pg.model.EdgeLabel"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Model.unEdgeLabel x))})
+
 -- | Encoder for hydra.pg.model.EdgeType
 edgeType :: (t -> Core.Term) -> Model.EdgeType t -> Core.Term
 edgeType t x =
@@ -99,6 +106,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (propertyType t) xs)) (Model.edgeTypeProperties x))}]})
+
 -- | Encoder for hydra.pg.model.Element
 element :: (v -> Core.Term) -> Model.Element v -> Core.Term
 element v x =
@@ -113,6 +121,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "edge"),
           Core.fieldTerm = (edge v v0)}})
+
 -- | Encoder for hydra.pg.model.ElementKind
 elementKind :: Model.ElementKind -> Core.Term
 elementKind x =
@@ -127,6 +136,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "edge"),
           Core.fieldTerm = Core.TermUnit}})
+
 -- | Encoder for hydra.pg.model.ElementTree
 elementTree :: (v -> Core.Term) -> Model.ElementTree v -> Core.Term
 elementTree v x =
@@ -139,6 +149,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "dependencies"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (elementTree v) xs)) (Model.elementTreeDependencies x))}]})
+
 -- | Encoder for hydra.pg.model.ElementType
 elementType :: (t -> Core.Term) -> Model.ElementType t -> Core.Term
 elementType t x =
@@ -153,6 +164,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "edge"),
           Core.fieldTerm = (edgeType t v0)}})
+
 -- | Encoder for hydra.pg.model.ElementTypeTree
 elementTypeTree :: (t -> Core.Term) -> Model.ElementTypeTree t -> Core.Term
 elementTypeTree t x =
@@ -165,6 +177,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "dependencies"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (elementTypeTree t) xs)) (Model.elementTypeTreeDependencies x))}]})
+
 -- | Encoder for hydra.pg.model.Graph
 graph :: Ord v => ((v -> Core.Term) -> Model.Graph v -> Core.Term)
 graph v x =
@@ -177,6 +190,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = ((\m -> Core.TermMap (Maps.bimap v (edge v) m)) (Model.graphEdges x))}]})
+
 -- | Encoder for hydra.pg.model.GraphSchema
 graphSchema :: (t -> Core.Term) -> Model.GraphSchema t -> Core.Term
 graphSchema t x =
@@ -189,6 +203,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = ((\m -> Core.TermMap (Maps.bimap edgeLabel (edgeType t) m)) (Model.graphSchemaEdges x))}]})
+
 -- | Encoder for hydra.pg.model.Label
 label :: Model.Label -> Core.Term
 label x =
@@ -203,6 +218,7 @@
         Core.injectionField = Core.Field {
           Core.fieldName = (Core.Name "edge"),
           Core.fieldTerm = (edgeLabel v0)}})
+
 -- | Encoder for hydra.pg.model.LazyGraph
 lazyGraph :: (v -> Core.Term) -> Model.LazyGraph v -> Core.Term
 lazyGraph v x =
@@ -215,6 +231,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "edges"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (edge v) xs)) (Model.lazyGraphEdges x))}]})
+
 -- | Encoder for hydra.pg.model.Property
 property :: (v -> Core.Term) -> Model.Property v -> Core.Term
 property v x =
@@ -227,12 +244,14 @@
         Core.Field {
           Core.fieldName = (Core.Name "value"),
           Core.fieldTerm = (v (Model.propertyValue x))}]})
+
 -- | Encoder for hydra.pg.model.PropertyKey
 propertyKey :: Model.PropertyKey -> Core.Term
 propertyKey x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.pg.model.PropertyKey"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Model.unPropertyKey x))})
+
 -- | Encoder for hydra.pg.model.PropertyType
 propertyType :: (t -> Core.Term) -> Model.PropertyType t -> Core.Term
 propertyType t x =
@@ -248,6 +267,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "required"),
           Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralBoolean x2)) (Model.propertyTypeRequired x))}]})
+
 -- | Encoder for hydra.pg.model.Vertex
 vertex :: (v -> Core.Term) -> Model.Vertex v -> Core.Term
 vertex v x =
@@ -263,12 +283,14 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\m -> Core.TermMap (Maps.bimap propertyKey v m)) (Model.vertexProperties x))}]})
+
 -- | Encoder for hydra.pg.model.VertexLabel
 vertexLabel :: Model.VertexLabel -> Core.Term
 vertexLabel x =
     Core.TermWrap (Core.WrappedTerm {
       Core.wrappedTermTypeName = (Core.Name "hydra.pg.model.VertexLabel"),
       Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Model.unVertexLabel x))})
+
 -- | Encoder for hydra.pg.model.VertexType
 vertexType :: (t -> Core.Term) -> Model.VertexType t -> Core.Term
 vertexType t x =
@@ -284,6 +306,7 @@
         Core.Field {
           Core.fieldName = (Core.Name "properties"),
           Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (propertyType t) xs)) (Model.vertexTypeProperties x))}]})
+
 -- | Encoder for hydra.pg.model.VertexWithAdjacentEdges
 vertexWithAdjacentEdges :: (v -> Core.Term) -> Model.VertexWithAdjacentEdges v -> Core.Term
 vertexWithAdjacentEdges v x =
diff --git a/src/main/haskell/Hydra/Error/Neo4j.hs b/src/main/haskell/Hydra/Error/Neo4j.hs
--- a/src/main/haskell/Hydra/Error/Neo4j.hs
+++ b/src/main/haskell/Hydra/Error/Neo4j.hs
@@ -1,11 +1,14 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Error types for Neo4j property graph validation
 
 module Hydra.Error.Neo4j where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Neo4j.Model as Model
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | An error indicating that a Neo4j property graph is invalid
 data InvalidGraphError =
   -- | A node in the graph is invalid
@@ -13,9 +16,13 @@
   -- | A relationship in the graph is invalid
   InvalidGraphErrorRelationship InvalidGraphRelationshipError
   deriving (Eq, Ord, Read, Show)
+
 _InvalidGraphError = Core.Name "hydra.error.neo4j.InvalidGraphError"
+
 _InvalidGraphError_node = Core.Name "node"
+
 _InvalidGraphError_relationship = Core.Name "relationship"
+
 -- | An invalid node within a graph, identified by its element id
 data InvalidGraphNodeError =
   InvalidGraphNodeError {
@@ -24,9 +31,13 @@
     -- | The specific error
     invalidGraphNodeErrorError :: InvalidNodeError}
   deriving (Eq, Ord, Read, Show)
+
 _InvalidGraphNodeError = Core.Name "hydra.error.neo4j.InvalidGraphNodeError"
+
 _InvalidGraphNodeError_id = Core.Name "id"
+
 _InvalidGraphNodeError_error = Core.Name "error"
+
 -- | An invalid relationship within a graph, identified by its element id
 data InvalidGraphRelationshipError =
   InvalidGraphRelationshipError {
@@ -35,9 +46,13 @@
     -- | The specific error
     invalidGraphRelationshipErrorError :: InvalidRelationshipError}
   deriving (Eq, Ord, Read, Show)
+
 _InvalidGraphRelationshipError = Core.Name "hydra.error.neo4j.InvalidGraphRelationshipError"
+
 _InvalidGraphRelationshipError_id = Core.Name "id"
+
 _InvalidGraphRelationshipError_error = Core.Name "error"
+
 -- | An error indicating that a node is invalid
 data InvalidNodeError =
   -- | A key constraint is violated
@@ -53,13 +68,21 @@
   -- | A property of the node violates a property type constraint
   InvalidNodeErrorWrongPropertyType PropertyTypeError
   deriving (Eq, Ord, Read, Show)
+
 _InvalidNodeError = Core.Name "hydra.error.neo4j.InvalidNodeError"
+
 _InvalidNodeError_keyViolation = Core.Name "keyViolation"
+
 _InvalidNodeError_missingImpliedLabel = Core.Name "missingImpliedLabel"
+
 _InvalidNodeError_missingProperty = Core.Name "missingProperty"
+
 _InvalidNodeError_noSuchLabel = Core.Name "noSuchLabel"
+
 _InvalidNodeError_uniquenessViolation = Core.Name "uniquenessViolation"
+
 _InvalidNodeError_wrongPropertyType = Core.Name "wrongPropertyType"
+
 -- | An error indicating that a relationship is invalid
 data InvalidRelationshipError =
   -- | The end node does not exist in the graph
@@ -79,31 +102,47 @@
   -- | A property of the relationship violates a property type constraint
   InvalidRelationshipErrorWrongPropertyType PropertyTypeError
   deriving (Eq, Ord, Read, Show)
+
 _InvalidRelationshipError = Core.Name "hydra.error.neo4j.InvalidRelationshipError"
+
 _InvalidRelationshipError_endNodeNotFound = Core.Name "endNodeNotFound"
+
 _InvalidRelationshipError_keyViolation = Core.Name "keyViolation"
+
 _InvalidRelationshipError_missingProperty = Core.Name "missingProperty"
+
 _InvalidRelationshipError_noMatchingPattern = Core.Name "noMatchingPattern"
+
 _InvalidRelationshipError_noSuchType = Core.Name "noSuchType"
+
 _InvalidRelationshipError_startNodeNotFound = Core.Name "startNodeNotFound"
+
 _InvalidRelationshipError_uniquenessViolation = Core.Name "uniquenessViolation"
+
 _InvalidRelationshipError_wrongPropertyType = Core.Name "wrongPropertyType"
+
 -- | An error indicating that a key constraint is violated: the listed properties do not all exist, or their combined values are not unique
 data KeyError =
   KeyError {
     -- | The properties that constitute the key
     keyErrorProperties :: [Model.Key]}
   deriving (Eq, Ord, Read, Show)
+
 _KeyError = Core.Name "hydra.error.neo4j.KeyError"
+
 _KeyError_properties = Core.Name "properties"
+
 -- | An error indicating that a node is missing a label implied by its node element type
 data MissingLabelError =
   MissingLabelError {
     -- | The implied label that was not present on the node
     missingLabelErrorLabel :: Model.NodeLabel}
   deriving (Eq, Ord, Read, Show)
+
 _MissingLabelError = Core.Name "hydra.error.neo4j.MissingLabelError"
+
 _MissingLabelError_label = Core.Name "label"
+
 -- | An error indicating that a relationship's endpoint labels match none of the declared source/target patterns for its relationship type
 data NoMatchingPatternError =
   NoMatchingPatternError {
@@ -114,34 +153,48 @@
     -- | The labels of the relationship's actual end node
     noMatchingPatternErrorActualEndLabels :: [Model.NodeLabel]}
   deriving (Eq, Ord, Read, Show)
+
 _NoMatchingPatternError = Core.Name "hydra.error.neo4j.NoMatchingPatternError"
+
 _NoMatchingPatternError_allowedPatterns = Core.Name "allowedPatterns"
+
 _NoMatchingPatternError_actualStartLabels = Core.Name "actualStartLabels"
+
 _NoMatchingPatternError_actualEndLabels = Core.Name "actualEndLabels"
+
 -- | An error indicating that no node element type matches a node's labels
 data NoSuchLabelError =
   NoSuchLabelError {
     -- | The labels of the node for which no node element type was found
     noSuchLabelErrorLabels :: [Model.NodeLabel]}
   deriving (Eq, Ord, Read, Show)
+
 _NoSuchLabelError = Core.Name "hydra.error.neo4j.NoSuchLabelError"
+
 _NoSuchLabelError_labels = Core.Name "labels"
+
 -- | An error indicating that a relationship type does not match any relationship element type
 data NoSuchRelationshipTypeError =
   NoSuchRelationshipTypeError {
     -- | The relationship type that was not found
     noSuchRelationshipTypeErrorType :: Model.RelationshipType}
   deriving (Eq, Ord, Read, Show)
+
 _NoSuchRelationshipTypeError = Core.Name "hydra.error.neo4j.NoSuchRelationshipTypeError"
+
 _NoSuchRelationshipTypeError_type = Core.Name "type"
+
 -- | An error indicating that an element is missing a property required by a property existence constraint
 data PropertyExistenceError =
   PropertyExistenceError {
     -- | The key of the missing property
     propertyExistenceErrorKey :: Model.Key}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyExistenceError = Core.Name "hydra.error.neo4j.PropertyExistenceError"
+
 _PropertyExistenceError_key = Core.Name "key"
+
 -- | An error indicating that a property's value violates a property type constraint
 data PropertyTypeError =
   PropertyTypeError {
@@ -152,18 +205,26 @@
     -- | The actual value of the property
     propertyTypeErrorValue :: Model.Value}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyTypeError = Core.Name "hydra.error.neo4j.PropertyTypeError"
+
 _PropertyTypeError_key = Core.Name "key"
+
 _PropertyTypeError_expectedType = Core.Name "expectedType"
+
 _PropertyTypeError_value = Core.Name "value"
+
 -- | An error indicating that a property uniqueness constraint is violated: the combined values of the listed properties are not unique
 data PropertyUniquenessError =
   PropertyUniquenessError {
     -- | The properties whose combined values must be unique
     propertyUniquenessErrorProperties :: [Model.Key]}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyUniquenessError = Core.Name "hydra.error.neo4j.PropertyUniquenessError"
+
 _PropertyUniquenessError_properties = Core.Name "properties"
+
 -- | A declared source/target label pattern for a relationship type, used in NoMatchingPatternError
 data RelationshipPattern =
   RelationshipPattern {
@@ -172,6 +233,9 @@
     -- | The required end-node label
     relationshipPatternEndLabel :: Model.NodeLabel}
   deriving (Eq, Ord, Read, Show)
+
 _RelationshipPattern = Core.Name "hydra.error.neo4j.RelationshipPattern"
+
 _RelationshipPattern_startLabel = Core.Name "startLabel"
+
 _RelationshipPattern_endLabel = Core.Name "endLabel"
diff --git a/src/main/haskell/Hydra/Error/Pg.hs b/src/main/haskell/Hydra/Error/Pg.hs
--- a/src/main/haskell/Hydra/Error/Pg.hs
+++ b/src/main/haskell/Hydra/Error/Pg.hs
@@ -1,11 +1,14 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Error types for property graph validation
 
 module Hydra.Error.Pg where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Pg.Model as Model
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | An error indicating that an edge is invalid
 data InvalidEdgeError =
   -- | The edge id value is invalid
@@ -23,14 +26,23 @@
   -- | A property of the edge is invalid
   InvalidEdgeErrorProperty InvalidElementPropertyError
   deriving (Eq, Ord, Read, Show)
+
 _InvalidEdgeError = Core.Name "hydra.error.pg.InvalidEdgeError"
+
 _InvalidEdgeError_id = Core.Name "id"
+
 _InvalidEdgeError_inVertexLabel = Core.Name "inVertexLabel"
+
 _InvalidEdgeError_inVertexNotFound = Core.Name "inVertexNotFound"
+
 _InvalidEdgeError_label = Core.Name "label"
+
 _InvalidEdgeError_outVertexLabel = Core.Name "outVertexLabel"
+
 _InvalidEdgeError_outVertexNotFound = Core.Name "outVertexNotFound"
+
 _InvalidEdgeError_property = Core.Name "property"
+
 -- | An invalid property on a vertex or edge, identified by its key
 data InvalidElementPropertyError =
   InvalidElementPropertyError {
@@ -39,9 +51,13 @@
     -- | The specific error
     invalidElementPropertyErrorError :: InvalidPropertyError}
   deriving (Eq, Ord, Read, Show)
+
 _InvalidElementPropertyError = Core.Name "hydra.error.pg.InvalidElementPropertyError"
+
 _InvalidElementPropertyError_key = Core.Name "key"
+
 _InvalidElementPropertyError_error = Core.Name "error"
+
 -- | An invalid edge within a graph, identified by its id
 data InvalidGraphEdgeError v =
   InvalidGraphEdgeError {
@@ -50,9 +66,13 @@
     -- | The specific error
     invalidGraphEdgeErrorError :: InvalidEdgeError}
   deriving (Eq, Ord, Read, Show)
+
 _InvalidGraphEdgeError = Core.Name "hydra.error.pg.InvalidGraphEdgeError"
+
 _InvalidGraphEdgeError_id = Core.Name "id"
+
 _InvalidGraphEdgeError_error = Core.Name "error"
+
 -- | An error indicating that a property graph is invalid
 data InvalidGraphError v =
   -- | An edge in the graph is invalid
@@ -60,9 +80,13 @@
   -- | A vertex in the graph is invalid
   InvalidGraphErrorVertex (InvalidGraphVertexError v)
   deriving (Eq, Ord, Read, Show)
+
 _InvalidGraphError = Core.Name "hydra.error.pg.InvalidGraphError"
+
 _InvalidGraphError_edge = Core.Name "edge"
+
 _InvalidGraphError_vertex = Core.Name "vertex"
+
 -- | An invalid vertex within a graph, identified by its id
 data InvalidGraphVertexError v =
   InvalidGraphVertexError {
@@ -71,9 +95,13 @@
     -- | The specific error
     invalidGraphVertexErrorError :: InvalidVertexError}
   deriving (Eq, Ord, Read, Show)
+
 _InvalidGraphVertexError = Core.Name "hydra.error.pg.InvalidGraphVertexError"
+
 _InvalidGraphVertexError_id = Core.Name "id"
+
 _InvalidGraphVertexError_error = Core.Name "error"
+
 -- | An error indicating that a property is invalid
 data InvalidPropertyError =
   -- | The property value failed type validation
@@ -83,10 +111,15 @@
   -- | A property has an unexpected key not in the schema
   InvalidPropertyErrorUnexpectedKey Model.PropertyKey
   deriving (Eq, Ord, Read, Show)
+
 _InvalidPropertyError = Core.Name "hydra.error.pg.InvalidPropertyError"
+
 _InvalidPropertyError_invalidValue = Core.Name "invalidValue"
+
 _InvalidPropertyError_missingRequired = Core.Name "missingRequired"
+
 _InvalidPropertyError_unexpectedKey = Core.Name "unexpectedKey"
+
 -- | An error indicating that a value does not match the expected type
 data InvalidValueError =
   InvalidValueError {
@@ -95,9 +128,13 @@
     -- | The actual value, as a string
     invalidValueErrorValue :: String}
   deriving (Eq, Ord, Read, Show)
+
 _InvalidValueError = Core.Name "hydra.error.pg.InvalidValueError"
+
 _InvalidValueError_expectedType = Core.Name "expectedType"
+
 _InvalidValueError_value = Core.Name "value"
+
 -- | An error indicating that a vertex is invalid
 data InvalidVertexError =
   -- | The vertex id value is invalid
@@ -107,26 +144,37 @@
   -- | A property of the vertex is invalid
   InvalidVertexErrorProperty InvalidElementPropertyError
   deriving (Eq, Ord, Read, Show)
+
 _InvalidVertexError = Core.Name "hydra.error.pg.InvalidVertexError"
+
 _InvalidVertexError_id = Core.Name "id"
+
 _InvalidVertexError_label = Core.Name "label"
+
 _InvalidVertexError_property = Core.Name "property"
+
 -- | An error indicating that an edge label does not exist in the schema
 data NoSuchEdgeLabelError =
   NoSuchEdgeLabelError {
     -- | The edge label that was not found
     noSuchEdgeLabelErrorLabel :: Model.EdgeLabel}
   deriving (Eq, Ord, Read, Show)
+
 _NoSuchEdgeLabelError = Core.Name "hydra.error.pg.NoSuchEdgeLabelError"
+
 _NoSuchEdgeLabelError_label = Core.Name "label"
+
 -- | An error indicating that a vertex label does not exist in the schema
 data NoSuchVertexLabelError =
   NoSuchVertexLabelError {
     -- | The vertex label that was not found
     noSuchVertexLabelErrorLabel :: Model.VertexLabel}
   deriving (Eq, Ord, Read, Show)
+
 _NoSuchVertexLabelError = Core.Name "hydra.error.pg.NoSuchVertexLabelError"
+
 _NoSuchVertexLabelError_label = Core.Name "label"
+
 -- | An error indicating that a vertex has the wrong label
 data WrongVertexLabelError =
   WrongVertexLabelError {
@@ -135,6 +183,9 @@
     -- | The actual vertex label
     wrongVertexLabelErrorActual :: Model.VertexLabel}
   deriving (Eq, Ord, Read, Show)
+
 _WrongVertexLabelError = Core.Name "hydra.error.pg.WrongVertexLabelError"
+
 _WrongVertexLabelError_expected = Core.Name "expected"
+
 _WrongVertexLabelError_actual = Core.Name "actual"
diff --git a/src/main/haskell/Hydra/Graphviz/Coder.hs b/src/main/haskell/Hydra/Graphviz/Coder.hs
--- a/src/main/haskell/Hydra/Graphviz/Coder.hs
+++ b/src/main/haskell/Hydra/Graphviz/Coder.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Functions for converting Hydra terms to Graphviz DOT graphs
 
 module Hydra.Graphviz.Coder where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -28,10 +31,11 @@
 import qualified Hydra.Packaging as Packaging
 import qualified Hydra.Parsing as Parsing
 import qualified Hydra.Paths as Paths
+import qualified Hydra.Print.Paths as PrintPaths
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.Rewriting as Rewriting
-import qualified Hydra.Show.Paths as ShowPaths
 import qualified Hydra.System as System
 import qualified Hydra.Tabular as Tabular
 import qualified Hydra.Testing as Testing
@@ -45,12 +49,14 @@
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | Create a DOT label attribute
 labelAttr :: String -> Dot.EqualityPair
 labelAttr lab =
     Dot.EqualityPair {
       Dot.equalityPairLeft = (Dot.Id "label"),
       Dot.equalityPairRight = (Dot.Id lab)}
+
 -- | Create DOT label attributes with a node style
 labelAttrs :: String -> String -> Dot.AttrList
 labelAttrs style lab =
@@ -78,18 +84,23 @@
       in (Dot.AttrList [
         Lists.concat2 [
           labelAttr lab] styleAttrs])
+
 -- | The 'element' node style
 nodeStyleElement :: String
 nodeStyleElement = "element"
+
 -- | The 'primitive' node style
 nodeStylePrimitive :: String
 nodeStylePrimitive = "primitive"
+
 -- | The 'simple' node style
 nodeStyleSimple :: String
 nodeStyleSimple = "simple"
+
 -- | The 'variable' node style
 nodeStyleVariable :: String
 nodeStyleVariable = "variable"
+
 -- | Construct a map from namespace to prefix for all standard libraries
 standardNamespaces :: M.Map Packaging.ModuleName String
 standardNamespaces =
@@ -99,6 +110,8 @@
       (Packaging.ModuleName "hydra.lib.eithers", "eithers"),
       (Packaging.ModuleName "hydra.lib.equality", "equality"),
       (Packaging.ModuleName "hydra.lib.files", "files"),
+      (Packaging.ModuleName "hydra.lib.functions", "functions"),
+      (Packaging.ModuleName "hydra.lib.hashing", "hashing"),
       (Packaging.ModuleName "hydra.lib.lists", "lists"),
       (Packaging.ModuleName "hydra.lib.literals", "literals"),
       (Packaging.ModuleName "hydra.lib.logic", "logic"),
@@ -111,6 +124,7 @@
       (Packaging.ModuleName "hydra.lib.strings", "strings"),
       (Packaging.ModuleName "hydra.lib.system", "system"),
       (Packaging.ModuleName "hydra.lib.text", "text")]
+
 -- | Compute a label and node style for a term
 termLabel :: Bool -> M.Map Packaging.ModuleName String -> Core.Term -> (String, String)
 termLabel compact namespaces term =
@@ -167,6 +181,7 @@
           (Names.compactName namespaces (Core.wrappedTermTypeName v0)),
           ")"])
         _ -> simpleLabel "?"
+
 -- | Convert a term to a full DOT graph
 termToDotGraph :: Core.Term -> Dot.Graph
 termToDotGraph term =
@@ -175,6 +190,7 @@
       Dot.graphDirected = True,
       Dot.graphId = Nothing,
       Dot.graphStatements = (termToDotStmts standardNamespaces term)}
+
 -- | Convert a term to full DOT statements showing term structure
 termToDotStmts :: M.Map Packaging.ModuleName String -> Core.Term -> [Dot.Stmt]
 termToDotStmts namespaces term =
@@ -205,7 +221,7 @@
                               Dot.nodeStmtId = (toNodeId selfId),
                               Dot.nodeStmtAttributes = (Just (labelAttrs nodeStyle rawLabel))})
                     toAccessorEdgeStmt =
-                            \acc -> \sty -> \i1 -> \i2 -> toEdgeStmt i1 i2 (Optionals.map (\s -> labelAttrs sty s) (ShowPaths.subtermStep acc))
+                            \acc -> \sty -> \i1 -> \i2 -> toEdgeStmt i1 i2 (Optionals.map (\s -> labelAttrs sty s) (PrintPaths.subtermStep acc))
                     edgeAttrs =
                             \lab -> Dot.AttrList [
                               [
@@ -273,6 +289,7 @@
                     toAccessorEdgeStmt accessor style (Optionals.fromOptional selfId mparent) i], visited))
                   _ -> dflt
       in (Pairs.first (encode Nothing False Maps.empty Nothing ([], Sets.empty) (Paths.SubtermStepAnnotatedBody, term)))
+
 -- | Convert a term to an subterm-style DOT graph
 termToSubtermDotGraph :: Core.Term -> Dot.Graph
 termToSubtermDotGraph term =
@@ -281,11 +298,12 @@
       Dot.graphDirected = True,
       Dot.graphId = Nothing,
       Dot.graphStatements = (termToSubtermDotStmts standardNamespaces term)}
+
 -- | Convert a term to subterm-style DOT statements
 termToSubtermDotStmts :: M.Map Packaging.ModuleName String -> Core.Term -> [Dot.Stmt]
 termToSubtermDotStmts namespaces term =
 
-      let accessorGraph = ShowPaths.termToSubtermGraph namespaces term
+      let accessorGraph = PrintPaths.termToSubtermGraph namespaces term
           nodes = Paths.subtermGraphNodes accessorGraph
           edges = Paths.subtermGraphEdges accessorGraph
           nodeStmt =
@@ -299,11 +317,12 @@
                     let lab1 = Paths.subtermNodeId (Paths.subtermEdgeSource edge)
                         lab2 = Paths.subtermNodeId (Paths.subtermEdgeTarget edge)
                         pathAccessors = Paths.unSubtermPath (Paths.subtermEdgePath edge)
-                        showPath = Strings.intercalate "/" (Optionals.cat (Lists.map ShowPaths.subtermStep pathAccessors))
+                        showPath = Strings.intercalate "/" (Optionals.cat (Lists.map PrintPaths.subtermStep pathAccessors))
                     in (toEdgeStmt (Dot.Id lab1) (Dot.Id lab2) (Just (Dot.AttrList [
                       [
                         labelAttr showPath]])))
       in (Lists.concat2 (Lists.map nodeStmt nodes) (Lists.map edgeStmt edges))
+
 -- | Create a DOT edge statement
 toEdgeStmt :: Dot.Id -> Dot.Id -> Maybe Dot.AttrList -> Dot.Stmt
 toEdgeStmt i1 i2 attrs =
@@ -312,12 +331,14 @@
       Dot.edgeStmtRight = [
         toNodeOrSubgraph i2],
       Dot.edgeStmtAttributes = attrs})
+
 -- | Create a DOT NodeId from an Id
 toNodeId :: Dot.Id -> Dot.NodeId
 toNodeId i =
     Dot.NodeId {
       Dot.nodeIdId = i,
       Dot.nodeIdPort = Nothing}
+
 -- | Create a DOT NodeOrSubgraph from an Id
 toNodeOrSubgraph :: Dot.Id -> Dot.NodeOrSubgraph
 toNodeOrSubgraph i = Dot.NodeOrSubgraphNode (toNodeId i)
diff --git a/src/main/haskell/Hydra/Graphviz/Dot.hs b/src/main/haskell/Hydra/Graphviz/Dot.hs
--- a/src/main/haskell/Hydra/Graphviz/Dot.hs
+++ b/src/main/haskell/Hydra/Graphviz/Dot.hs
@@ -1,144 +1,230 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A model from the Graphviz DOT graph description language. Based on the grammar at https://graphviz.org/doc/info/lang.html
 
 module Hydra.Graphviz.Dot where
+
 import qualified Hydra.Core as Core
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
-newtype Id =
-  Id {
-    unId :: String}
-  deriving (Eq, Ord, Read, Show)
-_Id = Core.Name "hydra.graphviz.dot.Id"
-data Graph =
-  Graph {
-    graphStrict :: Bool,
-    graphDirected :: Bool,
-    graphId :: (Maybe Id),
-    graphStatements :: [Stmt]}
-  deriving (Eq, Ord, Read, Show)
-_Graph = Core.Name "hydra.graphviz.dot.Graph"
-_Graph_strict = Core.Name "strict"
-_Graph_directed = Core.Name "directed"
-_Graph_id = Core.Name "id"
-_Graph_statements = Core.Name "statements"
-data Stmt =
-  StmtNode NodeStmt |
-  StmtEdge EdgeStmt |
-  StmtAttr AttrStmt |
-  StmtEquals EqualityPair |
-  StmtSubgraph Subgraph
-  deriving (Eq, Ord, Read, Show)
-_Stmt = Core.Name "hydra.graphviz.dot.Stmt"
-_Stmt_node = Core.Name "node"
-_Stmt_edge = Core.Name "edge"
-_Stmt_attr = Core.Name "attr"
-_Stmt_equals = Core.Name "equals"
-_Stmt_subgraph = Core.Name "subgraph"
-data EqualityPair =
-  EqualityPair {
-    equalityPairLeft :: Id,
-    equalityPairRight :: Id}
+
+-- | A Graphviz DOT attribute list: one or more comma/semicolon-separated lists of key-value pairs
+newtype AttrList =
+  AttrList {
+    unAttrList :: [[EqualityPair]]}
   deriving (Eq, Ord, Read, Show)
-_EqualityPair = Core.Name "hydra.graphviz.dot.EqualityPair"
-_EqualityPair_left = Core.Name "left"
-_EqualityPair_right = Core.Name "right"
+
+_AttrList = Core.Name "hydra.graphviz.dot.AttrList"
+
+-- | A Graphviz DOT attribute statement applying default attributes to graph, node, or edge elements
 data AttrStmt =
   AttrStmt {
     attrStmtType :: AttrType,
     attrStmtAttributes :: AttrList}
   deriving (Eq, Ord, Read, Show)
+
 _AttrStmt = Core.Name "hydra.graphviz.dot.AttrStmt"
+
 _AttrStmt_type = Core.Name "type"
+
 _AttrStmt_attributes = Core.Name "attributes"
+
+-- | The target of a Graphviz DOT attribute statement: graph, node, or edge
 data AttrType =
   AttrTypeGraph |
   AttrTypeNode |
   AttrTypeEdge
   deriving (Eq, Ord, Read, Show)
+
 _AttrType = Core.Name "hydra.graphviz.dot.AttrType"
+
 _AttrType_graph = Core.Name "graph"
+
 _AttrType_node = Core.Name "node"
+
 _AttrType_edge = Core.Name "edge"
-newtype AttrList =
-  AttrList {
-    unAttrList :: [[EqualityPair]]}
+
+-- | A Graphviz DOT compass point, used to select a specific side of a node for edge attachment
+data CompassPt =
+  CompassPtN |
+  CompassPtNe |
+  CompassPtE |
+  CompassPtSe |
+  CompassPtS |
+  CompassPtSw |
+  CompassPtW |
+  CompassPtNw |
+  CompassPtC |
+  CompassPtNone
   deriving (Eq, Ord, Read, Show)
-_AttrList = Core.Name "hydra.graphviz.dot.AttrList"
+
+_CompassPt = Core.Name "hydra.graphviz.dot.CompassPt"
+
+_CompassPt_n = Core.Name "n"
+
+_CompassPt_ne = Core.Name "ne"
+
+_CompassPt_e = Core.Name "e"
+
+_CompassPt_se = Core.Name "se"
+
+_CompassPt_s = Core.Name "s"
+
+_CompassPt_sw = Core.Name "sw"
+
+_CompassPt_w = Core.Name "w"
+
+_CompassPt_nw = Core.Name "nw"
+
+_CompassPt_c = Core.Name "c"
+
+_CompassPt_none = Core.Name "none"
+
+-- | A Graphviz DOT edge statement connecting a chain of nodes or subgraphs
 data EdgeStmt =
   EdgeStmt {
     edgeStmtLeft :: NodeOrSubgraph,
     edgeStmtRight :: [NodeOrSubgraph],
     edgeStmtAttributes :: (Maybe AttrList)}
   deriving (Eq, Ord, Read, Show)
+
 _EdgeStmt = Core.Name "hydra.graphviz.dot.EdgeStmt"
+
 _EdgeStmt_left = Core.Name "left"
+
 _EdgeStmt_right = Core.Name "right"
+
 _EdgeStmt_attributes = Core.Name "attributes"
+
+-- | A Graphviz DOT key = value pair
+data EqualityPair =
+  EqualityPair {
+    equalityPairLeft :: Id,
+    equalityPairRight :: Id}
+  deriving (Eq, Ord, Read, Show)
+
+_EqualityPair = Core.Name "hydra.graphviz.dot.EqualityPair"
+
+_EqualityPair_left = Core.Name "left"
+
+_EqualityPair_right = Core.Name "right"
+
+-- | A Graphviz DOT graph: an optionally strict, optionally directed graph with an optional ID and a list of statements
+data Graph =
+  Graph {
+    graphStrict :: Bool,
+    graphDirected :: Bool,
+    graphId :: (Maybe Id),
+    graphStatements :: [Stmt]}
+  deriving (Eq, Ord, Read, Show)
+
+_Graph = Core.Name "hydra.graphviz.dot.Graph"
+
+_Graph_strict = Core.Name "strict"
+
+_Graph_directed = Core.Name "directed"
+
+_Graph_id = Core.Name "id"
+
+_Graph_statements = Core.Name "statements"
+
+-- | A Graphviz DOT identifier
+newtype Id =
+  Id {
+    unId :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_Id = Core.Name "hydra.graphviz.dot.Id"
+
+-- | A Graphviz DOT node identifier, with an optional port
+data NodeId =
+  NodeId {
+    nodeIdId :: Id,
+    nodeIdPort :: (Maybe Port)}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeId = Core.Name "hydra.graphviz.dot.NodeId"
+
+_NodeId_id = Core.Name "id"
+
+_NodeId_port = Core.Name "port"
+
+-- | A Graphviz DOT node or subgraph, as an edge endpoint
 data NodeOrSubgraph =
   NodeOrSubgraphNode NodeId |
   NodeOrSubgraphSubgraph Subgraph
   deriving (Eq, Ord, Read, Show)
+
 _NodeOrSubgraph = Core.Name "hydra.graphviz.dot.NodeOrSubgraph"
+
 _NodeOrSubgraph_node = Core.Name "node"
+
 _NodeOrSubgraph_subgraph = Core.Name "subgraph"
+
+-- | A Graphviz DOT node statement, with an optional attribute list
 data NodeStmt =
   NodeStmt {
     nodeStmtId :: NodeId,
     nodeStmtAttributes :: (Maybe AttrList)}
   deriving (Eq, Ord, Read, Show)
+
 _NodeStmt = Core.Name "hydra.graphviz.dot.NodeStmt"
+
 _NodeStmt_id = Core.Name "id"
+
 _NodeStmt_attributes = Core.Name "attributes"
-data NodeId =
-  NodeId {
-    nodeIdId :: Id,
-    nodeIdPort :: (Maybe Port)}
-  deriving (Eq, Ord, Read, Show)
-_NodeId = Core.Name "hydra.graphviz.dot.NodeId"
-_NodeId_id = Core.Name "id"
-_NodeId_port = Core.Name "port"
+
+-- | A Graphviz DOT port: an optional identifier and/or compass point specifying an edge attachment point
 data Port =
   Port {
     portId :: (Maybe Id),
     portPosition :: (Maybe CompassPt)}
   deriving (Eq, Ord, Read, Show)
+
 _Port = Core.Name "hydra.graphviz.dot.Port"
+
 _Port_id = Core.Name "id"
+
 _Port_position = Core.Name "position"
+
+-- | A Graphviz DOT statement: a node, edge, attribute, equality, or subgraph statement
+data Stmt =
+  StmtNode NodeStmt |
+  StmtEdge EdgeStmt |
+  StmtAttr AttrStmt |
+  StmtEquals EqualityPair |
+  StmtSubgraph Subgraph
+  deriving (Eq, Ord, Read, Show)
+
+_Stmt = Core.Name "hydra.graphviz.dot.Stmt"
+
+_Stmt_node = Core.Name "node"
+
+_Stmt_edge = Core.Name "edge"
+
+_Stmt_attr = Core.Name "attr"
+
+_Stmt_equals = Core.Name "equals"
+
+_Stmt_subgraph = Core.Name "subgraph"
+
+-- | A Graphviz DOT subgraph, with an optional ID and a list of statements
 data Subgraph =
   Subgraph {
     subgraphSubgraphId :: (Maybe SubgraphId),
     subgraphStatements :: [Stmt]}
   deriving (Eq, Ord, Read, Show)
+
 _Subgraph = Core.Name "hydra.graphviz.dot.Subgraph"
+
 _Subgraph_subgraphId = Core.Name "subgraphId"
+
 _Subgraph_statements = Core.Name "statements"
+
+-- | The optional identifier of a Graphviz DOT subgraph
 newtype SubgraphId =
   SubgraphId {
     unSubgraphId :: (Maybe Id)}
   deriving (Eq, Ord, Read, Show)
+
 _SubgraphId = Core.Name "hydra.graphviz.dot.SubgraphId"
-data CompassPt =
-  CompassPtN |
-  CompassPtNe |
-  CompassPtE |
-  CompassPtSe |
-  CompassPtS |
-  CompassPtSw |
-  CompassPtW |
-  CompassPtNw |
-  CompassPtC |
-  CompassPtNone
-  deriving (Eq, Ord, Read, Show)
-_CompassPt = Core.Name "hydra.graphviz.dot.CompassPt"
-_CompassPt_n = Core.Name "n"
-_CompassPt_ne = Core.Name "ne"
-_CompassPt_e = Core.Name "e"
-_CompassPt_se = Core.Name "se"
-_CompassPt_s = Core.Name "s"
-_CompassPt_sw = Core.Name "sw"
-_CompassPt_w = Core.Name "w"
-_CompassPt_nw = Core.Name "nw"
-_CompassPt_c = Core.Name "c"
-_CompassPt_none = Core.Name "none"
diff --git a/src/main/haskell/Hydra/Graphviz/Serde.hs b/src/main/haskell/Hydra/Graphviz/Serde.hs
--- a/src/main/haskell/Hydra/Graphviz/Serde.hs
+++ b/src/main/haskell/Hydra/Graphviz/Serde.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Serialization functions for converting Graphviz DOT AST to abstract expressions
 
 module Hydra.Graphviz.Serde where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -23,6 +26,7 @@
 import qualified Hydra.Parsing as Parsing
 import qualified Hydra.Paths as Paths
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.Serialization as Serialization
 import qualified Hydra.System as System
@@ -37,10 +41,12 @@
 import qualified Hydra.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Convert an attribute list to an expression
 attrListToExpr :: Dot.AttrList -> Ast.Expr
 attrListToExpr al =
     Serialization.spaceSep (Lists.map (\alist -> Serialization.brackets Serialization.squareBrackets Serialization.inlineStyle (Serialization.commaSep Serialization.inlineStyle (Lists.map equalityPairToExpr alist))) (Dot.unAttrList al))
+
 -- | Convert an attribute statement to an expression
 attrStmtToExpr :: Dot.AttrStmt -> Ast.Expr
 attrStmtToExpr as =
@@ -50,6 +56,7 @@
       in (Serialization.spaceSep [
         attrTypeToExpr t,
         (attrListToExpr attr)])
+
 -- | Convert an attribute type to an expression
 attrTypeToExpr :: Dot.AttrType -> Ast.Expr
 attrTypeToExpr t =
@@ -57,6 +64,7 @@
       Dot.AttrTypeGraph -> Serialization.cst "graph"
       Dot.AttrTypeNode -> Serialization.cst "node"
       Dot.AttrTypeEdge -> Serialization.cst "edge"
+
 -- | Convert a compass point to an expression
 compassPtToExpr :: Dot.CompassPt -> Ast.Expr
 compassPtToExpr p =
@@ -71,6 +79,7 @@
       Dot.CompassPtNw -> Serialization.cst "nw"
       Dot.CompassPtC -> Serialization.cst "c"
       Dot.CompassPtNone -> Serialization.cst "none"
+
 -- | Convert an edge statement to an expression
 edgeStmtToExpr :: Bool -> Dot.EdgeStmt -> Ast.Expr
 edgeStmtToExpr directed es =
@@ -90,6 +99,7 @@
           nodeOrSubgraphToExpr directed l],
         rhsParts,
         attrParts]))
+
 -- | Convert an equality pair to an expression
 equalityPairToExpr :: Dot.EqualityPair -> Ast.Expr
 equalityPairToExpr eq =
@@ -100,6 +110,7 @@
         idToExpr l,
         (Serialization.cst "="),
         (idToExpr r)])
+
 -- | Convert a graph to an expression
 graphToExpr :: Dot.Graph -> Ast.Expr
 graphToExpr g =
@@ -117,6 +128,7 @@
       in (Serialization.spaceSep [
         graphExpr,
         body])
+
 -- | Convert an identifier to an expression
 idToExpr :: Dot.Id -> Ast.Expr
 idToExpr i =
@@ -124,6 +136,7 @@
       "\"",
       (Dot.unId i),
       "\""])
+
 -- | Convert a node identifier to an expression
 nodeIdToExpr :: Dot.NodeId -> Ast.Expr
 nodeIdToExpr nid =
@@ -133,12 +146,14 @@
       in (Serialization.noSep (Optionals.cat [
         Optionals.pure (idToExpr i),
         (Optionals.map portToExpr mp)]))
+
 -- | Convert a node or subgraph to an expression
 nodeOrSubgraphToExpr :: Bool -> Dot.NodeOrSubgraph -> Ast.Expr
 nodeOrSubgraphToExpr directed ns =
     case ns of
       Dot.NodeOrSubgraphNode v0 -> nodeIdToExpr v0
       Dot.NodeOrSubgraphSubgraph v0 -> subgraphToExpr directed v0
+
 -- | Convert a node statement to an expression
 nodeStmtToExpr :: Dot.NodeStmt -> Ast.Expr
 nodeStmtToExpr ns =
@@ -148,6 +163,7 @@
       in (Serialization.spaceSep (Optionals.cat [
         Optionals.pure (nodeIdToExpr i),
         (Optionals.map attrListToExpr attr)]))
+
 -- | Convert a port to an expression
 portToExpr :: Dot.Port -> Ast.Expr
 portToExpr p =
@@ -165,6 +181,7 @@
       in (Serialization.noSep (Lists.concat [
         pre,
         suf]))
+
 -- | Convert a statement to an expression
 stmtToExpr :: Bool -> Dot.Stmt -> Ast.Expr
 stmtToExpr directed s =
@@ -174,12 +191,14 @@
       Dot.StmtAttr v0 -> attrStmtToExpr v0
       Dot.StmtEquals v0 -> equalityPairToExpr v0
       Dot.StmtSubgraph v0 -> subgraphToExpr directed v0
+
 -- | Convert a subgraph identifier to an expression
 subgraphIdToExpr :: Dot.SubgraphId -> Ast.Expr
 subgraphIdToExpr sid =
     Serialization.spaceSep (Optionals.cat [
       Optionals.pure (Serialization.cst "subgraph"),
       (Optionals.map idToExpr (Dot.unSubgraphId sid))])
+
 -- | Convert a subgraph to an expression
 subgraphToExpr :: Bool -> Dot.Subgraph -> Ast.Expr
 subgraphToExpr directed sg =
diff --git a/src/main/haskell/Hydra/Neo4j/Model.hs b/src/main/haskell/Hydra/Neo4j/Model.hs
--- a/src/main/haskell/Hydra/Neo4j/Model.hs
+++ b/src/main/haskell/Hydra/Neo4j/Model.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A data model for Neo4j-flavored property graphs, aligned with the types of the Neo4j Java driver (org.neo4j.driver) at the instance level and with Neo4j's constraints and graph types at the schema level.
 
 module Hydra.Neo4j.Model where
+
 import qualified Hydra.Core as Core
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
@@ -9,6 +11,7 @@
 import qualified Data.Int as I
 import qualified Data.Map as M
 import qualified Data.Set as S
+
 -- | A Neo4j schema constraint, as one of the four constraint types Neo4j supports. The node-vs-relationship flavor is determined by the element type the constraint is attached to, not by the constraint itself.
 data Constraint =
   -- | A key constraint
@@ -20,11 +23,17 @@
   -- | A property uniqueness constraint
   ConstraintPropertyUniqueness PropertyUniquenessConstraint
   deriving (Eq, Ord, Read, Show)
+
 _Constraint = Core.Name "hydra.neo4j.model.Constraint"
+
 _Constraint_key = Core.Name "key"
+
 _Constraint_propertyExistence = Core.Name "propertyExistence"
+
 _Constraint_propertyType = Core.Name "propertyType"
+
 _Constraint_propertyUniqueness = Core.Name "propertyUniqueness"
+
 -- | A named constraint. The name is optional at authoring time; Neo4j auto-generates one if it is not supplied. The name is operational metadata (used to reference the constraint for dropping, idempotent creation, and reporting) and has no effect on what the constraint enforces.
 data ConstraintDefinition =
   ConstraintDefinition {
@@ -33,9 +42,13 @@
     -- | The constraint itself
     constraintDefinitionBody :: Constraint}
   deriving (Eq, Ord, Read, Show)
+
 _ConstraintDefinition = Core.Name "hydra.neo4j.model.ConstraintDefinition"
+
 _ConstraintDefinition_name = Core.Name "name"
+
 _ConstraintDefinition_body = Core.Name "body"
+
 -- | Either a node or a relationship; the common supertype of the two kinds of graph element. A bare union with no fields of its own: the id and properties live on each variant. Named Element (not Entity, the driver's interface name) to avoid the Neo4j docs' use of "entity" for a node's real-world referent, and to match hydra.pg.model and the root of elementId.
 data Element =
   -- | The element is a node
@@ -43,15 +56,21 @@
   -- | The element is a relationship
   ElementRelationship Relationship
   deriving (Eq, Ord, Read, Show)
+
 _Element = Core.Name "hydra.neo4j.model.Element"
+
 _Element_node = Core.Name "node"
+
 _Element_relationship = Core.Name "relationship"
+
 -- | The element id of a node or relationship (the driver's String-valued elementId())
 newtype ElementId =
   ElementId {
     unElementId :: String}
   deriving (Eq, Ord, Read, Show)
+
 _ElementId = Core.Name "hydra.neo4j.model.ElementId"
+
 -- | A Neo4j graph type: a holistic schema for a graph, made up of node element types and relationship element types (Neo4j's GRAPH TYPE feature).
 data GraphType =
   GraphType {
@@ -60,9 +79,13 @@
     -- | The relationship element types of the graph type
     graphTypeRelationships :: [RelationshipElementType]}
   deriving (Eq, Ord, Read, Show)
+
 _GraphType = Core.Name "hydra.neo4j.model.GraphType"
+
 _GraphType_nodes = Core.Name "nodes"
+
 _GraphType_relationships = Core.Name "relationships"
+
 -- | A temporal amount, following the Neo4j driver's IsoDuration. The four components are kept separate and non-normalized, since a month is not a fixed number of days.
 data IsoDuration =
   IsoDuration {
@@ -75,25 +98,36 @@
     -- | A number of nanoseconds of the second
     isoDurationNanoseconds :: Int}
   deriving (Eq, Ord, Read, Show)
+
 _IsoDuration = Core.Name "hydra.neo4j.model.IsoDuration"
+
 _IsoDuration_months = Core.Name "months"
+
 _IsoDuration_days = Core.Name "days"
+
 _IsoDuration_seconds = Core.Name "seconds"
+
 _IsoDuration_nanoseconds = Core.Name "nanoseconds"
+
 -- | A key in a property map or value map. Used for all maps, following the driver's single key notion (MapAccessor.keys()/get(String key)); there is no distinct "property key" type.
 newtype Key =
   Key {
     unKey :: String}
   deriving (Eq, Ord, Read, Show)
+
 _Key = Core.Name "hydra.neo4j.model.Key"
+
 -- | A key constraint: the listed properties must all exist and their combined values must be unique. Neo4j's primary-key analog, combining existence and uniqueness over a set of properties. Applies to a node label or a relationship type depending on where it is attached.
 data KeyConstraint =
   KeyConstraint {
     -- | The properties whose combination must exist and be unique
     keyConstraintProperties :: [Key]}
   deriving (Eq, Ord, Read, Show)
+
 _KeyConstraint = Core.Name "hydra.neo4j.model.KeyConstraint"
+
 _KeyConstraint_properties = Core.Name "properties"
+
 -- | A date without a time or time zone, following java.time.LocalDate (the driver's asLocalDate())
 data LocalDate =
   LocalDate {
@@ -104,10 +138,15 @@
     -- | The day of the month
     localDateDay :: Int}
   deriving (Eq, Ord, Read, Show)
+
 _LocalDate = Core.Name "hydra.neo4j.model.LocalDate"
+
 _LocalDate_year = Core.Name "year"
+
 _LocalDate_month = Core.Name "month"
+
 _LocalDate_day = Core.Name "day"
+
 -- | A date and time without a time zone, following java.time.LocalDateTime (the driver's asLocalDateTime())
 data LocalDateTime =
   LocalDateTime {
@@ -116,9 +155,13 @@
     -- | The time part
     localDateTimeTime :: LocalTime}
   deriving (Eq, Ord, Read, Show)
+
 _LocalDateTime = Core.Name "hydra.neo4j.model.LocalDateTime"
+
 _LocalDateTime_date = Core.Name "date"
+
 _LocalDateTime_time = Core.Name "time"
+
 -- | A time of day without a time zone, following java.time.LocalTime (the driver's asLocalTime())
 data LocalTime =
   LocalTime {
@@ -131,11 +174,17 @@
     -- | The nanosecond of the second
     localTimeNanosecond :: Int}
   deriving (Eq, Ord, Read, Show)
+
 _LocalTime = Core.Name "hydra.neo4j.model.LocalTime"
+
 _LocalTime_hour = Core.Name "hour"
+
 _LocalTime_minute = Core.Name "minute"
+
 _LocalTime_second = Core.Name "second"
+
 _LocalTime_nanosecond = Core.Name "nanosecond"
+
 -- | The caller-supplied conversions a mapping between Hydra's property-graph model (hydra.pg.model) and this Neo4j model needs: a pair of partial functions converting property-graph values to and from Neo4j element ids, and another pair converting them to and from Neo4j property values. Errors are plain strings for now; once issue #518 generalizes the kernel Coder, these four fields collapse to two Coders. Failures (e.g. a value with no Neo4j representation) surface via the Either.
 data Neo4jMapping v =
   Neo4jMapping {
@@ -147,11 +196,17 @@
     neo4jMappingEncodeValue :: (v -> Either String Value),
     -- | Decode a Neo4j property value as a property-graph value
     neo4jMappingDecodeValue :: (Value -> Either String v)}
+
 _Neo4jMapping = Core.Name "hydra.neo4j.model.Neo4jMapping"
+
 _Neo4jMapping_encodeId = Core.Name "encodeId"
+
 _Neo4jMapping_decodeId = Core.Name "decodeId"
+
 _Neo4jMapping_encodeValue = Core.Name "encodeValue"
+
 _Neo4jMapping_decodeValue = Core.Name "decodeValue"
+
 -- | A node; a graph element with a set of labels and a map of properties
 data Node =
   Node {
@@ -162,10 +217,15 @@
     -- | The properties of the node
     nodeProperties :: (M.Map Key Value)}
   deriving (Eq, Ord, Read, Show)
+
 _Node = Core.Name "hydra.neo4j.model.Node"
+
 _Node_id = Core.Name "id"
+
 _Node_labels = Core.Name "labels"
+
 _Node_properties = Core.Name "properties"
+
 -- | A node element type within a graph type: an identifying label, any implied labels it entails, and the constraints on its properties. A node's typed properties are expressed as property type constraints (and existence constraints for non-null ones), since Neo4j has no untyped property declaration.
 data NodeElementType =
   NodeElementType {
@@ -176,16 +236,23 @@
     -- | The constraints on nodes of this type
     nodeElementTypeConstraints :: [ConstraintDefinition]}
   deriving (Eq, Ord, Read, Show)
+
 _NodeElementType = Core.Name "hydra.neo4j.model.NodeElementType"
+
 _NodeElementType_identifyingLabel = Core.Name "identifyingLabel"
+
 _NodeElementType_impliedLabels = Core.Name "impliedLabels"
+
 _NodeElementType_constraints = Core.Name "constraints"
+
 -- | A label applied to a node. Nodes carry a set of labels; relationships have a single type (see RelationshipType), so there is no relationship-label concept.
 newtype NodeLabel =
   NodeLabel {
     unNodeLabel :: String}
   deriving (Eq, Ord, Read, Show)
+
 _NodeLabel = Core.Name "hydra.neo4j.model.NodeLabel"
+
 -- | A time of day with a UTC offset, following java.time.OffsetTime (the driver's asOffsetTime()). Distinct from LocalTime by virtue of the offset.
 data OffsetTime =
   OffsetTime {
@@ -194,9 +261,13 @@
     -- | The offset from UTC
     offsetTimeOffset :: ZoneOffset}
   deriving (Eq, Ord, Read, Show)
+
 _OffsetTime = Core.Name "hydra.neo4j.model.OffsetTime"
+
 _OffsetTime_time = Core.Name "time"
+
 _OffsetTime_offset = Core.Name "offset"
+
 -- | A path through the graph: a start node followed by a sequence of segments. The node sequence is the start node followed by each segment's end node; a zero-length path has an empty segment list. Each segment carries full node and relationship objects, so a path is self-contained.
 data Path =
   Path {
@@ -205,9 +276,13 @@
     -- | The segments of the path, in order (empty for a zero-length path)
     pathSegments :: [Segment]}
   deriving (Eq, Ord, Read, Show)
+
 _Path = Core.Name "hydra.neo4j.model.Path"
+
 _Path_start = Core.Name "start"
+
 _Path_segments = Core.Name "segments"
+
 -- | A spatial point, following the Neo4j driver's Point. The coordinate reference system is given by the srid, which also determines the units and dimensionality: under WGS-84 (srid 4326/4979), x is longitude and y is latitude in decimal degrees and z is height in meters; under Cartesian (srid 7203/9157), the units are unspecified. A two-dimensional point omits z.
 data Point =
   Point {
@@ -220,19 +295,28 @@
     -- | The z coordinate (height under WGS-84); absent for a two-dimensional point
     pointZ :: (Maybe Double)}
   deriving (Eq, Ord, Read, Show)
+
 _Point = Core.Name "hydra.neo4j.model.Point"
+
 _Point_srid = Core.Name "srid"
+
 _Point_x = Core.Name "x"
+
 _Point_y = Core.Name "y"
+
 _Point_z = Core.Name "z"
+
 -- | A property existence constraint: the given property must exist (be non-null).
 data PropertyExistenceConstraint =
   PropertyExistenceConstraint {
     -- | The property that must exist
     propertyExistenceConstraintProperty :: Key}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyExistenceConstraint = Core.Name "hydra.neo4j.model.PropertyExistenceConstraint"
+
 _PropertyExistenceConstraint_property = Core.Name "property"
+
 -- | A property type constraint: the given property must have the given value type.
 data PropertyTypeConstraint =
   PropertyTypeConstraint {
@@ -241,17 +325,24 @@
     -- | The type the property's value must have
     propertyTypeConstraintType :: ValueType}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyTypeConstraint = Core.Name "hydra.neo4j.model.PropertyTypeConstraint"
+
 _PropertyTypeConstraint_property = Core.Name "property"
+
 _PropertyTypeConstraint_type = Core.Name "type"
+
 -- | A property uniqueness constraint: the combined values of the listed properties must be unique. Unlike a key constraint, it does not require the properties to exist.
 data PropertyUniquenessConstraint =
   PropertyUniquenessConstraint {
     -- | The properties whose combined values must be unique
     propertyUniquenessConstraintProperties :: [Key]}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyUniquenessConstraint = Core.Name "hydra.neo4j.model.PropertyUniquenessConstraint"
+
 _PropertyUniquenessConstraint_properties = Core.Name "properties"
+
 -- | A relationship; a directed graph element with a single type, connecting a start node to an end node. Relationships are always stored directed; undirected traversal is a query-level concern.
 data Relationship =
   Relationship {
@@ -266,12 +357,19 @@
     -- | The element id of the end node
     relationshipEnd :: ElementId}
   deriving (Eq, Ord, Read, Show)
+
 _Relationship = Core.Name "hydra.neo4j.model.Relationship"
+
 _Relationship_id = Core.Name "id"
+
 _Relationship_properties = Core.Name "properties"
+
 _Relationship_type = Core.Name "type"
+
 _Relationship_start = Core.Name "start"
+
 _Relationship_end = Core.Name "end"
+
 -- | A relationship element type within a graph type: a relationship type, the node labels it may connect, and the constraints on its properties.
 data RelationshipElementType =
   RelationshipElementType {
@@ -284,17 +382,25 @@
     -- | The constraints on relationships of this type
     relationshipElementTypeConstraints :: [ConstraintDefinition]}
   deriving (Eq, Ord, Read, Show)
+
 _RelationshipElementType = Core.Name "hydra.neo4j.model.RelationshipElementType"
+
 _RelationshipElementType_type = Core.Name "type"
+
 _RelationshipElementType_startLabel = Core.Name "startLabel"
+
 _RelationshipElementType_endLabel = Core.Name "endLabel"
+
 _RelationshipElementType_constraints = Core.Name "constraints"
+
 -- | The type of a relationship. A relationship has exactly one type.
 newtype RelationshipType =
   RelationshipType {
     unRelationshipType :: String}
   deriving (Eq, Ord, Read, Show)
+
 _RelationshipType = Core.Name "hydra.neo4j.model.RelationshipType"
+
 -- | One step of a path: a relationship and the node it arrives at. The segment's implicit start is the previous segment's end node, or the path's start node for the first segment, so it is not stored here.
 data Segment =
   Segment {
@@ -303,15 +409,21 @@
     -- | The node this segment arrives at
     segmentEnd :: Node}
   deriving (Eq, Ord, Read, Show)
+
 _Segment = Core.Name "hydra.neo4j.model.Segment"
+
 _Segment_relationship = Core.Name "relationship"
+
 _Segment_end = Core.Name "end"
+
 -- | A spatial reference identifier (SRID): an integer naming the coordinate reference system in which a point's coordinates are expressed. Neo4j supports four: WGS-84 (4326), WGS-84 3D (4979), Cartesian (7203), and Cartesian 3D (9157).
 newtype SpatialReferenceIdentifier =
   SpatialReferenceIdentifier {
     unSpatialReferenceIdentifier :: Int}
   deriving (Eq, Ord, Read, Show)
+
 _SpatialReferenceIdentifier = Core.Name "hydra.neo4j.model.SpatialReferenceIdentifier"
+
 -- | A Neo4j value: the general container for instance data, analogous to Hydra's Term. It can represent anything the driver's Value can be (the full TypeSystem), including structural and result-shaped values such as maps, nodes, relationships, paths, and null. Which values are valid as a stored property is a schema/validation concern, not a restriction on Value itself.
 data Value =
   -- | A boolean value
@@ -351,25 +463,45 @@
   -- | A time of day with a UTC offset
   ValueTime OffsetTime
   deriving (Eq, Ord, Read, Show)
+
 _Value = Core.Name "hydra.neo4j.model.Value"
+
 _Value_boolean = Core.Name "boolean"
+
 _Value_bytes = Core.Name "bytes"
+
 _Value_date = Core.Name "date"
+
 _Value_dateTime = Core.Name "dateTime"
+
 _Value_duration = Core.Name "duration"
+
 _Value_float = Core.Name "float"
+
 _Value_integer = Core.Name "integer"
+
 _Value_list = Core.Name "list"
+
 _Value_localDateTime = Core.Name "localDateTime"
+
 _Value_localTime = Core.Name "localTime"
+
 _Value_map = Core.Name "map"
+
 _Value_node = Core.Name "node"
+
 _Value_null = Core.Name "null"
+
 _Value_path = Core.Name "path"
+
 _Value_point = Core.Name "point"
+
 _Value_relationship = Core.Name "relationship"
+
 _Value_string = Core.Name "string"
+
 _Value_time = Core.Name "time"
+
 -- | A Neo4j property type, as used in property type constraints and graph type property declarations (the IS :: <TYPE> expression language). Atoms mirror the scalar, temporal, and spatial kinds of Value; lists, vectors, and closed unions compose them.
 data ValueType =
   -- | The BOOLEAN type
@@ -401,21 +533,37 @@
   -- | A closed union of the given types
   ValueTypeUnion [ValueType]
   deriving (Eq, Ord, Read, Show)
+
 _ValueType = Core.Name "hydra.neo4j.model.ValueType"
+
 _ValueType_boolean = Core.Name "boolean"
+
 _ValueType_string = Core.Name "string"
+
 _ValueType_integer = Core.Name "integer"
+
 _ValueType_float = Core.Name "float"
+
 _ValueType_date = Core.Name "date"
+
 _ValueType_localTime = Core.Name "localTime"
+
 _ValueType_zonedTime = Core.Name "zonedTime"
+
 _ValueType_localDateTime = Core.Name "localDateTime"
+
 _ValueType_zonedDateTime = Core.Name "zonedDateTime"
+
 _ValueType_duration = Core.Name "duration"
+
 _ValueType_point = Core.Name "point"
+
 _ValueType_list = Core.Name "list"
+
 _ValueType_vector = Core.Name "vector"
+
 _ValueType_union = Core.Name "union"
+
 -- | A Neo4j VECTOR type: an element type and a fixed dimension.
 data VectorType =
   VectorType {
@@ -424,21 +572,29 @@
     -- | The dimension (length) of the vector
     vectorTypeDimension :: Int}
   deriving (Eq, Ord, Read, Show)
+
 _VectorType = Core.Name "hydra.neo4j.model.VectorType"
+
 _VectorType_element = Core.Name "element"
+
 _VectorType_dimension = Core.Name "dimension"
+
 -- | A time-zone identifier, following java.time.ZoneId: an IANA region id such as "Europe/Paris" (it may also be a fixed-offset string).
 newtype ZoneId =
   ZoneId {
     unZoneId :: String}
   deriving (Eq, Ord, Read, Show)
+
 _ZoneId = Core.Name "hydra.neo4j.model.ZoneId"
+
 -- | An offset from UTC, following java.time.ZoneOffset, expressed as a total number of seconds (for example, +01:00 is 3600).
 newtype ZoneOffset =
   ZoneOffset {
     unZoneOffset :: Int}
   deriving (Eq, Ord, Read, Show)
+
 _ZoneOffset = Core.Name "hydra.neo4j.model.ZoneOffset"
+
 -- | A date and time with a time zone, following java.time.ZonedDateTime (the driver's asZonedDateTime()). It keeps both the resolved offset and the zone: the zone determines the offset rules, while the offset is the concrete UTC delta at this instant.
 data ZonedDateTime =
   ZonedDateTime {
@@ -449,7 +605,11 @@
     -- | The time zone
     zonedDateTimeZone :: ZoneId}
   deriving (Eq, Ord, Read, Show)
+
 _ZonedDateTime = Core.Name "hydra.neo4j.model.ZonedDateTime"
+
 _ZonedDateTime_dateTime = Core.Name "dateTime"
+
 _ZonedDateTime_offset = Core.Name "offset"
+
 _ZonedDateTime_zone = Core.Name "zone"
diff --git a/src/main/haskell/Hydra/Neo4j/Pg.hs b/src/main/haskell/Hydra/Neo4j/Pg.hs
--- a/src/main/haskell/Hydra/Neo4j/Pg.hs
+++ b/src/main/haskell/Hydra/Neo4j/Pg.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A mapping between Hydra's property-graph model (hydra.pg.model, TinkerPop-shaped) and the Neo4j model (hydra.neo4j.model). It is not an isomorphism and not invertible: ids and values are bridged by caller-supplied conversions (Neo4jMapping); a Neo4j relationship type expands into a property-graph edge label conditionally on the schema; and multi-label nodes, which Hydra's single-label vertices cannot represent, are rejected.
 
 module Hydra.Neo4j.Pg where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Formatting as Formatting
 import qualified Hydra.Overlay.Haskell.Lib.Eithers as Eithers
@@ -18,6 +20,7 @@
 import qualified Hydra.Util as Util
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Compute the property-graph edge label for a Neo4j relationship type, given the schema and endpoint labels.
 edgeLabelForRelationship :: Neo4jModel.GraphType -> Neo4jModel.NodeLabel -> Neo4jModel.NodeLabel -> Neo4jModel.RelationshipType -> PgModel.EdgeLabel
 edgeLabelForRelationship gt startLabel endLabel relType =
@@ -34,6 +37,7 @@
                     (Formatting.capitalize camelType),
                     (Formatting.capitalize (Formatting.convertCase Util.CaseConventionPascal Util.CaseConventionCamel endStr))]
       in (PgModel.EdgeLabel (Logic.ifElse (Equality.gt (Lists.length matching) 1) expanded camelType))
+
 -- | Convert a property-graph edge to a Neo4j relationship (edge label -> UPPER_SNAKE type).
 edgeToRelationship :: Neo4jModel.Neo4jMapping t0 -> PgModel.Edge t0 -> Either String Neo4jModel.Relationship
 edgeToRelationship mapping edge =
@@ -43,10 +47,12 @@
       Neo4jModel.relationshipType = (Neo4jModel.RelationshipType (Formatting.convertCase Util.CaseConventionCamel Util.CaseConventionUpperSnake (PgModel.unEdgeLabel (PgModel.edgeLabel edge)))),
       Neo4jModel.relationshipStart = startId,
       Neo4jModel.relationshipEnd = endId})))))
+
 -- | Convert a whole property-graph Graph to a Neo4j graph (nodes and relationships).
 graphToNeo4j :: Ord t0 => (Neo4jModel.Neo4jMapping t0 -> PgModel.Graph t0 -> Either String ([Neo4jModel.Node], [Neo4jModel.Relationship]))
 graphToNeo4j mapping graph =
     Eithers.bind (Eithers.mapList (\v -> vertexToNode mapping v) (Maps.elems (PgModel.graphVertices graph))) (\nodes -> Eithers.bind (Eithers.mapList (\e -> edgeToRelationship mapping e) (Maps.elems (PgModel.graphEdges graph))) (\rels -> Right (nodes, rels)))
+
 -- | Convert a Neo4j graph (nodes and relationships) to property-graph vertices and edges against a GraphType.
 neo4jToGraph :: Neo4jModel.Neo4jMapping t0 -> Neo4jModel.GraphType -> [Neo4jModel.Node] -> [Neo4jModel.Relationship] -> Either String ([PgModel.Vertex t0], [PgModel.Edge t0])
 neo4jToGraph mapping gt nodes rels =
@@ -61,6 +67,7 @@
                   "endpoint node is not single-labeled: ",
                   (Neo4jModel.unElementId eid)]))))) nodes
       in (Eithers.bind (Eithers.mapList (\n -> nodeToVertex mapping n) nodes) (\vertices -> Eithers.bind (Eithers.mapList (\r -> Eithers.bind (labelOf (Neo4jModel.relationshipStart r)) (\startLabel -> Eithers.bind (labelOf (Neo4jModel.relationshipEnd r)) (\endLabel -> relationshipToEdge mapping gt startLabel endLabel r))) rels) (\edges -> Right (vertices, edges))))
+
 -- | Convert a Neo4j node to a property-graph vertex; fails on a multi-label node.
 nodeToVertex :: Neo4jModel.Neo4jMapping t0 -> Neo4jModel.Node -> Either String (PgModel.Vertex t0)
 nodeToVertex mapping node =
@@ -73,6 +80,7 @@
         PgModel.vertexProperties = props})))) (Left (Strings.cat [
         "cannot map a multi-label Neo4j node to a single-label property-graph vertex: ",
         (Neo4jModel.unElementId (Neo4jModel.nodeId node))])))
+
 -- | Convert a Neo4j relationship to a property-graph edge, expanding the type via the schema and endpoint labels.
 relationshipToEdge :: Neo4jModel.Neo4jMapping t0 -> Neo4jModel.GraphType -> Neo4jModel.NodeLabel -> Neo4jModel.NodeLabel -> Neo4jModel.Relationship -> Either String (PgModel.Edge t0)
 relationshipToEdge mapping gt startLabel endLabel rel =
@@ -82,6 +90,7 @@
       PgModel.edgeOut = outId,
       PgModel.edgeIn = inId,
       PgModel.edgeProperties = props})))))
+
 -- | Convert a property-graph vertex to a Neo4j node (single label -> singleton label set).
 vertexToNode :: Neo4jModel.Neo4jMapping t0 -> PgModel.Vertex t0 -> Either String Neo4jModel.Node
 vertexToNode mapping vertex =
diff --git a/src/main/haskell/Hydra/Pg/Coder.hs b/src/main/haskell/Hydra/Pg/Coder.hs
--- a/src/main/haskell/Hydra/Pg/Coder.hs
+++ b/src/main/haskell/Hydra/Pg/Coder.hs
@@ -1,11 +1,14 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Property graph element coders for mapping Hydra terms to property graph elements
 
 module Hydra.Pg.Coder where
+
 import qualified Hydra.Annotations as Annotations
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -32,6 +35,7 @@
 import qualified Hydra.Pg.Model as PgModel
 import qualified Hydra.Pg.TermsToElements as TermsToElements
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.Resolution as Resolution
 import qualified Hydra.Strip as Strip
@@ -48,15 +52,18 @@
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | Check a condition, returning an error if false
-check :: Bool -> Either t0 () -> Either t0 ()
-check b e = Logic.ifElse b (Right ()) e
+check :: t0 -> Bool -> Either t1 () -> Either t1 ()
+check _cx b e = Logic.ifElse b (Right ()) e
+
 -- | Check that a record name matches the expected name
-checkRecordName :: Core.Name -> Core.Name -> Either Errors.Error ()
-checkRecordName expected actual =
-    check (Logic.or (Equality.equal (Core.unName expected) "placeholder") (Equality.equal (Core.unName actual) (Core.unName expected))) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 (Strings.cat2 (Strings.cat2 "Expected record of type " (Core.unName expected)) ", found record of type ") (Core.unName actual)))))
+checkRecordName :: t0 -> Core.Name -> Core.Name -> Either Errors.Error ()
+checkRecordName cx expected actual =
+    check cx (Logic.or (Equality.equal (Core.unName expected) "placeholder") (Equality.equal (Core.unName actual) (Core.unName expected))) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 (Strings.cat2 (Strings.cat2 "Expected record of type " (Core.unName expected)) ", found record of type ") (Core.unName actual)))))
+
 -- | Construct an edge coder from components
-constructEdgeCoder :: Typing.InferenceContext -> Graph.Graph -> PgModel.VertexLabel -> Mapping.Schema t0 t1 t2 Errors.Error -> Core.Type -> t1 -> t1 -> PgModel.Direction -> Core.Name -> [Core.FieldType] -> [Coders.Adapter Core.FieldType (PgModel.PropertyType t1) Core.Field (PgModel.Property t2) Errors.Error] -> Maybe (Core.FieldType, (Mapping.ValueSpec, (Maybe String))) -> Maybe (Core.FieldType, (Mapping.ValueSpec, (Maybe String))) -> Either Errors.Error (Coders.Adapter Core.Type (PgModel.ElementTypeTree t1) Core.Term (PgModel.ElementTree t2) Errors.Error)
+constructEdgeCoder :: t0 -> Graph.Graph -> PgModel.VertexLabel -> Mapping.Schema t1 t2 t3 Errors.Error -> Core.Type -> t2 -> t2 -> PgModel.Direction -> Core.Name -> [Core.FieldType] -> [Coders.Adapter Core.FieldType (PgModel.PropertyType t2) Core.Field (PgModel.Property t3) Errors.Error] -> Maybe (Core.FieldType, (Mapping.ValueSpec, (Maybe String))) -> Maybe (Core.FieldType, (Mapping.ValueSpec, (Maybe String))) -> Either Errors.Error (Coders.Adapter Core.Type (PgModel.ElementTypeTree t2) Core.Term (PgModel.ElementTree t3) Errors.Error)
 constructEdgeCoder cx g parentLabel schema source vidType eidType dir name fields propAdapters mOutSpec mInSpec =
     Eithers.bind (findLabelString cx g source name (Core.Name (Mapping.annotationSchemaEdgeLabel (Mapping.schemaAnnotations schema)))) (\labelStr ->
       let label = PgModel.EdgeLabel labelStr
@@ -66,16 +73,18 @@
                 Optionals.cat [
                   outVertexAdapter,
                   inVertexAdapter]
-        in (Eithers.bind (Optionals.cases mOutSpec (Right parentLabel) (\spec -> Optionals.cases (Pairs.second (Pairs.second spec)) (Left (Errors.ErrorOther (Errors.OtherError "no out-vertex label"))) (\a -> Right (PgModel.VertexLabel a)))) (\outLabel -> Eithers.bind (Optionals.cases mInSpec (Right parentLabel) (\spec -> Optionals.cases (Pairs.second (Pairs.second spec)) (Left (Errors.ErrorOther (Errors.OtherError "no in-vertex label"))) (\a -> Right (PgModel.VertexLabel a)))) (\inLabel -> Right (edgeCoder g dir schema source eidType name label outLabel inLabel idAdapter outIdAdapter inIdAdapter propAdapters vertexAdapters)))))))))))
+        in (Eithers.bind (Optionals.cases mOutSpec (Right parentLabel) (\spec -> Optionals.cases (Pairs.second (Pairs.second spec)) (Left (Errors.ErrorOther (Errors.OtherError "no out-vertex label"))) (\a -> Right (PgModel.VertexLabel a)))) (\outLabel -> Eithers.bind (Optionals.cases mInSpec (Right parentLabel) (\spec -> Optionals.cases (Pairs.second (Pairs.second spec)) (Left (Errors.ErrorOther (Errors.OtherError "no in-vertex label"))) (\a -> Right (PgModel.VertexLabel a)))) (\inLabel -> Right (edgeCoder cx g dir schema source eidType name label outLabel inLabel idAdapter outIdAdapter inIdAdapter propAdapters vertexAdapters)))))))))))
+
 -- | Construct a vertex coder from components
-constructVertexCoder :: Typing.InferenceContext -> Graph.Graph -> Mapping.Schema t0 t1 t2 Errors.Error -> Core.Type -> t1 -> t1 -> Core.Name -> [Core.FieldType] -> [Coders.Adapter Core.FieldType (PgModel.PropertyType t1) Core.Field (PgModel.Property t2) Errors.Error] -> Either Errors.Error (Coders.Adapter Core.Type (PgModel.ElementTypeTree t1) Core.Term (PgModel.ElementTree t2) Errors.Error)
+constructVertexCoder :: t0 -> Graph.Graph -> Mapping.Schema t1 t2 t3 Errors.Error -> Core.Type -> t2 -> t2 -> Core.Name -> [Core.FieldType] -> [Coders.Adapter Core.FieldType (PgModel.PropertyType t2) Core.Field (PgModel.Property t3) Errors.Error] -> Either Errors.Error (Coders.Adapter Core.Type (PgModel.ElementTypeTree t2) Core.Term (PgModel.ElementTree t3) Errors.Error)
 constructVertexCoder cx g schema source vidType eidType name fields propAdapters =
     Eithers.bind (findLabelString cx g source name (Core.Name (Mapping.annotationSchemaVertexLabel (Mapping.schemaAnnotations schema)))) (\labelStr ->
       let label = PgModel.VertexLabel labelStr
-      in (Eithers.bind (vertexIdAdapter cx g schema vidType name (Core.Name (Mapping.annotationSchemaVertexId (Mapping.schemaAnnotations schema))) fields) (\idAdapter -> Eithers.bind (findAdjacenEdgeAdapters cx g schema vidType eidType label PgModel.DirectionOut fields) (\outEdgeAdapters -> Eithers.bind (findAdjacenEdgeAdapters cx g schema vidType eidType label PgModel.DirectionIn fields) (\inEdgeAdapters -> Right (vertexCoder g schema source vidType name label idAdapter propAdapters (Lists.concat2 outEdgeAdapters inEdgeAdapters)))))))
+      in (Eithers.bind (vertexIdAdapter cx g schema vidType name (Core.Name (Mapping.annotationSchemaVertexId (Mapping.schemaAnnotations schema))) fields) (\idAdapter -> Eithers.bind (findAdjacenEdgeAdapters cx g schema vidType eidType label PgModel.DirectionOut fields) (\outEdgeAdapters -> Eithers.bind (findAdjacenEdgeAdapters cx g schema vidType eidType label PgModel.DirectionIn fields) (\inEdgeAdapters -> Right (vertexCoder cx g schema source vidType name label idAdapter propAdapters (Lists.concat2 outEdgeAdapters inEdgeAdapters)))))))
+
 -- | Create an edge coder given all components
-edgeCoder :: t0 -> PgModel.Direction -> Mapping.Schema t1 t2 t3 Errors.Error -> t4 -> t5 -> Core.Name -> PgModel.EdgeLabel -> PgModel.VertexLabel -> PgModel.VertexLabel -> Maybe (Core.Name, (Coders.Adapter t6 t7 Core.Term t3 Errors.Error)) -> Maybe (Core.Name, (Coders.Adapter t8 t9 Core.Term t3 Errors.Error)) -> Maybe (Core.Name, (Coders.Adapter t10 t11 Core.Term t3 Errors.Error)) -> [Coders.Adapter Core.FieldType (PgModel.PropertyType t5) Core.Field (PgModel.Property t3) Errors.Error] -> [(Core.Name, (Coders.Adapter t12 t13 Core.Term (PgModel.ElementTree t3) Errors.Error))] -> Coders.Adapter t4 (PgModel.ElementTypeTree t5) Core.Term (PgModel.ElementTree t3) Errors.Error
-edgeCoder g dir schema source eidType tname label outLabel inLabel mIdAdapter outAdapter inAdapter propAdapters vertexAdapters =
+edgeCoder :: t0 -> t1 -> PgModel.Direction -> Mapping.Schema t2 t3 t4 t5 -> t6 -> t7 -> Core.Name -> PgModel.EdgeLabel -> PgModel.VertexLabel -> PgModel.VertexLabel -> Maybe (Core.Name, (Coders.Adapter t8 t9 Core.Term t4 Errors.Error)) -> Maybe (Core.Name, (Coders.Adapter t10 t11 Core.Term t4 Errors.Error)) -> Maybe (Core.Name, (Coders.Adapter t12 t13 Core.Term t4 Errors.Error)) -> [Coders.Adapter Core.FieldType (PgModel.PropertyType t7) Core.Field (PgModel.Property t4) Errors.Error] -> [(Core.Name, (Coders.Adapter t14 t15 Core.Term (PgModel.ElementTree t4) Errors.Error))] -> Coders.Adapter t6 (PgModel.ElementTypeTree t7) Core.Term (PgModel.ElementTree t4) Errors.Error
+edgeCoder cx g dir schema source eidType tname label outLabel inLabel mIdAdapter outAdapter inAdapter propAdapters vertexAdapters =
 
       let et =
               PgModel.EdgeType {
@@ -98,11 +107,11 @@
                 rec =
                         case unwrapped of
                           Core.TermRecord v0 -> v0
-            in (Eithers.bind (checkRecordName tname (Core.recordTypeName rec)) (\_chk ->
+            in (Eithers.bind (checkRecordName cx tname (Core.recordTypeName rec)) (\_chk ->
               let fieldsm = Resolution.fieldMap (Core.recordFields rec)
-              in (Eithers.bind (Optionals.cases mIdAdapter (Right (Mapping.schemaDefaultEdgeId schema)) (selectEdgeId fieldsm)) (\edgeId -> Eithers.bind (encodeProperties fieldsm propAdapters) (\props ->
+              in (Eithers.bind (Optionals.cases mIdAdapter (Right (Mapping.schemaDefaultEdgeId schema)) (selectEdgeId cx fieldsm)) (\edgeId -> Eithers.bind (encodeProperties cx fieldsm propAdapters) (\props ->
                 let getVertexId =
-                        \dirCheck -> \adapter -> Optionals.cases (Logic.ifElse (Equality.equal dir dirCheck) Nothing adapter) (Right (Mapping.schemaDefaultVertexId schema)) (selectVertexId fieldsm)
+                        \dirCheck -> \adapter -> Optionals.cases (Logic.ifElse (Equality.equal dir dirCheck) Nothing adapter) (Right (Mapping.schemaDefaultVertexId schema)) (selectVertexId cx fieldsm)
                 in (Eithers.bind (getVertexId PgModel.DirectionOut outAdapter) (\outId -> Eithers.bind (getVertexId PgModel.DirectionIn inAdapter) (\inId -> Eithers.bind (Eithers.map (\xs -> Optionals.cat xs) (Eithers.mapList (\va ->
                   let fname = Pairs.first va
                       ad = Pairs.second va
@@ -113,12 +122,14 @@
                   PgModel.edgeIn = inId,
                   PgModel.edgeProperties = props}) deps))))))))))),
           Coders.coderDecode = (\_ -> Left (Errors.ErrorOther (Errors.OtherError "edge decoding is not yet supported")))}}
+
 -- | Create an edge id adapter
 edgeIdAdapter :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> t5 -> Core.Name -> Core.Name -> [Core.FieldType] -> Either Errors.Error (Maybe (Core.Name, (Coders.Adapter Core.Type t5 Core.Term t4 Errors.Error)))
 edgeIdAdapter cx g schema eidType name idKey fields =
     Eithers.bind (findIdProjectionSpec cx False name idKey fields) (\mIdSpec -> Optionals.cases mIdSpec (Right Nothing) (\idSpec -> Eithers.map (\x -> Just x) (projectionAdapter cx g eidType (Mapping.schemaEdgeIds schema) idSpec "id")))
+
 -- | Construct an element adapter for a given type, interpreting it either as a vertex specification or an edge specification
-elementCoder :: Maybe (PgModel.Direction, PgModel.VertexLabel) -> Mapping.Schema t0 t1 t2 Errors.Error -> Core.Type -> t1 -> t1 -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (Coders.Adapter Core.Type (PgModel.ElementTypeTree t1) Core.Term (PgModel.ElementTree t2) Errors.Error)
+elementCoder :: Maybe (PgModel.Direction, PgModel.VertexLabel) -> Mapping.Schema t0 t1 t2 Errors.Error -> Core.Type -> t1 -> t1 -> t3 -> Graph.Graph -> Either Errors.Error (Coders.Adapter Core.Type (PgModel.ElementTypeTree t1) Core.Term (PgModel.ElementTree t2) Errors.Error)
 elementCoder mparent schema source vidType eidType cx g =
 
       let dir = Optionals.cases mparent PgModel.DirectionBoth (\p -> Pairs.first p)
@@ -137,37 +148,43 @@
               PgModel.ElementKindVertex -> constructVertexCoder cx g schema source vidType eidType name v0 propAdapters
               PgModel.ElementKindEdge -> constructEdgeCoder cx g parentLabel schema source vidType eidType dir name v0 propAdapters mOutSpec mInSpec))))))
         _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 (Strings.cat2 (Strings.cat2 "Expected " "record type") ", found: ") "other type")))
+
 -- | Create an element tree for an edge
 elementTreeEdge :: PgModel.Edge t0 -> [PgModel.ElementTree t0] -> PgModel.ElementTree t0
 elementTreeEdge edge deps =
     PgModel.ElementTree {
       PgModel.elementTreeSelf = (PgModel.ElementEdge edge),
       PgModel.elementTreeDependencies = deps}
+
 -- | Create an element tree for a vertex
 elementTreeVertex :: PgModel.Vertex t0 -> [PgModel.ElementTree t0] -> PgModel.ElementTree t0
 elementTreeVertex vertex deps =
     PgModel.ElementTree {
       PgModel.elementTreeSelf = (PgModel.ElementVertex vertex),
       PgModel.elementTreeDependencies = deps}
+
 -- | Create an element type tree for an edge type
 elementTypeTreeEdge :: PgModel.EdgeType t0 -> [PgModel.ElementTypeTree t0] -> PgModel.ElementTypeTree t0
 elementTypeTreeEdge etype deps =
     PgModel.ElementTypeTree {
       PgModel.elementTypeTreeSelf = (PgModel.ElementTypeEdge etype),
       PgModel.elementTypeTreeDependencies = deps}
+
 -- | Create an element type tree for a vertex type
 elementTypeTreeVertex :: PgModel.VertexType t0 -> [PgModel.ElementTypeTree t0] -> PgModel.ElementTypeTree t0
 elementTypeTreeVertex vtype deps =
     PgModel.ElementTypeTree {
       PgModel.elementTypeTreeSelf = (PgModel.ElementTypeVertex vtype),
       PgModel.elementTypeTreeDependencies = deps}
+
 -- | Encode all properties from a field map using property adapters
-encodeProperties :: M.Map Core.Name Core.Term -> [Coders.Adapter Core.FieldType t0 Core.Field (PgModel.Property t1) Errors.Error] -> Either Errors.Error (M.Map PgModel.PropertyKey t1)
-encodeProperties fields adapters =
-    Eithers.map (\props -> Maps.fromList (Lists.map (\prop -> (PgModel.propertyKey prop, (PgModel.propertyValue prop))) props)) (Eithers.map (\xs -> Optionals.cat xs) (Eithers.mapList (encodeProperty fields) adapters))
+encodeProperties :: t0 -> M.Map Core.Name Core.Term -> [Coders.Adapter Core.FieldType t1 Core.Field (PgModel.Property t2) Errors.Error] -> Either Errors.Error (M.Map PgModel.PropertyKey t2)
+encodeProperties cx fields adapters =
+    Eithers.map (\props -> Maps.fromList (Lists.map (\prop -> (PgModel.propertyKey prop, (PgModel.propertyValue prop))) props)) (Eithers.map (\xs -> Optionals.cat xs) (Eithers.mapList (encodeProperty cx fields) adapters))
+
 -- | Encode a single property from a field map using a property adapter
-encodeProperty :: M.Map Core.Name Core.Term -> Coders.Adapter Core.FieldType t0 Core.Field t1 Errors.Error -> Either Errors.Error (Maybe t1)
-encodeProperty fields adapter =
+encodeProperty :: t0 -> M.Map Core.Name Core.Term -> Coders.Adapter Core.FieldType t1 Core.Field t2 Errors.Error -> Either Errors.Error (Maybe t2)
+encodeProperty cx fields adapter =
 
       let fname = Core.fieldTypeName (Coders.adapterSource adapter)
           ftyp = Strip.deannotateType (Core.fieldTypeType (Coders.adapterSource adapter))
@@ -182,15 +199,17 @@
       in (Optionals.cases (Maps.lookup fname fields) (Logic.ifElse isMaybe (Right Nothing) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "expected field not found in record: " (Core.unName fname)))))) (\value -> Logic.ifElse isMaybe (case (Strip.deannotateTerm value) of
         Core.TermOptional v0 -> Optionals.cases v0 (Right Nothing) encodeValue
         _ -> encodeValue value) (encodeValue value)))
+
 -- | Extract a string from a term
 extractString :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error String
 extractString cx g t = ExtractCore.string g t
+
 -- | Find adjacent edge adapters for a given direction
-findAdjacenEdgeAdapters :: Typing.InferenceContext -> Graph.Graph -> Mapping.Schema t0 t1 t2 Errors.Error -> t1 -> t1 -> PgModel.VertexLabel -> PgModel.Direction -> [Core.FieldType] -> Either Errors.Error [(
+findAdjacenEdgeAdapters :: t0 -> Graph.Graph -> Mapping.Schema t1 t2 t3 Errors.Error -> t2 -> t2 -> PgModel.VertexLabel -> PgModel.Direction -> [Core.FieldType] -> Either Errors.Error [(
   PgModel.Direction,
   (
     Core.FieldType,
-    (PgModel.EdgeLabel, (Coders.Adapter Core.Type (PgModel.ElementTypeTree t1) Core.Term (PgModel.ElementTree t2) Errors.Error))))]
+    (PgModel.EdgeLabel, (Coders.Adapter Core.Type (PgModel.ElementTypeTree t2) Core.Term (PgModel.ElementTree t3) Errors.Error))))]
 findAdjacenEdgeAdapters cx g schema vidType eidType parentLabel dir fields =
     Eithers.map (\xs -> Optionals.cat xs) (Eithers.mapList (\field ->
       let key =
@@ -198,6 +217,7 @@
                 PgModel.DirectionOut -> Mapping.annotationSchemaOutEdgeLabel (Mapping.schemaAnnotations schema)
                 PgModel.DirectionIn -> Mapping.annotationSchemaInEdgeLabel (Mapping.schemaAnnotations schema))
       in (Optionals.cases (Annotations.getTypeAnnotation key (Core.fieldTypeType field)) (Right Nothing) (\a -> Eithers.bind (extractString cx g a) (\labelStr -> Eithers.bind (elementCoder (Just (dir, parentLabel)) schema (Core.fieldTypeType field) vidType eidType cx g) (\elad -> Right (Just (dir, (field, (PgModel.EdgeLabel labelStr, elad))))))))) fields)
+
 -- | Find an id projection spec for a field
 findIdProjectionSpec :: t0 -> Bool -> Core.Name -> Core.Name -> [Core.FieldType] -> Either Errors.Error (Maybe (Core.FieldType, (Mapping.ValueSpec, (Maybe String))))
 findIdProjectionSpec cx required tname idKey fields =
@@ -210,22 +230,26 @@
       Graph.graphPrimitives = Maps.empty,
       Graph.graphSchemaTypes = Maps.empty,
       Graph.graphTypeVariables = Sets.empty})))))
+
 -- | Find an incident vertex adapter for a projection spec
-findIncidentVertexAdapter :: Typing.InferenceContext -> Graph.Graph -> Mapping.Schema t0 t1 t2 Errors.Error -> t1 -> t1 -> (Core.FieldType, (Mapping.ValueSpec, (Maybe String))) -> Either Errors.Error (Core.Name, (Coders.Adapter Core.Type (PgModel.ElementTypeTree t1) Core.Term (PgModel.ElementTree t2) Errors.Error))
+findIncidentVertexAdapter :: t0 -> Graph.Graph -> Mapping.Schema t1 t2 t3 Errors.Error -> t2 -> t2 -> (Core.FieldType, (Mapping.ValueSpec, (Maybe String))) -> Either Errors.Error (Core.Name, (Coders.Adapter Core.Type (PgModel.ElementTypeTree t2) Core.Term (PgModel.ElementTree t3) Errors.Error))
 findIncidentVertexAdapter cx g schema vidType eidType spec =
 
       let field = Pairs.first spec
       in (Eithers.bind (elementCoder Nothing schema (Core.fieldTypeType field) vidType eidType cx g) (\adapter -> Right (Core.fieldTypeName field, adapter)))
+
 -- | Find a label string from annotations or the type name
 findLabelString :: t0 -> Graph.Graph -> Core.Type -> Core.Name -> Core.Name -> Either Errors.Error String
 findLabelString cx g source tname labelKey =
     Optionals.cases (Annotations.getTypeAnnotation labelKey source) (Right (Core.unName tname)) (extractString cx g)
+
 -- | Find a projection spec for a field
 findProjectionSpec :: t0 -> Graph.Graph -> Core.Name -> Core.Name -> Core.Name -> [Core.FieldType] -> Either Errors.Error (Maybe (Core.FieldType, (Mapping.ValueSpec, (Maybe String))))
 findProjectionSpec cx g tname key aliasKey fields =
     Eithers.bind (findSingleFieldWithAnnotationKey cx tname key fields) (\mfield -> Optionals.cases mfield (Right Nothing) (\field -> Optionals.cases (Annotations.getTypeAnnotation key (Core.fieldTypeType field)) (Left (Errors.ErrorOther (Errors.OtherError "findProjectionSpec: missing type annotation for key"))) (\annot -> Eithers.bind (TermsToElements.decodeValueSpec cx g annot) (\spec -> Eithers.bind (Optionals.cases (Annotations.getTypeAnnotation aliasKey (Core.fieldTypeType field)) (Right Nothing) (\t -> Eithers.map (\x -> Just x) (extractString cx g t))) (\alias -> Right (Just (field, (spec, alias))))))))
+
 -- | Find property specs for element fields
-findPropertySpecs :: t0 -> Graph.Graph -> Mapping.Schema t1 t2 t3 Errors.Error -> PgModel.ElementKind -> [Core.FieldType] -> Either Errors.Error [(Core.FieldType, (Mapping.ValueSpec, (Maybe String)))]
+findPropertySpecs :: t0 -> Graph.Graph -> Mapping.Schema t1 t2 t3 t4 -> PgModel.ElementKind -> [Core.FieldType] -> Either Errors.Error [(Core.FieldType, (Mapping.ValueSpec, (Maybe String)))]
 findPropertySpecs cx g schema kind fields =
     Eithers.mapList (\field ->
       let propKeyKey = Core.Name (Mapping.annotationSchemaPropertyKey (Mapping.schemaAnnotations schema))
@@ -252,12 +276,14 @@
                   Lists.foldl (\b -> \k -> Logic.or b (Optionals.isGiven (Annotations.getTypeAnnotation k (Core.fieldTypeType field)))) False allKeys
           hasSpecialFieldName = Lists.foldl (\b -> \k -> Logic.or b (Equality.equal (Core.fieldTypeName field) k)) False specialKeys
       in (Logic.not (Logic.or hasSpecialAnnotation hasSpecialFieldName))) fields)
+
 -- | Find a single field with a given annotation key
 findSingleFieldWithAnnotationKey :: t0 -> Core.Name -> Core.Name -> [Core.FieldType] -> Either Errors.Error (Maybe Core.FieldType)
 findSingleFieldWithAnnotationKey cx tname key fields =
 
       let matches = Lists.filter (\f -> Optionals.isGiven (Annotations.getTypeAnnotation key (Core.fieldTypeType f))) fields
       in (Logic.ifElse (Equality.gt (Lists.length matches) 1) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 (Strings.cat2 (Strings.cat2 "Multiple fields marked as '" (Core.unName key)) "' in record type ") (Core.unName tname))))) (Right (Lists.maybeHead matches)))
+
 -- | Determine whether the spec has vertex adapters based on direction and out/in specs
 hasVertexAdapters :: PgModel.Direction -> Maybe t0 -> Maybe t1 -> Bool
 hasVertexAdapters dir mOutSpec mInSpec =
@@ -265,6 +291,7 @@
       PgModel.DirectionOut -> Optionals.isGiven mInSpec
       PgModel.DirectionIn -> Optionals.isGiven mOutSpec
       PgModel.DirectionBoth -> Logic.and (Optionals.isGiven mOutSpec) (Optionals.isGiven mInSpec)
+
 -- | Create a projection adapter from a projection spec
 projectionAdapter :: t0 -> t1 -> t2 -> Coders.Coder Core.Term t3 Errors.Error -> (Core.FieldType, (Mapping.ValueSpec, t4)) -> String -> Either t5 (Core.Name, (Coders.Adapter Core.Type t2 Core.Term t3 Errors.Error))
 projectionAdapter cx g idtype coder spec key =
@@ -278,10 +305,11 @@
           Coders.adapterSource = (Core.fieldTypeType field),
           Coders.adapterTarget = idtype,
           Coders.adapterCoder = Coders.Coder {
-            Coders.coderEncode = (\typ -> Eithers.bind (traverseToSingleTerm cx (Strings.cat2 key "-projection") traversal typ) (\t -> Coders.coderEncode coder t)),
+            Coders.coderEncode = (\typ -> Eithers.bind (traverseToSingleTerm cx (Strings.cat2 key "-projection") (traversal cx) typ) (\t -> Coders.coderEncode coder t)),
             Coders.coderDecode = (\_ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 (Strings.cat2 "edge '" key) "' decoding is not yet supported"))))}})))
+
 -- | Create a property adapter from a property spec
-propertyAdapter :: Typing.InferenceContext -> t0 -> Mapping.Schema t1 t2 t3 Errors.Error -> (Core.FieldType, (Mapping.ValueSpec, (Maybe String))) -> Either Errors.Error (Coders.Adapter Core.FieldType (PgModel.PropertyType t2) Core.Field (PgModel.Property t3) Errors.Error)
+propertyAdapter :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> (Core.FieldType, (Mapping.ValueSpec, (Maybe String))) -> Either Errors.Error (Coders.Adapter Core.FieldType (PgModel.PropertyType t3) Core.Field (PgModel.Property t4) Errors.Error)
 propertyAdapter cx g schema spec =
 
       let tfield = Pairs.first spec
@@ -296,10 +324,11 @@
           PgModel.propertyTypeValue = pt,
           PgModel.propertyTypeRequired = True},
         Coders.adapterCoder = Coders.Coder {
-          Coders.coderEncode = (\dfield -> Eithers.bind (traverseToSingleTerm cx "property traversal" traversal (Core.fieldTerm dfield)) (\result -> Eithers.bind (Coders.coderEncode (Mapping.schemaPropertyValues schema) result) (\value -> Right (PgModel.Property {
+          Coders.coderEncode = (\dfield -> Eithers.bind (traverseToSingleTerm cx "property traversal" (traversal cx) (Core.fieldTerm dfield)) (\result -> Eithers.bind (Coders.coderEncode (Mapping.schemaPropertyValues schema) result) (\value -> Right (PgModel.Property {
             PgModel.propertyKey = key,
             PgModel.propertyValue = value})))),
           Coders.coderDecode = (\_ -> Left (Errors.ErrorOther (Errors.OtherError "property decoding is not yet supported")))}}))))
+
 -- | Extract property types from property adapters
 propertyTypes :: [Coders.Adapter t0 (PgModel.PropertyType t1) t2 t3 t4] -> [PgModel.PropertyType t1]
 propertyTypes propAdapters =
@@ -307,29 +336,35 @@
       PgModel.propertyTypeKey = (PgModel.propertyTypeKey (Coders.adapterTarget a)),
       PgModel.propertyTypeValue = (PgModel.propertyTypeValue (Coders.adapterTarget a)),
       PgModel.propertyTypeRequired = True}) propAdapters
+
 -- | Select an edge id from record fields using an id adapter
-selectEdgeId :: M.Map Core.Name t0 -> (Core.Name, (Coders.Adapter t1 t2 t0 t3 Errors.Error)) -> Either Errors.Error t3
-selectEdgeId fields ad =
+selectEdgeId :: t0 -> M.Map Core.Name t1 -> (Core.Name, (Coders.Adapter t2 t3 t1 t4 Errors.Error)) -> Either Errors.Error t4
+selectEdgeId cx fields ad =
 
       let fname = Pairs.first ad
           adapter = Pairs.second ad
       in (Optionals.cases (Maps.lookup fname fields) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 (Strings.cat2 "no " (Core.unName fname)) " in record")))) (\t -> Coders.coderEncode (Coders.adapterCoder adapter) t))
+
 -- | Select a vertex id from record fields using an id adapter
-selectVertexId :: M.Map Core.Name t0 -> (Core.Name, (Coders.Adapter t1 t2 t0 t3 Errors.Error)) -> Either Errors.Error t3
-selectVertexId fields ad =
+selectVertexId :: t0 -> M.Map Core.Name t1 -> (Core.Name, (Coders.Adapter t2 t3 t1 t4 Errors.Error)) -> Either Errors.Error t4
+selectVertexId cx fields ad =
 
       let fname = Pairs.first ad
           adapter = Pairs.second ad
       in (Optionals.cases (Maps.lookup fname fields) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 (Strings.cat2 "no " (Core.unName fname)) " in record")))) (\t -> Coders.coderEncode (Coders.adapterCoder adapter) t))
+
 -- | Traverse to a single term, failing if zero or multiple terms are found
 traverseToSingleTerm :: t0 -> String -> (t1 -> Either Errors.Error [t2]) -> t1 -> Either Errors.Error t2
 traverseToSingleTerm cx desc traversal term =
     Eithers.bind (traversal term) (\terms -> Logic.ifElse (Lists.null terms) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 desc " did not resolve to a term")))) (Logic.ifElse (Equality.equal (Lists.length terms) 1) (Optionals.cases (Lists.maybeHead terms) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 desc " resolved to multiple terms")))) (\x -> Right x)) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 desc " resolved to multiple terms"))))))
+
 -- | Create a vertex coder given all components
-vertexCoder :: t0 -> Mapping.Schema t1 t2 t3 Errors.Error -> t4 -> t5 -> t6 -> PgModel.VertexLabel -> (Core.Name, (Coders.Adapter t7 t8 Core.Term t3 Errors.Error)) -> [Coders.Adapter Core.FieldType (PgModel.PropertyType t5) Core.Field (PgModel.Property t3) Errors.Error] -> [(
+vertexCoder :: t0 -> t1 -> Mapping.Schema t2 t3 t4 t5 -> t6 -> t7 -> t8 -> PgModel.VertexLabel -> (Core.Name, (Coders.Adapter t9 t10 Core.Term t4 Errors.Error)) -> [Coders.Adapter Core.FieldType (PgModel.PropertyType t7) Core.Field (PgModel.Property t4) Errors.Error] -> [(
   PgModel.Direction,
-  (Core.FieldType, (PgModel.EdgeLabel, (Coders.Adapter t9 (PgModel.ElementTypeTree t5) Core.Term (PgModel.ElementTree t3) Errors.Error))))] -> Coders.Adapter t4 (PgModel.ElementTypeTree t5) Core.Term (PgModel.ElementTree t3) Errors.Error
-vertexCoder g schema source vidType tname vlabel idAdapter propAdapters edgeAdapters =
+  (
+    Core.FieldType,
+    (PgModel.EdgeLabel, (Coders.Adapter t11 (PgModel.ElementTypeTree t7) Core.Term (PgModel.ElementTree t4) Errors.Error))))] -> Coders.Adapter t6 (PgModel.ElementTypeTree t7) Core.Term (PgModel.ElementTree t4) Errors.Error
+vertexCoder cx g schema source vidType tname vlabel idAdapter propAdapters edgeAdapters =
 
       let vtype =
               PgModel.VertexType {
@@ -353,7 +388,7 @@
                         case unwrapped of
                           Core.TermRecord v0 -> v0
                 fmap = Resolution.fieldMap (Core.recordFields rec)
-            in (Eithers.bind (selectVertexId fmap idAdapter) (\vid -> Eithers.bind (encodeProperties fmap propAdapters) (\props -> Eithers.bind (Eithers.map (\xs -> Lists.concat xs) (Eithers.mapList (\ea ->
+            in (Eithers.bind (selectVertexId cx fmap idAdapter) (\vid -> Eithers.bind (encodeProperties cx fmap propAdapters) (\props -> Eithers.bind (Eithers.map (\xs -> Lists.concat xs) (Eithers.mapList (\ea ->
               let eaDir = Pairs.first ea
                   eaField = Pairs.first (Pairs.second ea)
                   eaLabel = Pairs.first (Pairs.second (Pairs.second ea))
@@ -405,6 +440,7 @@
               PgModel.vertexId = vid,
               PgModel.vertexProperties = props}) deps)))))),
           Coders.coderDecode = (\_ -> Left (Errors.ErrorOther (Errors.OtherError "vertex decoding is not yet supported")))}}
+
 -- | Create a vertex id adapter
 vertexIdAdapter :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> t5 -> Core.Name -> Core.Name -> [Core.FieldType] -> Either Errors.Error (Core.Name, (Coders.Adapter Core.Type t5 Core.Term t4 Errors.Error))
 vertexIdAdapter cx g schema vidType name idKey fields =
diff --git a/src/main/haskell/Hydra/Pg/Graphson/Coder.hs b/src/main/haskell/Hydra/Pg/Graphson/Coder.hs
--- a/src/main/haskell/Hydra/Pg/Graphson/Coder.hs
+++ b/src/main/haskell/Hydra/Pg/Graphson/Coder.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Encoding functions for converting GraphSON syntax to JSON.
 
 module Hydra.Pg.Graphson.Coder where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -26,6 +29,7 @@
 import qualified Hydra.Paths as Paths
 import qualified Hydra.Pg.Graphson.Syntax as Syntax
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.System as System
 import qualified Hydra.Tabular as Tabular
@@ -40,6 +44,7 @@
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | Convert a GraphSON AdjacentEdge to a JSON Value. The Bool indicates whether this is an outgoing edge.
 adjacentEdgeToJson :: Bool -> Syntax.AdjacentEdge -> Model.Value
 adjacentEdgeToJson out ae =
@@ -48,6 +53,7 @@
       ("inV", (Logic.ifElse out (Just (valueToJson (Syntax.adjacentEdgeVertexId ae))) Nothing)),
       ("outV", (Logic.ifElse out Nothing (Just (valueToJson (Syntax.adjacentEdgeVertexId ae))))),
       ("properties", (edgePropertyMapToJson (Syntax.adjacentEdgeProperties ae)))]
+
 -- | Convert a GraphSON DoubleValue to a JSON Value
 doubleValueToJson :: Syntax.DoubleValue -> Model.Value
 doubleValueToJson x =
@@ -56,14 +62,17 @@
       Syntax.DoubleValueInfinity -> Model.ValueString "Infinity"
       Syntax.DoubleValueNegativeInfinity -> Model.ValueString "-Infinity"
       Syntax.DoubleValueNotANumber -> Model.ValueString "NaN"
+
 -- | Convert a map of edges by label to an optional JSON Value
 edgeMapToJson :: Bool -> M.Map Syntax.EdgeLabel [Syntax.AdjacentEdge] -> Maybe Model.Value
 edgeMapToJson out m =
     Logic.ifElse (Maps.null m) Nothing (Just (Model.ValueObject (Lists.map (\p -> (Syntax.unEdgeLabel (Pairs.first p), (Model.ValueArray (Lists.map (adjacentEdgeToJson out) (Pairs.second p))))) (Maps.toList m))))
+
 -- | Convert a map of edge properties to an optional JSON Value
 edgePropertyMapToJson :: M.Map Syntax.PropertyKey Syntax.Value -> Maybe Model.Value
 edgePropertyMapToJson m =
     Logic.ifElse (Maps.null m) Nothing (Just (Model.ValueObject (Lists.map (\p -> (Syntax.unPropertyKey (Pairs.first p), (valueToJson (Pairs.second p)))) (Maps.toList m))))
+
 -- | Convert a GraphSON FloatValue to a JSON Value
 floatValueToJson :: Syntax.FloatValue -> Model.Value
 floatValueToJson x =
@@ -72,22 +81,26 @@
       Syntax.FloatValueInfinity -> Model.ValueString "Infinity"
       Syntax.FloatValueNegativeInfinity -> Model.ValueString "-Infinity"
       Syntax.FloatValueNotANumber -> Model.ValueString "NaN"
+
 -- | Convert a GraphSON Map to a JSON array of alternating keys and values
 mapToJson :: Syntax.Map -> Model.Value
 mapToJson m =
     Model.ValueArray (Lists.concat (Lists.map (\vp -> [
       valueToJson (Syntax.valuePairFirst vp),
       (valueToJson (Syntax.valuePairSecond vp))]) (Syntax.unMap m)))
+
 -- | Create a JSON object from a list of key-value pairs, filtering out Nothing values
 toJsonObject :: [(String, (Maybe Model.Value))] -> Model.Value
 toJsonObject pairs =
     Model.ValueObject (Optionals.cat (Lists.map (\p -> Optionals.map (\v -> (Pairs.first p, v)) (Pairs.second p)) pairs))
+
 -- | Create a typed JSON object with @type and @value fields
 typedValueToJson :: String -> Model.Value -> Model.Value
 typedValueToJson typeName valueJson =
     toJsonObject [
       ("@type", (Just (Model.ValueString typeName))),
       ("@value", (Just valueJson))]
+
 -- | Convert a GraphSON Value to a JSON Value
 valueToJson :: Syntax.Value -> Model.Value
 valueToJson x =
@@ -113,16 +126,19 @@
       Syntax.ValueShort v0 -> typedValueToJson "g:Int16" (Model.ValueNumber (Literals.bigintToDecimal (Literals.int16ToBigint v0)))
       Syntax.ValueString v0 -> Model.ValueString v0
       Syntax.ValueUuid v0 -> typedValueToJson "g:UUID" (Model.ValueString (Syntax.unUuid v0))
+
 -- | Convert a map of vertex properties to an optional JSON Value
 vertexPropertyMapToJson :: M.Map Syntax.PropertyKey [Syntax.VertexPropertyValue] -> Maybe Model.Value
 vertexPropertyMapToJson m =
     Logic.ifElse (Maps.null m) Nothing (Just (Model.ValueObject (Lists.map (\p -> (Syntax.unPropertyKey (Pairs.first p), (Model.ValueArray (Lists.map vertexPropertyValueToJson (Pairs.second p))))) (Maps.toList m))))
+
 -- | Convert a GraphSON VertexPropertyValue to a JSON Value
 vertexPropertyValueToJson :: Syntax.VertexPropertyValue -> Model.Value
 vertexPropertyValueToJson vpv =
     toJsonObject [
       ("id", (Optionals.map valueToJson (Syntax.vertexPropertyValueId vpv))),
       ("value", (Just (valueToJson (Syntax.vertexPropertyValueValue vpv))))]
+
 -- | Convert a GraphSON Vertex to a JSON Value
 vertexToJson :: Syntax.Vertex -> Model.Value
 vertexToJson v =
diff --git a/src/main/haskell/Hydra/Pg/Graphson/Construct.hs b/src/main/haskell/Hydra/Pg/Graphson/Construct.hs
--- a/src/main/haskell/Hydra/Pg/Graphson/Construct.hs
+++ b/src/main/haskell/Hydra/Pg/Graphson/Construct.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Functions for constructing GraphSON vertices from property graph vertices.
 
 module Hydra.Pg.Graphson.Construct where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -26,6 +29,7 @@
 import qualified Hydra.Pg.Graphson.Syntax as Syntax
 import qualified Hydra.Pg.Model as PgModel
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.System as System
 import qualified Hydra.Tabular as Tabular
@@ -40,6 +44,7 @@
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | Convert a property graph adjacent edge to a GraphSON adjacent edge
 adjacentEdgeToGraphson :: (t0 -> Either t1 Syntax.Value) -> PgModel.AdjacentEdge t0 -> Either t1 (Syntax.EdgeLabel, Syntax.AdjacentEdge)
 adjacentEdgeToGraphson encodeValue edge =
@@ -54,6 +59,7 @@
           Syntax.adjacentEdgeId = gid,
           Syntax.adjacentEdgeVertexId = gv,
           Syntax.adjacentEdgeProperties = (Maps.fromList propPairs)})))))
+
 -- | Aggregate a list of key-value pairs into a map where each key maps to a list of values
 aggregateMap :: Ord t0 => ([(t0, t1)] -> M.Map t0 [t1])
 aggregateMap pairs =
@@ -62,16 +68,19 @@
           v = Pairs.second p
           existing = Maps.lookup k m
       in (Maps.insert k (Optionals.cases existing (Lists.pure v) (\vs -> Lists.cons v vs)) m)) Maps.empty pairs
+
 -- | Convert a property graph edge property to a GraphSON property
 edgePropertyToGraphson :: (t0 -> Either t1 t2) -> (PgModel.PropertyKey, t0) -> Either t1 (Syntax.PropertyKey, t2)
 edgePropertyToGraphson encodeValue prop =
     Eithers.map (\gv -> (Syntax.PropertyKey (PgModel.unPropertyKey (Pairs.first prop)), gv)) (encodeValue (Pairs.second prop))
+
 -- | A coder that converts GraphSON vertices to JSON. Decoding is not supported.
 graphsonVertexToJsonCoder :: Coders.Coder Syntax.Vertex JsonModel.Value Errors.Error
 graphsonVertexToJsonCoder =
     Coders.Coder {
       Coders.coderEncode = (\v -> Right (Coder.vertexToJson v)),
       Coders.coderDecode = (\_ -> Left (Errors.ErrorOther (Errors.OtherError "decoding GraphSON JSON is currently unsupported")))}
+
 -- | Convert a property graph vertex with adjacent edges to a GraphSON vertex
 pgVertexWithAdjacentEdgesToGraphsonVertex :: (t0 -> Either t1 Syntax.Value) -> PgModel.VertexWithAdjacentEdges t0 -> Either t1 Syntax.Vertex
 pgVertexWithAdjacentEdgesToGraphsonVertex encodeValue vae =
@@ -88,10 +97,12 @@
         Syntax.vertexInEdges = (aggregateMap inPairs),
         Syntax.vertexOutEdges = (aggregateMap outPairs),
         Syntax.vertexProperties = (aggregateMap propPairs)}))))))
+
 -- | Convert a property graph vertex with adjacent edges to JSON
 pgVertexWithAdjacentEdgesToJson :: (t0 -> Either t1 Syntax.Value) -> PgModel.VertexWithAdjacentEdges t0 -> Either t1 JsonModel.Value
 pgVertexWithAdjacentEdgesToJson encodeValue vertex =
     Eithers.bind (pgVertexWithAdjacentEdgesToGraphsonVertex encodeValue vertex) (\gVertex -> Right (Coder.vertexToJson gVertex))
+
 -- | Convert a property graph vertex property to a GraphSON vertex property
 vertexPropertyToGraphson :: (t0 -> Either t1 Syntax.Value) -> (PgModel.PropertyKey, t0) -> Either t1 (Syntax.PropertyKey, Syntax.VertexPropertyValue)
 vertexPropertyToGraphson encodeValue prop =
diff --git a/src/main/haskell/Hydra/Pg/Graphson/Syntax.hs b/src/main/haskell/Hydra/Pg/Graphson/Syntax.hs
--- a/src/main/haskell/Hydra/Pg/Graphson/Syntax.hs
+++ b/src/main/haskell/Hydra/Pg/Graphson/Syntax.hs
@@ -1,100 +1,158 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A syntax model for TinkerPop's GraphSON format. This model is designed to be as inclusive as possible, supporting GraphSON 4.0 as well as earlier versions. See https://github.com/apache/tinkerpop/blob/master/docs/src/dev/io/graphson.asciidoc.
 
 module Hydra.Pg.Graphson.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
 import qualified Data.Int as I
 import qualified Data.Map as M
+
+-- | A GraphSON edge as referenced from an adjacent vertex, with its own properties
+data AdjacentEdge =
+  AdjacentEdge {
+    adjacentEdgeId :: Value,
+    adjacentEdgeVertexId :: Value,
+    adjacentEdgeProperties :: (M.Map PropertyKey Value)}
+  deriving (Eq, Ord, Read, Show)
+
+_AdjacentEdge = Core.Name "hydra.pg.graphson.syntax.AdjacentEdge"
+
+_AdjacentEdge_id = Core.Name "id"
+
+_AdjacentEdge_vertexId = Core.Name "vertexId"
+
+_AdjacentEdge_properties = Core.Name "properties"
+
+-- | A GraphSON big-decimal value, represented as a string
 newtype BigDecimalValue =
   BigDecimalValue {
     unBigDecimalValue :: String}
   deriving (Eq, Ord, Read, Show)
+
 _BigDecimalValue = Core.Name "hydra.pg.graphson.syntax.BigDecimalValue"
+
+-- | A GraphSON composite value tagged with a GraphSON type name
 data CompositeTypedValue =
   CompositeTypedValue {
     compositeTypedValueType :: TypeName,
     compositeTypedValueFields :: Map}
   deriving (Eq, Ord, Read, Show)
+
 _CompositeTypedValue = Core.Name "hydra.pg.graphson.syntax.CompositeTypedValue"
+
 _CompositeTypedValue_type = Core.Name "type"
+
 _CompositeTypedValue_fields = Core.Name "fields"
+
+-- | A GraphSON date-time value, represented as a string
 newtype DateTime =
   DateTime {
     unDateTime :: String}
   deriving (Eq, Ord, Read, Show)
+
 _DateTime = Core.Name "hydra.pg.graphson.syntax.DateTime"
+
+-- | A GraphSON double-precision floating-point value, including IEEE special values
 data DoubleValue =
   DoubleValueFinite Double |
   DoubleValueInfinity |
   DoubleValueNegativeInfinity |
   DoubleValueNotANumber
   deriving (Eq, Ord, Read, Show)
+
 _DoubleValue = Core.Name "hydra.pg.graphson.syntax.DoubleValue"
+
 _DoubleValue_finite = Core.Name "finite"
+
 _DoubleValue_infinity = Core.Name "infinity"
+
 _DoubleValue_negativeInfinity = Core.Name "negativeInfinity"
+
 _DoubleValue_notANumber = Core.Name "notANumber"
+
+-- | A GraphSON duration value, represented as a string
 newtype Duration =
   Duration {
     unDuration :: String}
   deriving (Eq, Ord, Read, Show)
+
 _Duration = Core.Name "hydra.pg.graphson.syntax.Duration"
+
+-- | A GraphSON edge label, represented as a string
 newtype EdgeLabel =
   EdgeLabel {
     unEdgeLabel :: String}
   deriving (Eq, Ord, Read, Show)
+
 _EdgeLabel = Core.Name "hydra.pg.graphson.syntax.EdgeLabel"
+
+-- | A GraphSON single-precision floating-point value, including IEEE special values
 data FloatValue =
   FloatValueFinite Float |
   FloatValueInfinity |
   FloatValueNegativeInfinity |
   FloatValueNotANumber
   deriving (Eq, Ord, Read, Show)
+
 _FloatValue = Core.Name "hydra.pg.graphson.syntax.FloatValue"
+
 _FloatValue_finite = Core.Name "finite"
+
 _FloatValue_infinity = Core.Name "infinity"
+
 _FloatValue_negativeInfinity = Core.Name "negativeInfinity"
+
 _FloatValue_notANumber = Core.Name "notANumber"
+
+-- | A GraphSON map, represented as a list of key/value pairs
 newtype Map =
   Map {
     unMap :: [ValuePair]}
   deriving (Eq, Ord, Read, Show)
+
 _Map = Core.Name "hydra.pg.graphson.syntax.Map"
-data AdjacentEdge =
-  AdjacentEdge {
-    adjacentEdgeId :: Value,
-    adjacentEdgeVertexId :: Value,
-    adjacentEdgeProperties :: (M.Map PropertyKey Value)}
-  deriving (Eq, Ord, Read, Show)
-_AdjacentEdge = Core.Name "hydra.pg.graphson.syntax.AdjacentEdge"
-_AdjacentEdge_id = Core.Name "id"
-_AdjacentEdge_vertexId = Core.Name "vertexId"
-_AdjacentEdge_properties = Core.Name "properties"
+
+-- | A GraphSON primitive value tagged with a GraphSON type name
 data PrimitiveTypedValue =
   PrimitiveTypedValue {
     primitiveTypedValueType :: TypeName,
     primitiveTypedValueValue :: String}
   deriving (Eq, Ord, Read, Show)
+
 _PrimitiveTypedValue = Core.Name "hydra.pg.graphson.syntax.PrimitiveTypedValue"
+
 _PrimitiveTypedValue_type = Core.Name "type"
+
 _PrimitiveTypedValue_value = Core.Name "value"
+
+-- | A GraphSON property key, represented as a string
 newtype PropertyKey =
   PropertyKey {
     unPropertyKey :: String}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyKey = Core.Name "hydra.pg.graphson.syntax.PropertyKey"
+
+-- | A GraphSON type name, represented as a string
 newtype TypeName =
   TypeName {
     unTypeName :: String}
   deriving (Eq, Ord, Read, Show)
+
 _TypeName = Core.Name "hydra.pg.graphson.syntax.TypeName"
+
+-- | A GraphSON UUID value, represented as a string
 newtype Uuid =
   Uuid {
     unUuid :: String}
   deriving (Eq, Ord, Read, Show)
+
 _Uuid = Core.Name "hydra.pg.graphson.syntax.Uuid"
+
+-- | A GraphSON value, covering the subset of GraphSON value types this model supports
 data Value =
   ValueBigDecimal BigDecimalValue |
   ValueBigInteger Integer |
@@ -118,36 +176,65 @@
   ValueString String |
   ValueUuid Uuid
   deriving (Eq, Ord, Read, Show)
+
 _Value = Core.Name "hydra.pg.graphson.syntax.Value"
+
 _Value_bigDecimal = Core.Name "bigDecimal"
+
 _Value_bigInteger = Core.Name "bigInteger"
+
 _Value_binary = Core.Name "binary"
+
 _Value_boolean = Core.Name "boolean"
+
 _Value_byte = Core.Name "byte"
+
 _Value_char = Core.Name "char"
+
 _Value_composite = Core.Name "composite"
+
 _Value_dateTime = Core.Name "dateTime"
+
 _Value_double = Core.Name "double"
+
 _Value_duration = Core.Name "duration"
+
 _Value_float = Core.Name "float"
+
 _Value_integer = Core.Name "integer"
+
 _Value_list = Core.Name "list"
+
 _Value_long = Core.Name "long"
+
 _Value_map = Core.Name "map"
+
 _Value_null = Core.Name "null"
+
 _Value_primitive = Core.Name "primitive"
+
 _Value_set = Core.Name "set"
+
 _Value_short = Core.Name "short"
+
 _Value_string = Core.Name "string"
+
 _Value_uuid = Core.Name "uuid"
+
+-- | A key/value pair in a GraphSON map
 data ValuePair =
   ValuePair {
     valuePairFirst :: Value,
     valuePairSecond :: Value}
   deriving (Eq, Ord, Read, Show)
+
 _ValuePair = Core.Name "hydra.pg.graphson.syntax.ValuePair"
+
 _ValuePair_first = Core.Name "first"
+
 _ValuePair_second = Core.Name "second"
+
+-- | A GraphSON vertex, with its incident edges and properties
 data Vertex =
   Vertex {
     vertexId :: Value,
@@ -156,22 +243,36 @@
     vertexOutEdges :: (M.Map EdgeLabel [AdjacentEdge]),
     vertexProperties :: (M.Map PropertyKey [VertexPropertyValue])}
   deriving (Eq, Ord, Read, Show)
+
 _Vertex = Core.Name "hydra.pg.graphson.syntax.Vertex"
+
 _Vertex_id = Core.Name "id"
+
 _Vertex_label = Core.Name "label"
+
 _Vertex_inEdges = Core.Name "inEdges"
+
 _Vertex_outEdges = Core.Name "outEdges"
+
 _Vertex_properties = Core.Name "properties"
+
+-- | A GraphSON vertex label, represented as a string
 newtype VertexLabel =
   VertexLabel {
     unVertexLabel :: String}
   deriving (Eq, Ord, Read, Show)
+
 _VertexLabel = Core.Name "hydra.pg.graphson.syntax.VertexLabel"
+
+-- | A GraphSON vertex property value, with an optional property id
 data VertexPropertyValue =
   VertexPropertyValue {
     vertexPropertyValueId :: (Maybe Value),
     vertexPropertyValueValue :: Value}
   deriving (Eq, Ord, Read, Show)
+
 _VertexPropertyValue = Core.Name "hydra.pg.graphson.syntax.VertexPropertyValue"
+
 _VertexPropertyValue_id = Core.Name "id"
+
 _VertexPropertyValue_value = Core.Name "value"
diff --git a/src/main/haskell/Hydra/Pg/Graphson/Utils.hs b/src/main/haskell/Hydra/Pg/Graphson/Utils.hs
--- a/src/main/haskell/Hydra/Pg/Graphson/Utils.hs
+++ b/src/main/haskell/Hydra/Pg/Graphson/Utils.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Utility functions for GraphSON encoding and property graph conversion.
 
 module Hydra.Pg.Graphson.Utils where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -27,6 +30,7 @@
 import qualified Hydra.Pg.Graphson.Syntax as Syntax
 import qualified Hydra.Pg.Model as PgModel
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.Strip as Strip
 import qualified Hydra.System as System
@@ -41,6 +45,7 @@
 import qualified Hydra.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Convert a list of property graph elements to a list of vertices with their adjacent edges
 elementsToVerticesWithAdjacentEdges :: Ord t0 => ([PgModel.Element t0] -> [PgModel.VertexWithAdjacentEdges t0])
 elementsToVerticesWithAdjacentEdges els =
@@ -87,9 +92,11 @@
                       PgModel.vertexWithAdjacentEdgesIns = (Lists.cons adjEdgeIn (PgModel.vertexWithAdjacentEdgesIns vae)),
                       PgModel.vertexWithAdjacentEdgesOuts = (PgModel.vertexWithAdjacentEdgesOuts vae)}) vmap1))) vertexMap0 edges
       in (Maps.elems vertexMap1)
+
 -- | Encode a String value as a GraphSON Value
 encodeStringValue :: String -> Either t0 Syntax.Value
 encodeStringValue s = Right (Syntax.ValueString s)
+
 -- | Encode a Hydra Term as a GraphSON Value. Supports literals and unit values.
 encodeTermValue :: Core.Term -> Either Errors.Error Syntax.Value
 encodeTermValue term =
@@ -110,6 +117,7 @@
         _ -> Left (Errors.ErrorOther (Errors.OtherError "unsupported literal type for GraphSON encoding"))
       Core.TermUnit -> Right Syntax.ValueNull
       _ -> Left (Errors.ErrorOther (Errors.OtherError "unsupported term variant for GraphSON encoding"))
+
 -- | Convert property graph elements to a list of GraphSON JSON values
 pgElementsToGraphson :: Ord t0 => ((t0 -> Either t1 Syntax.Value) -> [PgModel.Element t0] -> Either t1 [JsonModel.Value])
 pgElementsToGraphson encodeValue els =
diff --git a/src/main/haskell/Hydra/Pg/Mapping.hs b/src/main/haskell/Hydra/Pg/Mapping.hs
--- a/src/main/haskell/Hydra/Pg/Mapping.hs
+++ b/src/main/haskell/Hydra/Pg/Mapping.hs
@@ -1,12 +1,15 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A model for property graph mapping specifications. See https://github.com/CategoricalData/hydra/wiki/Property-graphs
 
 module Hydra.Pg.Mapping where
+
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
 import qualified Hydra.Pg.Model as Model
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Configurable annotation keys for property graph mapping specifications
 data AnnotationSchema =
   AnnotationSchema {
@@ -26,22 +29,39 @@
     annotationSchemaInEdgeLabel :: String,
     annotationSchemaIgnore :: String}
   deriving (Eq, Ord, Read, Show)
+
 _AnnotationSchema = Core.Name "hydra.pg.mapping.AnnotationSchema"
+
 _AnnotationSchema_vertexLabel = Core.Name "vertexLabel"
+
 _AnnotationSchema_edgeLabel = Core.Name "edgeLabel"
+
 _AnnotationSchema_vertexId = Core.Name "vertexId"
+
 _AnnotationSchema_edgeId = Core.Name "edgeId"
+
 _AnnotationSchema_propertyKey = Core.Name "propertyKey"
+
 _AnnotationSchema_propertyValue = Core.Name "propertyValue"
+
 _AnnotationSchema_outVertex = Core.Name "outVertex"
+
 _AnnotationSchema_outVertexLabel = Core.Name "outVertexLabel"
+
 _AnnotationSchema_inVertex = Core.Name "inVertex"
+
 _AnnotationSchema_inVertexLabel = Core.Name "inVertexLabel"
+
 _AnnotationSchema_outEdge = Core.Name "outEdge"
+
 _AnnotationSchema_outEdgeLabel = Core.Name "outEdgeLabel"
+
 _AnnotationSchema_inEdge = Core.Name "inEdge"
+
 _AnnotationSchema_inEdgeLabel = Core.Name "inEdgeLabel"
+
 _AnnotationSchema_ignore = Core.Name "ignore"
+
 -- | A mapping specification producing edges of a specified label.
 data EdgeSpec =
   EdgeSpec {
@@ -56,20 +76,31 @@
     -- | Zero or more property specifications for each target edge
     edgeSpecProperties :: [PropertySpec]}
   deriving (Eq, Ord, Read, Show)
+
 _EdgeSpec = Core.Name "hydra.pg.mapping.EdgeSpec"
+
 _EdgeSpec_label = Core.Name "label"
+
 _EdgeSpec_id = Core.Name "id"
+
 _EdgeSpec_out = Core.Name "out"
+
 _EdgeSpec_in = Core.Name "in"
+
 _EdgeSpec_properties = Core.Name "properties"
+
 -- | Either a vertex specification or an edge specification
 data ElementSpec =
   ElementSpecVertex VertexSpec |
   ElementSpecEdge EdgeSpec
   deriving (Eq, Ord, Read, Show)
+
 _ElementSpec = Core.Name "hydra.pg.mapping.ElementSpec"
+
 _ElementSpec_vertex = Core.Name "vertex"
+
 _ElementSpec_edge = Core.Name "edge"
+
 -- | A mapping specification producing properties of a specified key, and values of the appropriate type.
 data PropertySpec =
   PropertySpec {
@@ -78,9 +109,13 @@
     -- | A specification of the value of each target property, which must conform to the type associated with the property key
     propertySpecValue :: ValueSpec}
   deriving (Eq, Ord, Read, Show)
+
 _PropertySpec = Core.Name "hydra.pg.mapping.PropertySpec"
+
 _PropertySpec_key = Core.Name "key"
+
 _PropertySpec_value = Core.Name "value"
+
 -- | A set of mappings which translates between Hydra terms and annotations, and application-specific property graph types
 data Schema s t v e =
   Schema {
@@ -93,16 +128,27 @@
     schemaAnnotations :: AnnotationSchema,
     schemaDefaultVertexId :: v,
     schemaDefaultEdgeId :: v}
+
 _Schema = Core.Name "hydra.pg.mapping.Schema"
+
 _Schema_vertexIdTypes = Core.Name "vertexIdTypes"
+
 _Schema_vertexIds = Core.Name "vertexIds"
+
 _Schema_edgeIdTypes = Core.Name "edgeIdTypes"
+
 _Schema_edgeIds = Core.Name "edgeIds"
+
 _Schema_propertyTypes = Core.Name "propertyTypes"
+
 _Schema_propertyValues = Core.Name "propertyValues"
+
 _Schema_annotations = Core.Name "annotations"
+
 _Schema_defaultVertexId = Core.Name "defaultVertexId"
+
 _Schema_defaultEdgeId = Core.Name "defaultEdgeId"
+
 -- | A mapping specification producing values (usually literal values) whose type is understood in context
 data ValueSpec =
   -- | A trivial no-op specification which passes the entire value
@@ -110,9 +156,13 @@
   -- | A compact path representing the function, e.g. engine-${engineInfo/model/name}
   ValueSpecPattern String
   deriving (Eq, Ord, Read, Show)
+
 _ValueSpec = Core.Name "hydra.pg.mapping.ValueSpec"
+
 _ValueSpec_value = Core.Name "value"
+
 _ValueSpec_pattern = Core.Name "pattern"
+
 -- | A mapping specification producing vertices of a specified label
 data VertexSpec =
   VertexSpec {
@@ -123,7 +173,11 @@
     -- | Zero or more property specifications for each target vertex
     vertexSpecProperties :: [PropertySpec]}
   deriving (Eq, Ord, Read, Show)
+
 _VertexSpec = Core.Name "hydra.pg.mapping.VertexSpec"
+
 _VertexSpec_label = Core.Name "label"
+
 _VertexSpec_id = Core.Name "id"
+
 _VertexSpec_properties = Core.Name "properties"
diff --git a/src/main/haskell/Hydra/Pg/Model.hs b/src/main/haskell/Hydra/Pg/Model.hs
--- a/src/main/haskell/Hydra/Pg/Model.hs
+++ b/src/main/haskell/Hydra/Pg/Model.hs
@@ -1,11 +1,14 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A typed property graph data model. Property graphs are parameterized a type for property and id values, while property graph schemas are parameterized by a type for property and id types
 
 module Hydra.Pg.Model where
+
 import qualified Hydra.Core as Core
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | An edge which is adjacent to a given vertex. Only the other endpoint of the edge is provided.
 data AdjacentEdge v =
   AdjacentEdge {
@@ -18,11 +21,17 @@
     -- | A key/value map of edge properties
     adjacentEdgeProperties :: (M.Map PropertyKey v)}
   deriving (Eq, Ord, Read, Show)
+
 _AdjacentEdge = Core.Name "hydra.pg.model.AdjacentEdge"
+
 _AdjacentEdge_label = Core.Name "label"
+
 _AdjacentEdge_id = Core.Name "id"
+
 _AdjacentEdge_vertex = Core.Name "vertex"
+
 _AdjacentEdge_properties = Core.Name "properties"
+
 -- | The direction of an edge or edge pattern
 data Direction =
   DirectionOut |
@@ -30,11 +39,17 @@
   DirectionBoth |
   DirectionUndirected
   deriving (Eq, Ord, Read, Show)
+
 _Direction = Core.Name "hydra.pg.model.Direction"
+
 _Direction_out = Core.Name "out"
+
 _Direction_in = Core.Name "in"
+
 _Direction_both = Core.Name "both"
+
 _Direction_undirected = Core.Name "undirected"
+
 -- | An edge
 data Edge v =
   Edge {
@@ -49,18 +64,27 @@
     -- | A key/value map of edge properties
     edgeProperties :: (M.Map PropertyKey v)}
   deriving (Eq, Ord, Read, Show)
+
 _Edge = Core.Name "hydra.pg.model.Edge"
+
 _Edge_label = Core.Name "label"
+
 _Edge_id = Core.Name "id"
+
 _Edge_out = Core.Name "out"
+
 _Edge_in = Core.Name "in"
+
 _Edge_properties = Core.Name "properties"
+
 -- | The label of an edge
 newtype EdgeLabel =
   EdgeLabel {
     unEdgeLabel :: String}
   deriving (Eq, Ord, Read, Show)
+
 _EdgeLabel = Core.Name "hydra.pg.model.EdgeLabel"
+
 -- | The type of an edge
 data EdgeType t =
   EdgeType {
@@ -75,63 +99,94 @@
     -- | A list of property types. The types are ordered for the sake of applications in which property order is significant.
     edgeTypeProperties :: [PropertyType t]}
   deriving (Eq, Ord, Read, Show)
+
 _EdgeType = Core.Name "hydra.pg.model.EdgeType"
+
 _EdgeType_label = Core.Name "label"
+
 _EdgeType_id = Core.Name "id"
+
 _EdgeType_out = Core.Name "out"
+
 _EdgeType_in = Core.Name "in"
+
 _EdgeType_properties = Core.Name "properties"
+
 -- | Either a vertex or an edge
 data Element v =
   ElementVertex (Vertex v) |
   ElementEdge (Edge v)
   deriving (Eq, Ord, Read, Show)
+
 _Element = Core.Name "hydra.pg.model.Element"
+
 _Element_vertex = Core.Name "vertex"
+
 _Element_edge = Core.Name "edge"
+
 -- | The kind of an element: vertex or edge
 data ElementKind =
   ElementKindVertex |
   ElementKindEdge
   deriving (Eq, Ord, Read, Show)
+
 _ElementKind = Core.Name "hydra.pg.model.ElementKind"
+
 _ElementKind_vertex = Core.Name "vertex"
+
 _ElementKind_edge = Core.Name "edge"
+
 -- | An element together with its dependencies in some context
 data ElementTree v =
   ElementTree {
     elementTreeSelf :: (Element v),
     elementTreeDependencies :: [ElementTree v]}
   deriving (Eq, Ord, Read, Show)
+
 _ElementTree = Core.Name "hydra.pg.model.ElementTree"
+
 _ElementTree_self = Core.Name "self"
+
 _ElementTree_dependencies = Core.Name "dependencies"
+
 -- | The type of a vertex or edge
 data ElementType t =
   ElementTypeVertex (VertexType t) |
   ElementTypeEdge (EdgeType t)
   deriving (Eq, Ord, Read, Show)
+
 _ElementType = Core.Name "hydra.pg.model.ElementType"
+
 _ElementType_vertex = Core.Name "vertex"
+
 _ElementType_edge = Core.Name "edge"
+
 -- | An element type together with its dependencies in some context
 data ElementTypeTree t =
   ElementTypeTree {
     elementTypeTreeSelf :: (ElementType t),
     elementTypeTreeDependencies :: [ElementTypeTree t]}
   deriving (Eq, Ord, Read, Show)
+
 _ElementTypeTree = Core.Name "hydra.pg.model.ElementTypeTree"
+
 _ElementTypeTree_self = Core.Name "self"
+
 _ElementTypeTree_dependencies = Core.Name "dependencies"
+
 -- | A graph; a self-contained collection of vertices and edges
 data Graph v =
   Graph {
     graphVertices :: (M.Map v (Vertex v)),
     graphEdges :: (M.Map v (Edge v))}
   deriving (Eq, Ord, Read, Show)
+
 _Graph = Core.Name "hydra.pg.model.Graph"
+
 _Graph_vertices = Core.Name "vertices"
+
 _Graph_edges = Core.Name "edges"
+
 -- | A graph schema; a vertex and edge types for the vertices and edges of a graph conforming to the schema
 data GraphSchema t =
   GraphSchema {
@@ -140,26 +195,38 @@
     -- | A unique edge type for each edge label which may occur in a graph
     graphSchemaEdges :: (M.Map EdgeLabel (EdgeType t))}
   deriving (Eq, Ord, Read, Show)
+
 _GraphSchema = Core.Name "hydra.pg.model.GraphSchema"
+
 _GraphSchema_vertices = Core.Name "vertices"
+
 _GraphSchema_edges = Core.Name "edges"
+
 -- | Either a vertex or edge label
 data Label =
   LabelVertex VertexLabel |
   LabelEdge EdgeLabel
   deriving (Eq, Ord, Read, Show)
+
 _Label = Core.Name "hydra.pg.model.Label"
+
 _Label_vertex = Core.Name "vertex"
+
 _Label_edge = Core.Name "edge"
+
 -- | A graph which does not assume that vertex or edge ids are unique. This is useful in mappings because the id specifications for vertices and/or edges may be non-unique.
 data LazyGraph v =
   LazyGraph {
     lazyGraphVertices :: [Vertex v],
     lazyGraphEdges :: [Edge v]}
   deriving (Eq, Ord, Read, Show)
+
 _LazyGraph = Core.Name "hydra.pg.model.LazyGraph"
+
 _LazyGraph_vertices = Core.Name "vertices"
+
 _LazyGraph_edges = Core.Name "edges"
+
 -- | A key/value property
 data Property v =
   Property {
@@ -168,15 +235,21 @@
     -- | The value of the property
     propertyValue :: v}
   deriving (Eq, Ord, Read, Show)
+
 _Property = Core.Name "hydra.pg.model.Property"
+
 _Property_key = Core.Name "key"
+
 _Property_value = Core.Name "value"
+
 -- | A property key
 newtype PropertyKey =
   PropertyKey {
     unPropertyKey :: String}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyKey = Core.Name "hydra.pg.model.PropertyKey"
+
 -- | The type of a property
 data PropertyType t =
   PropertyType {
@@ -187,10 +260,15 @@
     -- | Whether the property is required; values may be omitted from a property map otherwise
     propertyTypeRequired :: Bool}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyType = Core.Name "hydra.pg.model.PropertyType"
+
 _PropertyType_key = Core.Name "key"
+
 _PropertyType_value = Core.Name "value"
+
 _PropertyType_required = Core.Name "required"
+
 -- | A vertex
 data Vertex v =
   Vertex {
@@ -201,16 +279,23 @@
     -- | A key/value map of vertex properties
     vertexProperties :: (M.Map PropertyKey v)}
   deriving (Eq, Ord, Read, Show)
+
 _Vertex = Core.Name "hydra.pg.model.Vertex"
+
 _Vertex_label = Core.Name "label"
+
 _Vertex_id = Core.Name "id"
+
 _Vertex_properties = Core.Name "properties"
+
 -- | The label of a vertex. The default (null) vertex is represented by the empty string
 newtype VertexLabel =
   VertexLabel {
     unVertexLabel :: String}
   deriving (Eq, Ord, Read, Show)
+
 _VertexLabel = Core.Name "hydra.pg.model.VertexLabel"
+
 -- | The type of a vertex
 data VertexType t =
   VertexType {
@@ -221,10 +306,15 @@
     -- | A list of property types. The types are ordered for the sake of applications in which property order is significant.
     vertexTypeProperties :: [PropertyType t]}
   deriving (Eq, Ord, Read, Show)
+
 _VertexType = Core.Name "hydra.pg.model.VertexType"
+
 _VertexType_label = Core.Name "label"
+
 _VertexType_id = Core.Name "id"
+
 _VertexType_properties = Core.Name "properties"
+
 -- | A vertex together with any outgoing and/or incoming edges; a vertex object
 data VertexWithAdjacentEdges v =
   VertexWithAdjacentEdges {
@@ -235,7 +325,11 @@
     -- | An adjacency list of edges in which the focus vertex is the tail (out-vertex) of the edge
     vertexWithAdjacentEdgesOuts :: [AdjacentEdge v]}
   deriving (Eq, Ord, Read, Show)
+
 _VertexWithAdjacentEdges = Core.Name "hydra.pg.model.VertexWithAdjacentEdges"
+
 _VertexWithAdjacentEdges_vertex = Core.Name "vertex"
+
 _VertexWithAdjacentEdges_ins = Core.Name "ins"
+
 _VertexWithAdjacentEdges_outs = Core.Name "outs"
diff --git a/src/main/haskell/Hydra/Pg/Printing.hs b/src/main/haskell/Hydra/Pg/Printing.hs
--- a/src/main/haskell/Hydra/Pg/Printing.hs
+++ b/src/main/haskell/Hydra/Pg/Printing.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Printing functions for property graph elements
 
 module Hydra.Pg.Printing where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -23,6 +26,7 @@
 import qualified Hydra.Paths as Paths
 import qualified Hydra.Pg.Model as PgModel
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.System as System
 import qualified Hydra.Tabular as Tabular
@@ -36,6 +40,7 @@
 import qualified Hydra.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Print an edge using the provided value printer
 printEdge :: (t0 -> String) -> PgModel.Edge t0 -> String
 printEdge printValue edge =
@@ -58,12 +63,14 @@
         "}]->(",
         inId,
         ")"])
+
 -- | Print a graph using the provided value printer
 printGraph :: Ord t0 => ((t0 -> String) -> PgModel.Graph t0 -> String)
 printGraph printValue graph =
     printLazyGraph printValue (PgModel.LazyGraph {
       PgModel.lazyGraphVertices = (Maps.elems (PgModel.graphVertices graph)),
       PgModel.lazyGraphEdges = (Maps.elems (PgModel.graphEdges graph))})
+
 -- | Print a lazy graph using the provided value printer
 printLazyGraph :: (t0 -> String) -> PgModel.LazyGraph t0 -> String
 printLazyGraph printValue lg =
@@ -79,6 +86,7 @@
         (Strings.cat (Lists.map (\e -> Strings.cat [
           "\n\t",
           (printEdge printValue e)]) edges))])
+
 -- | Print a property using the provided value printer
 printProperty :: (t0 -> String) -> PgModel.PropertyKey -> t0 -> String
 printProperty printValue key value =
@@ -86,6 +94,7 @@
       PgModel.unPropertyKey key,
       ": ",
       (printValue value)]
+
 -- | Print a vertex using the provided value printer
 printVertex :: (t0 -> String) -> PgModel.Vertex t0 -> String
 printVertex printValue vertex =
diff --git a/src/main/haskell/Hydra/Pg/Query.hs b/src/main/haskell/Hydra/Pg/Query.hs
--- a/src/main/haskell/Hydra/Pg/Query.hs
+++ b/src/main/haskell/Hydra/Pg/Query.hs
@@ -1,65 +1,104 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A common model for pattern-matching queries over property graphs
 
 module Hydra.Pg.Query where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Pg.Model as Model
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
+-- | An aggregation query over a property graph
 data AggregationQuery =
   AggregationQueryCount
   deriving (Eq, Ord, Read, Show)
+
 _AggregationQuery = Core.Name "hydra.pg.query.AggregationQuery"
+
 _AggregationQuery_count = Core.Name "count"
+
+-- | A non-empty sequence of queries applied in order
 newtype ApplicationQuery =
   ApplicationQuery {
     unApplicationQuery :: [Query]}
   deriving (Eq, Ord, Read, Show)
+
 _ApplicationQuery = Core.Name "hydra.pg.query.ApplicationQuery"
+
+-- | An associative expression: a binary operator applied to a non-empty list of operands
 data AssociativeExpression =
   AssociativeExpression {
     associativeExpressionOperator :: BinaryOperator,
     associativeExpressionOperands :: [Expression]}
   deriving (Eq, Ord, Read, Show)
+
 _AssociativeExpression = Core.Name "hydra.pg.query.AssociativeExpression"
+
 _AssociativeExpression_operator = Core.Name "operator"
+
 _AssociativeExpression_operands = Core.Name "operands"
+
+-- | A binary boolean operator: and, or, or xor
+data BinaryBooleanOperator =
+  BinaryBooleanOperatorAnd |
+  BinaryBooleanOperatorOr |
+  BinaryBooleanOperatorXor
+  deriving (Eq, Ord, Read, Show)
+
+_BinaryBooleanOperator = Core.Name "hydra.pg.query.BinaryBooleanOperator"
+
+_BinaryBooleanOperator_and = Core.Name "and"
+
+_BinaryBooleanOperator_or = Core.Name "or"
+
+_BinaryBooleanOperator_xor = Core.Name "xor"
+
+-- | A binary expression: a left operand, an operator, and a right operand
 data BinaryExpression =
   BinaryExpression {
     binaryExpressionLeft :: Expression,
     binaryExpressionOperator :: BinaryOperator,
     binaryExpressionRight :: Expression}
   deriving (Eq, Ord, Read, Show)
+
 _BinaryExpression = Core.Name "hydra.pg.query.BinaryExpression"
+
 _BinaryExpression_left = Core.Name "left"
+
 _BinaryExpression_operator = Core.Name "operator"
+
 _BinaryExpression_right = Core.Name "right"
-data BinaryBooleanOperator =
-  BinaryBooleanOperatorAnd |
-  BinaryBooleanOperatorOr |
-  BinaryBooleanOperatorXor
-  deriving (Eq, Ord, Read, Show)
-_BinaryBooleanOperator = Core.Name "hydra.pg.query.BinaryBooleanOperator"
-_BinaryBooleanOperator_and = Core.Name "and"
-_BinaryBooleanOperator_or = Core.Name "or"
-_BinaryBooleanOperator_xor = Core.Name "xor"
+
+-- | A binary operator: boolean, comparison, or exponentiation
 data BinaryOperator =
   BinaryOperatorBoolean BinaryBooleanOperator |
   BinaryOperatorComparison ComparisonOperator |
   BinaryOperatorPower
   deriving (Eq, Ord, Read, Show)
+
 _BinaryOperator = Core.Name "hydra.pg.query.BinaryOperator"
+
 _BinaryOperator_boolean = Core.Name "boolean"
+
 _BinaryOperator_comparison = Core.Name "comparison"
+
 _BinaryOperator_power = Core.Name "power"
+
+-- | A variable bound to the result of a query
 data Binding =
   Binding {
     bindingKey :: Variable,
     bindingValue :: Query}
   deriving (Eq, Ord, Read, Show)
+
 _Binding = Core.Name "hydra.pg.query.Binding"
+
 _Binding_key = Core.Name "key"
+
 _Binding_value = Core.Name "value"
+
+-- | A comparison operator: equal, not-equal, or an ordering relation
 data ComparisonOperator =
   ComparisonOperatorEq |
   ComparisonOperatorNeq |
@@ -68,13 +107,22 @@
   ComparisonOperatorGt |
   ComparisonOperatorGte
   deriving (Eq, Ord, Read, Show)
+
 _ComparisonOperator = Core.Name "hydra.pg.query.ComparisonOperator"
+
 _ComparisonOperator_eq = Core.Name "eq"
+
 _ComparisonOperator_neq = Core.Name "neq"
+
 _ComparisonOperator_lt = Core.Name "lt"
+
 _ComparisonOperator_lte = Core.Name "lte"
+
 _ComparisonOperator_gt = Core.Name "gt"
+
 _ComparisonOperator_gte = Core.Name "gte"
+
+-- | A pattern matching an edge, its direction, optional label, properties, and adjacent vertex
 data EdgeProjectionPattern =
   EdgeProjectionPattern {
     edgeProjectionPatternDirection :: Model.Direction,
@@ -82,11 +130,18 @@
     edgeProjectionPatternProperties :: [PropertyPattern],
     edgeProjectionPatternVertex :: (Maybe VertexPattern)}
   deriving (Eq, Ord, Read, Show)
+
 _EdgeProjectionPattern = Core.Name "hydra.pg.query.EdgeProjectionPattern"
+
 _EdgeProjectionPattern_direction = Core.Name "direction"
+
 _EdgeProjectionPattern_label = Core.Name "label"
+
 _EdgeProjectionPattern_properties = Core.Name "properties"
+
 _EdgeProjectionPattern_vertex = Core.Name "vertex"
+
+-- | An expression in a property graph query
 data Expression =
   ExpressionAssociative AssociativeExpression |
   ExpressionBinary BinaryExpression |
@@ -95,75 +150,123 @@
   ExpressionVariable Variable |
   ExpressionVertex VertexPattern
   deriving (Eq, Ord, Read, Show)
+
 _Expression = Core.Name "hydra.pg.query.Expression"
+
 _Expression_associative = Core.Name "associative"
+
 _Expression_binary = Core.Name "binary"
+
 _Expression_property = Core.Name "property"
+
 _Expression_unary = Core.Name "unary"
+
 _Expression_variable = Core.Name "variable"
+
 _Expression_vertex = Core.Name "vertex"
+
+-- | A let query: variable bindings evaluated in an environment query
 data LetQuery =
   LetQuery {
     letQueryBindings :: [Binding],
     letQueryEnvironment :: Query}
   deriving (Eq, Ord, Read, Show)
+
 _LetQuery = Core.Name "hydra.pg.query.LetQuery"
+
 _LetQuery_bindings = Core.Name "bindings"
+
 _LetQuery_environment = Core.Name "environment"
+
+-- | A pattern-matching query, with optional matching semantics and a filter condition
 data MatchQuery =
   MatchQuery {
     matchQueryOptional :: Bool,
     matchQueryPattern :: [Projection],
     matchQueryWhere :: (Maybe Expression)}
   deriving (Eq, Ord, Read, Show)
+
 _MatchQuery = Core.Name "hydra.pg.query.MatchQuery"
+
 _MatchQuery_optional = Core.Name "optional"
+
 _MatchQuery_pattern = Core.Name "pattern"
+
 _MatchQuery_where = Core.Name "where"
+
+-- | A projected expression, optionally bound to a variable
 data Projection =
   Projection {
     projectionValue :: Expression,
     projectionAs :: (Maybe Variable)}
   deriving (Eq, Ord, Read, Show)
+
 _Projection = Core.Name "hydra.pg.query.Projection"
+
 _Projection_value = Core.Name "value"
+
 _Projection_as = Core.Name "as"
+
+-- | A set of projections, optionally including all fields
 data Projections =
   Projections {
     projectionsAll :: Bool,
     projectionsExplicit :: [Projection]}
   deriving (Eq, Ord, Read, Show)
+
 _Projections = Core.Name "hydra.pg.query.Projections"
+
 _Projections_all = Core.Name "all"
+
 _Projections_explicit = Core.Name "explicit"
+
+-- | A pattern matching a property by key against a value pattern
 data PropertyPattern =
   PropertyPattern {
     propertyPatternKey :: Model.PropertyKey,
     propertyPatternValue :: PropertyValuePattern}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyPattern = Core.Name "hydra.pg.query.PropertyPattern"
+
 _PropertyPattern_key = Core.Name "key"
+
 _PropertyPattern_value = Core.Name "value"
+
+-- | A projection of a property, by key, from a base expression
 data PropertyProjection =
   PropertyProjection {
     propertyProjectionBase :: Expression,
     propertyProjectionKey :: Model.PropertyKey}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyProjection = Core.Name "hydra.pg.query.PropertyProjection"
+
 _PropertyProjection_base = Core.Name "base"
+
 _PropertyProjection_key = Core.Name "key"
+
+-- | A property value
 newtype PropertyValue =
   PropertyValue {
     unPropertyValue :: String}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyValue = Core.Name "hydra.pg.query.PropertyValue"
+
+-- | A pattern matching a property value: a variable binding or a literal value
 data PropertyValuePattern =
   PropertyValuePatternVariable Model.PropertyKey |
   PropertyValuePatternValue String
   deriving (Eq, Ord, Read, Show)
+
 _PropertyValuePattern = Core.Name "hydra.pg.query.PropertyValuePattern"
+
 _PropertyValuePattern_variable = Core.Name "variable"
+
 _PropertyValuePattern_value = Core.Name "value"
+
+-- | A property graph query
 data Query =
   QueryApplication ApplicationQuery |
   QueryAggregate AggregationQuery |
@@ -172,39 +275,65 @@
   QuerySelect SelectQuery |
   QueryValue String
   deriving (Eq, Ord, Read, Show)
+
 _Query = Core.Name "hydra.pg.query.Query"
+
 _Query_application = Core.Name "application"
+
 _Query_aggregate = Core.Name "aggregate"
+
 _Query_LetQuery = Core.Name "LetQuery"
+
 _Query_match = Core.Name "match"
+
 _Query_select = Core.Name "select"
+
 _Query_value = Core.Name "value"
+
+-- | A select query, with optional distinctness and a set of projections
 data SelectQuery =
   SelectQuery {
     selectQueryDistinct :: Bool,
     selectQueryProjection :: Projections}
   deriving (Eq, Ord, Read, Show)
+
 _SelectQuery = Core.Name "hydra.pg.query.SelectQuery"
+
 _SelectQuery_distinct = Core.Name "distinct"
+
 _SelectQuery_projection = Core.Name "projection"
+
+-- | A unary expression: an operator applied to a single operand
 data UnaryExpression =
   UnaryExpression {
     unaryExpressionOperator :: UnaryOperator,
     unaryExpressionOperand :: Expression}
   deriving (Eq, Ord, Read, Show)
+
 _UnaryExpression = Core.Name "hydra.pg.query.UnaryExpression"
+
 _UnaryExpression_operator = Core.Name "operator"
+
 _UnaryExpression_operand = Core.Name "operand"
+
+-- | A unary operator: negation
 data UnaryOperator =
   UnaryOperatorNegate
   deriving (Eq, Ord, Read, Show)
+
 _UnaryOperator = Core.Name "hydra.pg.query.UnaryOperator"
+
 _UnaryOperator_negate = Core.Name "negate"
+
+-- | A query variable name
 newtype Variable =
   Variable {
     unVariable :: String}
   deriving (Eq, Ord, Read, Show)
+
 _Variable = Core.Name "hydra.pg.query.Variable"
+
+-- | A pattern matching a vertex, its optional binding variable and label, properties, and adjacent edges
 data VertexPattern =
   VertexPattern {
     vertexPatternVariable :: (Maybe Variable),
@@ -212,8 +341,13 @@
     vertexPatternProperties :: [PropertyPattern],
     vertexPatternEdges :: [EdgeProjectionPattern]}
   deriving (Eq, Ord, Read, Show)
+
 _VertexPattern = Core.Name "hydra.pg.query.VertexPattern"
+
 _VertexPattern_variable = Core.Name "variable"
+
 _VertexPattern_label = Core.Name "label"
+
 _VertexPattern_properties = Core.Name "properties"
+
 _VertexPattern_edges = Core.Name "edges"
diff --git a/src/main/haskell/Hydra/Pg/Rdf/Environment.hs b/src/main/haskell/Hydra/Pg/Rdf/Environment.hs
--- a/src/main/haskell/Hydra/Pg/Rdf/Environment.hs
+++ b/src/main/haskell/Hydra/Pg/Rdf/Environment.hs
@@ -1,12 +1,15 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Environment types for property graph to RDF mapping
 
 module Hydra.Pg.Rdf.Environment where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Pg.Model as Model
 import qualified Hydra.Rdf.Syntax as Syntax
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | The environment for property graph to RDF mapping
 data PgRdfEnvironment v =
   PgRdfEnvironment {
@@ -22,10 +25,17 @@
     pgRdfEnvironmentEncodePropertyKey :: (Model.PropertyKey -> Syntax.Iri),
     -- | A function which encodes a property value as an RDF literal
     pgRdfEnvironmentEncodePropertyValue :: (v -> Syntax.Literal)}
+
 _PgRdfEnvironment = Core.Name "hydra.pg.rdf.environment.PgRdfEnvironment"
+
 _PgRdfEnvironment_encodeVertexId = Core.Name "encodeVertexId"
+
 _PgRdfEnvironment_encodeVertexLabel = Core.Name "encodeVertexLabel"
+
 _PgRdfEnvironment_encodeEdgeId = Core.Name "encodeEdgeId"
+
 _PgRdfEnvironment_encodeEdgeLabel = Core.Name "encodeEdgeLabel"
+
 _PgRdfEnvironment_encodePropertyKey = Core.Name "encodePropertyKey"
+
 _PgRdfEnvironment_encodePropertyValue = Core.Name "encodePropertyValue"
diff --git a/src/main/haskell/Hydra/Pg/Rdf/Mappings.hs b/src/main/haskell/Hydra/Pg/Rdf/Mappings.hs
--- a/src/main/haskell/Hydra/Pg/Rdf/Mappings.hs
+++ b/src/main/haskell/Hydra/Pg/Rdf/Mappings.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Mappings from property graph schemas to SHACL shapes graphs, and from property graph data to RDF graphs
 
 module Hydra.Pg.Rdf.Mappings where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -28,6 +31,7 @@
 import qualified Hydra.Query as Query
 import qualified Hydra.Rdf.Syntax as Syntax
 import qualified Hydra.Rdf.Utils as Utils
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.Shacl.Model as ShaclModel
 import qualified Hydra.System as System
@@ -42,6 +46,7 @@
 import qualified Hydra.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Convert edge types into property shape constraints for a given vertex label
 edgeTypesToPropertyShapes :: t0 -> (PgModel.EdgeLabel -> Syntax.Iri) -> PgModel.VertexLabel -> [PgModel.EdgeType t1] -> [ShaclModel.CommonConstraint]
 edgeTypesToPropertyShapes encodeVertexLabel encodeEdgeLabel vertexLabel edgeTypes =
@@ -67,6 +72,7 @@
                     ShaclModel.propertyShapePath = (encodeEdgeLabel (PgModel.edgeTypeLabel et))})))
       in (Logic.ifElse matchesVertex [
         edgeShape] [])) edgeTypes)
+
 -- | Encode a property graph edge as an RDF description
 encodeEdge :: Environment.PgRdfEnvironment t0 -> PgModel.Edge t0 -> Syntax.Description
 encodeEdge env edge =
@@ -83,6 +89,7 @@
           Syntax.tripleSubject = subj,
           Syntax.triplePredicate = pred,
           Syntax.tripleObject = obj})))}
+
 -- | Encode a lazy property graph as an RDF graph
 encodeLazyGraph :: Environment.PgRdfEnvironment t0 -> PgModel.LazyGraph t0 -> Syntax.Graph
 encodeLazyGraph env lg =
@@ -94,6 +101,7 @@
                     vertexDescs,
                     edgeDescs]
       in (Utils.descriptionsToGraph allDescs)
+
 -- | Encode a property graph vertex as an RDF description
 encodeVertex :: Environment.PgRdfEnvironment t0 -> PgModel.Vertex t0 -> Syntax.Description
 encodeVertex env vertex =
@@ -122,6 +130,7 @@
       in Syntax.Description {
         Syntax.descriptionSubject = (Utils.resourceToNode subj),
         Syntax.descriptionGraph = (Syntax.Graph (Sets.fromList allTriples))}
+
 -- | Convert a property graph schema to a SHACL shapes graph
 graphSchemaToShapesGraph :: (t0 -> Syntax.Iri) -> (PgModel.VertexLabel -> Syntax.Iri) -> (PgModel.EdgeLabel -> Syntax.Iri) -> (PgModel.PropertyKey -> Syntax.Iri) -> PgModel.GraphSchema t0 -> ShaclModel.ShapesGraph
 graphSchemaToShapesGraph encodeType encodeVertexLabel encodeEdgeLabel encodeKey schema =
@@ -164,6 +173,7 @@
                       ShaclModel.definitionIri = (ShaclModel.definitionIri baseDef),
                       ShaclModel.definitionTarget = updatedShape}) vertexTypes
       in (ShaclModel.ShapesGraph (Sets.fromList defs))
+
 -- | Convert a property type to a SHACL property shape
 propertyTypeToPropertyShape :: (t0 -> Syntax.Iri) -> (PgModel.PropertyKey -> Syntax.Iri) -> PgModel.PropertyType t0 -> ShaclModel.PropertyShape
 propertyTypeToPropertyShape encodeType encodeKey pt =
@@ -190,6 +200,7 @@
         ShaclModel.propertyShapeName = Utils.emptyLangStrings,
         ShaclModel.propertyShapeOrder = Nothing,
         ShaclModel.propertyShapePath = path}
+
 -- | Convert a vertex type to a SHACL node shape definition
 vertexTypeToNodeShape :: (t0 -> Syntax.Iri) -> (PgModel.VertexLabel -> Syntax.Iri) -> (PgModel.PropertyKey -> Syntax.Iri) -> PgModel.VertexType t0 -> ShaclModel.Definition ShaclModel.Shape
 vertexTypeToNodeShape encodeType encodeLabel encodeKey vt =
diff --git a/src/main/haskell/Hydra/Pg/TermsToElements.hs b/src/main/haskell/Hydra/Pg/TermsToElements.hs
--- a/src/main/haskell/Hydra/Pg/TermsToElements.hs
+++ b/src/main/haskell/Hydra/Pg/TermsToElements.hs
@@ -1,11 +1,14 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Functions for mapping Hydra terms to property graph elements using mapping specifications
 
 module Hydra.Pg.TermsToElements where
+
 import qualified Hydra.Annotations as Annotations
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -30,10 +33,11 @@
 import qualified Hydra.Paths as Paths
 import qualified Hydra.Pg.Mapping as Mapping
 import qualified Hydra.Pg.Model as PgModel
+import qualified Hydra.Print.Core as PrintCore
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.Resolution as Resolution
-import qualified Hydra.Show.Core as ShowCore
 import qualified Hydra.Strip as Strip
 import qualified Hydra.System as System
 import qualified Hydra.Tabular as Tabular
@@ -48,6 +52,7 @@
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | Apply a parsed pattern to a term, producing string terms
 applyPattern :: t0 -> String -> [([String], String)] -> Core.Term -> Either Errors.Error [Core.Term]
 applyPattern cx firstLit pairs term =
@@ -57,9 +62,11 @@
           litP = Pairs.second ep
       in (Lists.concat (Lists.map (\pStr -> Lists.map (\a -> Strings.cat2 (Strings.cat2 a pStr) litP) accum) pStrs))) [
       firstLit] evaluated))))
+
 -- | Decode an edge label from a term
 decodeEdgeLabel :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error PgModel.EdgeLabel
 decodeEdgeLabel cx g t = Eithers.map (\_x -> PgModel.EdgeLabel _x) (ExtractCore.string g t)
+
 -- | Decode an edge specification from a term
 decodeEdgeSpec :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error Mapping.EdgeSpec
 decodeEdgeSpec cx g term =
@@ -69,21 +76,25 @@
       Mapping.edgeSpecOut = _c,
       Mapping.edgeSpecIn = _d,
       Mapping.edgeSpecProperties = _e}) (readField cx fields (Core.Name "properties") (expectList cx g decodePropertySpec))))))) term
+
 -- | Decode an element specification from a term
 decodeElementSpec :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error Mapping.ElementSpec
 decodeElementSpec cx g term =
     readInjection cx g [
       (Core.Name "vertex", (\t -> Eithers.map (\_x -> Mapping.ElementSpecVertex _x) (decodeVertexSpec cx g t))),
       (Core.Name "edge", (\t -> Eithers.map (\_x -> Mapping.ElementSpecEdge _x) (decodeEdgeSpec cx g t)))] term
+
 -- | Decode a property key from a term
 decodePropertyKey :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error PgModel.PropertyKey
 decodePropertyKey cx g t = Eithers.map (\_x -> PgModel.PropertyKey _x) (ExtractCore.string g t)
+
 -- | Decode a property specification from a term
 decodePropertySpec :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error Mapping.PropertySpec
 decodePropertySpec cx g term =
     readRecord cx g (\fields -> Eithers.bind (readField cx fields (Core.Name "key") (decodePropertyKey cx g)) (\_a -> Eithers.map (\_b -> Mapping.PropertySpec {
       Mapping.propertySpecKey = _a,
       Mapping.propertySpecValue = _b}) (readField cx fields (Core.Name "value") (decodeValueSpec cx g)))) term
+
 -- | Decode a value specification from a term
 decodeValueSpec :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error Mapping.ValueSpec
 decodeValueSpec cx g term =
@@ -96,9 +107,11 @@
       _ -> readInjection cx g [
         (Core.Name "value", (\_ -> Right Mapping.ValueSpecValue)),
         (Core.Name "pattern", (\t -> Eithers.map (\_x -> Mapping.ValueSpecPattern _x) (ExtractCore.string g t)))] term
+
 -- | Decode a vertex label from a term
 decodeVertexLabel :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error PgModel.VertexLabel
 decodeVertexLabel cx g t = Eithers.map (\_x -> PgModel.VertexLabel _x) (ExtractCore.string g t)
+
 -- | Decode a vertex specification from a term
 decodeVertexSpec :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error Mapping.VertexSpec
 decodeVertexSpec cx g term =
@@ -106,11 +119,13 @@
       Mapping.vertexSpecLabel = _a,
       Mapping.vertexSpecId = _b,
       Mapping.vertexSpecProperties = _c}) (readField cx fields (Core.Name "properties") (expectList cx g decodePropertySpec))))) term
+
 -- | Evaluate a path (list of steps) on a term, returning all resulting terms
 evalPath :: t0 -> [String] -> Core.Term -> Either Errors.Error [Core.Term]
 evalPath cx path term =
     Optionals.cases (Lists.uncons path) (Right [
       term]) (\p -> Eithers.bind (evalStep cx (Pairs.first p) term) (\results -> Eithers.map (\xs -> Lists.concat xs) (Eithers.mapList (evalPath cx (Pairs.second p)) results)))
+
 -- | Evaluate a single step of a path traversal on a term
 evalStep :: t0 -> String -> Core.Term -> Either Errors.Error [Core.Term]
 evalStep cx step term =
@@ -123,15 +138,18 @@
       Core.TermInject v0 -> Logic.ifElse (Equality.equal (Core.unName (Core.fieldName (Core.injectionField v0))) step) (evalStep cx step (Core.fieldTerm (Core.injectionField v0))) (Right [])
       Core.TermWrap v0 -> evalStep cx step (Core.wrappedTermBody v0)
       _ -> Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "Can't traverse through term for step " step))))
+
 -- | Extract a list from a term and apply a decoder to each element
 expectList :: t0 -> Graph.Graph -> (t0 -> Graph.Graph -> Core.Term -> Either Errors.Error t1) -> Core.Term -> Either Errors.Error [t1]
 expectList cx g f term = Eithers.bind (ExtractCore.list g term) (\elems -> Eithers.mapList (f cx g) elems)
+
 -- | Parse an edge id pattern from a value spec and schema
-parseEdgeIdPattern :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.ValueSpec -> Either t5 (Core.Term -> Either Errors.Error [t4])
+parseEdgeIdPattern :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.ValueSpec -> Either t5 (t6 -> Core.Term -> Either Errors.Error [t4])
 parseEdgeIdPattern cx g schema spec =
-    Eithers.bind (parseValueSpec cx g spec) (\fun -> Right (\term -> Eithers.bind (fun term) (\terms -> Eithers.mapList (Coders.coderEncode (Mapping.schemaEdgeIds schema)) terms)))
+    Eithers.bind (parseValueSpec cx g spec) (\fun -> Right (\cx_ -> \term -> Eithers.bind (fun cx_ term) (\terms -> Eithers.mapList (Coders.coderEncode (Mapping.schemaEdgeIds schema)) terms)))
+
 -- | Parse an edge specification into a label and encoder function
-parseEdgeSpec :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.EdgeSpec -> Either t5 (PgModel.Label, (Core.Term -> Either Errors.Error [PgModel.Element t4]))
+parseEdgeSpec :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.EdgeSpec -> Either t5 (PgModel.Label, (t6 -> Core.Term -> Either Errors.Error [PgModel.Element t4]))
 parseEdgeSpec cx g schema spec =
 
       let label = Mapping.edgeSpecLabel spec
@@ -141,21 +159,23 @@
           props = Mapping.edgeSpecProperties spec
       in (Eithers.bind (parseEdgeIdPattern cx g schema id) (\getId -> Eithers.bind (parseVertexIdPattern cx g schema outV) (\getOut -> Eithers.bind (parseVertexIdPattern cx g schema inV) (\getIn -> Eithers.bind (Eithers.mapList (parsePropertySpec cx g schema) props) (\getProps -> Right (
         PgModel.LabelEdge label,
-        (\term -> Eithers.bind (requireUnique cx "edge id" getId term) (\tid -> Eithers.bind (requireUnique cx "vertex id" getOut term) (\tout -> Eithers.bind (requireUnique cx "edge id" getIn term) (\tin -> Eithers.bind (Eithers.map (\_xs -> Maps.fromList _xs) (Eithers.mapList (\gf -> requireUnique cx "property key" gf term) getProps)) (\tprops -> Right [
+        (\cx_ -> \term -> Eithers.bind (requireUnique cx_ "edge id" (getId cx_) term) (\tid -> Eithers.bind (requireUnique cx_ "vertex id" (getOut cx_) term) (\tout -> Eithers.bind (requireUnique cx_ "edge id" (getIn cx_) term) (\tin -> Eithers.bind (Eithers.map (\_xs -> Maps.fromList _xs) (Eithers.mapList (\gf -> requireUnique cx_ "property key" (gf cx_) term) getProps)) (\tprops -> Right [
           PgModel.ElementEdge (PgModel.Edge {
             PgModel.edgeLabel = label,
             PgModel.edgeId = tid,
             PgModel.edgeOut = tout,
             PgModel.edgeIn = tin,
             PgModel.edgeProperties = tprops})])))))))))))
+
 -- | Parse an element specification into a label and encoder function
-parseElementSpec :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.ElementSpec -> Either t5 (PgModel.Label, (Core.Term -> Either Errors.Error [PgModel.Element t4]))
+parseElementSpec :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.ElementSpec -> Either t5 (PgModel.Label, (t6 -> Core.Term -> Either Errors.Error [PgModel.Element t4]))
 parseElementSpec cx g schema spec =
     case spec of
       Mapping.ElementSpecVertex v0 -> parseVertexSpec cx g schema v0
       Mapping.ElementSpecEdge v0 -> parseEdgeSpec cx g schema v0
+
 -- | Parse a string pattern into a function that traverses terms
-parsePattern :: t0 -> t1 -> String -> Either t2 (Core.Term -> Either Errors.Error [Core.Term])
+parsePattern :: t0 -> t1 -> String -> Either t2 (t3 -> Core.Term -> Either Errors.Error [Core.Term])
 parsePattern cx _g pat =
 
       let segments = Strings.splitOn "${" pat
@@ -168,27 +188,31 @@
                         litPart = Strings.intercalate "}" (Lists.drop 1 parts)
                         pathSteps = Strings.splitOn "/" pathStr
                     in (pathSteps, litPart)) rest
-      in (Right (\term -> applyPattern cx firstLit parsed term))
+      in (Right (\cx_ -> \term -> applyPattern cx_ firstLit parsed term))
+
 -- | Parse a property specification into an encoder function
-parsePropertySpec :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.PropertySpec -> Either t5 (Core.Term -> Either Errors.Error [(PgModel.PropertyKey, t4)])
+parsePropertySpec :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.PropertySpec -> Either t5 (t6 -> Core.Term -> Either Errors.Error [(PgModel.PropertyKey, t4)])
 parsePropertySpec cx g schema spec =
 
       let key = Mapping.propertySpecKey spec
           value = Mapping.propertySpecValue spec
-      in (Eithers.bind (parseValueSpec cx g value) (\fun -> Right (\term -> Eithers.bind (fun term) (\results -> Eithers.bind (Eithers.mapList (Coders.coderEncode (Mapping.schemaPropertyValues schema)) results) (\values -> Right (Lists.map (\v -> (key, v)) values))))))
+      in (Eithers.bind (parseValueSpec cx g value) (\fun -> Right (\cx_ -> \term -> Eithers.bind (fun cx_ term) (\results -> Eithers.bind (Eithers.mapList (Coders.coderEncode (Mapping.schemaPropertyValues schema)) results) (\values -> Right (Lists.map (\v -> (key, v)) values))))))
+
 -- | Parse a value specification into a function that processes terms
-parseValueSpec :: t0 -> t1 -> Mapping.ValueSpec -> Either t2 (Core.Term -> Either Errors.Error [Core.Term])
+parseValueSpec :: t0 -> t1 -> Mapping.ValueSpec -> Either t2 (t3 -> Core.Term -> Either Errors.Error [Core.Term])
 parseValueSpec cx g spec =
     case spec of
-      Mapping.ValueSpecValue -> Right (\term -> Right [
+      Mapping.ValueSpecValue -> Right (\_cx -> \term -> Right [
         term])
       Mapping.ValueSpecPattern v0 -> parsePattern cx g v0
+
 -- | Parse a vertex id pattern from a value spec and schema
-parseVertexIdPattern :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.ValueSpec -> Either t5 (Core.Term -> Either Errors.Error [t4])
+parseVertexIdPattern :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.ValueSpec -> Either t5 (t6 -> Core.Term -> Either Errors.Error [t4])
 parseVertexIdPattern cx g schema spec =
-    Eithers.bind (parseValueSpec cx g spec) (\fun -> Right (\term -> Eithers.bind (fun term) (\terms -> Eithers.mapList (Coders.coderEncode (Mapping.schemaVertexIds schema)) terms)))
+    Eithers.bind (parseValueSpec cx g spec) (\fun -> Right (\cx_ -> \term -> Eithers.bind (fun cx_ term) (\terms -> Eithers.mapList (Coders.coderEncode (Mapping.schemaVertexIds schema)) terms)))
+
 -- | Parse a vertex specification into a label and encoder function
-parseVertexSpec :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.VertexSpec -> Either t5 (PgModel.Label, (Core.Term -> Either Errors.Error [PgModel.Element t4]))
+parseVertexSpec :: t0 -> t1 -> Mapping.Schema t2 t3 t4 Errors.Error -> Mapping.VertexSpec -> Either t5 (PgModel.Label, (t6 -> Core.Term -> Either Errors.Error [PgModel.Element t4]))
 parseVertexSpec cx g schema spec =
 
       let label = Mapping.vertexSpecLabel spec
@@ -196,15 +220,17 @@
           props = Mapping.vertexSpecProperties spec
       in (Eithers.bind (parseVertexIdPattern cx g schema id) (\getId -> Eithers.bind (Eithers.mapList (parsePropertySpec cx g schema) props) (\getProps -> Right (
         PgModel.LabelVertex label,
-        (\term -> Eithers.bind (requireUnique cx "vertex id" getId term) (\tid -> Eithers.bind (Eithers.map (\_xs -> Maps.fromList _xs) (Eithers.mapList (\gf -> requireUnique cx "property key" gf term) getProps)) (\tprops -> Right [
+        (\cx_ -> \term -> Eithers.bind (requireUnique cx_ "vertex id" (getId cx_) term) (\tid -> Eithers.bind (Eithers.map (\_xs -> Maps.fromList _xs) (Eithers.mapList (\gf -> requireUnique cx_ "property key" (gf cx_) term) getProps)) (\tprops -> Right [
           PgModel.ElementVertex (PgModel.Vertex {
             PgModel.vertexLabel = label,
             PgModel.vertexId = tid,
             PgModel.vertexProperties = tprops})])))))))
+
 -- | Read a field from a map of fields by name
 readField :: t0 -> M.Map Core.Name t1 -> Core.Name -> (t1 -> Either Errors.Error t2) -> Either Errors.Error t2
 readField cx fields fname fun =
     Optionals.cases (Maps.lookup fname fields) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "no such field: " (Core.unName fname))))) fun
+
 -- | Read an injection (union value) from a term
 readInjection :: t0 -> Graph.Graph -> [(Core.Name, (Core.Term -> Either Errors.Error t1))] -> Core.Term -> Either Errors.Error t1
 readInjection cx g cases encoded =
@@ -217,14 +243,17 @@
         in (Optionals.cases (Lists.maybeHead matching) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "unexpected field: " (Core.unName key))))) (\m ->
           let handler = Pairs.second m
           in (handler val))))))
+
 -- | Read a record from a term as a map of field names to values
 readRecord :: t0 -> Graph.Graph -> (M.Map Core.Name Core.Term -> Either Errors.Error t1) -> Core.Term -> Either Errors.Error t1
 readRecord cx g cons term =
     Eithers.bind (ExtractCore.map (\k -> Eithers.map (\_n -> Core.Name _n) (ExtractCore.string g k)) (\_v -> Right _v) g term) cons
+
 -- | Require exactly one result from a list-producing function
 requireUnique :: t0 -> String -> (t1 -> Either Errors.Error [t2]) -> t1 -> Either Errors.Error t2
 requireUnique cx context fun term =
     Eithers.bind (fun term) (\results -> Logic.ifElse (Lists.null results) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "No value found: " context)))) (Logic.ifElse (Equality.equal (Lists.length results) 1) (Optionals.cases (Lists.maybeHead results) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "Multiple values found: " context)))) (\x -> Right x)) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "Multiple values found: " context))))))
+
 -- | Create an adapter that maps terms to property graph elements using a mapping specification
 termToElementsAdapter :: t0 -> Graph.Graph -> Mapping.Schema t1 t2 t3 Errors.Error -> Core.Type -> Either Errors.Error (Coders.Adapter Core.Type [PgModel.Label] Core.Term [PgModel.Element t3] Errors.Error)
 termToElementsAdapter cx g schema typ =
@@ -244,8 +273,9 @@
           Coders.adapterSource = typ,
           Coders.adapterTarget = labels,
           Coders.adapterCoder = Coders.Coder {
-            Coders.coderEncode = (\t -> Eithers.map (\_xs -> Lists.concat _xs) (Eithers.mapList (\e -> e t) encoders)),
+            Coders.coderEncode = (\t -> Eithers.map (\_xs -> Lists.concat _xs) (Eithers.mapList (\e -> e cx t) encoders)),
             Coders.coderDecode = (\_els -> Left (Errors.ErrorOther (Errors.OtherError "element decoding is not yet supported")))}}))))))
+
 -- | Convert a term to its string representation
 termToString :: Core.Term -> String
 termToString term =
@@ -255,10 +285,10 @@
         Core.LiteralBoolean v1 -> Logic.ifElse v1 "true" "false"
         Core.LiteralInteger v1 -> case v1 of
           Core.IntegerValueInt32 v2 -> Literals.showInt32 v2
-          _ -> ShowCore.term term
+          _ -> PrintCore.term term
         Core.LiteralFloat v1 -> case v1 of
           Core.FloatValueFloat64 v2 -> Literals.showFloat64 v2
-          _ -> ShowCore.term term
-        _ -> ShowCore.term term
+          _ -> PrintCore.term term
+        _ -> PrintCore.term term
       Core.TermOptional v0 -> Optionals.cases v0 "none" (\t -> termToString t)
-      _ -> ShowCore.term term
+      _ -> PrintCore.term term
diff --git a/src/main/haskell/Hydra/Pg/Utils.hs b/src/main/haskell/Hydra/Pg/Utils.hs
--- a/src/main/haskell/Hydra/Pg/Utils.hs
+++ b/src/main/haskell/Hydra/Pg/Utils.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Utility functions for property graph operations
 
 module Hydra.Pg.Utils where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -28,9 +31,10 @@
 import qualified Hydra.Pg.Coder as Coder
 import qualified Hydra.Pg.Mapping as Mapping
 import qualified Hydra.Pg.Model as PgModel
+import qualified Hydra.Print.Core as PrintCore
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
-import qualified Hydra.Show.Core as ShowCore
 import qualified Hydra.System as System
 import qualified Hydra.Tabular as Tabular
 import qualified Hydra.Testing as Testing
@@ -43,6 +47,7 @@
 import qualified Hydra.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Default Tinkerpop annotation schema
 defaultTinkerpopAnnotations :: Mapping.AnnotationSchema
 defaultTinkerpopAnnotations =
@@ -62,31 +67,33 @@
       Mapping.annotationSchemaInEdge = "inEdge",
       Mapping.annotationSchemaInEdgeLabel = "inEdgeLabel",
       Mapping.annotationSchemaIgnore = "ignore"}
+
 -- | Example property graph schema with string values
 examplePgSchema :: Mapping.Schema t0 () String Errors.Error
 examplePgSchema =
     Mapping.Schema {
       Mapping.schemaVertexIdTypes = Coders.Coder {
-        Coders.coderEncode = (\_2 -> Right ()),
-        Coders.coderDecode = (\_2 -> Right Core.TypeUnit)},
+        Coders.coderEncode = (\_ -> Right ()),
+        Coders.coderDecode = (\_ -> Right Core.TypeUnit)},
       Mapping.schemaVertexIds = Coders.Coder {
         Coders.coderEncode = (\t -> expString t),
         Coders.coderDecode = (\s -> Right (Core.TermLiteral (Core.LiteralString s)))},
       Mapping.schemaEdgeIdTypes = Coders.Coder {
-        Coders.coderEncode = (\_2 -> Right ()),
-        Coders.coderDecode = (\_2 -> Right Core.TypeUnit)},
+        Coders.coderEncode = (\_ -> Right ()),
+        Coders.coderDecode = (\_ -> Right Core.TypeUnit)},
       Mapping.schemaEdgeIds = Coders.Coder {
         Coders.coderEncode = (\t -> expString t),
         Coders.coderDecode = (\s -> Right (Core.TermLiteral (Core.LiteralString s)))},
       Mapping.schemaPropertyTypes = Coders.Coder {
-        Coders.coderEncode = (\_2 -> Right ()),
-        Coders.coderDecode = (\_2 -> Right Core.TypeUnit)},
+        Coders.coderEncode = (\_ -> Right ()),
+        Coders.coderDecode = (\_ -> Right Core.TypeUnit)},
       Mapping.schemaPropertyValues = Coders.Coder {
         Coders.coderEncode = (\t -> expString t),
         Coders.coderDecode = (\s -> Right (Core.TermLiteral (Core.LiteralString s)))},
       Mapping.schemaAnnotations = defaultTinkerpopAnnotations,
       Mapping.schemaDefaultVertexId = "defaultVertexId",
       Mapping.schemaDefaultEdgeId = "defaultEdgeId"}
+
 -- | Extract a string from a term using the empty graph
 expString :: Core.Term -> Either Errors.Error String
 expString term =
@@ -99,44 +106,49 @@
       Graph.graphPrimitives = Maps.empty,
       Graph.graphSchemaTypes = Maps.empty,
       Graph.graphTypeVariables = Sets.empty}) term
+
 -- | Get all elements from a lazy graph
 lazyGraphToElements :: PgModel.LazyGraph t0 -> [PgModel.Element t0]
 lazyGraphToElements lg =
     Lists.concat2 (Lists.map (\x -> PgModel.ElementVertex x) (PgModel.lazyGraphVertices lg)) (Lists.map (\x -> PgModel.ElementEdge x) (PgModel.lazyGraphEdges lg))
+
 -- | Convert a property graph element to JSON
-pgElementToJson :: Mapping.Schema t0 t1 t2 Errors.Error -> PgModel.Element t2 -> Either Errors.Error JsonModel.Value
+pgElementToJson :: Mapping.Schema t0 t1 t2 t3 -> PgModel.Element t2 -> Either t3 JsonModel.Value
 pgElementToJson schema el =
     (\x -> case x of
       PgModel.ElementVertex v0 -> Eithers.bind (Coders.coderDecode (Mapping.schemaVertexIds schema) (PgModel.vertexId v0)) (\term ->
         let labelJson = JsonModel.ValueString (PgModel.unVertexLabel (PgModel.vertexLabel v0))
         in (Eithers.map (\propsJson -> JsonModel.ValueObject (Optionals.cat [
           Just ("label", labelJson),
-          (Just ("id", (JsonModel.ValueString (ShowCore.term term)))),
+          (Just ("id", (JsonModel.ValueString (PrintCore.term term)))),
           propsJson])) ((\pairs -> Logic.ifElse (Maps.null pairs) (Right Nothing) (Eithers.map (\p -> Just ("properties", (JsonModel.ValueObject p))) (Eithers.mapList (\pair ->
           let key = Pairs.first pair
               v = Pairs.second pair
-          in (Eithers.bind (Coders.coderDecode (Mapping.schemaPropertyValues schema) v) (\term2 -> Right (PgModel.unPropertyKey key, (JsonModel.ValueString (ShowCore.term term2)))))) (Maps.toList pairs)))) (PgModel.vertexProperties v0))))
+          in (Eithers.bind (Coders.coderDecode (Mapping.schemaPropertyValues schema) v) (\term2 -> Right (PgModel.unPropertyKey key, (JsonModel.ValueString (PrintCore.term term2)))))) (Maps.toList pairs)))) (PgModel.vertexProperties v0))))
       PgModel.ElementEdge v0 -> Eithers.bind (Coders.coderDecode (Mapping.schemaEdgeIds schema) (PgModel.edgeId v0)) (\term -> Eithers.bind (Coders.coderDecode (Mapping.schemaVertexIds schema) (PgModel.edgeOut v0)) (\termOut -> Eithers.bind (Coders.coderDecode (Mapping.schemaVertexIds schema) (PgModel.edgeIn v0)) (\termIn ->
         let labelJson = JsonModel.ValueString (PgModel.unEdgeLabel (PgModel.edgeLabel v0))
         in (Eithers.map (\propsJson -> JsonModel.ValueObject (Optionals.cat [
           Just ("label", labelJson),
-          (Just ("id", (JsonModel.ValueString (ShowCore.term term)))),
-          (Just ("out", (JsonModel.ValueString (ShowCore.term termOut)))),
-          (Just ("in", (JsonModel.ValueString (ShowCore.term termIn)))),
+          (Just ("id", (JsonModel.ValueString (PrintCore.term term)))),
+          (Just ("out", (JsonModel.ValueString (PrintCore.term termOut)))),
+          (Just ("in", (JsonModel.ValueString (PrintCore.term termIn)))),
           propsJson])) ((\pairs -> Logic.ifElse (Maps.null pairs) (Right Nothing) (Eithers.map (\p -> Just ("properties", (JsonModel.ValueObject p))) (Eithers.mapList (\pair ->
           let key = Pairs.first pair
               v = Pairs.second pair
-          in (Eithers.bind (Coders.coderDecode (Mapping.schemaPropertyValues schema) v) (\term2 -> Right (PgModel.unPropertyKey key, (JsonModel.ValueString (ShowCore.term term2)))))) (Maps.toList pairs)))) (PgModel.edgeProperties v0))))))) el
+          in (Eithers.bind (Coders.coderDecode (Mapping.schemaPropertyValues schema) v) (\term2 -> Right (PgModel.unPropertyKey key, (JsonModel.ValueString (PrintCore.term term2)))))) (Maps.toList pairs)))) (PgModel.edgeProperties v0))))))) el
+
 -- | Convert a list of property graph elements to JSON
-pgElementsToJson :: Mapping.Schema t0 t1 t2 Errors.Error -> [PgModel.Element t2] -> Either Errors.Error JsonModel.Value
+pgElementsToJson :: Mapping.Schema t0 t1 t2 t3 -> [PgModel.Element t2] -> Either t3 JsonModel.Value
 pgElementsToJson schema els =
     Eithers.map (\els_ -> JsonModel.ValueArray els_) (Eithers.mapList (\el -> pgElementToJson schema el) els)
+
 -- | Get all elements from a property graph
 propertyGraphElements :: Ord t0 => (PgModel.Graph t0 -> [PgModel.Element t0])
 propertyGraphElements g =
     Lists.concat2 (Lists.map (\x -> PgModel.ElementVertex x) (Maps.elems (PgModel.graphVertices g))) (Lists.map (\x -> PgModel.ElementEdge x) (Maps.elems (PgModel.graphEdges g)))
+
 -- | Convert a type-annotated term to property graph elements
-typeApplicationTermToPropertyGraph :: Mapping.Schema t0 t1 t2 Errors.Error -> Core.Type -> t1 -> t1 -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (Core.Term -> Either Errors.Error [PgModel.Element t2])
+typeApplicationTermToPropertyGraph :: Mapping.Schema t0 t1 t2 Errors.Error -> Core.Type -> t1 -> t1 -> t3 -> Graph.Graph -> Either Errors.Error (Core.Term -> Either Errors.Error [PgModel.Element t2])
 typeApplicationTermToPropertyGraph schema typ vidType eidType cx g =
     Eithers.bind (Coder.elementCoder Nothing schema typ vidType eidType cx g) (\adapter -> Right (\term -> Eithers.map (\tree ->
       let flattenTree =
diff --git a/src/main/haskell/Hydra/Print/Error/Pg.hs b/src/main/haskell/Hydra/Print/Error/Pg.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Print/Error/Pg.hs
@@ -0,0 +1,134 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | String representations of hydra.error.pg types
+
+module Hydra.Print.Error.Pg where
+
+import qualified Hydra.Ast as Ast
+import qualified Hydra.Coders as Coders
+import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
+import qualified Hydra.Error.Checking as Checking
+import qualified Hydra.Error.Core as ErrorCore
+import qualified Hydra.Error.File as ErrorFile
+import qualified Hydra.Error.Packaging as ErrorPackaging
+import qualified Hydra.Error.Pg as Pg
+import qualified Hydra.Error.System as ErrorSystem
+import qualified Hydra.Errors as Errors
+import qualified Hydra.File as File
+import qualified Hydra.Graph as Graph
+import qualified Hydra.Json.Model as JsonModel
+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.Pg.Model as PgModel
+import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
+import qualified Hydra.Relational as Relational
+import qualified Hydra.System as System
+import qualified Hydra.Tabular as Tabular
+import qualified Hydra.Testing as Testing
+import qualified Hydra.Time as Time
+import qualified Hydra.Topology as Topology
+import qualified Hydra.Typed as Typed
+import qualified Hydra.Typing as Typing
+import qualified Hydra.Util as Util
+import qualified Hydra.Validation as Validation
+import qualified Hydra.Variants as Variants
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
+import qualified Data.Scientific as Sci
+
+-- | Show an invalid edge error as a string
+invalidEdgeError :: Pg.InvalidEdgeError -> String
+invalidEdgeError e =
+    case e of
+      Pg.InvalidEdgeErrorId v0 -> Strings.cat2 "invalid id: " (invalidValueError v0)
+      Pg.InvalidEdgeErrorInVertexLabel v0 -> Strings.cat2 "wrong in-vertex label: " (wrongVertexLabelError v0)
+      Pg.InvalidEdgeErrorInVertexNotFound -> "in-vertex not found"
+      Pg.InvalidEdgeErrorLabel v0 -> noSuchEdgeLabelError v0
+      Pg.InvalidEdgeErrorOutVertexLabel v0 -> Strings.cat2 "wrong out-vertex label: " (wrongVertexLabelError v0)
+      Pg.InvalidEdgeErrorOutVertexNotFound -> "out-vertex not found"
+      Pg.InvalidEdgeErrorProperty v0 -> invalidElementPropertyError v0
+
+-- | Show an invalid element property error as a string
+invalidElementPropertyError :: Pg.InvalidElementPropertyError -> String
+invalidElementPropertyError e =
+    Strings.cat [
+      "property ",
+      (PgModel.unPropertyKey (Pg.invalidElementPropertyErrorKey e)),
+      ": ",
+      (invalidPropertyError (Pg.invalidElementPropertyErrorError e))]
+
+-- | Show an invalid graph edge error as a string, given a value printer
+invalidGraphEdgeError :: (t0 -> String) -> Pg.InvalidGraphEdgeError t0 -> String
+invalidGraphEdgeError printValue e =
+    Strings.cat [
+      "edge ",
+      (printValue (Pg.invalidGraphEdgeErrorId e)),
+      ": ",
+      (invalidEdgeError (Pg.invalidGraphEdgeErrorError e))]
+
+-- | Show an invalid graph error as a string, given a value printer
+invalidGraphError :: (t0 -> String) -> Pg.InvalidGraphError t0 -> String
+invalidGraphError printValue e =
+    (\x -> case x of
+      Pg.InvalidGraphErrorEdge v0 -> invalidGraphEdgeError printValue v0
+      Pg.InvalidGraphErrorVertex v0 -> invalidGraphVertexError printValue v0) e
+
+-- | Show an invalid graph vertex error as a string, given a value printer
+invalidGraphVertexError :: (t0 -> String) -> Pg.InvalidGraphVertexError t0 -> String
+invalidGraphVertexError printValue e =
+    Strings.cat [
+      "vertex ",
+      (printValue (Pg.invalidGraphVertexErrorId e)),
+      ": ",
+      (invalidVertexError (Pg.invalidGraphVertexErrorError e))]
+
+-- | Show an invalid property error as a string
+invalidPropertyError :: Pg.InvalidPropertyError -> String
+invalidPropertyError e =
+    case e of
+      Pg.InvalidPropertyErrorInvalidValue v0 -> Strings.cat2 "invalid value: " (invalidValueError v0)
+      Pg.InvalidPropertyErrorMissingRequired v0 -> Strings.cat2 "missing required property: " (PgModel.unPropertyKey v0)
+      Pg.InvalidPropertyErrorUnexpectedKey v0 -> Strings.cat2 "unexpected property key: " (PgModel.unPropertyKey v0)
+
+-- | Show an invalid value error as a string
+invalidValueError :: Pg.InvalidValueError -> String
+invalidValueError e =
+    Strings.cat [
+      "expected ",
+      (Pg.invalidValueErrorExpectedType e),
+      ", got ",
+      (Pg.invalidValueErrorValue e)]
+
+-- | Show an invalid vertex error as a string
+invalidVertexError :: Pg.InvalidVertexError -> String
+invalidVertexError e =
+    case e of
+      Pg.InvalidVertexErrorId v0 -> Strings.cat2 "invalid id: " (invalidValueError v0)
+      Pg.InvalidVertexErrorLabel v0 -> noSuchVertexLabelError v0
+      Pg.InvalidVertexErrorProperty v0 -> invalidElementPropertyError v0
+
+-- | Show a no-such-edge-label error as a string
+noSuchEdgeLabelError :: Pg.NoSuchEdgeLabelError -> String
+noSuchEdgeLabelError e =
+    Strings.cat [
+      "no such edge label: ",
+      (PgModel.unEdgeLabel (Pg.noSuchEdgeLabelErrorLabel e))]
+
+-- | Show a no-such-vertex-label error as a string
+noSuchVertexLabelError :: Pg.NoSuchVertexLabelError -> String
+noSuchVertexLabelError e =
+    Strings.cat [
+      "no such vertex label: ",
+      (PgModel.unVertexLabel (Pg.noSuchVertexLabelErrorLabel e))]
+
+-- | Show a wrong-vertex-label error as a string
+wrongVertexLabelError :: Pg.WrongVertexLabelError -> String
+wrongVertexLabelError e =
+    Strings.cat [
+      "expected vertex label ",
+      (PgModel.unVertexLabel (Pg.wrongVertexLabelErrorExpected e)),
+      ", got ",
+      (PgModel.unVertexLabel (Pg.wrongVertexLabelErrorActual e))]
diff --git a/src/main/haskell/Hydra/Show/Error/Pg.hs b/src/main/haskell/Hydra/Show/Error/Pg.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Show/Error/Pg.hs
+++ /dev/null
@@ -1,119 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
--- | String representations of hydra.error.pg types
-
-module Hydra.Show.Error.Pg where
-import qualified Hydra.Ast as Ast
-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.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.Pg as Pg
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Json.Model as JsonModel
-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.Pg.Model as PgModel
-import qualified Hydra.Query as Query
-import qualified Hydra.Relational as Relational
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-import qualified Hydra.Util as Util
-import qualified Hydra.Validation as Validation
-import qualified Hydra.Variants as Variants
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
-import qualified Data.Scientific as Sci
--- | Show an invalid edge error as a string
-invalidEdgeError :: Pg.InvalidEdgeError -> String
-invalidEdgeError e =
-    case e of
-      Pg.InvalidEdgeErrorId v0 -> Strings.cat2 "invalid id: " (invalidValueError v0)
-      Pg.InvalidEdgeErrorInVertexLabel v0 -> Strings.cat2 "wrong in-vertex label: " (wrongVertexLabelError v0)
-      Pg.InvalidEdgeErrorInVertexNotFound -> "in-vertex not found"
-      Pg.InvalidEdgeErrorLabel v0 -> noSuchEdgeLabelError v0
-      Pg.InvalidEdgeErrorOutVertexLabel v0 -> Strings.cat2 "wrong out-vertex label: " (wrongVertexLabelError v0)
-      Pg.InvalidEdgeErrorOutVertexNotFound -> "out-vertex not found"
-      Pg.InvalidEdgeErrorProperty v0 -> invalidElementPropertyError v0
--- | Show an invalid element property error as a string
-invalidElementPropertyError :: Pg.InvalidElementPropertyError -> String
-invalidElementPropertyError e =
-    Strings.cat [
-      "property ",
-      (PgModel.unPropertyKey (Pg.invalidElementPropertyErrorKey e)),
-      ": ",
-      (invalidPropertyError (Pg.invalidElementPropertyErrorError e))]
--- | Show an invalid graph edge error as a string, given a value printer
-invalidGraphEdgeError :: (t0 -> String) -> Pg.InvalidGraphEdgeError t0 -> String
-invalidGraphEdgeError printValue e =
-    Strings.cat [
-      "edge ",
-      (printValue (Pg.invalidGraphEdgeErrorId e)),
-      ": ",
-      (invalidEdgeError (Pg.invalidGraphEdgeErrorError e))]
--- | Show an invalid graph error as a string, given a value printer
-invalidGraphError :: (t0 -> String) -> Pg.InvalidGraphError t0 -> String
-invalidGraphError printValue e =
-    (\x -> case x of
-      Pg.InvalidGraphErrorEdge v0 -> invalidGraphEdgeError printValue v0
-      Pg.InvalidGraphErrorVertex v0 -> invalidGraphVertexError printValue v0) e
--- | Show an invalid graph vertex error as a string, given a value printer
-invalidGraphVertexError :: (t0 -> String) -> Pg.InvalidGraphVertexError t0 -> String
-invalidGraphVertexError printValue e =
-    Strings.cat [
-      "vertex ",
-      (printValue (Pg.invalidGraphVertexErrorId e)),
-      ": ",
-      (invalidVertexError (Pg.invalidGraphVertexErrorError e))]
--- | Show an invalid property error as a string
-invalidPropertyError :: Pg.InvalidPropertyError -> String
-invalidPropertyError e =
-    case e of
-      Pg.InvalidPropertyErrorInvalidValue v0 -> Strings.cat2 "invalid value: " (invalidValueError v0)
-      Pg.InvalidPropertyErrorMissingRequired v0 -> Strings.cat2 "missing required property: " (PgModel.unPropertyKey v0)
-      Pg.InvalidPropertyErrorUnexpectedKey v0 -> Strings.cat2 "unexpected property key: " (PgModel.unPropertyKey v0)
--- | Show an invalid value error as a string
-invalidValueError :: Pg.InvalidValueError -> String
-invalidValueError e =
-    Strings.cat [
-      "expected ",
-      (Pg.invalidValueErrorExpectedType e),
-      ", got ",
-      (Pg.invalidValueErrorValue e)]
--- | Show an invalid vertex error as a string
-invalidVertexError :: Pg.InvalidVertexError -> String
-invalidVertexError e =
-    case e of
-      Pg.InvalidVertexErrorId v0 -> Strings.cat2 "invalid id: " (invalidValueError v0)
-      Pg.InvalidVertexErrorLabel v0 -> noSuchVertexLabelError v0
-      Pg.InvalidVertexErrorProperty v0 -> invalidElementPropertyError v0
--- | Show a no-such-edge-label error as a string
-noSuchEdgeLabelError :: Pg.NoSuchEdgeLabelError -> String
-noSuchEdgeLabelError e =
-    Strings.cat [
-      "no such edge label: ",
-      (PgModel.unEdgeLabel (Pg.noSuchEdgeLabelErrorLabel e))]
--- | Show a no-such-vertex-label error as a string
-noSuchVertexLabelError :: Pg.NoSuchVertexLabelError -> String
-noSuchVertexLabelError e =
-    Strings.cat [
-      "no such vertex label: ",
-      (PgModel.unVertexLabel (Pg.noSuchVertexLabelErrorLabel e))]
--- | Show a wrong-vertex-label error as a string
-wrongVertexLabelError :: Pg.WrongVertexLabelError -> String
-wrongVertexLabelError e =
-    Strings.cat [
-      "expected vertex label ",
-      (PgModel.unVertexLabel (Pg.wrongVertexLabelErrorExpected e)),
-      ", got ",
-      (PgModel.unVertexLabel (Pg.wrongVertexLabelErrorActual e))]
diff --git a/src/main/haskell/Hydra/Tinkerpop/Examples/Modern.hs b/src/main/haskell/Hydra/Tinkerpop/Examples/Modern.hs
--- a/src/main/haskell/Hydra/Tinkerpop/Examples/Modern.hs
+++ b/src/main/haskell/Hydra/Tinkerpop/Examples/Modern.hs
@@ -1,12 +1,15 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | The TinkerPop "Modern" property graph (schema and data), encoded as Hydra terms. The canonical example graph used throughout Apache TinkerPop documentation.
 
 module Hydra.Tinkerpop.Examples.Modern where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Pg.Model as Model
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | The TinkerPop Modern property graph data, with int32 Literal ids
 modernGraph :: Model.Graph Core.Literal
 modernGraph =
@@ -115,6 +118,7 @@
             Model.edgeIn = (Core.LiteralInteger (Core.IntegerValueInt32 3)),
             Model.edgeProperties = (M.fromList [
               (Model.PropertyKey "weight", (Core.LiteralFloat (Core.FloatValueFloat64 0.2)))])})])}
+
 -- | The TinkerPop Modern property graph schema, with LiteralType property/id types
 modernSchema :: Model.GraphSchema Core.LiteralType
 modernSchema =
diff --git a/src/main/haskell/Hydra/Tinkerpop/Features.hs b/src/main/haskell/Hydra/Tinkerpop/Features.hs
--- a/src/main/haskell/Hydra/Tinkerpop/Features.hs
+++ b/src/main/haskell/Hydra/Tinkerpop/Features.hs
@@ -1,4 +1,5 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | A model derived from TinkerPop's Graph.Features. See
 -- |   https://tinkerpop.apache.org/javadocs/current/core/org/apache/tinkerpop/gremlin/structure/Graph.Features.html
 -- |
@@ -8,9 +9,11 @@
 -- | For example, a common usage would be to check if a graph supports transactions prior to calling the commit method on Graph.tx().
 
 module Hydra.Tinkerpop.Features where
+
 import qualified Hydra.Core as Core
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Base interface for features that relate to supporting different data types.
 data DataTypeFeatures =
   DataTypeFeatures {
@@ -51,25 +54,45 @@
     -- | Supports setting of a List value.
     dataTypeFeaturesSupportsUniformListValues :: Bool}
   deriving (Eq, Ord, Read, Show)
+
 _DataTypeFeatures = Core.Name "hydra.tinkerpop.features.DataTypeFeatures"
+
 _DataTypeFeatures_supportsBooleanArrayValues = Core.Name "supportsBooleanArrayValues"
+
 _DataTypeFeatures_supportsBooleanValues = Core.Name "supportsBooleanValues"
+
 _DataTypeFeatures_supportsByteArrayValues = Core.Name "supportsByteArrayValues"
+
 _DataTypeFeatures_supportsByteValues = Core.Name "supportsByteValues"
+
 _DataTypeFeatures_supportsDoubleArrayValues = Core.Name "supportsDoubleArrayValues"
+
 _DataTypeFeatures_supportsDoubleValues = Core.Name "supportsDoubleValues"
+
 _DataTypeFeatures_supportsFloatArrayValues = Core.Name "supportsFloatArrayValues"
+
 _DataTypeFeatures_supportsFloatValues = Core.Name "supportsFloatValues"
+
 _DataTypeFeatures_supportsIntegerArrayValues = Core.Name "supportsIntegerArrayValues"
+
 _DataTypeFeatures_supportsIntegerValues = Core.Name "supportsIntegerValues"
+
 _DataTypeFeatures_supportsLongArrayValues = Core.Name "supportsLongArrayValues"
+
 _DataTypeFeatures_supportsLongValues = Core.Name "supportsLongValues"
+
 _DataTypeFeatures_supportsMapValues = Core.Name "supportsMapValues"
+
 _DataTypeFeatures_supportsMixedListValues = Core.Name "supportsMixedListValues"
+
 _DataTypeFeatures_supportsSerializableValues = Core.Name "supportsSerializableValues"
+
 _DataTypeFeatures_supportsStringArrayValues = Core.Name "supportsStringArrayValues"
+
 _DataTypeFeatures_supportsStringValues = Core.Name "supportsStringValues"
+
 _DataTypeFeatures_supportsUniformListValues = Core.Name "supportsUniformListValues"
+
 -- | Features that are related to Edge operations.
 data EdgeFeatures =
   EdgeFeatures {
@@ -82,19 +105,29 @@
     -- | Determines if the Graph implementation uses upsert functionality as opposed to insert functionality for Vertex.addEdge(String, Vertex, Object...).
     edgeFeaturesSupportsUpsert :: Bool}
   deriving (Eq, Ord, Read, Show)
+
 _EdgeFeatures = Core.Name "hydra.tinkerpop.features.EdgeFeatures"
+
 _EdgeFeatures_elementFeatures = Core.Name "elementFeatures"
+
 _EdgeFeatures_properties = Core.Name "properties"
+
 _EdgeFeatures_supportsAddEdges = Core.Name "supportsAddEdges"
+
 _EdgeFeatures_supportsRemoveEdges = Core.Name "supportsRemoveEdges"
+
 _EdgeFeatures_supportsUpsert = Core.Name "supportsUpsert"
+
 -- | Features that are related to Edge Property objects.
 data EdgePropertyFeatures =
   EdgePropertyFeatures {
     edgePropertyFeaturesPropertyFeatures :: PropertyFeatures}
   deriving (Eq, Ord, Read, Show)
+
 _EdgePropertyFeatures = Core.Name "hydra.tinkerpop.features.EdgePropertyFeatures"
+
 _EdgePropertyFeatures_propertyFeatures = Core.Name "propertyFeatures"
+
 -- | Features that are related to Element objects.
 data ElementFeatures =
   ElementFeatures {
@@ -115,21 +148,34 @@
     -- | Determines if an Element has UUID identifiers as their internal representation.
     elementFeaturesSupportsUuidIds :: Bool}
   deriving (Eq, Ord, Read, Show)
+
 _ElementFeatures = Core.Name "hydra.tinkerpop.features.ElementFeatures"
+
 _ElementFeatures_supportsAddProperty = Core.Name "supportsAddProperty"
+
 _ElementFeatures_supportsAnyIds = Core.Name "supportsAnyIds"
+
 _ElementFeatures_supportsCustomIds = Core.Name "supportsCustomIds"
+
 _ElementFeatures_supportsNumericIds = Core.Name "supportsNumericIds"
+
 _ElementFeatures_supportsRemoveProperty = Core.Name "supportsRemoveProperty"
+
 _ElementFeatures_supportsStringIds = Core.Name "supportsStringIds"
+
 _ElementFeatures_supportsUserSuppliedIds = Core.Name "supportsUserSuppliedIds"
+
 _ElementFeatures_supportsUuidIds = Core.Name "supportsUuidIds"
+
 -- | Additional features which are needed for the complete specification of language constraints in Hydra, above and beyond TinkerPop Graph.Features
 data ExtraFeatures a =
   ExtraFeatures {
     extraFeaturesSupportsMapKey :: (Core.Type -> Bool)}
+
 _ExtraFeatures = Core.Name "hydra.tinkerpop.features.ExtraFeatures"
+
 _ExtraFeatures_supportsMapKey = Core.Name "supportsMapKey"
+
 -- | An interface that represents the capabilities of a Graph implementation. By default all methods of features return true and it is up to implementers to disable feature they don't support. Users should check features prior to using various functions of TinkerPop to help ensure code portability across implementations. For example, a common usage would be to check if a graph supports transactions prior to calling the commit method on Graph.tx().
 -- |
 -- | As an additional notice to Graph Providers, feature methods will be used by the test suite to determine which tests will be ignored and which will be executed, therefore proper setting of these features is essential to maximizing the amount of testing performed by the suite. Further note, that these methods may be called by the TinkerPop core code to determine what operations may be appropriately executed which will have impact on features utilized by users.
@@ -142,10 +188,15 @@
     -- | Gets the features related to vertex operation.
     featuresVertex :: VertexFeatures}
   deriving (Eq, Ord, Read, Show)
+
 _Features = Core.Name "hydra.tinkerpop.features.Features"
+
 _Features_edge = Core.Name "edge"
+
 _Features_graph = Core.Name "graph"
+
 _Features_vertex = Core.Name "vertex"
+
 -- | Features specific to a operations of a graph.
 data GraphFeatures =
   GraphFeatures {
@@ -166,15 +217,25 @@
     -- | Gets the features related to graph sideEffects operation.
     graphFeaturesVariables :: VariableFeatures}
   deriving (Eq, Ord, Read, Show)
+
 _GraphFeatures = Core.Name "hydra.tinkerpop.features.GraphFeatures"
+
 _GraphFeatures_supportsComputer = Core.Name "supportsComputer"
+
 _GraphFeatures_supportsConcurrentAccess = Core.Name "supportsConcurrentAccess"
+
 _GraphFeatures_supportsIoRead = Core.Name "supportsIoRead"
+
 _GraphFeatures_supportsIoWrite = Core.Name "supportsIoWrite"
+
 _GraphFeatures_supportsPersistence = Core.Name "supportsPersistence"
+
 _GraphFeatures_supportsThreadedTransactions = Core.Name "supportsThreadedTransactions"
+
 _GraphFeatures_supportsTransactions = Core.Name "supportsTransactions"
+
 _GraphFeatures_variables = Core.Name "variables"
+
 -- | A base interface for Edge or Vertex Property features.
 data PropertyFeatures =
   PropertyFeatures {
@@ -182,9 +243,13 @@
     -- | Determines if an Element allows for the processing of at least one data type defined by the features.
     propertyFeaturesSupportsProperties :: Bool}
   deriving (Eq, Ord, Read, Show)
+
 _PropertyFeatures = Core.Name "hydra.tinkerpop.features.PropertyFeatures"
+
 _PropertyFeatures_dataTypeFeatures = Core.Name "dataTypeFeatures"
+
 _PropertyFeatures_supportsProperties = Core.Name "supportsProperties"
+
 -- | Features for Graph.Variables.
 data VariableFeatures =
   VariableFeatures {
@@ -192,9 +257,13 @@
     -- | If any of the features on Graph.Features.VariableFeatures is true then this value must be true.
     variableFeaturesSupportsVariables :: Bool}
   deriving (Eq, Ord, Read, Show)
+
 _VariableFeatures = Core.Name "hydra.tinkerpop.features.VariableFeatures"
+
 _VariableFeatures_dataTypeFeatures = Core.Name "dataTypeFeatures"
+
 _VariableFeatures_supportsVariables = Core.Name "supportsVariables"
+
 -- | Features that are related to Vertex operations.
 data VertexFeatures =
   VertexFeatures {
@@ -213,15 +282,25 @@
     -- | Determines if the Graph implementation uses upsert functionality as opposed to insert functionality for Graph.addVertex(String).
     vertexFeaturesSupportsUpsert :: Bool}
   deriving (Eq, Ord, Read, Show)
+
 _VertexFeatures = Core.Name "hydra.tinkerpop.features.VertexFeatures"
+
 _VertexFeatures_elementFeatures = Core.Name "elementFeatures"
+
 _VertexFeatures_properties = Core.Name "properties"
+
 _VertexFeatures_supportsAddVertices = Core.Name "supportsAddVertices"
+
 _VertexFeatures_supportsDuplicateMultiProperties = Core.Name "supportsDuplicateMultiProperties"
+
 _VertexFeatures_supportsMetaProperties = Core.Name "supportsMetaProperties"
+
 _VertexFeatures_supportsMultiProperties = Core.Name "supportsMultiProperties"
+
 _VertexFeatures_supportsRemoveVertices = Core.Name "supportsRemoveVertices"
+
 _VertexFeatures_supportsUpsert = Core.Name "supportsUpsert"
+
 -- | Features that are related to Vertex Property objects.
 data VertexPropertyFeatures =
   VertexPropertyFeatures {
@@ -231,8 +310,13 @@
     -- | Determines if a VertexProperty allows properties to be removed.
     vertexPropertyFeaturesSupportsRemove :: Bool}
   deriving (Eq, Ord, Read, Show)
+
 _VertexPropertyFeatures = Core.Name "hydra.tinkerpop.features.VertexPropertyFeatures"
+
 _VertexPropertyFeatures_dataTypeFeatures = Core.Name "dataTypeFeatures"
+
 _VertexPropertyFeatures_propertyFeatures = Core.Name "propertyFeatures"
+
 _VertexPropertyFeatures_elementFeatures = Core.Name "elementFeatures"
+
 _VertexPropertyFeatures_supportsRemove = Core.Name "supportsRemove"
diff --git a/src/main/haskell/Hydra/Tinkerpop/Gremlin.hs b/src/main/haskell/Hydra/Tinkerpop/Gremlin.hs
--- a/src/main/haskell/Hydra/Tinkerpop/Gremlin.hs
+++ b/src/main/haskell/Hydra/Tinkerpop/Gremlin.hs
@@ -1,1699 +1,2730 @@
 -- Note: this is an automatically generated file. Do not edit.
--- | A Gremlin model, based on the Apache TinkerPop Gremlin ANTLR grammar (version 3.8.1). This is a streamlined model: it preserves the semantics of the grammar (steps, predicates, arguments, literals) while collapsing pure parser-production artifacts (single-use 'XAndY'/'XOrY' glue types and left-recursion 'rest' continuations) so that the representation maps cleanly onto TinkerPop's native traversal model.
-
-module Hydra.Tinkerpop.Gremlin where
-import qualified Hydra.Core as Core
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
-import qualified Data.Scientific as Sci
-import qualified Data.Int as I
-data AsArgs =
-  AsArgs {
-    asArgsFirst :: StringArgument,
-    asArgsRest :: [StringNullableArgument]}
-  deriving (Eq, Ord, Read, Show)
-_AsArgs = Core.Name "hydra.tinkerpop.gremlin.AsArgs"
-_AsArgs_first = Core.Name "first"
-_AsArgs_rest = Core.Name "rest"
-data BarrierArgs =
-  BarrierArgsConsumer TraversalSackMethodArgument |
-  BarrierArgsInt IntegerArgument
-  deriving (Eq, Ord, Read, Show)
-_BarrierArgs = Core.Name "hydra.tinkerpop.gremlin.BarrierArgs"
-_BarrierArgs_consumer = Core.Name "consumer"
-_BarrierArgs_int = Core.Name "int"
-data BooleanArgument =
-  BooleanArgumentValue Bool |
-  BooleanArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_BooleanArgument = Core.Name "hydra.tinkerpop.gremlin.BooleanArgument"
-_BooleanArgument_value = Core.Name "value"
-_BooleanArgument_variable = Core.Name "variable"
-data ByArgs =
-  ByArgsOrder TraversalOrderArgument |
-  ByArgsToken TraversalTokenArgument |
-  ByArgsOther ByOtherArgs
-  deriving (Eq, Ord, Read, Show)
-_ByArgs = Core.Name "hydra.tinkerpop.gremlin.ByArgs"
-_ByArgs_order = Core.Name "order"
-_ByArgs_token = Core.Name "token"
-_ByArgs_other = Core.Name "other"
-data ByOtherArgs =
-  ByOtherArgsComparator (Maybe TraversalComparatorArgument) |
-  ByOtherArgsFunction TraversalFunctionArgument |
-  ByOtherArgsString StringArgument |
-  ByOtherArgsTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_ByOtherArgs = Core.Name "hydra.tinkerpop.gremlin.ByOtherArgs"
-_ByOtherArgs_comparator = Core.Name "comparator"
-_ByOtherArgs_function = Core.Name "function"
-_ByOtherArgs_string = Core.Name "string"
-_ByOtherArgs_traversal = Core.Name "traversal"
-data CardinalityAndMap =
-  CardinalityAndMap {
-    cardinalityAndMapCardinality :: TraversalCardinalityArgument,
-    cardinalityAndMapObject :: GenericLiteralMapNullableArgument}
-  deriving (Eq, Ord, Read, Show)
-_CardinalityAndMap = Core.Name "hydra.tinkerpop.gremlin.CardinalityAndMap"
-_CardinalityAndMap_cardinality = Core.Name "cardinality"
-_CardinalityAndMap_object = Core.Name "object"
-data CardinalityAndObjects =
-  CardinalityAndObjects {
-    cardinalityAndObjectsCardinality :: TraversalCardinalityArgument,
-    cardinalityAndObjectsObjects :: [GenericLiteralArgument]}
-  deriving (Eq, Ord, Read, Show)
-_CardinalityAndObjects = Core.Name "hydra.tinkerpop.gremlin.CardinalityAndObjects"
-_CardinalityAndObjects_cardinality = Core.Name "cardinality"
-_CardinalityAndObjects_objects = Core.Name "objects"
-newtype ChainedTraversal =
-  ChainedTraversal {
-    unChainedTraversal :: [TraversalMethod]}
-  deriving (Eq, Ord, Read, Show)
-_ChainedTraversal = Core.Name "hydra.tinkerpop.gremlin.ChainedTraversal"
-data ChooseArgs =
-  ChooseArgsFunction TraversalFunctionArgument |
-  ChooseArgsPredicateTraversal PredicateOrTraversalChoice |
-  ChooseArgsTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_ChooseArgs = Core.Name "hydra.tinkerpop.gremlin.ChooseArgs"
-_ChooseArgs_function = Core.Name "function"
-_ChooseArgs_predicateTraversal = Core.Name "predicateTraversal"
-_ChooseArgs_traversal = Core.Name "traversal"
-data ConcatArgs =
-  ConcatArgsTraversal [NestedTraversal] |
-  ConcatArgsString [StringNullableArgument]
-  deriving (Eq, Ord, Read, Show)
-_ConcatArgs = Core.Name "hydra.tinkerpop.gremlin.ConcatArgs"
-_ConcatArgs_traversal = Core.Name "traversal"
-_ConcatArgs_string = Core.Name "string"
-data Configuration =
-  Configuration {
-    configurationKey :: KeywordOrIdentifier,
-    configurationValue :: GenericLiteralArgument}
-  deriving (Eq, Ord, Read, Show)
-_Configuration = Core.Name "hydra.tinkerpop.gremlin.Configuration"
-_Configuration_key = Core.Name "key"
-_Configuration_value = Core.Name "value"
-data ConnectedComponentConstants =
-  ConnectedComponentConstantsComponent |
-  ConnectedComponentConstantsEdges |
-  ConnectedComponentConstantsPropertyName
-  deriving (Eq, Ord, Read, Show)
-_ConnectedComponentConstants = Core.Name "hydra.tinkerpop.gremlin.ConnectedComponentConstants"
-_ConnectedComponentConstants_component = Core.Name "component"
-_ConnectedComponentConstants_edges = Core.Name "edges"
-_ConnectedComponentConstants_propertyName = Core.Name "propertyName"
-data DateAddArgs =
-  DateAddArgs {
-    dateAddArgsUnit :: TraversalDTArgument,
-    dateAddArgsDuration :: IntegerArgument}
-  deriving (Eq, Ord, Read, Show)
-_DateAddArgs = Core.Name "hydra.tinkerpop.gremlin.DateAddArgs"
-_DateAddArgs_unit = Core.Name "unit"
-_DateAddArgs_duration = Core.Name "duration"
-data DateArgument =
-  DateArgumentValue DateLiteral |
-  DateArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_DateArgument = Core.Name "hydra.tinkerpop.gremlin.DateArgument"
-_DateArgument_value = Core.Name "value"
-_DateArgument_variable = Core.Name "variable"
-data DateDiffArgs =
-  DateDiffArgsTraversal NestedTraversal |
-  DateDiffArgsDate DateArgument
-  deriving (Eq, Ord, Read, Show)
-_DateDiffArgs = Core.Name "hydra.tinkerpop.gremlin.DateDiffArgs"
-_DateDiffArgs_traversal = Core.Name "traversal"
-_DateDiffArgs_date = Core.Name "date"
-newtype DateLiteral =
-  DateLiteral {
-    unDateLiteral :: (Maybe StringArgument)}
-  deriving (Eq, Ord, Read, Show)
-_DateLiteral = Core.Name "hydra.tinkerpop.gremlin.DateLiteral"
-data DedupArgs =
-  DedupArgsScopeString ScopeStringArgs |
-  DedupArgsString [StringNullableArgument]
-  deriving (Eq, Ord, Read, Show)
-_DedupArgs = Core.Name "hydra.tinkerpop.gremlin.DedupArgs"
-_DedupArgs_scopeString = Core.Name "scopeString"
-_DedupArgs_string = Core.Name "string"
-data DirectionAndVarargs =
-  DirectionAndVarargs {
-    directionAndVarargsDirection :: TraversalDirectionArgument,
-    directionAndVarargsVarargs :: [StringNullableArgument]}
-  deriving (Eq, Ord, Read, Show)
-_DirectionAndVarargs = Core.Name "hydra.tinkerpop.gremlin.DirectionAndVarargs"
-_DirectionAndVarargs_direction = Core.Name "direction"
-_DirectionAndVarargs_varargs = Core.Name "varargs"
-data FloatArgument =
-  FloatArgumentValue FloatLiteral |
-  FloatArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_FloatArgument = Core.Name "hydra.tinkerpop.gremlin.FloatArgument"
-_FloatArgument_value = Core.Name "value"
-_FloatArgument_variable = Core.Name "variable"
-data FloatLiteral =
-  FloatLiteralFloat Float |
-  FloatLiteralDouble Double |
-  FloatLiteralBig Sci.Scientific
-  deriving (Eq, Ord, Read, Show)
-_FloatLiteral = Core.Name "hydra.tinkerpop.gremlin.FloatLiteral"
-_FloatLiteral_float = Core.Name "float"
-_FloatLiteral_double = Core.Name "double"
-_FloatLiteral_big = Core.Name "big"
-data FoldArgs =
-  FoldArgs {
-    foldArgsSeed :: GenericLiteralArgument,
-    foldArgsBiFunction :: TraversalBiFunctionArgument}
-  deriving (Eq, Ord, Read, Show)
-_FoldArgs = Core.Name "hydra.tinkerpop.gremlin.FoldArgs"
-_FoldArgs_seed = Core.Name "seed"
-_FoldArgs_biFunction = Core.Name "biFunction"
-data FromArgs =
-  FromArgsString StringArgument |
-  FromArgsVertex StructureVertexArgument |
-  FromArgsTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_FromArgs = Core.Name "hydra.tinkerpop.gremlin.FromArgs"
-_FromArgs_string = Core.Name "string"
-_FromArgs_vertex = Core.Name "vertex"
-_FromArgs_traversal = Core.Name "traversal"
-data GenericLiteral =
-  GenericLiteralNumeric NumericLiteral |
-  GenericLiteralBoolean Bool |
-  GenericLiteralString String |
-  GenericLiteralDate DateLiteral |
-  GenericLiteralNull |
-  GenericLiteralNan |
-  GenericLiteralInf |
-  GenericLiteralTraversalToken TraversalToken |
-  GenericLiteralTraversalCardinality TraversalCardinality |
-  GenericLiteralTraversalDirection TraversalDirection |
-  GenericLiteralTraversalMerge TraversalMerge |
-  GenericLiteralTraversalPick TraversalPick |
-  GenericLiteralTraversalDT TraversalDT |
-  GenericLiteralTraversalGType TraversalGType |
-  GenericLiteralStructureVertex StructureVertex |
-  GenericLiteralGenericLiteralSet GenericLiteralSet |
-  GenericLiteralGenericLiteralCollection GenericLiteralCollection |
-  GenericLiteralGenericLiteralRange GenericLiteralRange |
-  GenericLiteralNestedTraversal NestedTraversal |
-  GenericLiteralTerminatedTraversal TerminatedTraversal |
-  GenericLiteralGenericLiteralMap GenericLiteralMap
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteral = Core.Name "hydra.tinkerpop.gremlin.GenericLiteral"
-_GenericLiteral_numeric = Core.Name "numeric"
-_GenericLiteral_boolean = Core.Name "boolean"
-_GenericLiteral_string = Core.Name "string"
-_GenericLiteral_date = Core.Name "date"
-_GenericLiteral_null = Core.Name "null"
-_GenericLiteral_nan = Core.Name "nan"
-_GenericLiteral_inf = Core.Name "inf"
-_GenericLiteral_traversalToken = Core.Name "traversalToken"
-_GenericLiteral_traversalCardinality = Core.Name "traversalCardinality"
-_GenericLiteral_traversalDirection = Core.Name "traversalDirection"
-_GenericLiteral_traversalMerge = Core.Name "traversalMerge"
-_GenericLiteral_traversalPick = Core.Name "traversalPick"
-_GenericLiteral_traversalDT = Core.Name "traversalDT"
-_GenericLiteral_traversalGType = Core.Name "traversalGType"
-_GenericLiteral_structureVertex = Core.Name "structureVertex"
-_GenericLiteral_genericLiteralSet = Core.Name "genericLiteralSet"
-_GenericLiteral_genericLiteralCollection = Core.Name "genericLiteralCollection"
-_GenericLiteral_genericLiteralRange = Core.Name "genericLiteralRange"
-_GenericLiteral_nestedTraversal = Core.Name "nestedTraversal"
-_GenericLiteral_terminatedTraversal = Core.Name "terminatedTraversal"
-_GenericLiteral_genericLiteralMap = Core.Name "genericLiteralMap"
-data GenericLiteralArgument =
-  GenericLiteralArgumentValue GenericLiteral |
-  GenericLiteralArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralArgument = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralArgument"
-_GenericLiteralArgument_value = Core.Name "value"
-_GenericLiteralArgument_variable = Core.Name "variable"
-newtype GenericLiteralCollection =
-  GenericLiteralCollection {
-    unGenericLiteralCollection :: [GenericLiteral]}
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralCollection = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralCollection"
-newtype GenericLiteralList =
-  GenericLiteralList {
-    unGenericLiteralList :: [GenericLiteral]}
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralList = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralList"
-data GenericLiteralListArgument =
-  GenericLiteralListArgumentValue GenericLiteralList |
-  GenericLiteralListArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralListArgument = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralListArgument"
-_GenericLiteralListArgument_value = Core.Name "value"
-_GenericLiteralListArgument_variable = Core.Name "variable"
-newtype GenericLiteralMap =
-  GenericLiteralMap {
-    unGenericLiteralMap :: [MapEntry]}
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralMap = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralMap"
-data GenericLiteralMapArgument =
-  GenericLiteralMapArgumentValue GenericLiteralMap |
-  GenericLiteralMapArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralMapArgument = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralMapArgument"
-_GenericLiteralMapArgument_value = Core.Name "value"
-_GenericLiteralMapArgument_variable = Core.Name "variable"
-data GenericLiteralMapNullableArgument =
-  GenericLiteralMapNullableArgumentValue (Maybe GenericLiteralMap) |
-  GenericLiteralMapNullableArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralMapNullableArgument = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralMapNullableArgument"
-_GenericLiteralMapNullableArgument_value = Core.Name "value"
-_GenericLiteralMapNullableArgument_variable = Core.Name "variable"
-data GenericLiteralRange =
-  GenericLiteralRangeInteger IntegerRange |
-  GenericLiteralRangeString StringRange
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralRange = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralRange"
-_GenericLiteralRange_integer = Core.Name "integer"
-_GenericLiteralRange_string = Core.Name "string"
-newtype GenericLiteralSet =
-  GenericLiteralSet {
-    unGenericLiteralSet :: [GenericLiteral]}
-  deriving (Eq, Ord, Read, Show)
-_GenericLiteralSet = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralSet"
-data HasArgs =
-  HasArgsString HasArgsWithKey |
-  HasArgsTraversalToken HasArgsWithToken
-  deriving (Eq, Ord, Read, Show)
-_HasArgs = Core.Name "hydra.tinkerpop.gremlin.HasArgs"
-_HasArgs_string = Core.Name "string"
-_HasArgs_traversalToken = Core.Name "traversalToken"
-data HasArgsWithKey =
-  HasArgsWithKey {
-    hasArgsWithKeyKey :: StringNullableArgument,
-    hasArgsWithKeyValue :: (Maybe HasValueClause)}
-  deriving (Eq, Ord, Read, Show)
-_HasArgsWithKey = Core.Name "hydra.tinkerpop.gremlin.HasArgsWithKey"
-_HasArgsWithKey_key = Core.Name "key"
-_HasArgsWithKey_value = Core.Name "value"
-data HasArgsWithToken =
-  HasArgsWithToken {
-    hasArgsWithTokenToken :: TraversalTokenArgument,
-    hasArgsWithTokenValue :: HasValueClause}
-  deriving (Eq, Ord, Read, Show)
-_HasArgsWithToken = Core.Name "hydra.tinkerpop.gremlin.HasArgsWithToken"
-_HasArgsWithToken_token = Core.Name "token"
-_HasArgsWithToken_value = Core.Name "value"
-data HasValueClause =
-  HasValueClauseObject GenericLiteralArgument |
-  HasValueClausePredicate TraversalPredicate |
-  HasValueClauseTraversal NestedTraversal |
-  HasValueClauseKeyObject StringKeyAndObject |
-  HasValueClauseKeyPredicate StringKeyAndPredicate
-  deriving (Eq, Ord, Read, Show)
-_HasValueClause = Core.Name "hydra.tinkerpop.gremlin.HasValueClause"
-_HasValueClause_object = Core.Name "object"
-_HasValueClause_predicate = Core.Name "predicate"
-_HasValueClause_traversal = Core.Name "traversal"
-_HasValueClause_keyObject = Core.Name "keyObject"
-_HasValueClause_keyPredicate = Core.Name "keyPredicate"
-newtype Identifier =
-  Identifier {
-    unIdentifier :: String}
-  deriving (Eq, Ord, Read, Show)
-_Identifier = Core.Name "hydra.tinkerpop.gremlin.Identifier"
-data IntegerArgument =
-  IntegerArgumentValue IntegerLiteral |
-  IntegerArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_IntegerArgument = Core.Name "hydra.tinkerpop.gremlin.IntegerArgument"
-_IntegerArgument_value = Core.Name "value"
-_IntegerArgument_variable = Core.Name "variable"
-data IntegerLiteral =
-  IntegerLiteralByte I.Int8 |
-  IntegerLiteralShort I.Int16 |
-  IntegerLiteralInt Int |
-  IntegerLiteralLong I.Int64 |
-  IntegerLiteralBig Integer
-  deriving (Eq, Ord, Read, Show)
-_IntegerLiteral = Core.Name "hydra.tinkerpop.gremlin.IntegerLiteral"
-_IntegerLiteral_byte = Core.Name "byte"
-_IntegerLiteral_short = Core.Name "short"
-_IntegerLiteral_int = Core.Name "int"
-_IntegerLiteral_long = Core.Name "long"
-_IntegerLiteral_big = Core.Name "big"
-data IntegerRange =
-  IntegerRange {
-    integerRangeLeft :: IntegerLiteral,
-    integerRangeRight :: IntegerLiteral}
-  deriving (Eq, Ord, Read, Show)
-_IntegerRange = Core.Name "hydra.tinkerpop.gremlin.IntegerRange"
-_IntegerRange_left = Core.Name "left"
-_IntegerRange_right = Core.Name "right"
-data IoOptionsKeys =
-  IoOptionsKeysReader |
-  IoOptionsKeysWriter
-  deriving (Eq, Ord, Read, Show)
-_IoOptionsKeys = Core.Name "hydra.tinkerpop.gremlin.IoOptionsKeys"
-_IoOptionsKeys_reader = Core.Name "reader"
-_IoOptionsKeys_writer = Core.Name "writer"
-data IoOptionsValues =
-  IoOptionsValuesGryo |
-  IoOptionsValuesGraphson |
-  IoOptionsValuesGraphml
-  deriving (Eq, Ord, Read, Show)
-_IoOptionsValues = Core.Name "hydra.tinkerpop.gremlin.IoOptionsValues"
-_IoOptionsValues_gryo = Core.Name "gryo"
-_IoOptionsValues_graphson = Core.Name "graphson"
-_IoOptionsValues_graphml = Core.Name "graphml"
-data Keyword =
-  KeywordEdges |
-  KeywordKeys |
-  KeywordNew |
-  KeywordValues
-  deriving (Eq, Ord, Read, Show)
-_Keyword = Core.Name "hydra.tinkerpop.gremlin.Keyword"
-_Keyword_edges = Core.Name "edges"
-_Keyword_keys = Core.Name "keys"
-_Keyword_new = Core.Name "new"
-_Keyword_values = Core.Name "values"
-data KeywordOrIdentifier =
-  KeywordOrIdentifierKeyword Keyword |
-  KeywordOrIdentifierIdentifier Identifier
-  deriving (Eq, Ord, Read, Show)
-_KeywordOrIdentifier = Core.Name "hydra.tinkerpop.gremlin.KeywordOrIdentifier"
-_KeywordOrIdentifier_keyword = Core.Name "keyword"
-_KeywordOrIdentifier_identifier = Core.Name "identifier"
-data MapEntry =
-  MapEntryKey MapKey |
-  MapEntryValue GenericLiteral
-  deriving (Eq, Ord, Read, Show)
-_MapEntry = Core.Name "hydra.tinkerpop.gremlin.MapEntry"
-_MapEntry_key = Core.Name "key"
-_MapEntry_value = Core.Name "value"
-data MapKey =
-  MapKeyString String |
-  MapKeyNumeric NumericLiteral |
-  MapKeyTraversalToken TraversalToken |
-  MapKeyTraversalDirection TraversalDirection |
-  MapKeySet GenericLiteralSet |
-  MapKeyCollection GenericLiteralCollection |
-  MapKeyMap GenericLiteralMap |
-  MapKeyKeyword Keyword |
-  MapKeyIdentifier Identifier
-  deriving (Eq, Ord, Read, Show)
-_MapKey = Core.Name "hydra.tinkerpop.gremlin.MapKey"
-_MapKey_string = Core.Name "string"
-_MapKey_numeric = Core.Name "numeric"
-_MapKey_traversalToken = Core.Name "traversalToken"
-_MapKey_traversalDirection = Core.Name "traversalDirection"
-_MapKey_set = Core.Name "set"
-_MapKey_collection = Core.Name "collection"
-_MapKey_map = Core.Name "map"
-_MapKey_keyword = Core.Name "keyword"
-_MapKey_identifier = Core.Name "identifier"
-data MergeArgs =
-  MergeArgsMap GenericLiteralMapNullableArgument |
-  MergeArgsTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_MergeArgs = Core.Name "hydra.tinkerpop.gremlin.MergeArgs"
-_MergeArgs_map = Core.Name "map"
-_MergeArgs_traversal = Core.Name "traversal"
-data MergeMapOption =
-  MergeMapOption {
-    mergeMapOptionMerge :: TraversalMergeArgument,
-    mergeMapOptionMap :: GenericLiteralMapNullableArgument,
-    mergeMapOptionCardinality :: (Maybe TraversalCardinality)}
-  deriving (Eq, Ord, Read, Show)
-_MergeMapOption = Core.Name "hydra.tinkerpop.gremlin.MergeMapOption"
-_MergeMapOption_merge = Core.Name "merge"
-_MergeMapOption_map = Core.Name "map"
-_MergeMapOption_cardinality = Core.Name "cardinality"
-data MergeTraversalOption =
-  MergeTraversalOption {
-    mergeTraversalOptionMerge :: TraversalMergeArgument,
-    mergeTraversalOptionTraversal :: NestedTraversal}
-  deriving (Eq, Ord, Read, Show)
-_MergeTraversalOption = Core.Name "hydra.tinkerpop.gremlin.MergeTraversalOption"
-_MergeTraversalOption_merge = Core.Name "merge"
-_MergeTraversalOption_traversal = Core.Name "traversal"
-data NestedTraversal =
-  NestedTraversalRoot RootTraversal |
-  NestedTraversalChained ChainedTraversal |
-  NestedTraversalAnonymous ChainedTraversal
-  deriving (Eq, Ord, Read, Show)
-_NestedTraversal = Core.Name "hydra.tinkerpop.gremlin.NestedTraversal"
-_NestedTraversal_root = Core.Name "root"
-_NestedTraversal_chained = Core.Name "chained"
-_NestedTraversal_anonymous = Core.Name "anonymous"
-data NumericArgument =
-  NumericArgumentValue NumericLiteral |
-  NumericArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_NumericArgument = Core.Name "hydra.tinkerpop.gremlin.NumericArgument"
-_NumericArgument_value = Core.Name "value"
-_NumericArgument_variable = Core.Name "variable"
-data NumericLiteral =
-  NumericLiteralInteger IntegerLiteral |
-  NumericLiteralFloat FloatLiteral
-  deriving (Eq, Ord, Read, Show)
-_NumericLiteral = Core.Name "hydra.tinkerpop.gremlin.NumericLiteral"
-_NumericLiteral_integer = Core.Name "integer"
-_NumericLiteral_float = Core.Name "float"
-data ObjectAndTraversal =
-  ObjectAndTraversal {
-    objectAndTraversalObject :: GenericLiteralArgument,
-    objectAndTraversalTraversal :: NestedTraversal}
-  deriving (Eq, Ord, Read, Show)
-_ObjectAndTraversal = Core.Name "hydra.tinkerpop.gremlin.ObjectAndTraversal"
-_ObjectAndTraversal_object = Core.Name "object"
-_ObjectAndTraversal_traversal = Core.Name "traversal"
-data OptionArgs =
-  OptionArgsPredicateTraversal PredicateAndTraversal |
-  OptionArgsMergeMap MergeMapOption |
-  OptionArgsMergeTraversal MergeTraversalOption |
-  OptionArgsObjectTraversal ObjectAndTraversal |
-  OptionArgsTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_OptionArgs = Core.Name "hydra.tinkerpop.gremlin.OptionArgs"
-_OptionArgs_predicateTraversal = Core.Name "predicateTraversal"
-_OptionArgs_mergeMap = Core.Name "mergeMap"
-_OptionArgs_mergeTraversal = Core.Name "mergeTraversal"
-_OptionArgs_objectTraversal = Core.Name "objectTraversal"
-_OptionArgs_traversal = Core.Name "traversal"
-data PageRankConstants =
-  PageRankConstantsEdges |
-  PageRankConstantsTimes |
-  PageRankConstantsPropertyName
-  deriving (Eq, Ord, Read, Show)
-_PageRankConstants = Core.Name "hydra.tinkerpop.gremlin.PageRankConstants"
-_PageRankConstants_edges = Core.Name "edges"
-_PageRankConstants_times = Core.Name "times"
-_PageRankConstants_propertyName = Core.Name "propertyName"
-data PeerPressureConstants =
-  PeerPressureConstantsEdges |
-  PeerPressureConstantsTimes |
-  PeerPressureConstantsPropertyName
-  deriving (Eq, Ord, Read, Show)
-_PeerPressureConstants = Core.Name "hydra.tinkerpop.gremlin.PeerPressureConstants"
-_PeerPressureConstants_edges = Core.Name "edges"
-_PeerPressureConstants_times = Core.Name "times"
-_PeerPressureConstants_propertyName = Core.Name "propertyName"
-data PopAndTraversal =
-  PopAndTraversal {
-    popAndTraversalPop :: TraversalPopArgument,
-    popAndTraversalTraversal :: NestedTraversal}
-  deriving (Eq, Ord, Read, Show)
-_PopAndTraversal = Core.Name "hydra.tinkerpop.gremlin.PopAndTraversal"
-_PopAndTraversal_pop = Core.Name "pop"
-_PopAndTraversal_traversal = Core.Name "traversal"
-data PredicateAndTraversal =
-  PredicateAndTraversal {
-    predicateAndTraversalPredicate :: TraversalPredicate,
-    predicateAndTraversalTraversal :: NestedTraversal}
-  deriving (Eq, Ord, Read, Show)
-_PredicateAndTraversal = Core.Name "hydra.tinkerpop.gremlin.PredicateAndTraversal"
-_PredicateAndTraversal_predicate = Core.Name "predicate"
-_PredicateAndTraversal_traversal = Core.Name "traversal"
-data PredicateOrObject =
-  PredicateOrObjectPredicate TraversalPredicate |
-  PredicateOrObjectObject GenericLiteralArgument
-  deriving (Eq, Ord, Read, Show)
-_PredicateOrObject = Core.Name "hydra.tinkerpop.gremlin.PredicateOrObject"
-_PredicateOrObject_predicate = Core.Name "predicate"
-_PredicateOrObject_object = Core.Name "object"
-data PredicateOrObjects =
-  PredicateOrObjectsPredicate TraversalPredicate |
-  PredicateOrObjectsObjects [GenericLiteralArgument]
-  deriving (Eq, Ord, Read, Show)
-_PredicateOrObjects = Core.Name "hydra.tinkerpop.gremlin.PredicateOrObjects"
-_PredicateOrObjects_predicate = Core.Name "predicate"
-_PredicateOrObjects_objects = Core.Name "objects"
-data PredicateOrStrings =
-  PredicateOrStringsPredicate TraversalPredicate |
-  PredicateOrStringsStrings [StringNullableArgument]
-  deriving (Eq, Ord, Read, Show)
-_PredicateOrStrings = Core.Name "hydra.tinkerpop.gremlin.PredicateOrStrings"
-_PredicateOrStrings_predicate = Core.Name "predicate"
-_PredicateOrStrings_strings = Core.Name "strings"
-data PredicateOrTraversal =
-  PredicateOrTraversalPredicate TraversalPredicate |
-  PredicateOrTraversalTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_PredicateOrTraversal = Core.Name "hydra.tinkerpop.gremlin.PredicateOrTraversal"
-_PredicateOrTraversal_predicate = Core.Name "predicate"
-_PredicateOrTraversal_traversal = Core.Name "traversal"
-data PredicateOrTraversalChoice =
-  PredicateOrTraversalChoice {
-    predicateOrTraversalChoicePredicate :: TraversalPredicate,
-    predicateOrTraversalChoiceTrue :: NestedTraversal,
-    predicateOrTraversalChoiceFalse :: (Maybe NestedTraversal)}
-  deriving (Eq, Ord, Read, Show)
-_PredicateOrTraversalChoice = Core.Name "hydra.tinkerpop.gremlin.PredicateOrTraversalChoice"
-_PredicateOrTraversalChoice_predicate = Core.Name "predicate"
-_PredicateOrTraversalChoice_true = Core.Name "true"
-_PredicateOrTraversalChoice_false = Core.Name "false"
-data PropertyArgs =
-  PropertyArgsCardinalityObjects CardinalityAndObjects |
-  PropertyArgsObjects [GenericLiteralArgument] |
-  PropertyArgsObject GenericLiteralMapNullableArgument |
-  PropertyArgsCardinalityObject CardinalityAndMap
-  deriving (Eq, Ord, Read, Show)
-_PropertyArgs = Core.Name "hydra.tinkerpop.gremlin.PropertyArgs"
-_PropertyArgs_cardinalityObjects = Core.Name "cardinalityObjects"
-_PropertyArgs_objects = Core.Name "objects"
-_PropertyArgs_object = Core.Name "object"
-_PropertyArgs_cardinalityObject = Core.Name "cardinalityObject"
-data Query =
-  QueryTraversalSource TraversalSourceQuery |
-  QueryRootTraversal RootTraversalQuery |
-  QueryToString |
-  QueryEmpty
-  deriving (Eq, Ord, Read, Show)
-_Query = Core.Name "hydra.tinkerpop.gremlin.Query"
-_Query_traversalSource = Core.Name "traversalSource"
-_Query_rootTraversal = Core.Name "rootTraversal"
-_Query_toString = Core.Name "toString"
-_Query_empty = Core.Name "empty"
-newtype QueryList =
-  QueryList {
-    unQueryList :: [Query]}
-  deriving (Eq, Ord, Read, Show)
-_QueryList = Core.Name "hydra.tinkerpop.gremlin.QueryList"
-data RangeArgs =
-  RangeArgs {
-    rangeArgsScope :: (Maybe TraversalScopeArgument),
-    rangeArgsMin :: IntegerArgument,
-    rangeArgsMax :: IntegerArgument}
-  deriving (Eq, Ord, Read, Show)
-_RangeArgs = Core.Name "hydra.tinkerpop.gremlin.RangeArgs"
-_RangeArgs_scope = Core.Name "scope"
-_RangeArgs_min = Core.Name "min"
-_RangeArgs_max = Core.Name "max"
-data RangeArgument =
-  RangeArgument {
-    rangeArgumentMin :: GenericLiteralArgument,
-    rangeArgumentMax :: GenericLiteralArgument}
-  deriving (Eq, Ord, Read, Show)
-_RangeArgument = Core.Name "hydra.tinkerpop.gremlin.RangeArgument"
-_RangeArgument_min = Core.Name "min"
-_RangeArgument_max = Core.Name "max"
-data RepeatArgs =
-  RepeatArgs {
-    repeatArgsString :: (Maybe StringArgument),
-    repeatArgsTraversal :: NestedTraversal}
-  deriving (Eq, Ord, Read, Show)
-_RepeatArgs = Core.Name "hydra.tinkerpop.gremlin.RepeatArgs"
-_RepeatArgs_string = Core.Name "string"
-_RepeatArgs_traversal = Core.Name "traversal"
-data ReplaceArgs =
-  ReplaceArgs {
-    replaceArgsScope :: (Maybe TraversalScopeArgument),
-    replaceArgsFrom :: StringNullableArgument,
-    replaceArgsTo :: StringNullableArgument}
-  deriving (Eq, Ord, Read, Show)
-_ReplaceArgs = Core.Name "hydra.tinkerpop.gremlin.ReplaceArgs"
-_ReplaceArgs_scope = Core.Name "scope"
-_ReplaceArgs_from = Core.Name "from"
-_ReplaceArgs_to = Core.Name "to"
-data RootTraversal =
-  RootTraversal {
-    rootTraversalSource :: TraversalSource,
-    rootTraversalSpawnMethod :: TraversalSourceSpawnMethod,
-    rootTraversalChained :: [TraversalMethod]}
-  deriving (Eq, Ord, Read, Show)
-_RootTraversal = Core.Name "hydra.tinkerpop.gremlin.RootTraversal"
-_RootTraversal_source = Core.Name "source"
-_RootTraversal_spawnMethod = Core.Name "spawnMethod"
-_RootTraversal_chained = Core.Name "chained"
-data RootTraversalQuery =
-  RootTraversalQuery {
-    rootTraversalQueryRoot :: RootTraversal,
-    rootTraversalQueryTerminalMethod :: (Maybe TraversalTerminalMethod)}
-  deriving (Eq, Ord, Read, Show)
-_RootTraversalQuery = Core.Name "hydra.tinkerpop.gremlin.RootTraversalQuery"
-_RootTraversalQuery_root = Core.Name "root"
-_RootTraversalQuery_terminalMethod = Core.Name "terminalMethod"
-data SampleByScope =
-  SampleByScope {
-    sampleByScopeScope :: (Maybe TraversalScopeArgument),
-    sampleByScopeInteger :: IntegerArgument}
-  deriving (Eq, Ord, Read, Show)
-_SampleByScope = Core.Name "hydra.tinkerpop.gremlin.SampleByScope"
-_SampleByScope_scope = Core.Name "scope"
-_SampleByScope_integer = Core.Name "integer"
-data ScopeAndInteger =
-  ScopeAndInteger {
-    scopeAndIntegerScope :: (Maybe TraversalScopeArgument),
-    scopeAndIntegerInteger :: IntegerArgument}
-  deriving (Eq, Ord, Read, Show)
-_ScopeAndInteger = Core.Name "hydra.tinkerpop.gremlin.ScopeAndInteger"
-_ScopeAndInteger_scope = Core.Name "scope"
-_ScopeAndInteger_integer = Core.Name "integer"
-data ScopeStringArgs =
-  ScopeStringArgs {
-    scopeStringArgsScope :: TraversalScopeArgument,
-    scopeStringArgsStrings :: [StringNullableArgument]}
-  deriving (Eq, Ord, Read, Show)
-_ScopeStringArgs = Core.Name "hydra.tinkerpop.gremlin.ScopeStringArgs"
-_ScopeStringArgs_scope = Core.Name "scope"
-_ScopeStringArgs_strings = Core.Name "strings"
-data SelectArgs =
-  SelectArgsColumn TraversalColumnArgument |
-  SelectArgsPopStrings SelectByKeys |
-  SelectArgsPopTraversal PopAndTraversal |
-  SelectArgsStrings [StringArgument] |
-  SelectArgsTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_SelectArgs = Core.Name "hydra.tinkerpop.gremlin.SelectArgs"
-_SelectArgs_column = Core.Name "column"
-_SelectArgs_popStrings = Core.Name "popStrings"
-_SelectArgs_popTraversal = Core.Name "popTraversal"
-_SelectArgs_strings = Core.Name "strings"
-_SelectArgs_traversal = Core.Name "traversal"
-data SelectByKeys =
-  SelectByKeys {
-    selectByKeysPop :: TraversalPopArgument,
-    selectByKeysKeys :: [StringArgument]}
-  deriving (Eq, Ord, Read, Show)
-_SelectByKeys = Core.Name "hydra.tinkerpop.gremlin.SelectByKeys"
-_SelectByKeys_pop = Core.Name "pop"
-_SelectByKeys_keys = Core.Name "keys"
-data ServiceArguments =
-  ServiceArgumentsMap (Maybe GenericLiteralMapArgument) |
-  ServiceArgumentsTraversal (Maybe NestedTraversal)
-  deriving (Eq, Ord, Read, Show)
-_ServiceArguments = Core.Name "hydra.tinkerpop.gremlin.ServiceArguments"
-_ServiceArguments_map = Core.Name "map"
-_ServiceArguments_traversal = Core.Name "traversal"
-data ServiceCall =
-  ServiceCall {
-    serviceCallService :: StringArgument,
-    serviceCallArguments :: ServiceArguments}
-  deriving (Eq, Ord, Read, Show)
-_ServiceCall = Core.Name "hydra.tinkerpop.gremlin.ServiceCall"
-_ServiceCall_service = Core.Name "service"
-_ServiceCall_arguments = Core.Name "arguments"
-data ShortestPathConstants =
-  ShortestPathConstantsTarget |
-  ShortestPathConstantsEdges |
-  ShortestPathConstantsDistance |
-  ShortestPathConstantsMaxDistance |
-  ShortestPathConstantsIncludeEdges
-  deriving (Eq, Ord, Read, Show)
-_ShortestPathConstants = Core.Name "hydra.tinkerpop.gremlin.ShortestPathConstants"
-_ShortestPathConstants_target = Core.Name "target"
-_ShortestPathConstants_edges = Core.Name "edges"
-_ShortestPathConstants_distance = Core.Name "distance"
-_ShortestPathConstants_maxDistance = Core.Name "maxDistance"
-_ShortestPathConstants_includeEdges = Core.Name "includeEdges"
-data SplitArgs =
-  SplitArgs {
-    splitArgsScope :: (Maybe TraversalScopeArgument),
-    splitArgsDelimiter :: StringNullableArgument}
-  deriving (Eq, Ord, Read, Show)
-_SplitArgs = Core.Name "hydra.tinkerpop.gremlin.SplitArgs"
-_SplitArgs_scope = Core.Name "scope"
-_SplitArgs_delimiter = Core.Name "delimiter"
-data StringAndObject =
-  StringAndObject {
-    stringAndObjectKey :: StringArgument,
-    stringAndObjectValue :: GenericLiteralArgument}
-  deriving (Eq, Ord, Read, Show)
-_StringAndObject = Core.Name "hydra.tinkerpop.gremlin.StringAndObject"
-_StringAndObject_key = Core.Name "key"
-_StringAndObject_value = Core.Name "value"
-data StringAndOptionalObject =
-  StringAndOptionalObject {
-    stringAndOptionalObjectKey :: StringArgument,
-    stringAndOptionalObjectValue :: (Maybe GenericLiteralArgument)}
-  deriving (Eq, Ord, Read, Show)
-_StringAndOptionalObject = Core.Name "hydra.tinkerpop.gremlin.StringAndOptionalObject"
-_StringAndOptionalObject_key = Core.Name "key"
-_StringAndOptionalObject_value = Core.Name "value"
-data StringArgument =
-  StringArgumentValue String |
-  StringArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_StringArgument = Core.Name "hydra.tinkerpop.gremlin.StringArgument"
-_StringArgument_value = Core.Name "value"
-_StringArgument_variable = Core.Name "variable"
-data StringArgumentOrNestedTraversal =
-  StringArgumentOrNestedTraversalString StringArgument |
-  StringArgumentOrNestedTraversalTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_StringArgumentOrNestedTraversal = Core.Name "hydra.tinkerpop.gremlin.StringArgumentOrNestedTraversal"
-_StringArgumentOrNestedTraversal_string = Core.Name "string"
-_StringArgumentOrNestedTraversal_traversal = Core.Name "traversal"
-data StringKeyAndObject =
-  StringKeyAndObject {
-    stringKeyAndObjectKey :: StringNullableArgument,
-    stringKeyAndObjectObject :: GenericLiteralArgument}
-  deriving (Eq, Ord, Read, Show)
-_StringKeyAndObject = Core.Name "hydra.tinkerpop.gremlin.StringKeyAndObject"
-_StringKeyAndObject_key = Core.Name "key"
-_StringKeyAndObject_object = Core.Name "object"
-data StringKeyAndPredicate =
-  StringKeyAndPredicate {
-    stringKeyAndPredicateKey :: StringNullableArgument,
-    stringKeyAndPredicatePredicate :: TraversalPredicate}
-  deriving (Eq, Ord, Read, Show)
-_StringKeyAndPredicate = Core.Name "hydra.tinkerpop.gremlin.StringKeyAndPredicate"
-_StringKeyAndPredicate_key = Core.Name "key"
-_StringKeyAndPredicate_predicate = Core.Name "predicate"
-data StringNullableArgument =
-  StringNullableArgumentValue (Maybe String) |
-  StringNullableArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_StringNullableArgument = Core.Name "hydra.tinkerpop.gremlin.StringNullableArgument"
-_StringNullableArgument_value = Core.Name "value"
-_StringNullableArgument_variable = Core.Name "variable"
-data StringRange =
-  StringRange {
-    stringRangeLeft :: String,
-    stringRangeRight :: String}
-  deriving (Eq, Ord, Read, Show)
-_StringRange = Core.Name "hydra.tinkerpop.gremlin.StringRange"
-_StringRange_left = Core.Name "left"
-_StringRange_right = Core.Name "right"
-data StructureVertex =
-  StructureVertex {
-    structureVertexNew :: Bool,
-    structureVertexId :: GenericLiteralArgument,
-    structureVertexLabel :: StringArgument}
-  deriving (Eq, Ord, Read, Show)
-_StructureVertex = Core.Name "hydra.tinkerpop.gremlin.StructureVertex"
-_StructureVertex_new = Core.Name "new"
-_StructureVertex_id = Core.Name "id"
-_StructureVertex_label = Core.Name "label"
-data StructureVertexArgument =
-  StructureVertexArgumentValue StructureVertex |
-  StructureVertexArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_StructureVertexArgument = Core.Name "hydra.tinkerpop.gremlin.StructureVertexArgument"
-_StructureVertexArgument_value = Core.Name "value"
-_StructureVertexArgument_variable = Core.Name "variable"
-data SubstringArgs =
-  SubstringArgs {
-    substringArgsScope :: (Maybe TraversalScopeArgument),
-    substringArgsStart :: IntegerArgument,
-    substringArgsEnd :: (Maybe IntegerArgument)}
-  deriving (Eq, Ord, Read, Show)
-_SubstringArgs = Core.Name "hydra.tinkerpop.gremlin.SubstringArgs"
-_SubstringArgs_scope = Core.Name "scope"
-_SubstringArgs_start = Core.Name "start"
-_SubstringArgs_end = Core.Name "end"
-data TailArgs =
-  TailArgs {
-    tailArgsScope :: (Maybe TraversalScopeArgument),
-    tailArgsInteger :: (Maybe IntegerArgument)}
-  deriving (Eq, Ord, Read, Show)
-_TailArgs = Core.Name "hydra.tinkerpop.gremlin.TailArgs"
-_TailArgs_scope = Core.Name "scope"
-_TailArgs_integer = Core.Name "integer"
-data TerminatedTraversal =
-  TerminatedTraversal {
-    terminatedTraversalRoot :: RootTraversal,
-    terminatedTraversalTerminal :: TraversalTerminalMethod}
-  deriving (Eq, Ord, Read, Show)
-_TerminatedTraversal = Core.Name "hydra.tinkerpop.gremlin.TerminatedTraversal"
-_TerminatedTraversal_root = Core.Name "root"
-_TerminatedTraversal_terminal = Core.Name "terminal"
-data ToArgs =
-  ToArgsDirection DirectionAndVarargs |
-  ToArgsString StringArgument |
-  ToArgsVertex StructureVertexArgument |
-  ToArgsTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_ToArgs = Core.Name "hydra.tinkerpop.gremlin.ToArgs"
-_ToArgs_direction = Core.Name "direction"
-_ToArgs_string = Core.Name "string"
-_ToArgs_vertex = Core.Name "vertex"
-_ToArgs_traversal = Core.Name "traversal"
-data TransactionPart =
-  TransactionPartBegin |
-  TransactionPartCommit |
-  TransactionPartRollback
-  deriving (Eq, Ord, Read, Show)
-_TransactionPart = Core.Name "hydra.tinkerpop.gremlin.TransactionPart"
-_TransactionPart_begin = Core.Name "begin"
-_TransactionPart_commit = Core.Name "commit"
-_TransactionPart_rollback = Core.Name "rollback"
-data TraversalBiFunctionArgument =
-  TraversalBiFunctionArgumentValue TraversalOperator |
-  TraversalBiFunctionArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalBiFunctionArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalBiFunctionArgument"
-_TraversalBiFunctionArgument_value = Core.Name "value"
-_TraversalBiFunctionArgument_variable = Core.Name "variable"
-data TraversalCardinality =
-  TraversalCardinalitySingle GenericLiteral |
-  TraversalCardinalitySet GenericLiteral |
-  TraversalCardinalityList GenericLiteral
-  deriving (Eq, Ord, Read, Show)
-_TraversalCardinality = Core.Name "hydra.tinkerpop.gremlin.TraversalCardinality"
-_TraversalCardinality_single = Core.Name "single"
-_TraversalCardinality_set = Core.Name "set"
-_TraversalCardinality_list = Core.Name "list"
-data TraversalCardinalityArgument =
-  TraversalCardinalityArgumentValue TraversalCardinality |
-  TraversalCardinalityArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalCardinalityArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalCardinalityArgument"
-_TraversalCardinalityArgument_value = Core.Name "value"
-_TraversalCardinalityArgument_variable = Core.Name "variable"
-data TraversalColumn =
-  TraversalColumnKeys |
-  TraversalColumnValues
-  deriving (Eq, Ord, Read, Show)
-_TraversalColumn = Core.Name "hydra.tinkerpop.gremlin.TraversalColumn"
-_TraversalColumn_keys = Core.Name "keys"
-_TraversalColumn_values = Core.Name "values"
-data TraversalColumnArgument =
-  TraversalColumnArgumentValue TraversalColumn |
-  TraversalColumnArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalColumnArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalColumnArgument"
-_TraversalColumnArgument_value = Core.Name "value"
-_TraversalColumnArgument_variable = Core.Name "variable"
-data TraversalComparatorArgument =
-  TraversalComparatorArgumentValue TraversalOrder |
-  TraversalComparatorArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalComparatorArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalComparatorArgument"
-_TraversalComparatorArgument_value = Core.Name "value"
-_TraversalComparatorArgument_variable = Core.Name "variable"
-data TraversalDT =
-  TraversalDTSecond |
-  TraversalDTMinute |
-  TraversalDTHour |
-  TraversalDTDay
-  deriving (Eq, Ord, Read, Show)
-_TraversalDT = Core.Name "hydra.tinkerpop.gremlin.TraversalDT"
-_TraversalDT_second = Core.Name "second"
-_TraversalDT_minute = Core.Name "minute"
-_TraversalDT_hour = Core.Name "hour"
-_TraversalDT_day = Core.Name "day"
-data TraversalDTArgument =
-  TraversalDTArgumentValue TraversalDT |
-  TraversalDTArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalDTArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalDTArgument"
-_TraversalDTArgument_value = Core.Name "value"
-_TraversalDTArgument_variable = Core.Name "variable"
-data TraversalDirection =
-  TraversalDirectionIn |
-  TraversalDirectionOut |
-  TraversalDirectionBoth |
-  TraversalDirectionFrom |
-  TraversalDirectionTo
-  deriving (Eq, Ord, Read, Show)
-_TraversalDirection = Core.Name "hydra.tinkerpop.gremlin.TraversalDirection"
-_TraversalDirection_in = Core.Name "in"
-_TraversalDirection_out = Core.Name "out"
-_TraversalDirection_both = Core.Name "both"
-_TraversalDirection_from = Core.Name "from"
-_TraversalDirection_to = Core.Name "to"
-data TraversalDirectionArgument =
-  TraversalDirectionArgumentValue TraversalDirection |
-  TraversalDirectionArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalDirectionArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalDirectionArgument"
-_TraversalDirectionArgument_value = Core.Name "value"
-_TraversalDirectionArgument_variable = Core.Name "variable"
-data TraversalFunction =
-  TraversalFunctionToken TraversalToken |
-  TraversalFunctionColumn TraversalColumn
-  deriving (Eq, Ord, Read, Show)
-_TraversalFunction = Core.Name "hydra.tinkerpop.gremlin.TraversalFunction"
-_TraversalFunction_token = Core.Name "token"
-_TraversalFunction_column = Core.Name "column"
-data TraversalFunctionArgument =
-  TraversalFunctionArgumentValue TraversalFunction |
-  TraversalFunctionArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalFunctionArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalFunctionArgument"
-_TraversalFunctionArgument_value = Core.Name "value"
-_TraversalFunctionArgument_variable = Core.Name "variable"
-data TraversalGType =
-  TraversalGTypeBigDecimal |
-  TraversalGTypeBigDecimalU |
-  TraversalGTypeBigInt |
-  TraversalGTypeBigIntU |
-  TraversalGTypeBinary |
-  TraversalGTypeBinaryU |
-  TraversalGTypeBoolean |
-  TraversalGTypeBooleanU |
-  TraversalGTypeByte |
-  TraversalGTypeByteU |
-  TraversalGTypeChar |
-  TraversalGTypeCharU |
-  TraversalGTypeDateTime |
-  TraversalGTypeDateTimeU |
-  TraversalGTypeDouble |
-  TraversalGTypeDoubleU |
-  TraversalGTypeDuration |
-  TraversalGTypeDurationU |
-  TraversalGTypeEdge |
-  TraversalGTypeEdgeU |
-  TraversalGTypeFloat |
-  TraversalGTypeFloatU |
-  TraversalGTypeGraph |
-  TraversalGTypeGraphU |
-  TraversalGTypeInt |
-  TraversalGTypeIntU |
-  TraversalGTypeList |
-  TraversalGTypeListU |
-  TraversalGTypeLong |
-  TraversalGTypeLongU |
-  TraversalGTypeMap |
-  TraversalGTypeMapU |
-  TraversalGTypeNull |
-  TraversalGTypeNullU |
-  TraversalGTypeNumber |
-  TraversalGTypeNumberU |
-  TraversalGTypePath |
-  TraversalGTypePathU |
-  TraversalGTypeProperty |
-  TraversalGTypePropertyU |
-  TraversalGTypeSet |
-  TraversalGTypeSetU |
-  TraversalGTypeShort |
-  TraversalGTypeShortU |
-  TraversalGTypeString |
-  TraversalGTypeStringU |
-  TraversalGTypeTree |
-  TraversalGTypeTreeU |
-  TraversalGTypeUuid |
-  TraversalGTypeUuidL |
-  TraversalGTypeVertex |
-  TraversalGTypeVertexU |
-  TraversalGTypeVproperty |
-  TraversalGTypeVpropertyU
-  deriving (Eq, Ord, Read, Show)
-_TraversalGType = Core.Name "hydra.tinkerpop.gremlin.TraversalGType"
-_TraversalGType_bigDecimal = Core.Name "bigDecimal"
-_TraversalGType_bigDecimalU = Core.Name "bigDecimalU"
-_TraversalGType_bigInt = Core.Name "bigInt"
-_TraversalGType_bigIntU = Core.Name "bigIntU"
-_TraversalGType_binary = Core.Name "binary"
-_TraversalGType_binaryU = Core.Name "binaryU"
-_TraversalGType_boolean = Core.Name "boolean"
-_TraversalGType_booleanU = Core.Name "booleanU"
-_TraversalGType_byte = Core.Name "byte"
-_TraversalGType_byteU = Core.Name "byteU"
-_TraversalGType_char = Core.Name "char"
-_TraversalGType_charU = Core.Name "charU"
-_TraversalGType_dateTime = Core.Name "dateTime"
-_TraversalGType_dateTimeU = Core.Name "dateTimeU"
-_TraversalGType_double = Core.Name "double"
-_TraversalGType_doubleU = Core.Name "doubleU"
-_TraversalGType_duration = Core.Name "duration"
-_TraversalGType_durationU = Core.Name "durationU"
-_TraversalGType_edge = Core.Name "edge"
-_TraversalGType_edgeU = Core.Name "edgeU"
-_TraversalGType_float = Core.Name "float"
-_TraversalGType_floatU = Core.Name "floatU"
-_TraversalGType_graph = Core.Name "graph"
-_TraversalGType_graphU = Core.Name "graphU"
-_TraversalGType_int = Core.Name "int"
-_TraversalGType_intU = Core.Name "intU"
-_TraversalGType_list = Core.Name "list"
-_TraversalGType_listU = Core.Name "listU"
-_TraversalGType_long = Core.Name "long"
-_TraversalGType_longU = Core.Name "longU"
-_TraversalGType_map = Core.Name "map"
-_TraversalGType_mapU = Core.Name "mapU"
-_TraversalGType_null = Core.Name "null"
-_TraversalGType_nullU = Core.Name "nullU"
-_TraversalGType_number = Core.Name "number"
-_TraversalGType_numberU = Core.Name "numberU"
-_TraversalGType_path = Core.Name "path"
-_TraversalGType_pathU = Core.Name "pathU"
-_TraversalGType_property = Core.Name "property"
-_TraversalGType_propertyU = Core.Name "propertyU"
-_TraversalGType_set = Core.Name "set"
-_TraversalGType_setU = Core.Name "setU"
-_TraversalGType_short = Core.Name "short"
-_TraversalGType_shortU = Core.Name "shortU"
-_TraversalGType_string = Core.Name "string"
-_TraversalGType_stringU = Core.Name "stringU"
-_TraversalGType_tree = Core.Name "tree"
-_TraversalGType_treeU = Core.Name "treeU"
-_TraversalGType_uuid = Core.Name "uuid"
-_TraversalGType_uuidL = Core.Name "uuidL"
-_TraversalGType_vertex = Core.Name "vertex"
-_TraversalGType_vertexU = Core.Name "vertexU"
-_TraversalGType_vproperty = Core.Name "vproperty"
-_TraversalGType_vpropertyU = Core.Name "vpropertyU"
-data TraversalGTypeArgument =
-  TraversalGTypeArgumentValue TraversalGType |
-  TraversalGTypeArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalGTypeArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalGTypeArgument"
-_TraversalGTypeArgument_value = Core.Name "value"
-_TraversalGTypeArgument_variable = Core.Name "variable"
-data TraversalMerge =
-  TraversalMergeOnCreate |
-  TraversalMergeOnMatch |
-  TraversalMergeOutV |
-  TraversalMergeInV
-  deriving (Eq, Ord, Read, Show)
-_TraversalMerge = Core.Name "hydra.tinkerpop.gremlin.TraversalMerge"
-_TraversalMerge_onCreate = Core.Name "onCreate"
-_TraversalMerge_onMatch = Core.Name "onMatch"
-_TraversalMerge_outV = Core.Name "outV"
-_TraversalMerge_inV = Core.Name "inV"
-data TraversalMergeArgument =
-  TraversalMergeArgumentValue TraversalMerge |
-  TraversalMergeArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalMergeArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalMergeArgument"
-_TraversalMergeArgument_value = Core.Name "value"
-_TraversalMergeArgument_variable = Core.Name "variable"
-data TraversalMethod =
-  TraversalMethodV [GenericLiteralArgument] |
-  TraversalMethodE [GenericLiteralArgument] |
-  TraversalMethodAddE StringArgumentOrNestedTraversal |
-  TraversalMethodAddV (Maybe StringArgumentOrNestedTraversal) |
-  TraversalMethodMergeE MergeArgs |
-  TraversalMethodMergeV MergeArgs |
-  TraversalMethodAggregate StringArgument |
-  TraversalMethodAll TraversalPredicate |
-  TraversalMethodAnd [NestedTraversal] |
-  TraversalMethodAny TraversalPredicate |
-  TraversalMethodAs AsArgs |
-  TraversalMethodAsBool |
-  TraversalMethodAsDate |
-  TraversalMethodAsNumber (Maybe TraversalGTypeArgument) |
-  TraversalMethodAsString (Maybe TraversalScopeArgument) |
-  TraversalMethodBarrier (Maybe BarrierArgs) |
-  TraversalMethodBoth [StringNullableArgument] |
-  TraversalMethodBothE [StringNullableArgument] |
-  TraversalMethodBothV |
-  TraversalMethodBranch NestedTraversal |
-  TraversalMethodBy ByArgs |
-  TraversalMethodCall ServiceCall |
-  TraversalMethodCap AsArgs |
-  TraversalMethodChoose ChooseArgs |
-  TraversalMethodCoalesce [NestedTraversal] |
-  TraversalMethodCoin NumericArgument |
-  TraversalMethodCombine GenericLiteralArgument |
-  TraversalMethodConcat ConcatArgs |
-  TraversalMethodConjoin StringArgument |
-  TraversalMethodConnectedComponent |
-  TraversalMethodConstant GenericLiteralArgument |
-  TraversalMethodCount (Maybe TraversalScopeArgument) |
-  TraversalMethodCyclicPath |
-  TraversalMethodDateAdd DateAddArgs |
-  TraversalMethodDateDiff DateDiffArgs |
-  TraversalMethodDedup DedupArgs |
-  TraversalMethodDifference GenericLiteralArgument |
-  TraversalMethodDiscard |
-  TraversalMethodDisjunct GenericLiteralArgument |
-  TraversalMethodDrop |
-  TraversalMethodElement [StringNullableArgument] |
-  TraversalMethodElementMap [StringNullableArgument] |
-  TraversalMethodEmit (Maybe PredicateOrTraversal) |
-  TraversalMethodFail (Maybe StringArgument) |
-  TraversalMethodFilter PredicateOrTraversal |
-  TraversalMethodFlatMap NestedTraversal |
-  TraversalMethodFold (Maybe FoldArgs) |
-  TraversalMethodFormat StringArgument |
-  TraversalMethodFrom FromArgs |
-  TraversalMethodGroup (Maybe StringArgument) |
-  TraversalMethodGroupCount (Maybe StringArgument) |
-  TraversalMethodHas HasArgs |
-  TraversalMethodHasId PredicateOrObjects |
-  TraversalMethodHasKey PredicateOrStrings |
-  TraversalMethodHasLabel PredicateOrStrings |
-  TraversalMethodHasNot StringNullableArgument |
-  TraversalMethodHasValue PredicateOrObjects |
-  TraversalMethodId |
-  TraversalMethodIdentity |
-  TraversalMethodIn [StringNullableArgument] |
-  TraversalMethodInE [StringNullableArgument] |
-  TraversalMethodInV |
-  TraversalMethodIndex |
-  TraversalMethodInject [GenericLiteralArgument] |
-  TraversalMethodIntersect GenericLiteralArgument |
-  TraversalMethodIs PredicateOrObject |
-  TraversalMethodKey |
-  TraversalMethodLabel |
-  TraversalMethodLength (Maybe TraversalScopeArgument) |
-  TraversalMethodLimit ScopeAndInteger |
-  TraversalMethodLocal NestedTraversal |
-  TraversalMethodLoops (Maybe StringArgument) |
-  TraversalMethodLTrim (Maybe TraversalScopeArgument) |
-  TraversalMethodMap NestedTraversal |
-  TraversalMethodMatch [NestedTraversal] |
-  TraversalMethodMath StringArgument |
-  TraversalMethodMax (Maybe TraversalScopeArgument) |
-  TraversalMethodMean (Maybe TraversalScopeArgument) |
-  TraversalMethodMerge GenericLiteralArgument |
-  TraversalMethodMin (Maybe TraversalScopeArgument) |
-  TraversalMethodNone TraversalPredicate |
-  TraversalMethodNot NestedTraversal |
-  TraversalMethodOption OptionArgs |
-  TraversalMethodOptional NestedTraversal |
-  TraversalMethodOr [NestedTraversal] |
-  TraversalMethodOrder (Maybe TraversalScopeArgument) |
-  TraversalMethodOtherV |
-  TraversalMethodOut [StringNullableArgument] |
-  TraversalMethodOutE [StringNullableArgument] |
-  TraversalMethodOutV |
-  TraversalMethodPageRank (Maybe NumericArgument) |
-  TraversalMethodPath |
-  TraversalMethodPeerPressure |
-  TraversalMethodProduct GenericLiteralArgument |
-  TraversalMethodProfile (Maybe StringArgument) |
-  TraversalMethodProject AsArgs |
-  TraversalMethodProperties [StringNullableArgument] |
-  TraversalMethodProperty PropertyArgs |
-  TraversalMethodPropertyMap [StringNullableArgument] |
-  TraversalMethodRange RangeArgs |
-  TraversalMethodRead |
-  TraversalMethodRepeat RepeatArgs |
-  TraversalMethodReplace ReplaceArgs |
-  TraversalMethodReverse |
-  TraversalMethodRTrim (Maybe TraversalScopeArgument) |
-  TraversalMethodSack (Maybe TraversalBiFunctionArgument) |
-  TraversalMethodSample SampleByScope |
-  TraversalMethodSelect SelectArgs |
-  TraversalMethodShortestPath |
-  TraversalMethodSideEffect NestedTraversal |
-  TraversalMethodSimplePath |
-  TraversalMethodSkip ScopeAndInteger |
-  TraversalMethodSplit SplitArgs |
-  TraversalMethodSubgraph StringArgument |
-  TraversalMethodSubstring SubstringArgs |
-  TraversalMethodSum (Maybe TraversalScopeArgument) |
-  TraversalMethodTail (Maybe TailArgs) |
-  TraversalMethodTimeLimit IntegerArgument |
-  TraversalMethodTimes IntegerArgument |
-  TraversalMethodTo ToArgs |
-  TraversalMethodToE DirectionAndVarargs |
-  TraversalMethodToLower (Maybe TraversalScopeArgument) |
-  TraversalMethodToUpper (Maybe TraversalScopeArgument) |
-  TraversalMethodToV TraversalDirectionArgument |
-  TraversalMethodTree (Maybe StringArgument) |
-  TraversalMethodTrim (Maybe TraversalScopeArgument) |
-  TraversalMethodUnfold |
-  TraversalMethodUnion [NestedTraversal] |
-  TraversalMethodUntil PredicateOrTraversal |
-  TraversalMethodValue |
-  TraversalMethodValueMap ValueMapArgs |
-  TraversalMethodValues [StringNullableArgument] |
-  TraversalMethodWhere WhereArgs |
-  TraversalMethodWith WithArgs |
-  TraversalMethodWrite
-  deriving (Eq, Ord, Read, Show)
-_TraversalMethod = Core.Name "hydra.tinkerpop.gremlin.TraversalMethod"
-_TraversalMethod_v = Core.Name "v"
-_TraversalMethod_e = Core.Name "e"
-_TraversalMethod_addE = Core.Name "addE"
-_TraversalMethod_addV = Core.Name "addV"
-_TraversalMethod_mergeE = Core.Name "mergeE"
-_TraversalMethod_mergeV = Core.Name "mergeV"
-_TraversalMethod_aggregate = Core.Name "aggregate"
-_TraversalMethod_all = Core.Name "all"
-_TraversalMethod_and = Core.Name "and"
-_TraversalMethod_any = Core.Name "any"
-_TraversalMethod_as = Core.Name "as"
-_TraversalMethod_asBool = Core.Name "asBool"
-_TraversalMethod_asDate = Core.Name "asDate"
-_TraversalMethod_asNumber = Core.Name "asNumber"
-_TraversalMethod_asString = Core.Name "asString"
-_TraversalMethod_barrier = Core.Name "barrier"
-_TraversalMethod_both = Core.Name "both"
-_TraversalMethod_bothE = Core.Name "bothE"
-_TraversalMethod_bothV = Core.Name "bothV"
-_TraversalMethod_branch = Core.Name "branch"
-_TraversalMethod_by = Core.Name "by"
-_TraversalMethod_call = Core.Name "call"
-_TraversalMethod_cap = Core.Name "cap"
-_TraversalMethod_choose = Core.Name "choose"
-_TraversalMethod_coalesce = Core.Name "coalesce"
-_TraversalMethod_coin = Core.Name "coin"
-_TraversalMethod_combine = Core.Name "combine"
-_TraversalMethod_concat = Core.Name "concat"
-_TraversalMethod_conjoin = Core.Name "conjoin"
-_TraversalMethod_connectedComponent = Core.Name "connectedComponent"
-_TraversalMethod_constant = Core.Name "constant"
-_TraversalMethod_count = Core.Name "count"
-_TraversalMethod_cyclicPath = Core.Name "cyclicPath"
-_TraversalMethod_dateAdd = Core.Name "dateAdd"
-_TraversalMethod_dateDiff = Core.Name "dateDiff"
-_TraversalMethod_dedup = Core.Name "dedup"
-_TraversalMethod_difference = Core.Name "difference"
-_TraversalMethod_discard = Core.Name "discard"
-_TraversalMethod_disjunct = Core.Name "disjunct"
-_TraversalMethod_drop = Core.Name "drop"
-_TraversalMethod_element = Core.Name "element"
-_TraversalMethod_elementMap = Core.Name "elementMap"
-_TraversalMethod_emit = Core.Name "emit"
-_TraversalMethod_fail = Core.Name "fail"
-_TraversalMethod_filter = Core.Name "filter"
-_TraversalMethod_flatMap = Core.Name "flatMap"
-_TraversalMethod_fold = Core.Name "fold"
-_TraversalMethod_format = Core.Name "format"
-_TraversalMethod_from = Core.Name "from"
-_TraversalMethod_group = Core.Name "group"
-_TraversalMethod_groupCount = Core.Name "groupCount"
-_TraversalMethod_has = Core.Name "has"
-_TraversalMethod_hasId = Core.Name "hasId"
-_TraversalMethod_hasKey = Core.Name "hasKey"
-_TraversalMethod_hasLabel = Core.Name "hasLabel"
-_TraversalMethod_hasNot = Core.Name "hasNot"
-_TraversalMethod_hasValue = Core.Name "hasValue"
-_TraversalMethod_id = Core.Name "id"
-_TraversalMethod_identity = Core.Name "identity"
-_TraversalMethod_in = Core.Name "in"
-_TraversalMethod_inE = Core.Name "inE"
-_TraversalMethod_inV = Core.Name "inV"
-_TraversalMethod_index = Core.Name "index"
-_TraversalMethod_inject = Core.Name "inject"
-_TraversalMethod_intersect = Core.Name "intersect"
-_TraversalMethod_is = Core.Name "is"
-_TraversalMethod_key = Core.Name "key"
-_TraversalMethod_label = Core.Name "label"
-_TraversalMethod_length = Core.Name "length"
-_TraversalMethod_limit = Core.Name "limit"
-_TraversalMethod_local = Core.Name "local"
-_TraversalMethod_loops = Core.Name "loops"
-_TraversalMethod_lTrim = Core.Name "lTrim"
-_TraversalMethod_map = Core.Name "map"
-_TraversalMethod_match = Core.Name "match"
-_TraversalMethod_math = Core.Name "math"
-_TraversalMethod_max = Core.Name "max"
-_TraversalMethod_mean = Core.Name "mean"
-_TraversalMethod_merge = Core.Name "merge"
-_TraversalMethod_min = Core.Name "min"
-_TraversalMethod_none = Core.Name "none"
-_TraversalMethod_not = Core.Name "not"
-_TraversalMethod_option = Core.Name "option"
-_TraversalMethod_optional = Core.Name "optional"
-_TraversalMethod_or = Core.Name "or"
-_TraversalMethod_order = Core.Name "order"
-_TraversalMethod_otherV = Core.Name "otherV"
-_TraversalMethod_out = Core.Name "out"
-_TraversalMethod_outE = Core.Name "outE"
-_TraversalMethod_outV = Core.Name "outV"
-_TraversalMethod_pageRank = Core.Name "pageRank"
-_TraversalMethod_path = Core.Name "path"
-_TraversalMethod_peerPressure = Core.Name "peerPressure"
-_TraversalMethod_product = Core.Name "product"
-_TraversalMethod_profile = Core.Name "profile"
-_TraversalMethod_project = Core.Name "project"
-_TraversalMethod_properties = Core.Name "properties"
-_TraversalMethod_property = Core.Name "property"
-_TraversalMethod_propertyMap = Core.Name "propertyMap"
-_TraversalMethod_range = Core.Name "range"
-_TraversalMethod_read = Core.Name "read"
-_TraversalMethod_repeat = Core.Name "repeat"
-_TraversalMethod_replace = Core.Name "replace"
-_TraversalMethod_reverse = Core.Name "reverse"
-_TraversalMethod_rTrim = Core.Name "rTrim"
-_TraversalMethod_sack = Core.Name "sack"
-_TraversalMethod_sample = Core.Name "sample"
-_TraversalMethod_select = Core.Name "select"
-_TraversalMethod_shortestPath = Core.Name "shortestPath"
-_TraversalMethod_sideEffect = Core.Name "sideEffect"
-_TraversalMethod_simplePath = Core.Name "simplePath"
-_TraversalMethod_skip = Core.Name "skip"
-_TraversalMethod_split = Core.Name "split"
-_TraversalMethod_subgraph = Core.Name "subgraph"
-_TraversalMethod_substring = Core.Name "substring"
-_TraversalMethod_sum = Core.Name "sum"
-_TraversalMethod_tail = Core.Name "tail"
-_TraversalMethod_timeLimit = Core.Name "timeLimit"
-_TraversalMethod_times = Core.Name "times"
-_TraversalMethod_to = Core.Name "to"
-_TraversalMethod_toE = Core.Name "toE"
-_TraversalMethod_toLower = Core.Name "toLower"
-_TraversalMethod_toUpper = Core.Name "toUpper"
-_TraversalMethod_toV = Core.Name "toV"
-_TraversalMethod_tree = Core.Name "tree"
-_TraversalMethod_trim = Core.Name "trim"
-_TraversalMethod_unfold = Core.Name "unfold"
-_TraversalMethod_union = Core.Name "union"
-_TraversalMethod_until = Core.Name "until"
-_TraversalMethod_value = Core.Name "value"
-_TraversalMethod_valueMap = Core.Name "valueMap"
-_TraversalMethod_values = Core.Name "values"
-_TraversalMethod_where = Core.Name "where"
-_TraversalMethod_with = Core.Name "with"
-_TraversalMethod_write = Core.Name "write"
-data TraversalOperator =
-  TraversalOperatorAddAll |
-  TraversalOperatorAnd |
-  TraversalOperatorAssign |
-  TraversalOperatorDiv |
-  TraversalOperatorMax |
-  TraversalOperatorMin |
-  TraversalOperatorMinus |
-  TraversalOperatorMult |
-  TraversalOperatorOr |
-  TraversalOperatorSum |
-  TraversalOperatorSumLong
-  deriving (Eq, Ord, Read, Show)
-_TraversalOperator = Core.Name "hydra.tinkerpop.gremlin.TraversalOperator"
-_TraversalOperator_addAll = Core.Name "addAll"
-_TraversalOperator_and = Core.Name "and"
-_TraversalOperator_assign = Core.Name "assign"
-_TraversalOperator_div = Core.Name "div"
-_TraversalOperator_max = Core.Name "max"
-_TraversalOperator_min = Core.Name "min"
-_TraversalOperator_minus = Core.Name "minus"
-_TraversalOperator_mult = Core.Name "mult"
-_TraversalOperator_or = Core.Name "or"
-_TraversalOperator_sum = Core.Name "sum"
-_TraversalOperator_sumLong = Core.Name "sumLong"
-data TraversalOrder =
-  TraversalOrderAsc |
-  TraversalOrderDesc |
-  TraversalOrderShuffle
-  deriving (Eq, Ord, Read, Show)
-_TraversalOrder = Core.Name "hydra.tinkerpop.gremlin.TraversalOrder"
-_TraversalOrder_asc = Core.Name "asc"
-_TraversalOrder_desc = Core.Name "desc"
-_TraversalOrder_shuffle = Core.Name "shuffle"
-data TraversalOrderArgument =
-  TraversalOrderArgumentValue TraversalOrder |
-  TraversalOrderArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalOrderArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalOrderArgument"
-_TraversalOrderArgument_value = Core.Name "value"
-_TraversalOrderArgument_variable = Core.Name "variable"
-data TraversalPick =
-  TraversalPickAny |
-  TraversalPickNone |
-  TraversalPickUnproductive
-  deriving (Eq, Ord, Read, Show)
-_TraversalPick = Core.Name "hydra.tinkerpop.gremlin.TraversalPick"
-_TraversalPick_any = Core.Name "any"
-_TraversalPick_none = Core.Name "none"
-_TraversalPick_unproductive = Core.Name "unproductive"
-data TraversalPop =
-  TraversalPopFirst |
-  TraversalPopLast |
-  TraversalPopAll |
-  TraversalPopMixed
-  deriving (Eq, Ord, Read, Show)
-_TraversalPop = Core.Name "hydra.tinkerpop.gremlin.TraversalPop"
-_TraversalPop_first = Core.Name "first"
-_TraversalPop_last = Core.Name "last"
-_TraversalPop_all = Core.Name "all"
-_TraversalPop_mixed = Core.Name "mixed"
-data TraversalPopArgument =
-  TraversalPopArgumentValue TraversalPop |
-  TraversalPopArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalPopArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalPopArgument"
-_TraversalPopArgument_value = Core.Name "value"
-_TraversalPopArgument_variable = Core.Name "variable"
-data TraversalPredicate =
-  TraversalPredicateEq GenericLiteralArgument |
-  TraversalPredicateNeq GenericLiteralArgument |
-  TraversalPredicateLt GenericLiteralArgument |
-  TraversalPredicateLte GenericLiteralArgument |
-  TraversalPredicateGt GenericLiteralArgument |
-  TraversalPredicateGte GenericLiteralArgument |
-  TraversalPredicateInside RangeArgument |
-  TraversalPredicateOutside RangeArgument |
-  TraversalPredicateBetween RangeArgument |
-  TraversalPredicateWithin (Maybe GenericLiteralArgument) |
-  TraversalPredicateWithout (Maybe GenericLiteralArgument) |
-  TraversalPredicateNot TraversalPredicate |
-  TraversalPredicateStartingWith StringArgument |
-  TraversalPredicateNotStartingWith StringArgument |
-  TraversalPredicateEndingWith StringArgument |
-  TraversalPredicateNotEndingWith StringArgument |
-  TraversalPredicateContaining StringArgument |
-  TraversalPredicateNotContaining StringArgument |
-  TraversalPredicateRegex StringArgument |
-  TraversalPredicateNotRegex StringArgument |
-  TraversalPredicateTypeOf TypeOfArg |
-  TraversalPredicateAnd TwoTraversalPredicates |
-  TraversalPredicateOr TwoTraversalPredicates |
-  TraversalPredicateNegate TraversalPredicate
-  deriving (Eq, Ord, Read, Show)
-_TraversalPredicate = Core.Name "hydra.tinkerpop.gremlin.TraversalPredicate"
-_TraversalPredicate_eq = Core.Name "eq"
-_TraversalPredicate_neq = Core.Name "neq"
-_TraversalPredicate_lt = Core.Name "lt"
-_TraversalPredicate_lte = Core.Name "lte"
-_TraversalPredicate_gt = Core.Name "gt"
-_TraversalPredicate_gte = Core.Name "gte"
-_TraversalPredicate_inside = Core.Name "inside"
-_TraversalPredicate_outside = Core.Name "outside"
-_TraversalPredicate_between = Core.Name "between"
-_TraversalPredicate_within = Core.Name "within"
-_TraversalPredicate_without = Core.Name "without"
-_TraversalPredicate_not = Core.Name "not"
-_TraversalPredicate_startingWith = Core.Name "startingWith"
-_TraversalPredicate_notStartingWith = Core.Name "notStartingWith"
-_TraversalPredicate_endingWith = Core.Name "endingWith"
-_TraversalPredicate_notEndingWith = Core.Name "notEndingWith"
-_TraversalPredicate_containing = Core.Name "containing"
-_TraversalPredicate_notContaining = Core.Name "notContaining"
-_TraversalPredicate_regex = Core.Name "regex"
-_TraversalPredicate_notRegex = Core.Name "notRegex"
-_TraversalPredicate_typeOf = Core.Name "typeOf"
-_TraversalPredicate_and = Core.Name "and"
-_TraversalPredicate_or = Core.Name "or"
-_TraversalPredicate_negate = Core.Name "negate"
-data TraversalSackMethodArgument =
-  TraversalSackMethodArgumentValue |
-  TraversalSackMethodArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalSackMethodArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalSackMethodArgument"
-_TraversalSackMethodArgument_value = Core.Name "value"
-_TraversalSackMethodArgument_variable = Core.Name "variable"
-data TraversalScope =
-  TraversalScopeLocal |
-  TraversalScopeGlobal
-  deriving (Eq, Ord, Read, Show)
-_TraversalScope = Core.Name "hydra.tinkerpop.gremlin.TraversalScope"
-_TraversalScope_local = Core.Name "local"
-_TraversalScope_global = Core.Name "global"
-data TraversalScopeArgument =
-  TraversalScopeArgumentValue TraversalScope |
-  TraversalScopeArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalScopeArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalScopeArgument"
-_TraversalScopeArgument_value = Core.Name "value"
-_TraversalScopeArgument_variable = Core.Name "variable"
-newtype TraversalSource =
-  TraversalSource {
-    unTraversalSource :: [TraversalSourceSelfMethod]}
-  deriving (Eq, Ord, Read, Show)
-_TraversalSource = Core.Name "hydra.tinkerpop.gremlin.TraversalSource"
-data TraversalSourceQuery =
-  TraversalSourceQuery {
-    traversalSourceQuerySource :: TraversalSource,
-    traversalSourceQueryTransactionPart :: (Maybe TransactionPart)}
-  deriving (Eq, Ord, Read, Show)
-_TraversalSourceQuery = Core.Name "hydra.tinkerpop.gremlin.TraversalSourceQuery"
-_TraversalSourceQuery_source = Core.Name "source"
-_TraversalSourceQuery_transactionPart = Core.Name "transactionPart"
-data TraversalSourceSelfMethod =
-  TraversalSourceSelfMethodWithBulk Bool |
-  TraversalSourceSelfMethodWithPath |
-  TraversalSourceSelfMethodWithSack WithSackArgs |
-  TraversalSourceSelfMethodWithSideEffect StringAndObject |
-  TraversalSourceSelfMethodWithStrategies [TraversalStrategy] |
-  TraversalSourceSelfMethodWithoutStrategies [Identifier] |
-  TraversalSourceSelfMethodWith StringAndOptionalObject
-  deriving (Eq, Ord, Read, Show)
-_TraversalSourceSelfMethod = Core.Name "hydra.tinkerpop.gremlin.TraversalSourceSelfMethod"
-_TraversalSourceSelfMethod_withBulk = Core.Name "withBulk"
-_TraversalSourceSelfMethod_withPath = Core.Name "withPath"
-_TraversalSourceSelfMethod_withSack = Core.Name "withSack"
-_TraversalSourceSelfMethod_withSideEffect = Core.Name "withSideEffect"
-_TraversalSourceSelfMethod_withStrategies = Core.Name "withStrategies"
-_TraversalSourceSelfMethod_withoutStrategies = Core.Name "withoutStrategies"
-_TraversalSourceSelfMethod_with = Core.Name "with"
-data TraversalSourceSpawnMethod =
-  TraversalSourceSpawnMethodAddE StringArgumentOrNestedTraversal |
-  TraversalSourceSpawnMethodAddV (Maybe StringArgumentOrNestedTraversal) |
-  TraversalSourceSpawnMethodE [GenericLiteralArgument] |
-  TraversalSourceSpawnMethodV [GenericLiteralArgument] |
-  TraversalSourceSpawnMethodMergeV MergeArgs |
-  TraversalSourceSpawnMethodMergeE MergeArgs |
-  TraversalSourceSpawnMethodInject [GenericLiteralArgument] |
-  TraversalSourceSpawnMethodIo StringArgument |
-  TraversalSourceSpawnMethodCall (Maybe ServiceCall) |
-  TraversalSourceSpawnMethodUnion [NestedTraversal]
-  deriving (Eq, Ord, Read, Show)
-_TraversalSourceSpawnMethod = Core.Name "hydra.tinkerpop.gremlin.TraversalSourceSpawnMethod"
-_TraversalSourceSpawnMethod_addE = Core.Name "addE"
-_TraversalSourceSpawnMethod_addV = Core.Name "addV"
-_TraversalSourceSpawnMethod_e = Core.Name "e"
-_TraversalSourceSpawnMethod_v = Core.Name "v"
-_TraversalSourceSpawnMethod_mergeV = Core.Name "mergeV"
-_TraversalSourceSpawnMethod_mergeE = Core.Name "mergeE"
-_TraversalSourceSpawnMethod_inject = Core.Name "inject"
-_TraversalSourceSpawnMethod_io = Core.Name "io"
-_TraversalSourceSpawnMethod_call = Core.Name "call"
-_TraversalSourceSpawnMethod_union = Core.Name "union"
-data TraversalStrategy =
-  TraversalStrategy {
-    traversalStrategyNew :: Bool,
-    traversalStrategyClass :: Identifier,
-    traversalStrategyConfigurations :: [Configuration]}
-  deriving (Eq, Ord, Read, Show)
-_TraversalStrategy = Core.Name "hydra.tinkerpop.gremlin.TraversalStrategy"
-_TraversalStrategy_new = Core.Name "new"
-_TraversalStrategy_class = Core.Name "class"
-_TraversalStrategy_configurations = Core.Name "configurations"
-data TraversalTerminalMethod =
-  TraversalTerminalMethodExplain |
-  TraversalTerminalMethodIterate |
-  TraversalTerminalMethodHasNext |
-  TraversalTerminalMethodTryNext |
-  TraversalTerminalMethodNext (Maybe IntegerLiteral) |
-  TraversalTerminalMethodToList |
-  TraversalTerminalMethodToSet |
-  TraversalTerminalMethodToBulkSet
-  deriving (Eq, Ord, Read, Show)
-_TraversalTerminalMethod = Core.Name "hydra.tinkerpop.gremlin.TraversalTerminalMethod"
-_TraversalTerminalMethod_explain = Core.Name "explain"
-_TraversalTerminalMethod_iterate = Core.Name "iterate"
-_TraversalTerminalMethod_hasNext = Core.Name "hasNext"
-_TraversalTerminalMethod_tryNext = Core.Name "tryNext"
-_TraversalTerminalMethod_next = Core.Name "next"
-_TraversalTerminalMethod_toList = Core.Name "toList"
-_TraversalTerminalMethod_toSet = Core.Name "toSet"
-_TraversalTerminalMethod_toBulkSet = Core.Name "toBulkSet"
-data TraversalToken =
-  TraversalTokenId |
-  TraversalTokenLabel |
-  TraversalTokenKey |
-  TraversalTokenValue
-  deriving (Eq, Ord, Read, Show)
-_TraversalToken = Core.Name "hydra.tinkerpop.gremlin.TraversalToken"
-_TraversalToken_id = Core.Name "id"
-_TraversalToken_label = Core.Name "label"
-_TraversalToken_key = Core.Name "key"
-_TraversalToken_value = Core.Name "value"
-data TraversalTokenArgument =
-  TraversalTokenArgumentValue TraversalToken |
-  TraversalTokenArgumentVariable Identifier
-  deriving (Eq, Ord, Read, Show)
-_TraversalTokenArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalTokenArgument"
-_TraversalTokenArgument_value = Core.Name "value"
-_TraversalTokenArgument_variable = Core.Name "variable"
-data TwoTraversalPredicates =
-  TwoTraversalPredicates {
-    twoTraversalPredicatesLeft :: TraversalPredicate,
-    twoTraversalPredicatesRight :: TraversalPredicate}
-  deriving (Eq, Ord, Read, Show)
-_TwoTraversalPredicates = Core.Name "hydra.tinkerpop.gremlin.TwoTraversalPredicates"
-_TwoTraversalPredicates_left = Core.Name "left"
-_TwoTraversalPredicates_right = Core.Name "right"
-data TypeOfArg =
-  TypeOfArgGType TraversalGType |
-  TypeOfArgString StringArgument
-  deriving (Eq, Ord, Read, Show)
-_TypeOfArg = Core.Name "hydra.tinkerpop.gremlin.TypeOfArg"
-_TypeOfArg_gType = Core.Name "gType"
-_TypeOfArg_string = Core.Name "string"
-data ValueMapArgs =
-  ValueMapArgsString [StringNullableArgument] |
-  ValueMapArgsBoolean ValueMapBooleanArgs
-  deriving (Eq, Ord, Read, Show)
-_ValueMapArgs = Core.Name "hydra.tinkerpop.gremlin.ValueMapArgs"
-_ValueMapArgs_string = Core.Name "string"
-_ValueMapArgs_boolean = Core.Name "boolean"
-data ValueMapBooleanArgs =
-  ValueMapBooleanArgs {
-    valueMapBooleanArgsValue :: BooleanArgument,
-    valueMapBooleanArgsKeys :: (Maybe [StringNullableArgument])}
-  deriving (Eq, Ord, Read, Show)
-_ValueMapBooleanArgs = Core.Name "hydra.tinkerpop.gremlin.ValueMapBooleanArgs"
-_ValueMapBooleanArgs_value = Core.Name "value"
-_ValueMapBooleanArgs_keys = Core.Name "keys"
-data WhereArgs =
-  WhereArgsPredicate WhereWithPredicateArgs |
-  WhereArgsString StringArgument |
-  WhereArgsTraversal NestedTraversal
-  deriving (Eq, Ord, Read, Show)
-_WhereArgs = Core.Name "hydra.tinkerpop.gremlin.WhereArgs"
-_WhereArgs_predicate = Core.Name "predicate"
-_WhereArgs_string = Core.Name "string"
-_WhereArgs_traversal = Core.Name "traversal"
-data WhereWithPredicateArgs =
-  WhereWithPredicateArgs {
-    whereWithPredicateArgsLeftArg :: (Maybe StringArgument),
-    whereWithPredicateArgsPredicate :: TraversalPredicate}
-  deriving (Eq, Ord, Read, Show)
-_WhereWithPredicateArgs = Core.Name "hydra.tinkerpop.gremlin.WhereWithPredicateArgs"
-_WhereWithPredicateArgs_leftArg = Core.Name "leftArg"
-_WhereWithPredicateArgs_predicate = Core.Name "predicate"
-data WithArgs =
-  WithArgs {
-    withArgsKeys :: WithArgsKeys,
-    withArgsValues :: (Maybe WithArgsValues)}
-  deriving (Eq, Ord, Read, Show)
-_WithArgs = Core.Name "hydra.tinkerpop.gremlin.WithArgs"
-_WithArgs_keys = Core.Name "keys"
-_WithArgs_values = Core.Name "values"
-data WithArgsKeys =
-  WithArgsKeysWithOption WithOptionKeys |
-  WithArgsKeysString StringArgument
-  deriving (Eq, Ord, Read, Show)
-_WithArgsKeys = Core.Name "hydra.tinkerpop.gremlin.WithArgsKeys"
-_WithArgsKeys_withOption = Core.Name "withOption"
-_WithArgsKeys_string = Core.Name "string"
-data WithArgsValues =
-  WithArgsValuesWithOptions WithOptionsValues |
-  WithArgsValuesIo IoOptionsValues |
-  WithArgsValuesObject GenericLiteralArgument
-  deriving (Eq, Ord, Read, Show)
-_WithArgsValues = Core.Name "hydra.tinkerpop.gremlin.WithArgsValues"
-_WithArgsValues_withOptions = Core.Name "withOptions"
-_WithArgsValues_io = Core.Name "io"
-_WithArgsValues_object = Core.Name "object"
-data WithOptionKeys =
-  WithOptionKeysShortestPath ShortestPathConstants |
-  WithOptionKeysConnectedComponent ConnectedComponentConstants |
-  WithOptionKeysPageRank PageRankConstants |
-  WithOptionKeysPeerPressure PeerPressureConstants |
-  WithOptionKeysIo IoOptionsKeys |
-  WithOptionKeysWithOptionsTokens |
-  WithOptionKeysWithOptionsIndexer
-  deriving (Eq, Ord, Read, Show)
-_WithOptionKeys = Core.Name "hydra.tinkerpop.gremlin.WithOptionKeys"
-_WithOptionKeys_shortestPath = Core.Name "shortestPath"
-_WithOptionKeys_connectedComponent = Core.Name "connectedComponent"
-_WithOptionKeys_pageRank = Core.Name "pageRank"
-_WithOptionKeys_peerPressure = Core.Name "peerPressure"
-_WithOptionKeys_io = Core.Name "io"
-_WithOptionKeys_withOptionsTokens = Core.Name "withOptionsTokens"
-_WithOptionKeys_withOptionsIndexer = Core.Name "withOptionsIndexer"
-data WithOptionsValues =
-  WithOptionsValuesTokens |
-  WithOptionsValuesNone |
-  WithOptionsValuesIds |
-  WithOptionsValuesLabels |
-  WithOptionsValuesKeys |
-  WithOptionsValuesValues |
-  WithOptionsValuesAll |
-  WithOptionsValuesList |
-  WithOptionsValuesMap
-  deriving (Eq, Ord, Read, Show)
-_WithOptionsValues = Core.Name "hydra.tinkerpop.gremlin.WithOptionsValues"
-_WithOptionsValues_tokens = Core.Name "tokens"
-_WithOptionsValues_none = Core.Name "none"
-_WithOptionsValues_ids = Core.Name "ids"
-_WithOptionsValues_labels = Core.Name "labels"
-_WithOptionsValues_keys = Core.Name "keys"
-_WithOptionsValues_values = Core.Name "values"
-_WithOptionsValues_all = Core.Name "all"
-_WithOptionsValues_list = Core.Name "list"
-_WithOptionsValues_map = Core.Name "map"
-data WithSackArgs =
-  WithSackArgs {
-    withSackArgsInitialValue :: GenericLiteralArgument,
-    withSackArgsBiFunction :: (Maybe TraversalBiFunctionArgument)}
-  deriving (Eq, Ord, Read, Show)
-_WithSackArgs = Core.Name "hydra.tinkerpop.gremlin.WithSackArgs"
-_WithSackArgs_initialValue = Core.Name "initialValue"
+
+-- | A Gremlin model, based on the Apache TinkerPop Gremlin ANTLR grammar (version 3.8.1). This is a streamlined model: it preserves the semantics of the grammar (steps, predicates, arguments, literals) while collapsing pure parser-production artifacts (single-use 'XAndY'/'XOrY' glue types and left-recursion 'rest' continuations) so that the representation maps cleanly onto TinkerPop's native traversal model.
+
+module Hydra.Tinkerpop.Gremlin where
+
+import qualified Hydra.Core as Core
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
+import qualified Data.Scientific as Sci
+import qualified Data.Int as I
+
+-- | The arguments of a Gremlin as() step
+data AsArgs =
+  AsArgs {
+    asArgsFirst :: StringArgument,
+    asArgsRest :: [StringNullableArgument]}
+  deriving (Eq, Ord, Read, Show)
+
+_AsArgs = Core.Name "hydra.tinkerpop.gremlin.AsArgs"
+
+_AsArgs_first = Core.Name "first"
+
+_AsArgs_rest = Core.Name "rest"
+
+-- | The arguments of a Gremlin barrier() step
+data BarrierArgs =
+  BarrierArgsConsumer TraversalSackMethodArgument |
+  BarrierArgsInt IntegerArgument
+  deriving (Eq, Ord, Read, Show)
+
+_BarrierArgs = Core.Name "hydra.tinkerpop.gremlin.BarrierArgs"
+
+_BarrierArgs_consumer = Core.Name "consumer"
+
+_BarrierArgs_int = Core.Name "int"
+
+-- | A Gremlin boolean argument: a literal value or a bound variable
+data BooleanArgument =
+  BooleanArgumentValue Bool |
+  BooleanArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_BooleanArgument = Core.Name "hydra.tinkerpop.gremlin.BooleanArgument"
+
+_BooleanArgument_value = Core.Name "value"
+
+_BooleanArgument_variable = Core.Name "variable"
+
+-- | The arguments of a Gremlin by() modulator
+data ByArgs =
+  ByArgsOrder TraversalOrderArgument |
+  ByArgsToken TraversalTokenArgument |
+  ByArgsOther ByOtherArgs
+  deriving (Eq, Ord, Read, Show)
+
+_ByArgs = Core.Name "hydra.tinkerpop.gremlin.ByArgs"
+
+_ByArgs_order = Core.Name "order"
+
+_ByArgs_token = Core.Name "token"
+
+_ByArgs_other = Core.Name "other"
+
+-- | The arguments of a Gremlin by() modulator taking another traversal or comparator
+data ByOtherArgs =
+  ByOtherArgsComparator (Maybe TraversalComparatorArgument) |
+  ByOtherArgsFunction TraversalFunctionArgument |
+  ByOtherArgsString StringArgument |
+  ByOtherArgsTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_ByOtherArgs = Core.Name "hydra.tinkerpop.gremlin.ByOtherArgs"
+
+_ByOtherArgs_comparator = Core.Name "comparator"
+
+_ByOtherArgs_function = Core.Name "function"
+
+_ByOtherArgs_string = Core.Name "string"
+
+_ByOtherArgs_traversal = Core.Name "traversal"
+
+-- | A cardinality value together with a property map, as used in a merge step
+data CardinalityAndMap =
+  CardinalityAndMap {
+    cardinalityAndMapCardinality :: TraversalCardinalityArgument,
+    cardinalityAndMapObject :: GenericLiteralMapNullableArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_CardinalityAndMap = Core.Name "hydra.tinkerpop.gremlin.CardinalityAndMap"
+
+_CardinalityAndMap_cardinality = Core.Name "cardinality"
+
+_CardinalityAndMap_object = Core.Name "object"
+
+-- | A cardinality value together with key-value object pairs, as used in a property() step
+data CardinalityAndObjects =
+  CardinalityAndObjects {
+    cardinalityAndObjectsCardinality :: TraversalCardinalityArgument,
+    cardinalityAndObjectsObjects :: [GenericLiteralArgument]}
+  deriving (Eq, Ord, Read, Show)
+
+_CardinalityAndObjects = Core.Name "hydra.tinkerpop.gremlin.CardinalityAndObjects"
+
+_CardinalityAndObjects_cardinality = Core.Name "cardinality"
+
+_CardinalityAndObjects_objects = Core.Name "objects"
+
+-- | A Gremlin traversal expressed as a chain of method calls
+newtype ChainedTraversal =
+  ChainedTraversal {
+    unChainedTraversal :: [TraversalMethod]}
+  deriving (Eq, Ord, Read, Show)
+
+_ChainedTraversal = Core.Name "hydra.tinkerpop.gremlin.ChainedTraversal"
+
+-- | The arguments of a Gremlin choose() step
+data ChooseArgs =
+  ChooseArgsFunction TraversalFunctionArgument |
+  ChooseArgsPredicateTraversal PredicateOrTraversalChoice |
+  ChooseArgsTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_ChooseArgs = Core.Name "hydra.tinkerpop.gremlin.ChooseArgs"
+
+_ChooseArgs_function = Core.Name "function"
+
+_ChooseArgs_predicateTraversal = Core.Name "predicateTraversal"
+
+_ChooseArgs_traversal = Core.Name "traversal"
+
+-- | The arguments of a Gremlin concat() step
+data ConcatArgs =
+  ConcatArgsTraversal [NestedTraversal] |
+  ConcatArgsString [StringNullableArgument]
+  deriving (Eq, Ord, Read, Show)
+
+_ConcatArgs = Core.Name "hydra.tinkerpop.gremlin.ConcatArgs"
+
+_ConcatArgs_traversal = Core.Name "traversal"
+
+_ConcatArgs_string = Core.Name "string"
+
+-- | A Gremlin configuration map
+data Configuration =
+  Configuration {
+    configurationKey :: KeywordOrIdentifier,
+    configurationValue :: GenericLiteralArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_Configuration = Core.Name "hydra.tinkerpop.gremlin.Configuration"
+
+_Configuration_key = Core.Name "key"
+
+_Configuration_value = Core.Name "value"
+
+-- | The named constants used by the Gremlin connectedComponent() step
+data ConnectedComponentConstants =
+  ConnectedComponentConstantsComponent |
+  ConnectedComponentConstantsEdges |
+  ConnectedComponentConstantsPropertyName
+  deriving (Eq, Ord, Read, Show)
+
+_ConnectedComponentConstants = Core.Name "hydra.tinkerpop.gremlin.ConnectedComponentConstants"
+
+_ConnectedComponentConstants_component = Core.Name "component"
+
+_ConnectedComponentConstants_edges = Core.Name "edges"
+
+_ConnectedComponentConstants_propertyName = Core.Name "propertyName"
+
+-- | The arguments of a Gremlin dateAdd() step
+data DateAddArgs =
+  DateAddArgs {
+    dateAddArgsUnit :: TraversalDTArgument,
+    dateAddArgsDuration :: IntegerArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_DateAddArgs = Core.Name "hydra.tinkerpop.gremlin.DateAddArgs"
+
+_DateAddArgs_unit = Core.Name "unit"
+
+_DateAddArgs_duration = Core.Name "duration"
+
+-- | A Gremlin date argument: a literal value or a bound variable
+data DateArgument =
+  DateArgumentValue DateLiteral |
+  DateArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_DateArgument = Core.Name "hydra.tinkerpop.gremlin.DateArgument"
+
+_DateArgument_value = Core.Name "value"
+
+_DateArgument_variable = Core.Name "variable"
+
+-- | The arguments of a Gremlin dateDiff() step
+data DateDiffArgs =
+  DateDiffArgsTraversal NestedTraversal |
+  DateDiffArgsDate DateArgument
+  deriving (Eq, Ord, Read, Show)
+
+_DateDiffArgs = Core.Name "hydra.tinkerpop.gremlin.DateDiffArgs"
+
+_DateDiffArgs_traversal = Core.Name "traversal"
+
+_DateDiffArgs_date = Core.Name "date"
+
+-- | A Gremlin date literal
+newtype DateLiteral =
+  DateLiteral {
+    unDateLiteral :: (Maybe StringArgument)}
+  deriving (Eq, Ord, Read, Show)
+
+_DateLiteral = Core.Name "hydra.tinkerpop.gremlin.DateLiteral"
+
+-- | The arguments of a Gremlin dedup() step
+data DedupArgs =
+  DedupArgsScopeString ScopeStringArgs |
+  DedupArgsString [StringNullableArgument]
+  deriving (Eq, Ord, Read, Show)
+
+_DedupArgs = Core.Name "hydra.tinkerpop.gremlin.DedupArgs"
+
+_DedupArgs_scopeString = Core.Name "scopeString"
+
+_DedupArgs_string = Core.Name "string"
+
+-- | A direction argument together with a variadic list of further arguments
+data DirectionAndVarargs =
+  DirectionAndVarargs {
+    directionAndVarargsDirection :: TraversalDirectionArgument,
+    directionAndVarargsVarargs :: [StringNullableArgument]}
+  deriving (Eq, Ord, Read, Show)
+
+_DirectionAndVarargs = Core.Name "hydra.tinkerpop.gremlin.DirectionAndVarargs"
+
+_DirectionAndVarargs_direction = Core.Name "direction"
+
+_DirectionAndVarargs_varargs = Core.Name "varargs"
+
+-- | A Gremlin floating-point argument: a literal value or a bound variable
+data FloatArgument =
+  FloatArgumentValue FloatLiteral |
+  FloatArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_FloatArgument = Core.Name "hydra.tinkerpop.gremlin.FloatArgument"
+
+_FloatArgument_value = Core.Name "value"
+
+_FloatArgument_variable = Core.Name "variable"
+
+-- | A Gremlin floating-point literal
+data FloatLiteral =
+  FloatLiteralFloat Float |
+  FloatLiteralDouble Double |
+  FloatLiteralBig Sci.Scientific
+  deriving (Eq, Ord, Read, Show)
+
+_FloatLiteral = Core.Name "hydra.tinkerpop.gremlin.FloatLiteral"
+
+_FloatLiteral_float = Core.Name "float"
+
+_FloatLiteral_double = Core.Name "double"
+
+_FloatLiteral_big = Core.Name "big"
+
+-- | The arguments of a Gremlin fold() step
+data FoldArgs =
+  FoldArgs {
+    foldArgsSeed :: GenericLiteralArgument,
+    foldArgsBiFunction :: TraversalBiFunctionArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_FoldArgs = Core.Name "hydra.tinkerpop.gremlin.FoldArgs"
+
+_FoldArgs_seed = Core.Name "seed"
+
+_FoldArgs_biFunction = Core.Name "biFunction"
+
+-- | The arguments of a Gremlin from() modulator
+data FromArgs =
+  FromArgsString StringArgument |
+  FromArgsVertex StructureVertexArgument |
+  FromArgsTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_FromArgs = Core.Name "hydra.tinkerpop.gremlin.FromArgs"
+
+_FromArgs_string = Core.Name "string"
+
+_FromArgs_vertex = Core.Name "vertex"
+
+_FromArgs_traversal = Core.Name "traversal"
+
+-- | A Gremlin generic literal: any of the supported literal forms
+data GenericLiteral =
+  GenericLiteralNumeric NumericLiteral |
+  GenericLiteralBoolean Bool |
+  GenericLiteralString String |
+  GenericLiteralDate DateLiteral |
+  GenericLiteralNull |
+  GenericLiteralNan |
+  GenericLiteralInf |
+  GenericLiteralTraversalToken TraversalToken |
+  GenericLiteralTraversalCardinality TraversalCardinality |
+  GenericLiteralTraversalDirection TraversalDirection |
+  GenericLiteralTraversalMerge TraversalMerge |
+  GenericLiteralTraversalPick TraversalPick |
+  GenericLiteralTraversalDT TraversalDT |
+  GenericLiteralTraversalGType TraversalGType |
+  GenericLiteralStructureVertex StructureVertex |
+  GenericLiteralGenericLiteralSet GenericLiteralSet |
+  GenericLiteralGenericLiteralCollection GenericLiteralCollection |
+  GenericLiteralGenericLiteralRange GenericLiteralRange |
+  GenericLiteralNestedTraversal NestedTraversal |
+  GenericLiteralTerminatedTraversal TerminatedTraversal |
+  GenericLiteralGenericLiteralMap GenericLiteralMap
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteral = Core.Name "hydra.tinkerpop.gremlin.GenericLiteral"
+
+_GenericLiteral_numeric = Core.Name "numeric"
+
+_GenericLiteral_boolean = Core.Name "boolean"
+
+_GenericLiteral_string = Core.Name "string"
+
+_GenericLiteral_date = Core.Name "date"
+
+_GenericLiteral_null = Core.Name "null"
+
+_GenericLiteral_nan = Core.Name "nan"
+
+_GenericLiteral_inf = Core.Name "inf"
+
+_GenericLiteral_traversalToken = Core.Name "traversalToken"
+
+_GenericLiteral_traversalCardinality = Core.Name "traversalCardinality"
+
+_GenericLiteral_traversalDirection = Core.Name "traversalDirection"
+
+_GenericLiteral_traversalMerge = Core.Name "traversalMerge"
+
+_GenericLiteral_traversalPick = Core.Name "traversalPick"
+
+_GenericLiteral_traversalDT = Core.Name "traversalDT"
+
+_GenericLiteral_traversalGType = Core.Name "traversalGType"
+
+_GenericLiteral_structureVertex = Core.Name "structureVertex"
+
+_GenericLiteral_genericLiteralSet = Core.Name "genericLiteralSet"
+
+_GenericLiteral_genericLiteralCollection = Core.Name "genericLiteralCollection"
+
+_GenericLiteral_genericLiteralRange = Core.Name "genericLiteralRange"
+
+_GenericLiteral_nestedTraversal = Core.Name "nestedTraversal"
+
+_GenericLiteral_terminatedTraversal = Core.Name "terminatedTraversal"
+
+_GenericLiteral_genericLiteralMap = Core.Name "genericLiteralMap"
+
+-- | A Gremlin generic-literal argument: a literal value or a bound variable
+data GenericLiteralArgument =
+  GenericLiteralArgumentValue GenericLiteral |
+  GenericLiteralArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralArgument = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralArgument"
+
+_GenericLiteralArgument_value = Core.Name "value"
+
+_GenericLiteralArgument_variable = Core.Name "variable"
+
+-- | A Gremlin literal collection: a list, set, or map literal
+newtype GenericLiteralCollection =
+  GenericLiteralCollection {
+    unGenericLiteralCollection :: [GenericLiteral]}
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralCollection = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralCollection"
+
+-- | A Gremlin list literal
+newtype GenericLiteralList =
+  GenericLiteralList {
+    unGenericLiteralList :: [GenericLiteral]}
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralList = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralList"
+
+-- | A Gremlin list-literal argument: a literal value or a bound variable
+data GenericLiteralListArgument =
+  GenericLiteralListArgumentValue GenericLiteralList |
+  GenericLiteralListArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralListArgument = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralListArgument"
+
+_GenericLiteralListArgument_value = Core.Name "value"
+
+_GenericLiteralListArgument_variable = Core.Name "variable"
+
+-- | A Gremlin map literal
+newtype GenericLiteralMap =
+  GenericLiteralMap {
+    unGenericLiteralMap :: [MapEntry]}
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralMap = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralMap"
+
+-- | A Gremlin map-literal argument: a literal value or a bound variable
+data GenericLiteralMapArgument =
+  GenericLiteralMapArgumentValue GenericLiteralMap |
+  GenericLiteralMapArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralMapArgument = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralMapArgument"
+
+_GenericLiteralMapArgument_value = Core.Name "value"
+
+_GenericLiteralMapArgument_variable = Core.Name "variable"
+
+-- | A Gremlin optional map-literal argument: a literal value, a bound variable, or null
+data GenericLiteralMapNullableArgument =
+  GenericLiteralMapNullableArgumentValue (Maybe GenericLiteralMap) |
+  GenericLiteralMapNullableArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralMapNullableArgument = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralMapNullableArgument"
+
+_GenericLiteralMapNullableArgument_value = Core.Name "value"
+
+_GenericLiteralMapNullableArgument_variable = Core.Name "variable"
+
+-- | A Gremlin literal range expression
+data GenericLiteralRange =
+  GenericLiteralRangeInteger IntegerRange |
+  GenericLiteralRangeString StringRange
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralRange = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralRange"
+
+_GenericLiteralRange_integer = Core.Name "integer"
+
+_GenericLiteralRange_string = Core.Name "string"
+
+-- | A Gremlin set literal
+newtype GenericLiteralSet =
+  GenericLiteralSet {
+    unGenericLiteralSet :: [GenericLiteral]}
+  deriving (Eq, Ord, Read, Show)
+
+_GenericLiteralSet = Core.Name "hydra.tinkerpop.gremlin.GenericLiteralSet"
+
+-- | The arguments of a Gremlin has() step
+data HasArgs =
+  HasArgsString HasArgsWithKey |
+  HasArgsTraversalToken HasArgsWithToken
+  deriving (Eq, Ord, Read, Show)
+
+_HasArgs = Core.Name "hydra.tinkerpop.gremlin.HasArgs"
+
+_HasArgs_string = Core.Name "string"
+
+_HasArgs_traversalToken = Core.Name "traversalToken"
+
+-- | The arguments of a Gremlin has() step qualified by a property key
+data HasArgsWithKey =
+  HasArgsWithKey {
+    hasArgsWithKeyKey :: StringNullableArgument,
+    hasArgsWithKeyValue :: (Maybe HasValueClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_HasArgsWithKey = Core.Name "hydra.tinkerpop.gremlin.HasArgsWithKey"
+
+_HasArgsWithKey_key = Core.Name "key"
+
+_HasArgsWithKey_value = Core.Name "value"
+
+-- | The arguments of a Gremlin has() step qualified by a traversal token
+data HasArgsWithToken =
+  HasArgsWithToken {
+    hasArgsWithTokenToken :: TraversalTokenArgument,
+    hasArgsWithTokenValue :: HasValueClause}
+  deriving (Eq, Ord, Read, Show)
+
+_HasArgsWithToken = Core.Name "hydra.tinkerpop.gremlin.HasArgsWithToken"
+
+_HasArgsWithToken_token = Core.Name "token"
+
+_HasArgsWithToken_value = Core.Name "value"
+
+-- | The value-matching clause of a Gremlin has() step
+data HasValueClause =
+  HasValueClauseObject GenericLiteralArgument |
+  HasValueClausePredicate TraversalPredicate |
+  HasValueClauseTraversal NestedTraversal |
+  HasValueClauseKeyObject StringKeyAndObject |
+  HasValueClauseKeyPredicate StringKeyAndPredicate
+  deriving (Eq, Ord, Read, Show)
+
+_HasValueClause = Core.Name "hydra.tinkerpop.gremlin.HasValueClause"
+
+_HasValueClause_object = Core.Name "object"
+
+_HasValueClause_predicate = Core.Name "predicate"
+
+_HasValueClause_traversal = Core.Name "traversal"
+
+_HasValueClause_keyObject = Core.Name "keyObject"
+
+_HasValueClause_keyPredicate = Core.Name "keyPredicate"
+
+-- | A Gremlin identifier
+newtype Identifier =
+  Identifier {
+    unIdentifier :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_Identifier = Core.Name "hydra.tinkerpop.gremlin.Identifier"
+
+-- | A Gremlin integer argument: a literal value or a bound variable
+data IntegerArgument =
+  IntegerArgumentValue IntegerLiteral |
+  IntegerArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_IntegerArgument = Core.Name "hydra.tinkerpop.gremlin.IntegerArgument"
+
+_IntegerArgument_value = Core.Name "value"
+
+_IntegerArgument_variable = Core.Name "variable"
+
+-- | A Gremlin integer literal
+data IntegerLiteral =
+  IntegerLiteralByte I.Int8 |
+  IntegerLiteralShort I.Int16 |
+  IntegerLiteralInt Int |
+  IntegerLiteralLong I.Int64 |
+  IntegerLiteralBig Integer
+  deriving (Eq, Ord, Read, Show)
+
+_IntegerLiteral = Core.Name "hydra.tinkerpop.gremlin.IntegerLiteral"
+
+_IntegerLiteral_byte = Core.Name "byte"
+
+_IntegerLiteral_short = Core.Name "short"
+
+_IntegerLiteral_int = Core.Name "int"
+
+_IntegerLiteral_long = Core.Name "long"
+
+_IntegerLiteral_big = Core.Name "big"
+
+-- | A Gremlin integer range expression
+data IntegerRange =
+  IntegerRange {
+    integerRangeLeft :: IntegerLiteral,
+    integerRangeRight :: IntegerLiteral}
+  deriving (Eq, Ord, Read, Show)
+
+_IntegerRange = Core.Name "hydra.tinkerpop.gremlin.IntegerRange"
+
+_IntegerRange_left = Core.Name "left"
+
+_IntegerRange_right = Core.Name "right"
+
+-- | The named keys accepted by a Gremlin io() step's options
+data IoOptionsKeys =
+  IoOptionsKeysReader |
+  IoOptionsKeysWriter
+  deriving (Eq, Ord, Read, Show)
+
+_IoOptionsKeys = Core.Name "hydra.tinkerpop.gremlin.IoOptionsKeys"
+
+_IoOptionsKeys_reader = Core.Name "reader"
+
+_IoOptionsKeys_writer = Core.Name "writer"
+
+-- | The named values accepted by a Gremlin io() step's options
+data IoOptionsValues =
+  IoOptionsValuesGryo |
+  IoOptionsValuesGraphson |
+  IoOptionsValuesGraphml
+  deriving (Eq, Ord, Read, Show)
+
+_IoOptionsValues = Core.Name "hydra.tinkerpop.gremlin.IoOptionsValues"
+
+_IoOptionsValues_gryo = Core.Name "gryo"
+
+_IoOptionsValues_graphson = Core.Name "graphson"
+
+_IoOptionsValues_graphml = Core.Name "graphml"
+
+-- | A reserved Gremlin keyword
+data Keyword =
+  KeywordEdges |
+  KeywordKeys |
+  KeywordNew |
+  KeywordValues
+  deriving (Eq, Ord, Read, Show)
+
+_Keyword = Core.Name "hydra.tinkerpop.gremlin.Keyword"
+
+_Keyword_edges = Core.Name "edges"
+
+_Keyword_keys = Core.Name "keys"
+
+_Keyword_new = Core.Name "new"
+
+_Keyword_values = Core.Name "values"
+
+-- | A Gremlin keyword or a plain identifier
+data KeywordOrIdentifier =
+  KeywordOrIdentifierKeyword Keyword |
+  KeywordOrIdentifierIdentifier Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_KeywordOrIdentifier = Core.Name "hydra.tinkerpop.gremlin.KeywordOrIdentifier"
+
+_KeywordOrIdentifier_keyword = Core.Name "keyword"
+
+_KeywordOrIdentifier_identifier = Core.Name "identifier"
+
+-- | A key-value entry in a Gremlin map literal
+data MapEntry =
+  MapEntryKey MapKey |
+  MapEntryValue GenericLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_MapEntry = Core.Name "hydra.tinkerpop.gremlin.MapEntry"
+
+_MapEntry_key = Core.Name "key"
+
+_MapEntry_value = Core.Name "value"
+
+-- | The key of a Gremlin map entry
+data MapKey =
+  MapKeyString String |
+  MapKeyNumeric NumericLiteral |
+  MapKeyTraversalToken TraversalToken |
+  MapKeyTraversalDirection TraversalDirection |
+  MapKeySet GenericLiteralSet |
+  MapKeyCollection GenericLiteralCollection |
+  MapKeyMap GenericLiteralMap |
+  MapKeyKeyword Keyword |
+  MapKeyIdentifier Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_MapKey = Core.Name "hydra.tinkerpop.gremlin.MapKey"
+
+_MapKey_string = Core.Name "string"
+
+_MapKey_numeric = Core.Name "numeric"
+
+_MapKey_traversalToken = Core.Name "traversalToken"
+
+_MapKey_traversalDirection = Core.Name "traversalDirection"
+
+_MapKey_set = Core.Name "set"
+
+_MapKey_collection = Core.Name "collection"
+
+_MapKey_map = Core.Name "map"
+
+_MapKey_keyword = Core.Name "keyword"
+
+_MapKey_identifier = Core.Name "identifier"
+
+-- | The arguments of a Gremlin mergeV()/mergeE() step
+data MergeArgs =
+  MergeArgsMap GenericLiteralMapNullableArgument |
+  MergeArgsTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_MergeArgs = Core.Name "hydra.tinkerpop.gremlin.MergeArgs"
+
+_MergeArgs_map = Core.Name "map"
+
+_MergeArgs_traversal = Core.Name "traversal"
+
+-- | A merge option expressed as a map
+data MergeMapOption =
+  MergeMapOption {
+    mergeMapOptionMerge :: TraversalMergeArgument,
+    mergeMapOptionMap :: GenericLiteralMapNullableArgument,
+    mergeMapOptionCardinality :: (Maybe TraversalCardinality)}
+  deriving (Eq, Ord, Read, Show)
+
+_MergeMapOption = Core.Name "hydra.tinkerpop.gremlin.MergeMapOption"
+
+_MergeMapOption_merge = Core.Name "merge"
+
+_MergeMapOption_map = Core.Name "map"
+
+_MergeMapOption_cardinality = Core.Name "cardinality"
+
+-- | A merge option expressed as a nested traversal
+data MergeTraversalOption =
+  MergeTraversalOption {
+    mergeTraversalOptionMerge :: TraversalMergeArgument,
+    mergeTraversalOptionTraversal :: NestedTraversal}
+  deriving (Eq, Ord, Read, Show)
+
+_MergeTraversalOption = Core.Name "hydra.tinkerpop.gremlin.MergeTraversalOption"
+
+_MergeTraversalOption_merge = Core.Name "merge"
+
+_MergeTraversalOption_traversal = Core.Name "traversal"
+
+-- | A traversal nested within another traversal step's arguments
+data NestedTraversal =
+  NestedTraversalRoot RootTraversal |
+  NestedTraversalChained ChainedTraversal |
+  NestedTraversalAnonymous ChainedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_NestedTraversal = Core.Name "hydra.tinkerpop.gremlin.NestedTraversal"
+
+_NestedTraversal_root = Core.Name "root"
+
+_NestedTraversal_chained = Core.Name "chained"
+
+_NestedTraversal_anonymous = Core.Name "anonymous"
+
+-- | A Gremlin numeric argument: a literal value or a bound variable
+data NumericArgument =
+  NumericArgumentValue NumericLiteral |
+  NumericArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_NumericArgument = Core.Name "hydra.tinkerpop.gremlin.NumericArgument"
+
+_NumericArgument_value = Core.Name "value"
+
+_NumericArgument_variable = Core.Name "variable"
+
+-- | A Gremlin numeric literal: an integer or a float
+data NumericLiteral =
+  NumericLiteralInteger IntegerLiteral |
+  NumericLiteralFloat FloatLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_NumericLiteral = Core.Name "hydra.tinkerpop.gremlin.NumericLiteral"
+
+_NumericLiteral_integer = Core.Name "integer"
+
+_NumericLiteral_float = Core.Name "float"
+
+-- | An object argument together with a nested traversal
+data ObjectAndTraversal =
+  ObjectAndTraversal {
+    objectAndTraversalObject :: GenericLiteralArgument,
+    objectAndTraversalTraversal :: NestedTraversal}
+  deriving (Eq, Ord, Read, Show)
+
+_ObjectAndTraversal = Core.Name "hydra.tinkerpop.gremlin.ObjectAndTraversal"
+
+_ObjectAndTraversal_object = Core.Name "object"
+
+_ObjectAndTraversal_traversal = Core.Name "traversal"
+
+-- | The arguments of a Gremlin option() step
+data OptionArgs =
+  OptionArgsPredicateTraversal PredicateAndTraversal |
+  OptionArgsMergeMap MergeMapOption |
+  OptionArgsMergeTraversal MergeTraversalOption |
+  OptionArgsObjectTraversal ObjectAndTraversal |
+  OptionArgsTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_OptionArgs = Core.Name "hydra.tinkerpop.gremlin.OptionArgs"
+
+_OptionArgs_predicateTraversal = Core.Name "predicateTraversal"
+
+_OptionArgs_mergeMap = Core.Name "mergeMap"
+
+_OptionArgs_mergeTraversal = Core.Name "mergeTraversal"
+
+_OptionArgs_objectTraversal = Core.Name "objectTraversal"
+
+_OptionArgs_traversal = Core.Name "traversal"
+
+-- | The named constants used by the Gremlin pageRank() step
+data PageRankConstants =
+  PageRankConstantsEdges |
+  PageRankConstantsTimes |
+  PageRankConstantsPropertyName
+  deriving (Eq, Ord, Read, Show)
+
+_PageRankConstants = Core.Name "hydra.tinkerpop.gremlin.PageRankConstants"
+
+_PageRankConstants_edges = Core.Name "edges"
+
+_PageRankConstants_times = Core.Name "times"
+
+_PageRankConstants_propertyName = Core.Name "propertyName"
+
+-- | The named constants used by the Gremlin peerPressure() step
+data PeerPressureConstants =
+  PeerPressureConstantsEdges |
+  PeerPressureConstantsTimes |
+  PeerPressureConstantsPropertyName
+  deriving (Eq, Ord, Read, Show)
+
+_PeerPressureConstants = Core.Name "hydra.tinkerpop.gremlin.PeerPressureConstants"
+
+_PeerPressureConstants_edges = Core.Name "edges"
+
+_PeerPressureConstants_times = Core.Name "times"
+
+_PeerPressureConstants_propertyName = Core.Name "propertyName"
+
+-- | A Pop value together with a nested traversal
+data PopAndTraversal =
+  PopAndTraversal {
+    popAndTraversalPop :: TraversalPopArgument,
+    popAndTraversalTraversal :: NestedTraversal}
+  deriving (Eq, Ord, Read, Show)
+
+_PopAndTraversal = Core.Name "hydra.tinkerpop.gremlin.PopAndTraversal"
+
+_PopAndTraversal_pop = Core.Name "pop"
+
+_PopAndTraversal_traversal = Core.Name "traversal"
+
+-- | A predicate together with a nested traversal
+data PredicateAndTraversal =
+  PredicateAndTraversal {
+    predicateAndTraversalPredicate :: TraversalPredicate,
+    predicateAndTraversalTraversal :: NestedTraversal}
+  deriving (Eq, Ord, Read, Show)
+
+_PredicateAndTraversal = Core.Name "hydra.tinkerpop.gremlin.PredicateAndTraversal"
+
+_PredicateAndTraversal_predicate = Core.Name "predicate"
+
+_PredicateAndTraversal_traversal = Core.Name "traversal"
+
+-- | A traversal predicate or a plain object argument
+data PredicateOrObject =
+  PredicateOrObjectPredicate TraversalPredicate |
+  PredicateOrObjectObject GenericLiteralArgument
+  deriving (Eq, Ord, Read, Show)
+
+_PredicateOrObject = Core.Name "hydra.tinkerpop.gremlin.PredicateOrObject"
+
+_PredicateOrObject_predicate = Core.Name "predicate"
+
+_PredicateOrObject_object = Core.Name "object"
+
+-- | A traversal predicate or a variadic list of object arguments
+data PredicateOrObjects =
+  PredicateOrObjectsPredicate TraversalPredicate |
+  PredicateOrObjectsObjects [GenericLiteralArgument]
+  deriving (Eq, Ord, Read, Show)
+
+_PredicateOrObjects = Core.Name "hydra.tinkerpop.gremlin.PredicateOrObjects"
+
+_PredicateOrObjects_predicate = Core.Name "predicate"
+
+_PredicateOrObjects_objects = Core.Name "objects"
+
+-- | A traversal predicate or a variadic list of string arguments
+data PredicateOrStrings =
+  PredicateOrStringsPredicate TraversalPredicate |
+  PredicateOrStringsStrings [StringNullableArgument]
+  deriving (Eq, Ord, Read, Show)
+
+_PredicateOrStrings = Core.Name "hydra.tinkerpop.gremlin.PredicateOrStrings"
+
+_PredicateOrStrings_predicate = Core.Name "predicate"
+
+_PredicateOrStrings_strings = Core.Name "strings"
+
+-- | A traversal predicate or a nested traversal
+data PredicateOrTraversal =
+  PredicateOrTraversalPredicate TraversalPredicate |
+  PredicateOrTraversalTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_PredicateOrTraversal = Core.Name "hydra.tinkerpop.gremlin.PredicateOrTraversal"
+
+_PredicateOrTraversal_predicate = Core.Name "predicate"
+
+_PredicateOrTraversal_traversal = Core.Name "traversal"
+
+-- | A choice between a traversal predicate and a nested traversal, used in filter steps
+data PredicateOrTraversalChoice =
+  PredicateOrTraversalChoice {
+    predicateOrTraversalChoicePredicate :: TraversalPredicate,
+    predicateOrTraversalChoiceTrue :: NestedTraversal,
+    predicateOrTraversalChoiceFalse :: (Maybe NestedTraversal)}
+  deriving (Eq, Ord, Read, Show)
+
+_PredicateOrTraversalChoice = Core.Name "hydra.tinkerpop.gremlin.PredicateOrTraversalChoice"
+
+_PredicateOrTraversalChoice_predicate = Core.Name "predicate"
+
+_PredicateOrTraversalChoice_true = Core.Name "true"
+
+_PredicateOrTraversalChoice_false = Core.Name "false"
+
+-- | The arguments of a Gremlin property() step
+data PropertyArgs =
+  PropertyArgsCardinalityObjects CardinalityAndObjects |
+  PropertyArgsObjects [GenericLiteralArgument] |
+  PropertyArgsObject GenericLiteralMapNullableArgument |
+  PropertyArgsCardinalityObject CardinalityAndMap
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyArgs = Core.Name "hydra.tinkerpop.gremlin.PropertyArgs"
+
+_PropertyArgs_cardinalityObjects = Core.Name "cardinalityObjects"
+
+_PropertyArgs_objects = Core.Name "objects"
+
+_PropertyArgs_object = Core.Name "object"
+
+_PropertyArgs_cardinalityObject = Core.Name "cardinalityObject"
+
+-- | A Gremlin query
+data Query =
+  QueryTraversalSource TraversalSourceQuery |
+  QueryRootTraversal RootTraversalQuery |
+  QueryToString |
+  QueryEmpty
+  deriving (Eq, Ord, Read, Show)
+
+_Query = Core.Name "hydra.tinkerpop.gremlin.Query"
+
+_Query_traversalSource = Core.Name "traversalSource"
+
+_Query_rootTraversal = Core.Name "rootTraversal"
+
+_Query_toString = Core.Name "toString"
+
+_Query_empty = Core.Name "empty"
+
+-- | A sequence of Gremlin queries
+newtype QueryList =
+  QueryList {
+    unQueryList :: [Query]}
+  deriving (Eq, Ord, Read, Show)
+
+_QueryList = Core.Name "hydra.tinkerpop.gremlin.QueryList"
+
+-- | The arguments of a Gremlin range() step
+data RangeArgs =
+  RangeArgs {
+    rangeArgsScope :: (Maybe TraversalScopeArgument),
+    rangeArgsMin :: IntegerArgument,
+    rangeArgsMax :: IntegerArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_RangeArgs = Core.Name "hydra.tinkerpop.gremlin.RangeArgs"
+
+_RangeArgs_scope = Core.Name "scope"
+
+_RangeArgs_min = Core.Name "min"
+
+_RangeArgs_max = Core.Name "max"
+
+-- | A Gremlin range-valued argument
+data RangeArgument =
+  RangeArgument {
+    rangeArgumentMin :: GenericLiteralArgument,
+    rangeArgumentMax :: GenericLiteralArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_RangeArgument = Core.Name "hydra.tinkerpop.gremlin.RangeArgument"
+
+_RangeArgument_min = Core.Name "min"
+
+_RangeArgument_max = Core.Name "max"
+
+-- | The arguments of a Gremlin repeat() step
+data RepeatArgs =
+  RepeatArgs {
+    repeatArgsString :: (Maybe StringArgument),
+    repeatArgsTraversal :: NestedTraversal}
+  deriving (Eq, Ord, Read, Show)
+
+_RepeatArgs = Core.Name "hydra.tinkerpop.gremlin.RepeatArgs"
+
+_RepeatArgs_string = Core.Name "string"
+
+_RepeatArgs_traversal = Core.Name "traversal"
+
+-- | The arguments of a Gremlin replace() step
+data ReplaceArgs =
+  ReplaceArgs {
+    replaceArgsScope :: (Maybe TraversalScopeArgument),
+    replaceArgsFrom :: StringNullableArgument,
+    replaceArgsTo :: StringNullableArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_ReplaceArgs = Core.Name "hydra.tinkerpop.gremlin.ReplaceArgs"
+
+_ReplaceArgs_scope = Core.Name "scope"
+
+_ReplaceArgs_from = Core.Name "from"
+
+_ReplaceArgs_to = Core.Name "to"
+
+-- | A Gremlin root-level traversal expression
+data RootTraversal =
+  RootTraversal {
+    rootTraversalSource :: TraversalSource,
+    rootTraversalSpawnMethod :: TraversalSourceSpawnMethod,
+    rootTraversalChained :: [TraversalMethod]}
+  deriving (Eq, Ord, Read, Show)
+
+_RootTraversal = Core.Name "hydra.tinkerpop.gremlin.RootTraversal"
+
+_RootTraversal_source = Core.Name "source"
+
+_RootTraversal_spawnMethod = Core.Name "spawnMethod"
+
+_RootTraversal_chained = Core.Name "chained"
+
+-- | A query rooted at a Gremlin traversal source
+data RootTraversalQuery =
+  RootTraversalQuery {
+    rootTraversalQueryRoot :: RootTraversal,
+    rootTraversalQueryTerminalMethod :: (Maybe TraversalTerminalMethod)}
+  deriving (Eq, Ord, Read, Show)
+
+_RootTraversalQuery = Core.Name "hydra.tinkerpop.gremlin.RootTraversalQuery"
+
+_RootTraversalQuery_root = Core.Name "root"
+
+_RootTraversalQuery_terminalMethod = Core.Name "terminalMethod"
+
+-- | The scope argument of a Gremlin sample() step
+data SampleByScope =
+  SampleByScope {
+    sampleByScopeScope :: (Maybe TraversalScopeArgument),
+    sampleByScopeInteger :: IntegerArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_SampleByScope = Core.Name "hydra.tinkerpop.gremlin.SampleByScope"
+
+_SampleByScope_scope = Core.Name "scope"
+
+_SampleByScope_integer = Core.Name "integer"
+
+-- | A Scope value together with an integer argument
+data ScopeAndInteger =
+  ScopeAndInteger {
+    scopeAndIntegerScope :: (Maybe TraversalScopeArgument),
+    scopeAndIntegerInteger :: IntegerArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_ScopeAndInteger = Core.Name "hydra.tinkerpop.gremlin.ScopeAndInteger"
+
+_ScopeAndInteger_scope = Core.Name "scope"
+
+_ScopeAndInteger_integer = Core.Name "integer"
+
+-- | A Scope value together with string arguments
+data ScopeStringArgs =
+  ScopeStringArgs {
+    scopeStringArgsScope :: TraversalScopeArgument,
+    scopeStringArgsStrings :: [StringNullableArgument]}
+  deriving (Eq, Ord, Read, Show)
+
+_ScopeStringArgs = Core.Name "hydra.tinkerpop.gremlin.ScopeStringArgs"
+
+_ScopeStringArgs_scope = Core.Name "scope"
+
+_ScopeStringArgs_strings = Core.Name "strings"
+
+-- | The arguments of a Gremlin select() step
+data SelectArgs =
+  SelectArgsColumn TraversalColumnArgument |
+  SelectArgsPopStrings SelectByKeys |
+  SelectArgsPopTraversal PopAndTraversal |
+  SelectArgsStrings [StringArgument] |
+  SelectArgsTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_SelectArgs = Core.Name "hydra.tinkerpop.gremlin.SelectArgs"
+
+_SelectArgs_column = Core.Name "column"
+
+_SelectArgs_popStrings = Core.Name "popStrings"
+
+_SelectArgs_popTraversal = Core.Name "popTraversal"
+
+_SelectArgs_strings = Core.Name "strings"
+
+_SelectArgs_traversal = Core.Name "traversal"
+
+-- | The keys selected by a Gremlin select() step
+data SelectByKeys =
+  SelectByKeys {
+    selectByKeysPop :: TraversalPopArgument,
+    selectByKeysKeys :: [StringArgument]}
+  deriving (Eq, Ord, Read, Show)
+
+_SelectByKeys = Core.Name "hydra.tinkerpop.gremlin.SelectByKeys"
+
+_SelectByKeys_pop = Core.Name "pop"
+
+_SelectByKeys_keys = Core.Name "keys"
+
+-- | The arguments of a Gremlin call() service invocation
+data ServiceArguments =
+  ServiceArgumentsMap (Maybe GenericLiteralMapArgument) |
+  ServiceArgumentsTraversal (Maybe NestedTraversal)
+  deriving (Eq, Ord, Read, Show)
+
+_ServiceArguments = Core.Name "hydra.tinkerpop.gremlin.ServiceArguments"
+
+_ServiceArguments_map = Core.Name "map"
+
+_ServiceArguments_traversal = Core.Name "traversal"
+
+-- | A Gremlin call() service invocation
+data ServiceCall =
+  ServiceCall {
+    serviceCallService :: StringArgument,
+    serviceCallArguments :: ServiceArguments}
+  deriving (Eq, Ord, Read, Show)
+
+_ServiceCall = Core.Name "hydra.tinkerpop.gremlin.ServiceCall"
+
+_ServiceCall_service = Core.Name "service"
+
+_ServiceCall_arguments = Core.Name "arguments"
+
+-- | The named constants used by the Gremlin shortestPath() step
+data ShortestPathConstants =
+  ShortestPathConstantsTarget |
+  ShortestPathConstantsEdges |
+  ShortestPathConstantsDistance |
+  ShortestPathConstantsMaxDistance |
+  ShortestPathConstantsIncludeEdges
+  deriving (Eq, Ord, Read, Show)
+
+_ShortestPathConstants = Core.Name "hydra.tinkerpop.gremlin.ShortestPathConstants"
+
+_ShortestPathConstants_target = Core.Name "target"
+
+_ShortestPathConstants_edges = Core.Name "edges"
+
+_ShortestPathConstants_distance = Core.Name "distance"
+
+_ShortestPathConstants_maxDistance = Core.Name "maxDistance"
+
+_ShortestPathConstants_includeEdges = Core.Name "includeEdges"
+
+-- | The arguments of a Gremlin split() step
+data SplitArgs =
+  SplitArgs {
+    splitArgsScope :: (Maybe TraversalScopeArgument),
+    splitArgsDelimiter :: StringNullableArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_SplitArgs = Core.Name "hydra.tinkerpop.gremlin.SplitArgs"
+
+_SplitArgs_scope = Core.Name "scope"
+
+_SplitArgs_delimiter = Core.Name "delimiter"
+
+-- | A string argument together with an object argument
+data StringAndObject =
+  StringAndObject {
+    stringAndObjectKey :: StringArgument,
+    stringAndObjectValue :: GenericLiteralArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_StringAndObject = Core.Name "hydra.tinkerpop.gremlin.StringAndObject"
+
+_StringAndObject_key = Core.Name "key"
+
+_StringAndObject_value = Core.Name "value"
+
+-- | A string argument together with an optional object argument
+data StringAndOptionalObject =
+  StringAndOptionalObject {
+    stringAndOptionalObjectKey :: StringArgument,
+    stringAndOptionalObjectValue :: (Maybe GenericLiteralArgument)}
+  deriving (Eq, Ord, Read, Show)
+
+_StringAndOptionalObject = Core.Name "hydra.tinkerpop.gremlin.StringAndOptionalObject"
+
+_StringAndOptionalObject_key = Core.Name "key"
+
+_StringAndOptionalObject_value = Core.Name "value"
+
+-- | A Gremlin string argument: a literal value or a bound variable
+data StringArgument =
+  StringArgumentValue String |
+  StringArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_StringArgument = Core.Name "hydra.tinkerpop.gremlin.StringArgument"
+
+_StringArgument_value = Core.Name "value"
+
+_StringArgument_variable = Core.Name "variable"
+
+-- | A string argument or a nested traversal
+data StringArgumentOrNestedTraversal =
+  StringArgumentOrNestedTraversalString StringArgument |
+  StringArgumentOrNestedTraversalTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_StringArgumentOrNestedTraversal = Core.Name "hydra.tinkerpop.gremlin.StringArgumentOrNestedTraversal"
+
+_StringArgumentOrNestedTraversal_string = Core.Name "string"
+
+_StringArgumentOrNestedTraversal_traversal = Core.Name "traversal"
+
+-- | A string key together with an object value
+data StringKeyAndObject =
+  StringKeyAndObject {
+    stringKeyAndObjectKey :: StringNullableArgument,
+    stringKeyAndObjectObject :: GenericLiteralArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_StringKeyAndObject = Core.Name "hydra.tinkerpop.gremlin.StringKeyAndObject"
+
+_StringKeyAndObject_key = Core.Name "key"
+
+_StringKeyAndObject_object = Core.Name "object"
+
+-- | A string key together with a traversal predicate
+data StringKeyAndPredicate =
+  StringKeyAndPredicate {
+    stringKeyAndPredicateKey :: StringNullableArgument,
+    stringKeyAndPredicatePredicate :: TraversalPredicate}
+  deriving (Eq, Ord, Read, Show)
+
+_StringKeyAndPredicate = Core.Name "hydra.tinkerpop.gremlin.StringKeyAndPredicate"
+
+_StringKeyAndPredicate_key = Core.Name "key"
+
+_StringKeyAndPredicate_predicate = Core.Name "predicate"
+
+-- | A Gremlin optional string argument: a literal value, a bound variable, or null
+data StringNullableArgument =
+  StringNullableArgumentValue (Maybe String) |
+  StringNullableArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_StringNullableArgument = Core.Name "hydra.tinkerpop.gremlin.StringNullableArgument"
+
+_StringNullableArgument_value = Core.Name "value"
+
+_StringNullableArgument_variable = Core.Name "variable"
+
+-- | A Gremlin string range expression
+data StringRange =
+  StringRange {
+    stringRangeLeft :: String,
+    stringRangeRight :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_StringRange = Core.Name "hydra.tinkerpop.gremlin.StringRange"
+
+_StringRange_left = Core.Name "left"
+
+_StringRange_right = Core.Name "right"
+
+-- | A Gremlin structure-level vertex reference
+data StructureVertex =
+  StructureVertex {
+    structureVertexNew :: Bool,
+    structureVertexId :: GenericLiteralArgument,
+    structureVertexLabel :: StringArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_StructureVertex = Core.Name "hydra.tinkerpop.gremlin.StructureVertex"
+
+_StructureVertex_new = Core.Name "new"
+
+_StructureVertex_id = Core.Name "id"
+
+_StructureVertex_label = Core.Name "label"
+
+-- | A Gremlin structure-vertex argument: a literal value or a bound variable
+data StructureVertexArgument =
+  StructureVertexArgumentValue StructureVertex |
+  StructureVertexArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_StructureVertexArgument = Core.Name "hydra.tinkerpop.gremlin.StructureVertexArgument"
+
+_StructureVertexArgument_value = Core.Name "value"
+
+_StructureVertexArgument_variable = Core.Name "variable"
+
+-- | The arguments of a Gremlin substring() step
+data SubstringArgs =
+  SubstringArgs {
+    substringArgsScope :: (Maybe TraversalScopeArgument),
+    substringArgsStart :: IntegerArgument,
+    substringArgsEnd :: (Maybe IntegerArgument)}
+  deriving (Eq, Ord, Read, Show)
+
+_SubstringArgs = Core.Name "hydra.tinkerpop.gremlin.SubstringArgs"
+
+_SubstringArgs_scope = Core.Name "scope"
+
+_SubstringArgs_start = Core.Name "start"
+
+_SubstringArgs_end = Core.Name "end"
+
+-- | The arguments of a Gremlin tail() step
+data TailArgs =
+  TailArgs {
+    tailArgsScope :: (Maybe TraversalScopeArgument),
+    tailArgsInteger :: (Maybe IntegerArgument)}
+  deriving (Eq, Ord, Read, Show)
+
+_TailArgs = Core.Name "hydra.tinkerpop.gremlin.TailArgs"
+
+_TailArgs_scope = Core.Name "scope"
+
+_TailArgs_integer = Core.Name "integer"
+
+-- | A Gremlin traversal terminated by a terminal method
+data TerminatedTraversal =
+  TerminatedTraversal {
+    terminatedTraversalRoot :: RootTraversal,
+    terminatedTraversalTerminal :: TraversalTerminalMethod}
+  deriving (Eq, Ord, Read, Show)
+
+_TerminatedTraversal = Core.Name "hydra.tinkerpop.gremlin.TerminatedTraversal"
+
+_TerminatedTraversal_root = Core.Name "root"
+
+_TerminatedTraversal_terminal = Core.Name "terminal"
+
+-- | The arguments of a Gremlin to() modulator
+data ToArgs =
+  ToArgsDirection DirectionAndVarargs |
+  ToArgsString StringArgument |
+  ToArgsVertex StructureVertexArgument |
+  ToArgsTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_ToArgs = Core.Name "hydra.tinkerpop.gremlin.ToArgs"
+
+_ToArgs_direction = Core.Name "direction"
+
+_ToArgs_string = Core.Name "string"
+
+_ToArgs_vertex = Core.Name "vertex"
+
+_ToArgs_traversal = Core.Name "traversal"
+
+-- | A single part of a Gremlin transaction statement
+data TransactionPart =
+  TransactionPartBegin |
+  TransactionPartCommit |
+  TransactionPartRollback
+  deriving (Eq, Ord, Read, Show)
+
+_TransactionPart = Core.Name "hydra.tinkerpop.gremlin.TransactionPart"
+
+_TransactionPart_begin = Core.Name "begin"
+
+_TransactionPart_commit = Core.Name "commit"
+
+_TransactionPart_rollback = Core.Name "rollback"
+
+-- | A Gremlin BiFunction argument: a named function or a bound variable
+data TraversalBiFunctionArgument =
+  TraversalBiFunctionArgumentValue TraversalOperator |
+  TraversalBiFunctionArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalBiFunctionArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalBiFunctionArgument"
+
+_TraversalBiFunctionArgument_value = Core.Name "value"
+
+_TraversalBiFunctionArgument_variable = Core.Name "variable"
+
+-- | A Gremlin property cardinality: single, list, or set
+data TraversalCardinality =
+  TraversalCardinalitySingle GenericLiteral |
+  TraversalCardinalitySet GenericLiteral |
+  TraversalCardinalityList GenericLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalCardinality = Core.Name "hydra.tinkerpop.gremlin.TraversalCardinality"
+
+_TraversalCardinality_single = Core.Name "single"
+
+_TraversalCardinality_set = Core.Name "set"
+
+_TraversalCardinality_list = Core.Name "list"
+
+-- | A Gremlin cardinality argument: a literal value or a bound variable
+data TraversalCardinalityArgument =
+  TraversalCardinalityArgumentValue TraversalCardinality |
+  TraversalCardinalityArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalCardinalityArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalCardinalityArgument"
+
+_TraversalCardinalityArgument_value = Core.Name "value"
+
+_TraversalCardinalityArgument_variable = Core.Name "variable"
+
+-- | A Gremlin traversal column selector: keys or values
+data TraversalColumn =
+  TraversalColumnKeys |
+  TraversalColumnValues
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalColumn = Core.Name "hydra.tinkerpop.gremlin.TraversalColumn"
+
+_TraversalColumn_keys = Core.Name "keys"
+
+_TraversalColumn_values = Core.Name "values"
+
+-- | A Gremlin column argument: a literal value or a bound variable
+data TraversalColumnArgument =
+  TraversalColumnArgumentValue TraversalColumn |
+  TraversalColumnArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalColumnArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalColumnArgument"
+
+_TraversalColumnArgument_value = Core.Name "value"
+
+_TraversalColumnArgument_variable = Core.Name "variable"
+
+-- | A Gremlin comparator argument: a named comparator or a bound variable
+data TraversalComparatorArgument =
+  TraversalComparatorArgumentValue TraversalOrder |
+  TraversalComparatorArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalComparatorArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalComparatorArgument"
+
+_TraversalComparatorArgument_value = Core.Name "value"
+
+_TraversalComparatorArgument_variable = Core.Name "variable"
+
+-- | A Gremlin date/time unit
+data TraversalDT =
+  TraversalDTSecond |
+  TraversalDTMinute |
+  TraversalDTHour |
+  TraversalDTDay
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalDT = Core.Name "hydra.tinkerpop.gremlin.TraversalDT"
+
+_TraversalDT_second = Core.Name "second"
+
+_TraversalDT_minute = Core.Name "minute"
+
+_TraversalDT_hour = Core.Name "hour"
+
+_TraversalDT_day = Core.Name "day"
+
+-- | A Gremlin date/time-unit argument: a literal value or a bound variable
+data TraversalDTArgument =
+  TraversalDTArgumentValue TraversalDT |
+  TraversalDTArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalDTArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalDTArgument"
+
+_TraversalDTArgument_value = Core.Name "value"
+
+_TraversalDTArgument_variable = Core.Name "variable"
+
+-- | A Gremlin edge direction: in, out, or both
+data TraversalDirection =
+  TraversalDirectionIn |
+  TraversalDirectionOut |
+  TraversalDirectionBoth |
+  TraversalDirectionFrom |
+  TraversalDirectionTo
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalDirection = Core.Name "hydra.tinkerpop.gremlin.TraversalDirection"
+
+_TraversalDirection_in = Core.Name "in"
+
+_TraversalDirection_out = Core.Name "out"
+
+_TraversalDirection_both = Core.Name "both"
+
+_TraversalDirection_from = Core.Name "from"
+
+_TraversalDirection_to = Core.Name "to"
+
+-- | A Gremlin direction argument: a literal value or a bound variable
+data TraversalDirectionArgument =
+  TraversalDirectionArgumentValue TraversalDirection |
+  TraversalDirectionArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalDirectionArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalDirectionArgument"
+
+_TraversalDirectionArgument_value = Core.Name "value"
+
+_TraversalDirectionArgument_variable = Core.Name "variable"
+
+-- | A Gremlin named function reference
+data TraversalFunction =
+  TraversalFunctionToken TraversalToken |
+  TraversalFunctionColumn TraversalColumn
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalFunction = Core.Name "hydra.tinkerpop.gremlin.TraversalFunction"
+
+_TraversalFunction_token = Core.Name "token"
+
+_TraversalFunction_column = Core.Name "column"
+
+-- | A Gremlin function argument: a named function or a bound variable
+data TraversalFunctionArgument =
+  TraversalFunctionArgumentValue TraversalFunction |
+  TraversalFunctionArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalFunctionArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalFunctionArgument"
+
+_TraversalFunctionArgument_value = Core.Name "value"
+
+_TraversalFunctionArgument_variable = Core.Name "variable"
+
+-- | A Gremlin graph type constant
+data TraversalGType =
+  TraversalGTypeBigDecimal |
+  TraversalGTypeBigDecimalU |
+  TraversalGTypeBigInt |
+  TraversalGTypeBigIntU |
+  TraversalGTypeBinary |
+  TraversalGTypeBinaryU |
+  TraversalGTypeBoolean |
+  TraversalGTypeBooleanU |
+  TraversalGTypeByte |
+  TraversalGTypeByteU |
+  TraversalGTypeChar |
+  TraversalGTypeCharU |
+  TraversalGTypeDateTime |
+  TraversalGTypeDateTimeU |
+  TraversalGTypeDouble |
+  TraversalGTypeDoubleU |
+  TraversalGTypeDuration |
+  TraversalGTypeDurationU |
+  TraversalGTypeEdge |
+  TraversalGTypeEdgeU |
+  TraversalGTypeFloat |
+  TraversalGTypeFloatU |
+  TraversalGTypeGraph |
+  TraversalGTypeGraphU |
+  TraversalGTypeInt |
+  TraversalGTypeIntU |
+  TraversalGTypeList |
+  TraversalGTypeListU |
+  TraversalGTypeLong |
+  TraversalGTypeLongU |
+  TraversalGTypeMap |
+  TraversalGTypeMapU |
+  TraversalGTypeNull |
+  TraversalGTypeNullU |
+  TraversalGTypeNumber |
+  TraversalGTypeNumberU |
+  TraversalGTypePath |
+  TraversalGTypePathU |
+  TraversalGTypeProperty |
+  TraversalGTypePropertyU |
+  TraversalGTypeSet |
+  TraversalGTypeSetU |
+  TraversalGTypeShort |
+  TraversalGTypeShortU |
+  TraversalGTypeString |
+  TraversalGTypeStringU |
+  TraversalGTypeTree |
+  TraversalGTypeTreeU |
+  TraversalGTypeUuid |
+  TraversalGTypeUuidL |
+  TraversalGTypeVertex |
+  TraversalGTypeVertexU |
+  TraversalGTypeVproperty |
+  TraversalGTypeVpropertyU
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalGType = Core.Name "hydra.tinkerpop.gremlin.TraversalGType"
+
+_TraversalGType_bigDecimal = Core.Name "bigDecimal"
+
+_TraversalGType_bigDecimalU = Core.Name "bigDecimalU"
+
+_TraversalGType_bigInt = Core.Name "bigInt"
+
+_TraversalGType_bigIntU = Core.Name "bigIntU"
+
+_TraversalGType_binary = Core.Name "binary"
+
+_TraversalGType_binaryU = Core.Name "binaryU"
+
+_TraversalGType_boolean = Core.Name "boolean"
+
+_TraversalGType_booleanU = Core.Name "booleanU"
+
+_TraversalGType_byte = Core.Name "byte"
+
+_TraversalGType_byteU = Core.Name "byteU"
+
+_TraversalGType_char = Core.Name "char"
+
+_TraversalGType_charU = Core.Name "charU"
+
+_TraversalGType_dateTime = Core.Name "dateTime"
+
+_TraversalGType_dateTimeU = Core.Name "dateTimeU"
+
+_TraversalGType_double = Core.Name "double"
+
+_TraversalGType_doubleU = Core.Name "doubleU"
+
+_TraversalGType_duration = Core.Name "duration"
+
+_TraversalGType_durationU = Core.Name "durationU"
+
+_TraversalGType_edge = Core.Name "edge"
+
+_TraversalGType_edgeU = Core.Name "edgeU"
+
+_TraversalGType_float = Core.Name "float"
+
+_TraversalGType_floatU = Core.Name "floatU"
+
+_TraversalGType_graph = Core.Name "graph"
+
+_TraversalGType_graphU = Core.Name "graphU"
+
+_TraversalGType_int = Core.Name "int"
+
+_TraversalGType_intU = Core.Name "intU"
+
+_TraversalGType_list = Core.Name "list"
+
+_TraversalGType_listU = Core.Name "listU"
+
+_TraversalGType_long = Core.Name "long"
+
+_TraversalGType_longU = Core.Name "longU"
+
+_TraversalGType_map = Core.Name "map"
+
+_TraversalGType_mapU = Core.Name "mapU"
+
+_TraversalGType_null = Core.Name "null"
+
+_TraversalGType_nullU = Core.Name "nullU"
+
+_TraversalGType_number = Core.Name "number"
+
+_TraversalGType_numberU = Core.Name "numberU"
+
+_TraversalGType_path = Core.Name "path"
+
+_TraversalGType_pathU = Core.Name "pathU"
+
+_TraversalGType_property = Core.Name "property"
+
+_TraversalGType_propertyU = Core.Name "propertyU"
+
+_TraversalGType_set = Core.Name "set"
+
+_TraversalGType_setU = Core.Name "setU"
+
+_TraversalGType_short = Core.Name "short"
+
+_TraversalGType_shortU = Core.Name "shortU"
+
+_TraversalGType_string = Core.Name "string"
+
+_TraversalGType_stringU = Core.Name "stringU"
+
+_TraversalGType_tree = Core.Name "tree"
+
+_TraversalGType_treeU = Core.Name "treeU"
+
+_TraversalGType_uuid = Core.Name "uuid"
+
+_TraversalGType_uuidL = Core.Name "uuidL"
+
+_TraversalGType_vertex = Core.Name "vertex"
+
+_TraversalGType_vertexU = Core.Name "vertexU"
+
+_TraversalGType_vproperty = Core.Name "vproperty"
+
+_TraversalGType_vpropertyU = Core.Name "vpropertyU"
+
+-- | A Gremlin graph-type argument: a literal value or a bound variable
+data TraversalGTypeArgument =
+  TraversalGTypeArgumentValue TraversalGType |
+  TraversalGTypeArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalGTypeArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalGTypeArgument"
+
+_TraversalGTypeArgument_value = Core.Name "value"
+
+_TraversalGTypeArgument_variable = Core.Name "variable"
+
+-- | A Gremlin merge-option selector
+data TraversalMerge =
+  TraversalMergeOnCreate |
+  TraversalMergeOnMatch |
+  TraversalMergeOutV |
+  TraversalMergeInV
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalMerge = Core.Name "hydra.tinkerpop.gremlin.TraversalMerge"
+
+_TraversalMerge_onCreate = Core.Name "onCreate"
+
+_TraversalMerge_onMatch = Core.Name "onMatch"
+
+_TraversalMerge_outV = Core.Name "outV"
+
+_TraversalMerge_inV = Core.Name "inV"
+
+-- | A Gremlin merge-option argument: a literal value or a bound variable
+data TraversalMergeArgument =
+  TraversalMergeArgumentValue TraversalMerge |
+  TraversalMergeArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalMergeArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalMergeArgument"
+
+_TraversalMergeArgument_value = Core.Name "value"
+
+_TraversalMergeArgument_variable = Core.Name "variable"
+
+-- | A single method call within a Gremlin traversal
+data TraversalMethod =
+  TraversalMethodV [GenericLiteralArgument] |
+  TraversalMethodE [GenericLiteralArgument] |
+  TraversalMethodAddE StringArgumentOrNestedTraversal |
+  TraversalMethodAddV (Maybe StringArgumentOrNestedTraversal) |
+  TraversalMethodMergeE MergeArgs |
+  TraversalMethodMergeV MergeArgs |
+  TraversalMethodAggregate StringArgument |
+  TraversalMethodAll TraversalPredicate |
+  TraversalMethodAnd [NestedTraversal] |
+  TraversalMethodAny TraversalPredicate |
+  TraversalMethodAs AsArgs |
+  TraversalMethodAsBool |
+  TraversalMethodAsDate |
+  TraversalMethodAsNumber (Maybe TraversalGTypeArgument) |
+  TraversalMethodAsString (Maybe TraversalScopeArgument) |
+  TraversalMethodBarrier (Maybe BarrierArgs) |
+  TraversalMethodBoth [StringNullableArgument] |
+  TraversalMethodBothE [StringNullableArgument] |
+  TraversalMethodBothV |
+  TraversalMethodBranch NestedTraversal |
+  TraversalMethodBy ByArgs |
+  TraversalMethodCall ServiceCall |
+  TraversalMethodCap AsArgs |
+  TraversalMethodChoose ChooseArgs |
+  TraversalMethodCoalesce [NestedTraversal] |
+  TraversalMethodCoin NumericArgument |
+  TraversalMethodCombine GenericLiteralArgument |
+  TraversalMethodConcat ConcatArgs |
+  TraversalMethodConjoin StringArgument |
+  TraversalMethodConnectedComponent |
+  TraversalMethodConstant GenericLiteralArgument |
+  TraversalMethodCount (Maybe TraversalScopeArgument) |
+  TraversalMethodCyclicPath |
+  TraversalMethodDateAdd DateAddArgs |
+  TraversalMethodDateDiff DateDiffArgs |
+  TraversalMethodDedup DedupArgs |
+  TraversalMethodDifference GenericLiteralArgument |
+  TraversalMethodDiscard |
+  TraversalMethodDisjunct GenericLiteralArgument |
+  TraversalMethodDrop |
+  TraversalMethodElement [StringNullableArgument] |
+  TraversalMethodElementMap [StringNullableArgument] |
+  TraversalMethodEmit (Maybe PredicateOrTraversal) |
+  TraversalMethodFail (Maybe StringArgument) |
+  TraversalMethodFilter PredicateOrTraversal |
+  TraversalMethodFlatMap NestedTraversal |
+  TraversalMethodFold (Maybe FoldArgs) |
+  TraversalMethodFormat StringArgument |
+  TraversalMethodFrom FromArgs |
+  TraversalMethodGroup (Maybe StringArgument) |
+  TraversalMethodGroupCount (Maybe StringArgument) |
+  TraversalMethodHas HasArgs |
+  TraversalMethodHasId PredicateOrObjects |
+  TraversalMethodHasKey PredicateOrStrings |
+  TraversalMethodHasLabel PredicateOrStrings |
+  TraversalMethodHasNot StringNullableArgument |
+  TraversalMethodHasValue PredicateOrObjects |
+  TraversalMethodId |
+  TraversalMethodIdentity |
+  TraversalMethodIn [StringNullableArgument] |
+  TraversalMethodInE [StringNullableArgument] |
+  TraversalMethodInV |
+  TraversalMethodIndex |
+  TraversalMethodInject [GenericLiteralArgument] |
+  TraversalMethodIntersect GenericLiteralArgument |
+  TraversalMethodIs PredicateOrObject |
+  TraversalMethodKey |
+  TraversalMethodLabel |
+  TraversalMethodLength (Maybe TraversalScopeArgument) |
+  TraversalMethodLimit ScopeAndInteger |
+  TraversalMethodLocal NestedTraversal |
+  TraversalMethodLoops (Maybe StringArgument) |
+  TraversalMethodLTrim (Maybe TraversalScopeArgument) |
+  TraversalMethodMap NestedTraversal |
+  TraversalMethodMatch [NestedTraversal] |
+  TraversalMethodMath StringArgument |
+  TraversalMethodMax (Maybe TraversalScopeArgument) |
+  TraversalMethodMean (Maybe TraversalScopeArgument) |
+  TraversalMethodMerge GenericLiteralArgument |
+  TraversalMethodMin (Maybe TraversalScopeArgument) |
+  TraversalMethodNone TraversalPredicate |
+  TraversalMethodNot NestedTraversal |
+  TraversalMethodOption OptionArgs |
+  TraversalMethodOptional NestedTraversal |
+  TraversalMethodOr [NestedTraversal] |
+  TraversalMethodOrder (Maybe TraversalScopeArgument) |
+  TraversalMethodOtherV |
+  TraversalMethodOut [StringNullableArgument] |
+  TraversalMethodOutE [StringNullableArgument] |
+  TraversalMethodOutV |
+  TraversalMethodPageRank (Maybe NumericArgument) |
+  TraversalMethodPath |
+  TraversalMethodPeerPressure |
+  TraversalMethodProduct GenericLiteralArgument |
+  TraversalMethodProfile (Maybe StringArgument) |
+  TraversalMethodProject AsArgs |
+  TraversalMethodProperties [StringNullableArgument] |
+  TraversalMethodProperty PropertyArgs |
+  TraversalMethodPropertyMap [StringNullableArgument] |
+  TraversalMethodRange RangeArgs |
+  TraversalMethodRead |
+  TraversalMethodRepeat RepeatArgs |
+  TraversalMethodReplace ReplaceArgs |
+  TraversalMethodReverse |
+  TraversalMethodRTrim (Maybe TraversalScopeArgument) |
+  TraversalMethodSack (Maybe TraversalBiFunctionArgument) |
+  TraversalMethodSample SampleByScope |
+  TraversalMethodSelect SelectArgs |
+  TraversalMethodShortestPath |
+  TraversalMethodSideEffect NestedTraversal |
+  TraversalMethodSimplePath |
+  TraversalMethodSkip ScopeAndInteger |
+  TraversalMethodSplit SplitArgs |
+  TraversalMethodSubgraph StringArgument |
+  TraversalMethodSubstring SubstringArgs |
+  TraversalMethodSum (Maybe TraversalScopeArgument) |
+  TraversalMethodTail (Maybe TailArgs) |
+  TraversalMethodTimeLimit IntegerArgument |
+  TraversalMethodTimes IntegerArgument |
+  TraversalMethodTo ToArgs |
+  TraversalMethodToE DirectionAndVarargs |
+  TraversalMethodToLower (Maybe TraversalScopeArgument) |
+  TraversalMethodToUpper (Maybe TraversalScopeArgument) |
+  TraversalMethodToV TraversalDirectionArgument |
+  TraversalMethodTree (Maybe StringArgument) |
+  TraversalMethodTrim (Maybe TraversalScopeArgument) |
+  TraversalMethodUnfold |
+  TraversalMethodUnion [NestedTraversal] |
+  TraversalMethodUntil PredicateOrTraversal |
+  TraversalMethodValue |
+  TraversalMethodValueMap ValueMapArgs |
+  TraversalMethodValues [StringNullableArgument] |
+  TraversalMethodWhere WhereArgs |
+  TraversalMethodWith WithArgs |
+  TraversalMethodWrite
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalMethod = Core.Name "hydra.tinkerpop.gremlin.TraversalMethod"
+
+_TraversalMethod_v = Core.Name "v"
+
+_TraversalMethod_e = Core.Name "e"
+
+_TraversalMethod_addE = Core.Name "addE"
+
+_TraversalMethod_addV = Core.Name "addV"
+
+_TraversalMethod_mergeE = Core.Name "mergeE"
+
+_TraversalMethod_mergeV = Core.Name "mergeV"
+
+_TraversalMethod_aggregate = Core.Name "aggregate"
+
+_TraversalMethod_all = Core.Name "all"
+
+_TraversalMethod_and = Core.Name "and"
+
+_TraversalMethod_any = Core.Name "any"
+
+_TraversalMethod_as = Core.Name "as"
+
+_TraversalMethod_asBool = Core.Name "asBool"
+
+_TraversalMethod_asDate = Core.Name "asDate"
+
+_TraversalMethod_asNumber = Core.Name "asNumber"
+
+_TraversalMethod_asString = Core.Name "asString"
+
+_TraversalMethod_barrier = Core.Name "barrier"
+
+_TraversalMethod_both = Core.Name "both"
+
+_TraversalMethod_bothE = Core.Name "bothE"
+
+_TraversalMethod_bothV = Core.Name "bothV"
+
+_TraversalMethod_branch = Core.Name "branch"
+
+_TraversalMethod_by = Core.Name "by"
+
+_TraversalMethod_call = Core.Name "call"
+
+_TraversalMethod_cap = Core.Name "cap"
+
+_TraversalMethod_choose = Core.Name "choose"
+
+_TraversalMethod_coalesce = Core.Name "coalesce"
+
+_TraversalMethod_coin = Core.Name "coin"
+
+_TraversalMethod_combine = Core.Name "combine"
+
+_TraversalMethod_concat = Core.Name "concat"
+
+_TraversalMethod_conjoin = Core.Name "conjoin"
+
+_TraversalMethod_connectedComponent = Core.Name "connectedComponent"
+
+_TraversalMethod_constant = Core.Name "constant"
+
+_TraversalMethod_count = Core.Name "count"
+
+_TraversalMethod_cyclicPath = Core.Name "cyclicPath"
+
+_TraversalMethod_dateAdd = Core.Name "dateAdd"
+
+_TraversalMethod_dateDiff = Core.Name "dateDiff"
+
+_TraversalMethod_dedup = Core.Name "dedup"
+
+_TraversalMethod_difference = Core.Name "difference"
+
+_TraversalMethod_discard = Core.Name "discard"
+
+_TraversalMethod_disjunct = Core.Name "disjunct"
+
+_TraversalMethod_drop = Core.Name "drop"
+
+_TraversalMethod_element = Core.Name "element"
+
+_TraversalMethod_elementMap = Core.Name "elementMap"
+
+_TraversalMethod_emit = Core.Name "emit"
+
+_TraversalMethod_fail = Core.Name "fail"
+
+_TraversalMethod_filter = Core.Name "filter"
+
+_TraversalMethod_flatMap = Core.Name "flatMap"
+
+_TraversalMethod_fold = Core.Name "fold"
+
+_TraversalMethod_format = Core.Name "format"
+
+_TraversalMethod_from = Core.Name "from"
+
+_TraversalMethod_group = Core.Name "group"
+
+_TraversalMethod_groupCount = Core.Name "groupCount"
+
+_TraversalMethod_has = Core.Name "has"
+
+_TraversalMethod_hasId = Core.Name "hasId"
+
+_TraversalMethod_hasKey = Core.Name "hasKey"
+
+_TraversalMethod_hasLabel = Core.Name "hasLabel"
+
+_TraversalMethod_hasNot = Core.Name "hasNot"
+
+_TraversalMethod_hasValue = Core.Name "hasValue"
+
+_TraversalMethod_id = Core.Name "id"
+
+_TraversalMethod_identity = Core.Name "identity"
+
+_TraversalMethod_in = Core.Name "in"
+
+_TraversalMethod_inE = Core.Name "inE"
+
+_TraversalMethod_inV = Core.Name "inV"
+
+_TraversalMethod_index = Core.Name "index"
+
+_TraversalMethod_inject = Core.Name "inject"
+
+_TraversalMethod_intersect = Core.Name "intersect"
+
+_TraversalMethod_is = Core.Name "is"
+
+_TraversalMethod_key = Core.Name "key"
+
+_TraversalMethod_label = Core.Name "label"
+
+_TraversalMethod_length = Core.Name "length"
+
+_TraversalMethod_limit = Core.Name "limit"
+
+_TraversalMethod_local = Core.Name "local"
+
+_TraversalMethod_loops = Core.Name "loops"
+
+_TraversalMethod_lTrim = Core.Name "lTrim"
+
+_TraversalMethod_map = Core.Name "map"
+
+_TraversalMethod_match = Core.Name "match"
+
+_TraversalMethod_math = Core.Name "math"
+
+_TraversalMethod_max = Core.Name "max"
+
+_TraversalMethod_mean = Core.Name "mean"
+
+_TraversalMethod_merge = Core.Name "merge"
+
+_TraversalMethod_min = Core.Name "min"
+
+_TraversalMethod_none = Core.Name "none"
+
+_TraversalMethod_not = Core.Name "not"
+
+_TraversalMethod_option = Core.Name "option"
+
+_TraversalMethod_optional = Core.Name "optional"
+
+_TraversalMethod_or = Core.Name "or"
+
+_TraversalMethod_order = Core.Name "order"
+
+_TraversalMethod_otherV = Core.Name "otherV"
+
+_TraversalMethod_out = Core.Name "out"
+
+_TraversalMethod_outE = Core.Name "outE"
+
+_TraversalMethod_outV = Core.Name "outV"
+
+_TraversalMethod_pageRank = Core.Name "pageRank"
+
+_TraversalMethod_path = Core.Name "path"
+
+_TraversalMethod_peerPressure = Core.Name "peerPressure"
+
+_TraversalMethod_product = Core.Name "product"
+
+_TraversalMethod_profile = Core.Name "profile"
+
+_TraversalMethod_project = Core.Name "project"
+
+_TraversalMethod_properties = Core.Name "properties"
+
+_TraversalMethod_property = Core.Name "property"
+
+_TraversalMethod_propertyMap = Core.Name "propertyMap"
+
+_TraversalMethod_range = Core.Name "range"
+
+_TraversalMethod_read = Core.Name "read"
+
+_TraversalMethod_repeat = Core.Name "repeat"
+
+_TraversalMethod_replace = Core.Name "replace"
+
+_TraversalMethod_reverse = Core.Name "reverse"
+
+_TraversalMethod_rTrim = Core.Name "rTrim"
+
+_TraversalMethod_sack = Core.Name "sack"
+
+_TraversalMethod_sample = Core.Name "sample"
+
+_TraversalMethod_select = Core.Name "select"
+
+_TraversalMethod_shortestPath = Core.Name "shortestPath"
+
+_TraversalMethod_sideEffect = Core.Name "sideEffect"
+
+_TraversalMethod_simplePath = Core.Name "simplePath"
+
+_TraversalMethod_skip = Core.Name "skip"
+
+_TraversalMethod_split = Core.Name "split"
+
+_TraversalMethod_subgraph = Core.Name "subgraph"
+
+_TraversalMethod_substring = Core.Name "substring"
+
+_TraversalMethod_sum = Core.Name "sum"
+
+_TraversalMethod_tail = Core.Name "tail"
+
+_TraversalMethod_timeLimit = Core.Name "timeLimit"
+
+_TraversalMethod_times = Core.Name "times"
+
+_TraversalMethod_to = Core.Name "to"
+
+_TraversalMethod_toE = Core.Name "toE"
+
+_TraversalMethod_toLower = Core.Name "toLower"
+
+_TraversalMethod_toUpper = Core.Name "toUpper"
+
+_TraversalMethod_toV = Core.Name "toV"
+
+_TraversalMethod_tree = Core.Name "tree"
+
+_TraversalMethod_trim = Core.Name "trim"
+
+_TraversalMethod_unfold = Core.Name "unfold"
+
+_TraversalMethod_union = Core.Name "union"
+
+_TraversalMethod_until = Core.Name "until"
+
+_TraversalMethod_value = Core.Name "value"
+
+_TraversalMethod_valueMap = Core.Name "valueMap"
+
+_TraversalMethod_values = Core.Name "values"
+
+_TraversalMethod_where = Core.Name "where"
+
+_TraversalMethod_with = Core.Name "with"
+
+_TraversalMethod_write = Core.Name "write"
+
+-- | A Gremlin traversal operator
+data TraversalOperator =
+  TraversalOperatorAddAll |
+  TraversalOperatorAnd |
+  TraversalOperatorAssign |
+  TraversalOperatorDiv |
+  TraversalOperatorMax |
+  TraversalOperatorMin |
+  TraversalOperatorMinus |
+  TraversalOperatorMult |
+  TraversalOperatorOr |
+  TraversalOperatorSum |
+  TraversalOperatorSumLong
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalOperator = Core.Name "hydra.tinkerpop.gremlin.TraversalOperator"
+
+_TraversalOperator_addAll = Core.Name "addAll"
+
+_TraversalOperator_and = Core.Name "and"
+
+_TraversalOperator_assign = Core.Name "assign"
+
+_TraversalOperator_div = Core.Name "div"
+
+_TraversalOperator_max = Core.Name "max"
+
+_TraversalOperator_min = Core.Name "min"
+
+_TraversalOperator_minus = Core.Name "minus"
+
+_TraversalOperator_mult = Core.Name "mult"
+
+_TraversalOperator_or = Core.Name "or"
+
+_TraversalOperator_sum = Core.Name "sum"
+
+_TraversalOperator_sumLong = Core.Name "sumLong"
+
+-- | A Gremlin sort order: ascending, descending, or shuffle
+data TraversalOrder =
+  TraversalOrderAsc |
+  TraversalOrderDesc |
+  TraversalOrderShuffle
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalOrder = Core.Name "hydra.tinkerpop.gremlin.TraversalOrder"
+
+_TraversalOrder_asc = Core.Name "asc"
+
+_TraversalOrder_desc = Core.Name "desc"
+
+_TraversalOrder_shuffle = Core.Name "shuffle"
+
+-- | A Gremlin order argument: a literal value or a bound variable
+data TraversalOrderArgument =
+  TraversalOrderArgumentValue TraversalOrder |
+  TraversalOrderArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalOrderArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalOrderArgument"
+
+_TraversalOrderArgument_value = Core.Name "value"
+
+_TraversalOrderArgument_variable = Core.Name "variable"
+
+-- | A Gremlin Pick selector: any or none
+data TraversalPick =
+  TraversalPickAny |
+  TraversalPickNone |
+  TraversalPickUnproductive
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalPick = Core.Name "hydra.tinkerpop.gremlin.TraversalPick"
+
+_TraversalPick_any = Core.Name "any"
+
+_TraversalPick_none = Core.Name "none"
+
+_TraversalPick_unproductive = Core.Name "unproductive"
+
+-- | A Gremlin Pop selector: first, last, all, or mixed
+data TraversalPop =
+  TraversalPopFirst |
+  TraversalPopLast |
+  TraversalPopAll |
+  TraversalPopMixed
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalPop = Core.Name "hydra.tinkerpop.gremlin.TraversalPop"
+
+_TraversalPop_first = Core.Name "first"
+
+_TraversalPop_last = Core.Name "last"
+
+_TraversalPop_all = Core.Name "all"
+
+_TraversalPop_mixed = Core.Name "mixed"
+
+-- | A Gremlin Pop argument: a literal value or a bound variable
+data TraversalPopArgument =
+  TraversalPopArgumentValue TraversalPop |
+  TraversalPopArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalPopArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalPopArgument"
+
+_TraversalPopArgument_value = Core.Name "value"
+
+_TraversalPopArgument_variable = Core.Name "variable"
+
+-- | A Gremlin traversal predicate
+data TraversalPredicate =
+  TraversalPredicateEq GenericLiteralArgument |
+  TraversalPredicateNeq GenericLiteralArgument |
+  TraversalPredicateLt GenericLiteralArgument |
+  TraversalPredicateLte GenericLiteralArgument |
+  TraversalPredicateGt GenericLiteralArgument |
+  TraversalPredicateGte GenericLiteralArgument |
+  TraversalPredicateInside RangeArgument |
+  TraversalPredicateOutside RangeArgument |
+  TraversalPredicateBetween RangeArgument |
+  TraversalPredicateWithin (Maybe GenericLiteralArgument) |
+  TraversalPredicateWithout (Maybe GenericLiteralArgument) |
+  TraversalPredicateNot TraversalPredicate |
+  TraversalPredicateStartingWith StringArgument |
+  TraversalPredicateNotStartingWith StringArgument |
+  TraversalPredicateEndingWith StringArgument |
+  TraversalPredicateNotEndingWith StringArgument |
+  TraversalPredicateContaining StringArgument |
+  TraversalPredicateNotContaining StringArgument |
+  TraversalPredicateRegex StringArgument |
+  TraversalPredicateNotRegex StringArgument |
+  TraversalPredicateTypeOf TypeOfArg |
+  TraversalPredicateAnd TwoTraversalPredicates |
+  TraversalPredicateOr TwoTraversalPredicates |
+  TraversalPredicateNegate TraversalPredicate
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalPredicate = Core.Name "hydra.tinkerpop.gremlin.TraversalPredicate"
+
+_TraversalPredicate_eq = Core.Name "eq"
+
+_TraversalPredicate_neq = Core.Name "neq"
+
+_TraversalPredicate_lt = Core.Name "lt"
+
+_TraversalPredicate_lte = Core.Name "lte"
+
+_TraversalPredicate_gt = Core.Name "gt"
+
+_TraversalPredicate_gte = Core.Name "gte"
+
+_TraversalPredicate_inside = Core.Name "inside"
+
+_TraversalPredicate_outside = Core.Name "outside"
+
+_TraversalPredicate_between = Core.Name "between"
+
+_TraversalPredicate_within = Core.Name "within"
+
+_TraversalPredicate_without = Core.Name "without"
+
+_TraversalPredicate_not = Core.Name "not"
+
+_TraversalPredicate_startingWith = Core.Name "startingWith"
+
+_TraversalPredicate_notStartingWith = Core.Name "notStartingWith"
+
+_TraversalPredicate_endingWith = Core.Name "endingWith"
+
+_TraversalPredicate_notEndingWith = Core.Name "notEndingWith"
+
+_TraversalPredicate_containing = Core.Name "containing"
+
+_TraversalPredicate_notContaining = Core.Name "notContaining"
+
+_TraversalPredicate_regex = Core.Name "regex"
+
+_TraversalPredicate_notRegex = Core.Name "notRegex"
+
+_TraversalPredicate_typeOf = Core.Name "typeOf"
+
+_TraversalPredicate_and = Core.Name "and"
+
+_TraversalPredicate_or = Core.Name "or"
+
+_TraversalPredicate_negate = Core.Name "negate"
+
+-- | A Gremlin sack-method argument: a named function or a bound variable
+data TraversalSackMethodArgument =
+  TraversalSackMethodArgumentValue |
+  TraversalSackMethodArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalSackMethodArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalSackMethodArgument"
+
+_TraversalSackMethodArgument_value = Core.Name "value"
+
+_TraversalSackMethodArgument_variable = Core.Name "variable"
+
+-- | A Gremlin traversal scope: local or global
+data TraversalScope =
+  TraversalScopeLocal |
+  TraversalScopeGlobal
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalScope = Core.Name "hydra.tinkerpop.gremlin.TraversalScope"
+
+_TraversalScope_local = Core.Name "local"
+
+_TraversalScope_global = Core.Name "global"
+
+-- | A Gremlin scope argument: a literal value or a bound variable
+data TraversalScopeArgument =
+  TraversalScopeArgumentValue TraversalScope |
+  TraversalScopeArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalScopeArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalScopeArgument"
+
+_TraversalScopeArgument_value = Core.Name "value"
+
+_TraversalScopeArgument_variable = Core.Name "variable"
+
+-- | A Gremlin traversal source: g, or a variable bound to one
+newtype TraversalSource =
+  TraversalSource {
+    unTraversalSource :: [TraversalSourceSelfMethod]}
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalSource = Core.Name "hydra.tinkerpop.gremlin.TraversalSource"
+
+-- | A query built from a Gremlin traversal source
+data TraversalSourceQuery =
+  TraversalSourceQuery {
+    traversalSourceQuerySource :: TraversalSource,
+    traversalSourceQueryTransactionPart :: (Maybe TransactionPart)}
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalSourceQuery = Core.Name "hydra.tinkerpop.gremlin.TraversalSourceQuery"
+
+_TraversalSourceQuery_source = Core.Name "source"
+
+_TraversalSourceQuery_transactionPart = Core.Name "transactionPart"
+
+-- | A traversal-source configuration method that returns the same source
+data TraversalSourceSelfMethod =
+  TraversalSourceSelfMethodWithBulk Bool |
+  TraversalSourceSelfMethodWithPath |
+  TraversalSourceSelfMethodWithSack WithSackArgs |
+  TraversalSourceSelfMethodWithSideEffect StringAndObject |
+  TraversalSourceSelfMethodWithStrategies [TraversalStrategy] |
+  TraversalSourceSelfMethodWithoutStrategies [Identifier] |
+  TraversalSourceSelfMethodWith StringAndOptionalObject
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalSourceSelfMethod = Core.Name "hydra.tinkerpop.gremlin.TraversalSourceSelfMethod"
+
+_TraversalSourceSelfMethod_withBulk = Core.Name "withBulk"
+
+_TraversalSourceSelfMethod_withPath = Core.Name "withPath"
+
+_TraversalSourceSelfMethod_withSack = Core.Name "withSack"
+
+_TraversalSourceSelfMethod_withSideEffect = Core.Name "withSideEffect"
+
+_TraversalSourceSelfMethod_withStrategies = Core.Name "withStrategies"
+
+_TraversalSourceSelfMethod_withoutStrategies = Core.Name "withoutStrategies"
+
+_TraversalSourceSelfMethod_with = Core.Name "with"
+
+-- | A traversal-source method that spawns a new traversal
+data TraversalSourceSpawnMethod =
+  TraversalSourceSpawnMethodAddE StringArgumentOrNestedTraversal |
+  TraversalSourceSpawnMethodAddV (Maybe StringArgumentOrNestedTraversal) |
+  TraversalSourceSpawnMethodE [GenericLiteralArgument] |
+  TraversalSourceSpawnMethodV [GenericLiteralArgument] |
+  TraversalSourceSpawnMethodMergeV MergeArgs |
+  TraversalSourceSpawnMethodMergeE MergeArgs |
+  TraversalSourceSpawnMethodInject [GenericLiteralArgument] |
+  TraversalSourceSpawnMethodIo StringArgument |
+  TraversalSourceSpawnMethodCall (Maybe ServiceCall) |
+  TraversalSourceSpawnMethodUnion [NestedTraversal]
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalSourceSpawnMethod = Core.Name "hydra.tinkerpop.gremlin.TraversalSourceSpawnMethod"
+
+_TraversalSourceSpawnMethod_addE = Core.Name "addE"
+
+_TraversalSourceSpawnMethod_addV = Core.Name "addV"
+
+_TraversalSourceSpawnMethod_e = Core.Name "e"
+
+_TraversalSourceSpawnMethod_v = Core.Name "v"
+
+_TraversalSourceSpawnMethod_mergeV = Core.Name "mergeV"
+
+_TraversalSourceSpawnMethod_mergeE = Core.Name "mergeE"
+
+_TraversalSourceSpawnMethod_inject = Core.Name "inject"
+
+_TraversalSourceSpawnMethod_io = Core.Name "io"
+
+_TraversalSourceSpawnMethod_call = Core.Name "call"
+
+_TraversalSourceSpawnMethod_union = Core.Name "union"
+
+-- | A Gremlin traversal strategy reference
+data TraversalStrategy =
+  TraversalStrategy {
+    traversalStrategyNew :: Bool,
+    traversalStrategyClass :: Identifier,
+    traversalStrategyConfigurations :: [Configuration]}
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalStrategy = Core.Name "hydra.tinkerpop.gremlin.TraversalStrategy"
+
+_TraversalStrategy_new = Core.Name "new"
+
+_TraversalStrategy_class = Core.Name "class"
+
+_TraversalStrategy_configurations = Core.Name "configurations"
+
+-- | A terminal method that ends a Gremlin traversal, such as next() or toList()
+data TraversalTerminalMethod =
+  TraversalTerminalMethodExplain |
+  TraversalTerminalMethodIterate |
+  TraversalTerminalMethodHasNext |
+  TraversalTerminalMethodTryNext |
+  TraversalTerminalMethodNext (Maybe IntegerLiteral) |
+  TraversalTerminalMethodToList |
+  TraversalTerminalMethodToSet |
+  TraversalTerminalMethodToBulkSet
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalTerminalMethod = Core.Name "hydra.tinkerpop.gremlin.TraversalTerminalMethod"
+
+_TraversalTerminalMethod_explain = Core.Name "explain"
+
+_TraversalTerminalMethod_iterate = Core.Name "iterate"
+
+_TraversalTerminalMethod_hasNext = Core.Name "hasNext"
+
+_TraversalTerminalMethod_tryNext = Core.Name "tryNext"
+
+_TraversalTerminalMethod_next = Core.Name "next"
+
+_TraversalTerminalMethod_toList = Core.Name "toList"
+
+_TraversalTerminalMethod_toSet = Core.Name "toSet"
+
+_TraversalTerminalMethod_toBulkSet = Core.Name "toBulkSet"
+
+-- | A Gremlin element token: id, label, key, or value
+data TraversalToken =
+  TraversalTokenId |
+  TraversalTokenLabel |
+  TraversalTokenKey |
+  TraversalTokenValue
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalToken = Core.Name "hydra.tinkerpop.gremlin.TraversalToken"
+
+_TraversalToken_id = Core.Name "id"
+
+_TraversalToken_label = Core.Name "label"
+
+_TraversalToken_key = Core.Name "key"
+
+_TraversalToken_value = Core.Name "value"
+
+-- | A Gremlin token argument: a literal value or a bound variable
+data TraversalTokenArgument =
+  TraversalTokenArgumentValue TraversalToken |
+  TraversalTokenArgumentVariable Identifier
+  deriving (Eq, Ord, Read, Show)
+
+_TraversalTokenArgument = Core.Name "hydra.tinkerpop.gremlin.TraversalTokenArgument"
+
+_TraversalTokenArgument_value = Core.Name "value"
+
+_TraversalTokenArgument_variable = Core.Name "variable"
+
+-- | A pair of traversal predicates, as used in a between-style filter
+data TwoTraversalPredicates =
+  TwoTraversalPredicates {
+    twoTraversalPredicatesLeft :: TraversalPredicate,
+    twoTraversalPredicatesRight :: TraversalPredicate}
+  deriving (Eq, Ord, Read, Show)
+
+_TwoTraversalPredicates = Core.Name "hydra.tinkerpop.gremlin.TwoTraversalPredicates"
+
+_TwoTraversalPredicates_left = Core.Name "left"
+
+_TwoTraversalPredicates_right = Core.Name "right"
+
+-- | The argument of a Gremlin type-checking predicate
+data TypeOfArg =
+  TypeOfArgGType TraversalGType |
+  TypeOfArgString StringArgument
+  deriving (Eq, Ord, Read, Show)
+
+_TypeOfArg = Core.Name "hydra.tinkerpop.gremlin.TypeOfArg"
+
+_TypeOfArg_gType = Core.Name "gType"
+
+_TypeOfArg_string = Core.Name "string"
+
+-- | The arguments of a Gremlin valueMap() step
+data ValueMapArgs =
+  ValueMapArgsString [StringNullableArgument] |
+  ValueMapArgsBoolean ValueMapBooleanArgs
+  deriving (Eq, Ord, Read, Show)
+
+_ValueMapArgs = Core.Name "hydra.tinkerpop.gremlin.ValueMapArgs"
+
+_ValueMapArgs_string = Core.Name "string"
+
+_ValueMapArgs_boolean = Core.Name "boolean"
+
+-- | The boolean-flag arguments of a Gremlin valueMap() step
+data ValueMapBooleanArgs =
+  ValueMapBooleanArgs {
+    valueMapBooleanArgsValue :: BooleanArgument,
+    valueMapBooleanArgsKeys :: (Maybe [StringNullableArgument])}
+  deriving (Eq, Ord, Read, Show)
+
+_ValueMapBooleanArgs = Core.Name "hydra.tinkerpop.gremlin.ValueMapBooleanArgs"
+
+_ValueMapBooleanArgs_value = Core.Name "value"
+
+_ValueMapBooleanArgs_keys = Core.Name "keys"
+
+-- | The arguments of a Gremlin where() step
+data WhereArgs =
+  WhereArgsPredicate WhereWithPredicateArgs |
+  WhereArgsString StringArgument |
+  WhereArgsTraversal NestedTraversal
+  deriving (Eq, Ord, Read, Show)
+
+_WhereArgs = Core.Name "hydra.tinkerpop.gremlin.WhereArgs"
+
+_WhereArgs_predicate = Core.Name "predicate"
+
+_WhereArgs_string = Core.Name "string"
+
+_WhereArgs_traversal = Core.Name "traversal"
+
+-- | The arguments of a Gremlin where() step qualified by a predicate
+data WhereWithPredicateArgs =
+  WhereWithPredicateArgs {
+    whereWithPredicateArgsLeftArg :: (Maybe StringArgument),
+    whereWithPredicateArgsPredicate :: TraversalPredicate}
+  deriving (Eq, Ord, Read, Show)
+
+_WhereWithPredicateArgs = Core.Name "hydra.tinkerpop.gremlin.WhereWithPredicateArgs"
+
+_WhereWithPredicateArgs_leftArg = Core.Name "leftArg"
+
+_WhereWithPredicateArgs_predicate = Core.Name "predicate"
+
+-- | The arguments of a Gremlin with() modulator
+data WithArgs =
+  WithArgs {
+    withArgsKeys :: WithArgsKeys,
+    withArgsValues :: (Maybe WithArgsValues)}
+  deriving (Eq, Ord, Read, Show)
+
+_WithArgs = Core.Name "hydra.tinkerpop.gremlin.WithArgs"
+
+_WithArgs_keys = Core.Name "keys"
+
+_WithArgs_values = Core.Name "values"
+
+-- | The named keys accepted by a Gremlin with() modulator
+data WithArgsKeys =
+  WithArgsKeysWithOption WithOptionKeys |
+  WithArgsKeysString StringArgument
+  deriving (Eq, Ord, Read, Show)
+
+_WithArgsKeys = Core.Name "hydra.tinkerpop.gremlin.WithArgsKeys"
+
+_WithArgsKeys_withOption = Core.Name "withOption"
+
+_WithArgsKeys_string = Core.Name "string"
+
+-- | The named values accepted by a Gremlin with() modulator
+data WithArgsValues =
+  WithArgsValuesWithOptions WithOptionsValues |
+  WithArgsValuesIo IoOptionsValues |
+  WithArgsValuesObject GenericLiteralArgument
+  deriving (Eq, Ord, Read, Show)
+
+_WithArgsValues = Core.Name "hydra.tinkerpop.gremlin.WithArgsValues"
+
+_WithArgsValues_withOptions = Core.Name "withOptions"
+
+_WithArgsValues_io = Core.Name "io"
+
+_WithArgsValues_object = Core.Name "object"
+
+-- | The named option keys accepted by a Gremlin with() modulator
+data WithOptionKeys =
+  WithOptionKeysShortestPath ShortestPathConstants |
+  WithOptionKeysConnectedComponent ConnectedComponentConstants |
+  WithOptionKeysPageRank PageRankConstants |
+  WithOptionKeysPeerPressure PeerPressureConstants |
+  WithOptionKeysIo IoOptionsKeys |
+  WithOptionKeysWithOptionsTokens |
+  WithOptionKeysWithOptionsIndexer
+  deriving (Eq, Ord, Read, Show)
+
+_WithOptionKeys = Core.Name "hydra.tinkerpop.gremlin.WithOptionKeys"
+
+_WithOptionKeys_shortestPath = Core.Name "shortestPath"
+
+_WithOptionKeys_connectedComponent = Core.Name "connectedComponent"
+
+_WithOptionKeys_pageRank = Core.Name "pageRank"
+
+_WithOptionKeys_peerPressure = Core.Name "peerPressure"
+
+_WithOptionKeys_io = Core.Name "io"
+
+_WithOptionKeys_withOptionsTokens = Core.Name "withOptionsTokens"
+
+_WithOptionKeys_withOptionsIndexer = Core.Name "withOptionsIndexer"
+
+-- | The named option values accepted by a Gremlin with() modulator
+data WithOptionsValues =
+  WithOptionsValuesTokens |
+  WithOptionsValuesNone |
+  WithOptionsValuesIds |
+  WithOptionsValuesLabels |
+  WithOptionsValuesKeys |
+  WithOptionsValuesValues |
+  WithOptionsValuesAll |
+  WithOptionsValuesList |
+  WithOptionsValuesMap
+  deriving (Eq, Ord, Read, Show)
+
+_WithOptionsValues = Core.Name "hydra.tinkerpop.gremlin.WithOptionsValues"
+
+_WithOptionsValues_tokens = Core.Name "tokens"
+
+_WithOptionsValues_none = Core.Name "none"
+
+_WithOptionsValues_ids = Core.Name "ids"
+
+_WithOptionsValues_labels = Core.Name "labels"
+
+_WithOptionsValues_keys = Core.Name "keys"
+
+_WithOptionsValues_values = Core.Name "values"
+
+_WithOptionsValues_all = Core.Name "all"
+
+_WithOptionsValues_list = Core.Name "list"
+
+_WithOptionsValues_map = Core.Name "map"
+
+-- | The arguments of a Gremlin withSack() step
+data WithSackArgs =
+  WithSackArgs {
+    withSackArgsInitialValue :: GenericLiteralArgument,
+    withSackArgsBiFunction :: (Maybe TraversalBiFunctionArgument)}
+  deriving (Eq, Ord, Read, Show)
+
+_WithSackArgs = Core.Name "hydra.tinkerpop.gremlin.WithSackArgs"
+
+_WithSackArgs_initialValue = Core.Name "initialValue"
+
 _WithSackArgs_biFunction = Core.Name "biFunction"
diff --git a/src/main/haskell/Hydra/Tinkerpop/Language.hs b/src/main/haskell/Hydra/Tinkerpop/Language.hs
--- a/src/main/haskell/Hydra/Tinkerpop/Language.hs
+++ b/src/main/haskell/Hydra/Tinkerpop/Language.hs
@@ -1,10 +1,13 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Language constraints based on TinkerPop Graph.Features
 
 module Hydra.Tinkerpop.Language where
+
 import qualified Hydra.Ast as Ast
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
+import qualified Hydra.Docs as Docs
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.File as ErrorFile
@@ -21,6 +24,7 @@
 import qualified Hydra.Parsing as Parsing
 import qualified Hydra.Paths as Paths
 import qualified Hydra.Query as Query
+import qualified Hydra.Regex as Regex
 import qualified Hydra.Relational as Relational
 import qualified Hydra.Strip as Strip
 import qualified Hydra.System as System
@@ -36,6 +40,7 @@
 import qualified Hydra.Variants as Variants
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
+
 -- | Populate language constraints based on TinkerPop Graph.Features
 tinkerpopLanguage :: Coders.LanguageName -> Features.Features -> Features.ExtraFeatures t0 -> Coders.Language
 tinkerpopLanguage name features extras =
diff --git a/src/main/haskell/Hydra/Validate/Neo4j.hs b/src/main/haskell/Hydra/Validate/Neo4j.hs
--- a/src/main/haskell/Hydra/Validate/Neo4j.hs
+++ b/src/main/haskell/Hydra/Validate/Neo4j.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Validation functions for Neo4j property graphs
 
 module Hydra.Validate.Neo4j where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Error.Neo4j as Neo4j
 import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality
@@ -16,6 +18,7 @@
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Set as S
+
 -- | All Neo4j validation rule names, as fully qualified 'hydra.error.neo4j.<UnionType>.<variant>' strings.
 allNeo4jRuleNames :: [Core.Name]
 allNeo4jRuleNames =
@@ -34,6 +37,7 @@
       (Core.Name "hydra.error.neo4j.InvalidRelationshipError.startNodeNotFound"),
       (Core.Name "hydra.error.neo4j.InvalidRelationshipError.uniquenessViolation"),
       (Core.Name "hydra.error.neo4j.InvalidRelationshipError.wrongPropertyType")]
+
 -- | Append a rule-tagged InvalidNodeError finding to a ValidationResult, classifying as error or warning per the profile and respecting maxErrors/maxWarnings bounds.
 appendFindingNode :: Validation.ValidationProfile -> Validation.ValidationResult t0 -> Maybe (Core.Name, t0) -> Validation.ValidationResult t0
 appendFindingNode p acc finding =
@@ -47,6 +51,7 @@
         Validation.validationResultWarnings = wrns}) acc) (Logic.ifElse (Sets.member ruleName (Validation.validationProfileWarningRules p)) (Logic.ifElse (Equality.lt (Lists.length wrns) (Validation.validationProfileMaxWarnings p)) (Validation.ValidationResult {
         Validation.validationResultErrors = errs,
         Validation.validationResultWarnings = (Lists.concat2 wrns (Lists.singleton payload))}) acc) acc)))
+
 -- | Append a rule-tagged InvalidRelationshipError finding to a ValidationResult.
 appendFindingRelationship :: Validation.ValidationProfile -> Validation.ValidationResult t0 -> Maybe (Core.Name, t0) -> Validation.ValidationResult t0
 appendFindingRelationship p acc finding =
@@ -60,6 +65,7 @@
         Validation.validationResultWarnings = wrns}) acc) (Logic.ifElse (Sets.member ruleName (Validation.validationProfileWarningRules p)) (Logic.ifElse (Equality.lt (Lists.length wrns) (Validation.validationProfileMaxWarnings p)) (Validation.ValidationResult {
         Validation.validationResultErrors = errs,
         Validation.validationResultWarnings = (Lists.concat2 wrns (Lists.singleton payload))}) acc) acc)))
+
 -- | The default (open-world) validation profile for Neo4j validation. Every rule except the closed-world noSuchLabel/noSuchType rules is classified as an error; no warnings; maxErrors=1, maxWarnings=20.
 defaultNeo4jProfile :: Validation.ValidationProfile
 defaultNeo4jProfile =
@@ -80,16 +86,19 @@
       Validation.validationProfileWarningRules = Sets.empty,
       Validation.validationProfileMaxErrors = 1,
       Validation.validationProfileMaxWarnings = 20}
+
 -- | True iff the given rule name appears in the profile's errorRules or warningRules.
 enabledNeo4j :: Validation.ValidationProfile -> Core.Name -> Bool
 enabledNeo4j p ruleName =
     Logic.or (Sets.member ruleName (Validation.validationProfileErrorRules p)) (Sets.member ruleName (Validation.validationProfileWarningRules p))
+
 -- | Given a list of nodes, return a function from element id to that node's labels (or nothing if no node has that id).
 labelsForId :: [Model.Node] -> Model.ElementId -> Maybe (S.Set Model.NodeLabel)
 labelsForId nodes eid =
 
       let m = Maps.fromList (Lists.map (\n -> (Model.unElementId (Model.nodeId n), (Model.nodeLabels n))) nodes)
       in (Maps.lookup (Model.unElementId eid) m)
+
 -- | True iff the given Value has the kind required by the given ValueType.
 matchesValueType :: Model.ValueType -> Model.Value -> Bool
 matchesValueType vt v =
@@ -134,6 +143,7 @@
         Model.ValueList _ -> True
         _ -> False
       Model.ValueTypeUnion v0 -> Lists.foldl (\acc -> \m -> Logic.or acc (matchesValueType m v)) False v0
+
 -- | The strict (closed-world) validation profile for Neo4j validation. Like the default, but a node or relationship that matches no element type is also an error.
 strictNeo4jProfile :: Validation.ValidationProfile
 strictNeo4jProfile =
@@ -156,6 +166,7 @@
       Validation.validationProfileWarningRules = Sets.empty,
       Validation.validationProfileMaxErrors = 1,
       Validation.validationProfileMaxWarnings = 20}
+
 -- | Validate a Neo4j graph (nodes and relationships) against a GraphType under the given ValidationProfile, returning a ValidationResult InvalidGraphError. Each element is validated element-wise and its findings lifted into graph-level findings tagged with the element id. Cross-element uniqueness/key checks are not yet performed.
 validateGraph :: Validation.ValidationProfile -> Model.GraphType -> [Model.Node] -> [Model.Relationship] -> Validation.ValidationResult Neo4j.InvalidGraphError
 validateGraph p gt nodes rels =
@@ -173,6 +184,7 @@
       in Validation.ValidationResult {
         Validation.validationResultErrors = allErrs,
         Validation.validationResultWarnings = []}
+
 -- | Validate a node against a GraphType under the given ValidationProfile, returning a ValidationResult InvalidNodeError. The node is checked against every node element type whose identifying label it carries; a node matching none is valid unless the closed-world noSuchLabel rule is enabled.
 validateNode :: Validation.ValidationProfile -> Model.GraphType -> Model.Node -> Validation.ValidationResult Neo4j.InvalidNodeError
 validateNode p gt el =
@@ -201,6 +213,7 @@
       in (Lists.foldl (\acc -> \guarded -> Logic.ifElse (Equality.gte (Lists.length (Validation.validationResultErrors acc)) (Validation.validationProfileMaxErrors p)) acc (appendFindingNode p acc guarded)) (Validation.ValidationResult {
         Validation.validationResultErrors = [],
         Validation.validationResultWarnings = []}) (Lists.cons noMatchCheck matchChecks))
+
 -- | Validate a relationship against a GraphType under the given ValidationProfile, returning a ValidationResult InvalidRelationshipError. Endpoint labels select the applicable (possibly overloaded) relationship element type; property constraints of the matched type are enforced.
 validateRelationship :: Validation.ValidationProfile -> Maybe (Model.ElementId -> Maybe (S.Set Model.NodeLabel)) -> Model.GraphType -> Model.Relationship -> Validation.ValidationResult Neo4j.InvalidRelationshipError
 validateRelationship p labelsForId gt rel =
diff --git a/src/main/haskell/Hydra/Validate/Pg.hs b/src/main/haskell/Hydra/Validate/Pg.hs
--- a/src/main/haskell/Hydra/Validate/Pg.hs
+++ b/src/main/haskell/Hydra/Validate/Pg.hs
@@ -1,7 +1,9 @@
 -- Note: this is an automatically generated file. Do not edit.
+
 -- | Validation functions for property graphs
 
 module Hydra.Validate.Pg where
+
 import qualified Hydra.Core as Core
 import qualified Hydra.Error.Pg as Pg
 import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality
@@ -16,6 +18,7 @@
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+
 -- | Append a rule-tagged InvalidEdgeError finding to a ValidationResult.
 appendFindingEdge :: Validation.ValidationProfile -> Validation.ValidationResult t0 -> Maybe (Core.Name, t0) -> Validation.ValidationResult t0
 appendFindingEdge p acc finding =
@@ -29,6 +32,7 @@
         Validation.validationResultWarnings = wrns}) acc) (Logic.ifElse (Sets.member ruleName (Validation.validationProfileWarningRules p)) (Logic.ifElse (Equality.lt (Lists.length wrns) (Validation.validationProfileMaxWarnings p)) (Validation.ValidationResult {
         Validation.validationResultErrors = errs,
         Validation.validationResultWarnings = (Lists.concat2 wrns (Lists.singleton payload))}) acc) acc)))
+
 -- | Append a rule-tagged InvalidGraphError finding to a ValidationResult.
 appendFindingGraph :: Validation.ValidationProfile -> Validation.ValidationResult t0 -> Maybe (Core.Name, t0) -> Validation.ValidationResult t0
 appendFindingGraph p acc finding =
@@ -42,6 +46,7 @@
         Validation.validationResultWarnings = wrns}) acc) (Logic.ifElse (Sets.member ruleName (Validation.validationProfileWarningRules p)) (Logic.ifElse (Equality.lt (Lists.length wrns) (Validation.validationProfileMaxWarnings p)) (Validation.ValidationResult {
         Validation.validationResultErrors = errs,
         Validation.validationResultWarnings = (Lists.concat2 wrns (Lists.singleton payload))}) acc) acc)))
+
 -- | Append a rule-tagged InvalidElementPropertyError finding to a ValidationResult.
 appendFindingProperty :: Validation.ValidationProfile -> Validation.ValidationResult t0 -> Maybe (Core.Name, t0) -> Validation.ValidationResult t0
 appendFindingProperty p acc finding =
@@ -55,6 +60,7 @@
         Validation.validationResultWarnings = wrns}) acc) (Logic.ifElse (Sets.member ruleName (Validation.validationProfileWarningRules p)) (Logic.ifElse (Equality.lt (Lists.length wrns) (Validation.validationProfileMaxWarnings p)) (Validation.ValidationResult {
         Validation.validationResultErrors = errs,
         Validation.validationResultWarnings = (Lists.concat2 wrns (Lists.singleton payload))}) acc) acc)))
+
 -- | Append a rule-tagged InvalidVertexError finding to a ValidationResult, classifying as error or warning per the profile and respecting maxErrors/maxWarnings bounds.
 appendFindingVertex :: Validation.ValidationProfile -> Validation.ValidationResult t0 -> Maybe (Core.Name, t0) -> Validation.ValidationResult t0
 appendFindingVertex p acc finding =
@@ -68,6 +74,7 @@
         Validation.validationResultWarnings = wrns}) acc) (Logic.ifElse (Sets.member ruleName (Validation.validationProfileWarningRules p)) (Logic.ifElse (Equality.lt (Lists.length wrns) (Validation.validationProfileMaxWarnings p)) (Validation.ValidationResult {
         Validation.validationResultErrors = errs,
         Validation.validationResultWarnings = (Lists.concat2 wrns (Lists.singleton payload))}) acc) acc)))
+
 -- | The default validation profile for property-graph validation. Every PG rule classified as an error; no warnings; maxErrors=1, maxWarnings=20.
 defaultPgProfile :: Validation.ValidationProfile
 defaultPgProfile =
@@ -89,10 +96,12 @@
       Validation.validationProfileWarningRules = Sets.empty,
       Validation.validationProfileMaxErrors = 1,
       Validation.validationProfileMaxWarnings = 20}
+
 -- | True iff the given rule name appears in the profile's errorRules or warningRules.
 enabledPg :: Validation.ValidationProfile -> Core.Name -> Bool
 enabledPg p ruleName =
     Logic.or (Sets.member ruleName (Validation.validationProfileErrorRules p)) (Sets.member ruleName (Validation.validationProfileWarningRules p))
+
 -- | Validate an edge against its EdgeType under the given ValidationProfile, returning a ValidationResult InvalidEdgeError.
 validateEdge :: Validation.ValidationProfile -> (t0 -> t1 -> Maybe Pg.InvalidValueError) -> Maybe (t1 -> Maybe Model.VertexLabel) -> Model.EdgeType t0 -> Model.Edge t1 -> Validation.ValidationResult Pg.InvalidEdgeError
 validateEdge p checkValue labelForVertexId typ el =
@@ -114,6 +123,7 @@
       (Logic.ifElse (enabledPg p (Core.Name "hydra.error.pg.InvalidEdgeError.inVertexLabel")) (Optionals.map (\f -> (Core.Name "hydra.error.pg.InvalidEdgeError.inVertexLabel", f)) (Optionals.cases labelForVertexId Nothing (\f -> Optionals.cases (f (Model.edgeIn el)) Nothing (\label -> Logic.ifElse (Equality.equal (Model.unVertexLabel label) (Model.unVertexLabel (Model.edgeTypeIn typ))) Nothing (Just (Pg.InvalidEdgeErrorInVertexLabel (Pg.WrongVertexLabelError {
         Pg.wrongVertexLabelErrorExpected = (Model.edgeTypeIn typ),
         Pg.wrongVertexLabelErrorActual = label}))))))) Nothing)]
+
 -- | Validate a property graph against a GraphSchema under the given ValidationProfile, threading a ValidationResult InvalidGraphError accumulator. Errors hard-stop traversal once maxErrors is reached.
 validateGraph :: Ord t0 => (Validation.ValidationProfile -> Validation.ValidationResult (Pg.InvalidGraphError t0) -> (t1 -> t0 -> Maybe Pg.InvalidValueError) -> Model.GraphSchema t1 -> Model.Graph t0 -> Validation.ValidationResult (Pg.InvalidGraphError t0))
 validateGraph p acc0 checkValue schema graph =
@@ -149,6 +159,7 @@
       in Validation.ValidationResult {
         Validation.validationResultErrors = newErrs,
         Validation.validationResultWarnings = (Validation.validationResultWarnings acc0)}
+
 -- | Validate a map of properties against a list of PropertyType under the given ValidationProfile, returning a ValidationResult InvalidElementPropertyError.
 validateProperties :: Validation.ValidationProfile -> (t0 -> t1 -> Maybe Pg.InvalidValueError) -> [Model.PropertyType t0] -> M.Map Model.PropertyKey t1 -> Validation.ValidationResult Pg.InvalidElementPropertyError
 validateProperties p checkValue types props =
@@ -172,6 +183,7 @@
       in (Lists.foldl (\acc -> \guarded -> Logic.ifElse (Equality.gte (Lists.length (Validation.validationResultErrors acc)) (Validation.validationProfileMaxErrors p)) acc (appendFindingProperty p acc guarded)) (Validation.ValidationResult {
         Validation.validationResultErrors = [],
         Validation.validationResultWarnings = []}) (Lists.concat2 missingChecks valueChecks))
+
 -- | Validate a vertex against its VertexType under the given ValidationProfile, returning a ValidationResult InvalidVertexError.
 validateVertex :: Validation.ValidationProfile -> (t0 -> t1 -> Maybe Pg.InvalidValueError) -> Model.VertexType t0 -> Model.Vertex t1 -> Validation.ValidationResult Pg.InvalidVertexError
 validateVertex p checkValue typ el =
diff --git a/src/main/haskell/OpenGql/Grammar.hs b/src/main/haskell/OpenGql/Grammar.hs
--- a/src/main/haskell/OpenGql/Grammar.hs
+++ b/src/main/haskell/OpenGql/Grammar.hs
@@ -1,4482 +1,7787 @@
 -- Note: this is an automatically generated file. Do not edit.
--- | A GQL model based on the OpenGQL ANTLR grammar, version 15b256b (2024-09-05), available at: https://github.com/opengql/grammar/blob/main/GQL.g4
-
-module OpenGql.Grammar 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 GqlProgram =
-  GqlProgram {
-    gqlProgramActivity :: (Maybe ProgramActivity),
-    gqlProgramClose :: (Maybe SessionCloseCommand)}
-  deriving (Eq, Ord, Read, Show)
-_GqlProgram = Core.Name "openGql.grammar.GqlProgram"
-_GqlProgram_activity = Core.Name "activity"
-_GqlProgram_close = Core.Name "close"
-data ProgramActivity =
-  ProgramActivitySession SessionActivity |
-  ProgramActivityTransaction TransactionActivity
-  deriving (Eq, Ord, Read, Show)
-_ProgramActivity = Core.Name "openGql.grammar.ProgramActivity"
-_ProgramActivity_session = Core.Name "session"
-_ProgramActivity_transaction = Core.Name "transaction"
-data SessionActivity =
-  SessionActivityReset [SessionResetCommand] |
-  SessionActivitySetAndResetCommands SessionSetAndResetCommands
-  deriving (Eq, Ord, Read, Show)
-_SessionActivity = Core.Name "openGql.grammar.SessionActivity"
-_SessionActivity_reset = Core.Name "reset"
-_SessionActivity_setAndResetCommands = Core.Name "setAndResetCommands"
-data SessionSetAndResetCommands =
-  SessionSetAndResetCommands {
-    sessionSetAndResetCommandsSet :: [SessionSetCommand],
-    sessionSetAndResetCommandsReset :: [SessionResetCommand]}
-  deriving (Eq, Ord, Read, Show)
-_SessionSetAndResetCommands = Core.Name "openGql.grammar.SessionSetAndResetCommands"
-_SessionSetAndResetCommands_set = Core.Name "set"
-_SessionSetAndResetCommands_reset = Core.Name "reset"
-data TransactionActivity =
-  TransactionActivityStart StartAndMaybeProcedureAndMaybeEnd |
-  TransactionActivityProcedure ProcedureAndMaybeEnd |
-  TransactionActivityEnd EndTransactionCommand
-  deriving (Eq, Ord, Read, Show)
-_TransactionActivity = Core.Name "openGql.grammar.TransactionActivity"
-_TransactionActivity_start = Core.Name "start"
-_TransactionActivity_procedure = Core.Name "procedure"
-_TransactionActivity_end = Core.Name "end"
-data StartAndMaybeProcedureAndMaybeEnd =
-  StartAndMaybeProcedureAndMaybeEnd {
-    startAndMaybeProcedureAndMaybeEndStart :: StartTransactionCommand,
-    startAndMaybeProcedureAndMaybeEndProcedureAndEnd :: (Maybe ProcedureAndMaybeEnd)}
-  deriving (Eq, Ord, Read, Show)
-_StartAndMaybeProcedureAndMaybeEnd = Core.Name "openGql.grammar.StartAndMaybeProcedureAndMaybeEnd"
-_StartAndMaybeProcedureAndMaybeEnd_start = Core.Name "start"
-_StartAndMaybeProcedureAndMaybeEnd_procedureAndEnd = Core.Name "procedureAndEnd"
-data ProcedureAndMaybeEnd =
-  ProcedureAndMaybeEnd {
-    procedureAndMaybeEndProcedure :: ProcedureSpecification,
-    procedureAndMaybeEndEnd :: (Maybe EndTransactionCommand)}
-  deriving (Eq, Ord, Read, Show)
-_ProcedureAndMaybeEnd = Core.Name "openGql.grammar.ProcedureAndMaybeEnd"
-_ProcedureAndMaybeEnd_procedure = Core.Name "procedure"
-_ProcedureAndMaybeEnd_end = Core.Name "end"
-data EndTransactionCommand =
-  EndTransactionCommandRollback RollbackCommand |
-  EndTransactionCommandCommit CommitCommand
-  deriving (Eq, Ord, Read, Show)
-_EndTransactionCommand = Core.Name "openGql.grammar.EndTransactionCommand"
-_EndTransactionCommand_rollback = Core.Name "rollback"
-_EndTransactionCommand_commit = Core.Name "commit"
-data SessionSetCommand =
-  SessionSetCommandSchema SessionSetSchemaClause |
-  SessionSetCommandGraph SessionSetGraphClause |
-  SessionSetCommandTimeZone SessionSetTimeZoneClause |
-  SessionSetCommandParameter SessionSetParameterClause
-  deriving (Eq, Ord, Read, Show)
-_SessionSetCommand = Core.Name "openGql.grammar.SessionSetCommand"
-_SessionSetCommand_schema = Core.Name "schema"
-_SessionSetCommand_graph = Core.Name "graph"
-_SessionSetCommand_timeZone = Core.Name "timeZone"
-_SessionSetCommand_parameter = Core.Name "parameter"
-type SessionSetSchemaClause = SchemaReference
-_SessionSetSchemaClause = Core.Name "openGql.grammar.SessionSetSchemaClause"
-type SessionSetGraphClause = GraphExpression
-_SessionSetGraphClause = Core.Name "openGql.grammar.SessionSetGraphClause"
-type SessionSetTimeZoneClause = SetTimeZoneValue
-_SessionSetTimeZoneClause = Core.Name "openGql.grammar.SessionSetTimeZoneClause"
-type SetTimeZoneValue = TimeZoneString
-_SetTimeZoneValue = Core.Name "openGql.grammar.SetTimeZoneValue"
-data SessionSetParameterClause =
-  SessionSetParameterClauseGraph SessionSetGraphParameterClause |
-  SessionSetParameterClauseBindings SessionSetBindingTableParameterClause |
-  SessionSetParameterClauseValue SessionSetValueParameterClause
-  deriving (Eq, Ord, Read, Show)
-_SessionSetParameterClause = Core.Name "openGql.grammar.SessionSetParameterClause"
-_SessionSetParameterClause_graph = Core.Name "graph"
-_SessionSetParameterClause_bindings = Core.Name "bindings"
-_SessionSetParameterClause_value = Core.Name "value"
-data SessionSetGraphParameterClause =
-  SessionSetGraphParameterClause {
-    sessionSetGraphParameterClauseGraph :: SessionSetParameterName,
-    sessionSetGraphParameterClauseInitializer :: OptTypedGraphInitializer}
-  deriving (Eq, Ord, Read, Show)
-_SessionSetGraphParameterClause = Core.Name "openGql.grammar.SessionSetGraphParameterClause"
-_SessionSetGraphParameterClause_graph = Core.Name "graph"
-_SessionSetGraphParameterClause_initializer = Core.Name "initializer"
-data SessionSetBindingTableParameterClause =
-  SessionSetBindingTableParameterClause {
-    sessionSetBindingTableParameterClauseBinding :: Bool,
-    sessionSetBindingTableParameterClauseParam :: SessionSetParameterName,
-    sessionSetBindingTableParameterClauseInit :: OptTypedBindingTableInitializer}
-  deriving (Eq, Ord, Read, Show)
-_SessionSetBindingTableParameterClause = Core.Name "openGql.grammar.SessionSetBindingTableParameterClause"
-_SessionSetBindingTableParameterClause_binding = Core.Name "binding"
-_SessionSetBindingTableParameterClause_param = Core.Name "param"
-_SessionSetBindingTableParameterClause_init = Core.Name "init"
-data SessionSetValueParameterClause =
-  SessionSetValueParameterClause {
-    sessionSetValueParameterClauseValue :: SessionSetParameterName,
-    sessionSetValueParameterClauseInitializer :: OptTypedValueInitializer}
-  deriving (Eq, Ord, Read, Show)
-_SessionSetValueParameterClause = Core.Name "openGql.grammar.SessionSetValueParameterClause"
-_SessionSetValueParameterClause_value = Core.Name "value"
-_SessionSetValueParameterClause_initializer = Core.Name "initializer"
-data SessionSetParameterName =
-  SessionSetParameterName {
-    sessionSetParameterNameIfNotExists :: Bool,
-    sessionSetParameterNameParameter :: SessionParameterSpecification}
-  deriving (Eq, Ord, Read, Show)
-_SessionSetParameterName = Core.Name "openGql.grammar.SessionSetParameterName"
-_SessionSetParameterName_ifNotExists = Core.Name "ifNotExists"
-_SessionSetParameterName_parameter = Core.Name "parameter"
-type SessionResetCommand = (Maybe SessionResetArguments)
-_SessionResetCommand = Core.Name "openGql.grammar.SessionResetCommand"
-data SessionResetArguments =
-  SessionResetArgumentsParametersOrCharacteristics AllParametersOrCharacteristics |
-  SessionResetArgumentsSchema |
-  SessionResetArgumentsGraph |
-  SessionResetArgumentsTimeZone |
-  SessionResetArgumentsParameterSessionSpecification ParameterSessionSpecification
-  deriving (Eq, Ord, Read, Show)
-_SessionResetArguments = Core.Name "openGql.grammar.SessionResetArguments"
-_SessionResetArguments_parametersOrCharacteristics = Core.Name "parametersOrCharacteristics"
-_SessionResetArguments_schema = Core.Name "schema"
-_SessionResetArguments_graph = Core.Name "graph"
-_SessionResetArguments_timeZone = Core.Name "timeZone"
-_SessionResetArguments_parameterSessionSpecification = Core.Name "parameterSessionSpecification"
-data AllParametersOrCharacteristics =
-  AllParametersOrCharacteristics {
-    allParametersOrCharacteristicsAll :: Bool,
-    allParametersOrCharacteristicsType :: ParametersOrCharacteristics}
-  deriving (Eq, Ord, Read, Show)
-_AllParametersOrCharacteristics = Core.Name "openGql.grammar.AllParametersOrCharacteristics"
-_AllParametersOrCharacteristics_all = Core.Name "all"
-_AllParametersOrCharacteristics_type = Core.Name "type"
-data ParametersOrCharacteristics =
-  ParametersOrCharacteristicsParameters |
-  ParametersOrCharacteristicsCharacteristics
-  deriving (Eq, Ord, Read, Show)
-_ParametersOrCharacteristics = Core.Name "openGql.grammar.ParametersOrCharacteristics"
-_ParametersOrCharacteristics_parameters = Core.Name "parameters"
-_ParametersOrCharacteristics_characteristics = Core.Name "characteristics"
-data ParameterSessionSpecification =
-  ParameterSessionSpecification {
-    parameterSessionSpecificationParameter :: Bool,
-    parameterSessionSpecificationSessionParameterSpecification :: SessionParameterSpecification}
-  deriving (Eq, Ord, Read, Show)
-_ParameterSessionSpecification = Core.Name "openGql.grammar.ParameterSessionSpecification"
-_ParameterSessionSpecification_parameter = Core.Name "parameter"
-_ParameterSessionSpecification_sessionParameterSpecification = Core.Name "sessionParameterSpecification"
-type SessionCloseCommand = ()
-_SessionCloseCommand = Core.Name "openGql.grammar.SessionCloseCommand"
-type SessionParameterSpecification = ParameterName
-_SessionParameterSpecification = Core.Name "openGql.grammar.SessionParameterSpecification"
-type StartTransactionCommand = (Maybe TransactionCharacteristics)
-_StartTransactionCommand = Core.Name "openGql.grammar.StartTransactionCommand"
-type TransactionCharacteristics = [TransactionMode]
-_TransactionCharacteristics = Core.Name "openGql.grammar.TransactionCharacteristics"
-type TransactionMode = TransactionAccessMode
-_TransactionMode = Core.Name "openGql.grammar.TransactionMode"
-data TransactionAccessMode =
-  TransactionAccessModeReadOnly |
-  TransactionAccessModeReadWrite
-  deriving (Eq, Ord, Read, Show)
-_TransactionAccessMode = Core.Name "openGql.grammar.TransactionAccessMode"
-_TransactionAccessMode_readOnly = Core.Name "readOnly"
-_TransactionAccessMode_readWrite = Core.Name "readWrite"
-type RollbackCommand = ()
-_RollbackCommand = Core.Name "openGql.grammar.RollbackCommand"
-type CommitCommand = ()
-_CommitCommand = Core.Name "openGql.grammar.CommitCommand"
-type NestedProcedureSpecification = ProcedureSpecification
-_NestedProcedureSpecification = Core.Name "openGql.grammar.NestedProcedureSpecification"
-type ProcedureSpecification = ProcedureBody
-_ProcedureSpecification = Core.Name "openGql.grammar.ProcedureSpecification"
-type NestedDataModifyingProcedureSpecification = ProcedureBody
-_NestedDataModifyingProcedureSpecification = Core.Name "openGql.grammar.NestedDataModifyingProcedureSpecification"
-type NestedQuerySpecification = ProcedureBody
-_NestedQuerySpecification = Core.Name "openGql.grammar.NestedQuerySpecification"
-data ProcedureBody =
-  ProcedureBody {
-    procedureBodyAtSchema :: (Maybe AtSchemaClause),
-    procedureBodyBindings :: (Maybe BindingVariableDefinitionBlock),
-    procedureBodyStatements :: StatementBlock}
-  deriving (Eq, Ord, Read, Show)
-_ProcedureBody = Core.Name "openGql.grammar.ProcedureBody"
-_ProcedureBody_atSchema = Core.Name "atSchema"
-_ProcedureBody_bindings = Core.Name "bindings"
-_ProcedureBody_statements = Core.Name "statements"
-type BindingVariableDefinitionBlock = [BindingVariableDefinition]
-_BindingVariableDefinitionBlock = Core.Name "openGql.grammar.BindingVariableDefinitionBlock"
-data BindingVariableDefinition =
-  BindingVariableDefinitionGraph GraphVariableDefinition |
-  BindingVariableDefinitionTable BindingTableVariableDefinition |
-  BindingVariableDefinitionValue ValueVariableDefinition
-  deriving (Eq, Ord, Read, Show)
-_BindingVariableDefinition = Core.Name "openGql.grammar.BindingVariableDefinition"
-_BindingVariableDefinition_graph = Core.Name "graph"
-_BindingVariableDefinition_table = Core.Name "table"
-_BindingVariableDefinition_value = Core.Name "value"
-data StatementBlock =
-  StatementBlock {
-    statementBlockStatement :: Statement,
-    statementBlockNextStatements :: [NextStatement]}
-  deriving (Eq, Ord, Read, Show)
-_StatementBlock = Core.Name "openGql.grammar.StatementBlock"
-_StatementBlock_statement = Core.Name "statement"
-_StatementBlock_nextStatements = Core.Name "nextStatements"
-data Statement =
-  StatementLinearCatalogModifying LinearCatalogModifyingStatement |
-  StatementLinearDataModifying LinearDataModifyingStatement |
-  StatementCompositeQuery CompositeQueryStatement
-  deriving (Eq, Ord, Read, Show)
-_Statement = Core.Name "openGql.grammar.Statement"
-_Statement_linearCatalogModifying = Core.Name "linearCatalogModifying"
-_Statement_linearDataModifying = Core.Name "linearDataModifying"
-_Statement_compositeQuery = Core.Name "compositeQuery"
-data NextStatement =
-  NextStatement {
-    nextStatementYieldClause :: (Maybe YieldClause),
-    nextStatementStatement :: Statement}
-  deriving (Eq, Ord, Read, Show)
-_NextStatement = Core.Name "openGql.grammar.NextStatement"
-_NextStatement_yieldClause = Core.Name "yieldClause"
-_NextStatement_statement = Core.Name "statement"
-data GraphVariableDefinition =
-  GraphVariableDefinition {
-    graphVariableDefinitionVariable :: BindingVariable,
-    graphVariableDefinitionInitializer :: OptTypedGraphInitializer}
-  deriving (Eq, Ord, Read, Show)
-_GraphVariableDefinition = Core.Name "openGql.grammar.GraphVariableDefinition"
-_GraphVariableDefinition_variable = Core.Name "variable"
-_GraphVariableDefinition_initializer = Core.Name "initializer"
-data OptTypedGraphInitializer =
-  OptTypedGraphInitializer {
-    optTypedGraphInitializerType :: (Maybe TypedGraphReferenceValueType),
-    optTypedGraphInitializerInitializer :: GraphInitializer}
-  deriving (Eq, Ord, Read, Show)
-_OptTypedGraphInitializer = Core.Name "openGql.grammar.OptTypedGraphInitializer"
-_OptTypedGraphInitializer_type = Core.Name "type"
-_OptTypedGraphInitializer_initializer = Core.Name "initializer"
-data TypedGraphReferenceValueType =
-  TypedGraphReferenceValueType {
-    typedGraphReferenceValueTypeTyped :: (Maybe Typed),
-    typedGraphReferenceValueTypeValueType :: GraphReferenceValueType}
-  deriving (Eq, Ord, Read, Show)
-_TypedGraphReferenceValueType = Core.Name "openGql.grammar.TypedGraphReferenceValueType"
-_TypedGraphReferenceValueType_typed = Core.Name "typed"
-_TypedGraphReferenceValueType_valueType = Core.Name "valueType"
-type GraphInitializer = ()
-_GraphInitializer = Core.Name "openGql.grammar.GraphInitializer"
-data BindingTableVariableDefinition =
-  BindingTableVariableDefinition {
-    bindingTableVariableDefinitionBinding :: Bool,
-    bindingTableVariableDefinitionVariable :: BindingVariable,
-    bindingTableVariableDefinitionInitializer :: OptTypedBindingTableInitializer}
-  deriving (Eq, Ord, Read, Show)
-_BindingTableVariableDefinition = Core.Name "openGql.grammar.BindingTableVariableDefinition"
-_BindingTableVariableDefinition_binding = Core.Name "binding"
-_BindingTableVariableDefinition_variable = Core.Name "variable"
-_BindingTableVariableDefinition_initializer = Core.Name "initializer"
-data OptTypedBindingTableInitializer =
-  OptTypedBindingTableInitializer {
-    optTypedBindingTableInitializerType :: (Maybe TypedBindingTableReferenceValueType),
-    optTypedBindingTableInitializerInitializer :: BindingTableInitializer}
-  deriving (Eq, Ord, Read, Show)
-_OptTypedBindingTableInitializer = Core.Name "openGql.grammar.OptTypedBindingTableInitializer"
-_OptTypedBindingTableInitializer_type = Core.Name "type"
-_OptTypedBindingTableInitializer_initializer = Core.Name "initializer"
-data TypedBindingTableReferenceValueType =
-  TypedBindingTableReferenceValueType {
-    typedBindingTableReferenceValueTypeTyped :: (Maybe Typed),
-    typedBindingTableReferenceValueTypeValueType :: BindingTableReferenceValueType}
-  deriving (Eq, Ord, Read, Show)
-_TypedBindingTableReferenceValueType = Core.Name "openGql.grammar.TypedBindingTableReferenceValueType"
-_TypedBindingTableReferenceValueType_typed = Core.Name "typed"
-_TypedBindingTableReferenceValueType_valueType = Core.Name "valueType"
-type BindingTableInitializer = ()
-_BindingTableInitializer = Core.Name "openGql.grammar.BindingTableInitializer"
-data ValueVariableDefinition =
-  ValueVariableDefinition {
-    valueVariableDefinitionVariable :: BindingVariable,
-    valueVariableDefinitionInitializer :: OptTypedValueInitializer}
-  deriving (Eq, Ord, Read, Show)
-_ValueVariableDefinition = Core.Name "openGql.grammar.ValueVariableDefinition"
-_ValueVariableDefinition_variable = Core.Name "variable"
-_ValueVariableDefinition_initializer = Core.Name "initializer"
-data OptTypedValueInitializer =
-  OptTypedValueInitializer {
-    optTypedValueInitializerType :: (Maybe TypedValueType),
-    optTypedValueInitializerInitializer :: ValueInitializer}
-  deriving (Eq, Ord, Read, Show)
-_OptTypedValueInitializer = Core.Name "openGql.grammar.OptTypedValueInitializer"
-_OptTypedValueInitializer_type = Core.Name "type"
-_OptTypedValueInitializer_initializer = Core.Name "initializer"
-data TypedValueType =
-  TypedValueType {
-    typedValueTypeTyped :: (Maybe Typed),
-    typedValueTypeValueType :: ValueType}
-  deriving (Eq, Ord, Read, Show)
-_TypedValueType = Core.Name "openGql.grammar.TypedValueType"
-_TypedValueType_typed = Core.Name "typed"
-_TypedValueType_valueType = Core.Name "valueType"
-type ValueInitializer = ()
-_ValueInitializer = Core.Name "openGql.grammar.ValueInitializer"
-data GraphExpression =
-  GraphExpressionObject ObjectExpressionPrimary |
-  GraphExpressionReference GraphReference |
-  GraphExpressionName ObjectNameOrBindingVariable |
-  GraphExpressionCurrent CurrentGraph
-  deriving (Eq, Ord, Read, Show)
-_GraphExpression = Core.Name "openGql.grammar.GraphExpression"
-_GraphExpression_object = Core.Name "object"
-_GraphExpression_reference = Core.Name "reference"
-_GraphExpression_name = Core.Name "name"
-_GraphExpression_current = Core.Name "current"
-data CurrentGraph =
-  CurrentGraphGraph |
-  CurrentGraphPropertyGraph
-  deriving (Eq, Ord, Read, Show)
-_CurrentGraph = Core.Name "openGql.grammar.CurrentGraph"
-_CurrentGraph_graph = Core.Name "graph"
-_CurrentGraph_propertyGraph = Core.Name "propertyGraph"
-data BindingTableExpression =
-  BindingTableExpressionNested NestedBindingTableQuerySpecification |
-  BindingTableExpressionObject ObjectExpressionPrimary |
-  BindingTableExpressionTable BindingTableReference |
-  BindingTableExpressionName ObjectNameOrBindingVariable
-  deriving (Eq, Ord, Read, Show)
-_BindingTableExpression = Core.Name "openGql.grammar.BindingTableExpression"
-_BindingTableExpression_nested = Core.Name "nested"
-_BindingTableExpression_object = Core.Name "object"
-_BindingTableExpression_table = Core.Name "table"
-_BindingTableExpression_name = Core.Name "name"
-type NestedBindingTableQuerySpecification = ()
-_NestedBindingTableQuerySpecification = Core.Name "openGql.grammar.NestedBindingTableQuerySpecification"
-data ObjectExpressionPrimary =
-  ObjectExpressionPrimaryVariable PrimaryValueExpression |
-  ObjectExpressionPrimaryParenthesized ParenthesizedValueExpression |
-  ObjectExpressionPrimaryNonParenthesized NonParenthesizedPrimaryValueExpressionSpecialCase
-  deriving (Eq, Ord, Read, Show)
-_ObjectExpressionPrimary = Core.Name "openGql.grammar.ObjectExpressionPrimary"
-_ObjectExpressionPrimary_variable = Core.Name "variable"
-_ObjectExpressionPrimary_parenthesized = Core.Name "parenthesized"
-_ObjectExpressionPrimary_nonParenthesized = Core.Name "nonParenthesized"
-type LinearCatalogModifyingStatement = [SimpleCatalogModifyingStatement]
-_LinearCatalogModifyingStatement = Core.Name "openGql.grammar.LinearCatalogModifyingStatement"
-data SimpleCatalogModifyingStatement =
-  SimpleCatalogModifyingStatementPrimitive PrimitiveCatalogModifyingStatement |
-  SimpleCatalogModifyingStatementCallProcedure CallCatalogModifyingProcedureStatement
-  deriving (Eq, Ord, Read, Show)
-_SimpleCatalogModifyingStatement = Core.Name "openGql.grammar.SimpleCatalogModifyingStatement"
-_SimpleCatalogModifyingStatement_primitive = Core.Name "primitive"
-_SimpleCatalogModifyingStatement_callProcedure = Core.Name "callProcedure"
-data PrimitiveCatalogModifyingStatement =
-  PrimitiveCatalogModifyingStatementCreateSchema CreateSchemaStatement |
-  PrimitiveCatalogModifyingStatementDropSchema DropSchemaStatement |
-  PrimitiveCatalogModifyingStatementCreateGraph CreateGraphStatement |
-  PrimitiveCatalogModifyingStatementDropGraph DropGraphStatement |
-  PrimitiveCatalogModifyingStatementCreateGraphType CreateGraphTypeStatement |
-  PrimitiveCatalogModifyingStatementDropGraphType DropGraphTypeStatement
-  deriving (Eq, Ord, Read, Show)
-_PrimitiveCatalogModifyingStatement = Core.Name "openGql.grammar.PrimitiveCatalogModifyingStatement"
-_PrimitiveCatalogModifyingStatement_createSchema = Core.Name "createSchema"
-_PrimitiveCatalogModifyingStatement_dropSchema = Core.Name "dropSchema"
-_PrimitiveCatalogModifyingStatement_createGraph = Core.Name "createGraph"
-_PrimitiveCatalogModifyingStatement_dropGraph = Core.Name "dropGraph"
-_PrimitiveCatalogModifyingStatement_createGraphType = Core.Name "createGraphType"
-_PrimitiveCatalogModifyingStatement_dropGraphType = Core.Name "dropGraphType"
-data CreateSchemaStatement =
-  CreateSchemaStatement {
-    createSchemaStatementIfNotExists :: Bool,
-    createSchemaStatementParentAndName :: CatalogSchemaParentAndName}
-  deriving (Eq, Ord, Read, Show)
-_CreateSchemaStatement = Core.Name "openGql.grammar.CreateSchemaStatement"
-_CreateSchemaStatement_ifNotExists = Core.Name "ifNotExists"
-_CreateSchemaStatement_parentAndName = Core.Name "parentAndName"
-data DropSchemaStatement =
-  DropSchemaStatement {
-    dropSchemaStatementIfExists :: Bool,
-    dropSchemaStatementParentAndName :: CatalogSchemaParentAndName}
-  deriving (Eq, Ord, Read, Show)
-_DropSchemaStatement = Core.Name "openGql.grammar.DropSchemaStatement"
-_DropSchemaStatement_ifExists = Core.Name "ifExists"
-_DropSchemaStatement_parentAndName = Core.Name "parentAndName"
-data CreateGraphStatement =
-  CreateGraphStatement {
-    createGraphStatementCreateOption :: CreateGraphOption,
-    createGraphStatementParentAndName :: CatalogGraphParentAndName,
-    createGraphStatementType :: GraphTypeOption,
-    createGraphStatementSource :: (Maybe GraphSource)}
-  deriving (Eq, Ord, Read, Show)
-_CreateGraphStatement = Core.Name "openGql.grammar.CreateGraphStatement"
-_CreateGraphStatement_createOption = Core.Name "createOption"
-_CreateGraphStatement_parentAndName = Core.Name "parentAndName"
-_CreateGraphStatement_type = Core.Name "type"
-_CreateGraphStatement_source = Core.Name "source"
-data CreateGraphOption =
-  CreateGraphOptionGraphIfNotExists Bool |
-  CreateGraphOptionOrReplace
-  deriving (Eq, Ord, Read, Show)
-_CreateGraphOption = Core.Name "openGql.grammar.CreateGraphOption"
-_CreateGraphOption_graphIfNotExists = Core.Name "graphIfNotExists"
-_CreateGraphOption_orReplace = Core.Name "orReplace"
-data GraphTypeOption =
-  GraphTypeOptionOpenGraphType OpenGraphType |
-  GraphTypeOptionOfGraphType OfGraphType
-  deriving (Eq, Ord, Read, Show)
-_GraphTypeOption = Core.Name "openGql.grammar.GraphTypeOption"
-_GraphTypeOption_openGraphType = Core.Name "openGraphType"
-_GraphTypeOption_ofGraphType = Core.Name "ofGraphType"
-data OpenGraphType =
-  OpenGraphType {
-    openGraphTypeTyped :: (Maybe Typed),
-    openGraphTypeGraph :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_OpenGraphType = Core.Name "openGql.grammar.OpenGraphType"
-_OpenGraphType_typed = Core.Name "typed"
-_OpenGraphType_graph = Core.Name "graph"
-data OfGraphType =
-  OfGraphTypeLikeGraph GraphTypeLikeGraph |
-  OfGraphTypeReference TypedGraphTypeReference |
-  OfGraphTypeNested TypedNestedGraphTypeSpecification
-  deriving (Eq, Ord, Read, Show)
-_OfGraphType = Core.Name "openGql.grammar.OfGraphType"
-_OfGraphType_likeGraph = Core.Name "likeGraph"
-_OfGraphType_reference = Core.Name "reference"
-_OfGraphType_nested = Core.Name "nested"
-type GraphTypeLikeGraph = GraphExpression
-_GraphTypeLikeGraph = Core.Name "openGql.grammar.GraphTypeLikeGraph"
-type GraphSource = GraphExpression
-_GraphSource = Core.Name "openGql.grammar.GraphSource"
-data TypedGraphTypeReference =
-  TypedGraphTypeReference {
-    typedGraphTypeReferenceTyped :: (Maybe Typed),
-    typedGraphTypeReferenceReference :: GraphTypeReference}
-  deriving (Eq, Ord, Read, Show)
-_TypedGraphTypeReference = Core.Name "openGql.grammar.TypedGraphTypeReference"
-_TypedGraphTypeReference_typed = Core.Name "typed"
-_TypedGraphTypeReference_reference = Core.Name "reference"
-data TypedNestedGraphTypeSpecification =
-  TypedNestedGraphTypeSpecification {
-    typedNestedGraphTypeSpecificationTyped :: (Maybe Typed),
-    typedNestedGraphTypeSpecificationGraph :: Bool,
-    typedNestedGraphTypeSpecificationSpecification :: NestedGraphTypeSpecification}
-  deriving (Eq, Ord, Read, Show)
-_TypedNestedGraphTypeSpecification = Core.Name "openGql.grammar.TypedNestedGraphTypeSpecification"
-_TypedNestedGraphTypeSpecification_typed = Core.Name "typed"
-_TypedNestedGraphTypeSpecification_graph = Core.Name "graph"
-_TypedNestedGraphTypeSpecification_specification = Core.Name "specification"
-data DropGraphStatement =
-  DropGraphStatement {
-    dropGraphStatementIfExists :: Bool,
-    dropGraphStatementParentAndName :: CatalogGraphParentAndName}
-  deriving (Eq, Ord, Read, Show)
-_DropGraphStatement = Core.Name "openGql.grammar.DropGraphStatement"
-_DropGraphStatement_ifExists = Core.Name "ifExists"
-_DropGraphStatement_parentAndName = Core.Name "parentAndName"
-data CreateGraphTypeStatement =
-  CreateGraphTypeStatement {
-    createGraphTypeStatementCreateOption :: CreateGraphTypeOption,
-    createGraphTypeStatementParentAndName :: CatalogGraphTypeParentAndName,
-    createGraphTypeStatementSource :: GraphTypeSource}
-  deriving (Eq, Ord, Read, Show)
-_CreateGraphTypeStatement = Core.Name "openGql.grammar.CreateGraphTypeStatement"
-_CreateGraphTypeStatement_createOption = Core.Name "createOption"
-_CreateGraphTypeStatement_parentAndName = Core.Name "parentAndName"
-_CreateGraphTypeStatement_source = Core.Name "source"
-data CreateGraphTypeOption =
-  CreateGraphTypeOptionTypeIfNotExists Bool |
-  CreateGraphTypeOptionOrReplace
-  deriving (Eq, Ord, Read, Show)
-_CreateGraphTypeOption = Core.Name "openGql.grammar.CreateGraphTypeOption"
-_CreateGraphTypeOption_typeIfNotExists = Core.Name "typeIfNotExists"
-_CreateGraphTypeOption_orReplace = Core.Name "orReplace"
-data GraphTypeSource =
-  GraphTypeSourceCopyOf CopyOfGraphType |
-  GraphTypeSourceLikeGraph GraphTypeLikeGraph |
-  GraphTypeSourceNestedSpecification NestedGraphTypeSpecification
-  deriving (Eq, Ord, Read, Show)
-_GraphTypeSource = Core.Name "openGql.grammar.GraphTypeSource"
-_GraphTypeSource_copyOf = Core.Name "copyOf"
-_GraphTypeSource_likeGraph = Core.Name "likeGraph"
-_GraphTypeSource_nestedSpecification = Core.Name "nestedSpecification"
-type CopyOfGraphType = GraphTypeReference
-_CopyOfGraphType = Core.Name "openGql.grammar.CopyOfGraphType"
-data DropGraphTypeStatement =
-  DropGraphTypeStatement {
-    dropGraphTypeStatementIfExists :: Bool,
-    dropGraphTypeStatementParentAndName :: CatalogGraphTypeParentAndName}
-  deriving (Eq, Ord, Read, Show)
-_DropGraphTypeStatement = Core.Name "openGql.grammar.DropGraphTypeStatement"
-_DropGraphTypeStatement_ifExists = Core.Name "ifExists"
-_DropGraphTypeStatement_parentAndName = Core.Name "parentAndName"
-type CallCatalogModifyingProcedureStatement = CallProcedureStatement
-_CallCatalogModifyingProcedureStatement = Core.Name "openGql.grammar.CallCatalogModifyingProcedureStatement"
-data LinearDataModifyingStatement =
-  LinearDataModifyingStatementFocused FocusedLinearDataModifyingStatement |
-  LinearDataModifyingStatementAmbient AmbientLinearDataModifyingStatement
-  deriving (Eq, Ord, Read, Show)
-_LinearDataModifyingStatement = Core.Name "openGql.grammar.LinearDataModifyingStatement"
-_LinearDataModifyingStatement_focused = Core.Name "focused"
-_LinearDataModifyingStatement_ambient = Core.Name "ambient"
-data FocusedLinearDataModifyingStatement =
-  FocusedLinearDataModifyingStatementSimple FocusedLinearDataModifyingStatementBody |
-  FocusedLinearDataModifyingStatementNested FocusedNestedDataModifyingProcedureSpecification
-  deriving (Eq, Ord, Read, Show)
-_FocusedLinearDataModifyingStatement = Core.Name "openGql.grammar.FocusedLinearDataModifyingStatement"
-_FocusedLinearDataModifyingStatement_simple = Core.Name "simple"
-_FocusedLinearDataModifyingStatement_nested = Core.Name "nested"
-data FocusedLinearDataModifyingStatementBody =
-  FocusedLinearDataModifyingStatementBody {
-    focusedLinearDataModifyingStatementBodyUseGraph :: UseGraphClause,
-    focusedLinearDataModifyingStatementBodySimpleAccess :: SimpleLinearDataAccessingStatement,
-    focusedLinearDataModifyingStatementBodyPrimitiveResult :: (Maybe PrimitiveResultStatement)}
-  deriving (Eq, Ord, Read, Show)
-_FocusedLinearDataModifyingStatementBody = Core.Name "openGql.grammar.FocusedLinearDataModifyingStatementBody"
-_FocusedLinearDataModifyingStatementBody_useGraph = Core.Name "useGraph"
-_FocusedLinearDataModifyingStatementBody_simpleAccess = Core.Name "simpleAccess"
-_FocusedLinearDataModifyingStatementBody_primitiveResult = Core.Name "primitiveResult"
-data FocusedNestedDataModifyingProcedureSpecification =
-  FocusedNestedDataModifyingProcedureSpecification {
-    focusedNestedDataModifyingProcedureSpecificationUseGraph :: UseGraphClause,
-    focusedNestedDataModifyingProcedureSpecificationNestedSpec :: NestedDataModifyingProcedureSpecification}
-  deriving (Eq, Ord, Read, Show)
-_FocusedNestedDataModifyingProcedureSpecification =
-    Core.Name "openGql.grammar.FocusedNestedDataModifyingProcedureSpecification"
-_FocusedNestedDataModifyingProcedureSpecification_useGraph = Core.Name "useGraph"
-_FocusedNestedDataModifyingProcedureSpecification_nestedSpec = Core.Name "nestedSpec"
-data AmbientLinearDataModifyingStatement =
-  AmbientLinearDataModifyingStatementSimple AmbientLinearDataModifyingStatementBody |
-  AmbientLinearDataModifyingStatementNested NestedDataModifyingProcedureSpecification
-  deriving (Eq, Ord, Read, Show)
-_AmbientLinearDataModifyingStatement = Core.Name "openGql.grammar.AmbientLinearDataModifyingStatement"
-_AmbientLinearDataModifyingStatement_simple = Core.Name "simple"
-_AmbientLinearDataModifyingStatement_nested = Core.Name "nested"
-data AmbientLinearDataModifyingStatementBody =
-  AmbientLinearDataModifyingStatementBody {
-    ambientLinearDataModifyingStatementBodySimpleAccess :: SimpleLinearDataAccessingStatement,
-    ambientLinearDataModifyingStatementBodyPrimitiveResult :: (Maybe PrimitiveResultStatement)}
-  deriving (Eq, Ord, Read, Show)
-_AmbientLinearDataModifyingStatementBody = Core.Name "openGql.grammar.AmbientLinearDataModifyingStatementBody"
-_AmbientLinearDataModifyingStatementBody_simpleAccess = Core.Name "simpleAccess"
-_AmbientLinearDataModifyingStatementBody_primitiveResult = Core.Name "primitiveResult"
-type SimpleLinearDataAccessingStatement = [SimpleDataAccessingStatement]
-_SimpleLinearDataAccessingStatement = Core.Name "openGql.grammar.SimpleLinearDataAccessingStatement"
-data SimpleDataAccessingStatement =
-  SimpleDataAccessingStatementQuery SimpleQueryStatement |
-  SimpleDataAccessingStatementModifying SimpleDataModifyingStatement
-  deriving (Eq, Ord, Read, Show)
-_SimpleDataAccessingStatement = Core.Name "openGql.grammar.SimpleDataAccessingStatement"
-_SimpleDataAccessingStatement_query = Core.Name "query"
-_SimpleDataAccessingStatement_modifying = Core.Name "modifying"
-data SimpleDataModifyingStatement =
-  SimpleDataModifyingStatementPrimitive PrimitiveDataModifyingStatement |
-  SimpleDataModifyingStatementCallProcedure CallDataModifyingProcedureStatement
-  deriving (Eq, Ord, Read, Show)
-_SimpleDataModifyingStatement = Core.Name "openGql.grammar.SimpleDataModifyingStatement"
-_SimpleDataModifyingStatement_primitive = Core.Name "primitive"
-_SimpleDataModifyingStatement_callProcedure = Core.Name "callProcedure"
-data PrimitiveDataModifyingStatement =
-  PrimitiveDataModifyingStatementInsert InsertStatement |
-  PrimitiveDataModifyingStatementSet SetStatement |
-  PrimitiveDataModifyingStatementRemove RemoveStatement |
-  PrimitiveDataModifyingStatementDelete DeleteStatement
-  deriving (Eq, Ord, Read, Show)
-_PrimitiveDataModifyingStatement = Core.Name "openGql.grammar.PrimitiveDataModifyingStatement"
-_PrimitiveDataModifyingStatement_insert = Core.Name "insert"
-_PrimitiveDataModifyingStatement_set = Core.Name "set"
-_PrimitiveDataModifyingStatement_remove = Core.Name "remove"
-_PrimitiveDataModifyingStatement_delete = Core.Name "delete"
-type InsertStatement = InsertGraphPattern
-_InsertStatement = Core.Name "openGql.grammar.InsertStatement"
-type SetStatement = SetItemList
-_SetStatement = Core.Name "openGql.grammar.SetStatement"
-type SetItemList = [SetItem]
-_SetItemList = Core.Name "openGql.grammar.SetItemList"
-data SetItem =
-  SetItemProperty SetPropertyItem |
-  SetItemAllProperties SetAllPropertiesItem |
-  SetItemLabel SetLabelItem
-  deriving (Eq, Ord, Read, Show)
-_SetItem = Core.Name "openGql.grammar.SetItem"
-_SetItem_property = Core.Name "property"
-_SetItem_allProperties = Core.Name "allProperties"
-_SetItem_label = Core.Name "label"
-data SetPropertyItem =
-  SetPropertyItem {
-    setPropertyItemVariable :: BindingVariableReference,
-    setPropertyItemPropertyName :: PropertyName,
-    setPropertyItemValue :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_SetPropertyItem = Core.Name "openGql.grammar.SetPropertyItem"
-_SetPropertyItem_variable = Core.Name "variable"
-_SetPropertyItem_propertyName = Core.Name "propertyName"
-_SetPropertyItem_value = Core.Name "value"
-data SetAllPropertiesItem =
-  SetAllPropertiesItem {
-    setAllPropertiesItemVariable :: BindingVariableReference,
-    setAllPropertiesItemProperties :: (Maybe PropertyKeyValuePairList)}
-  deriving (Eq, Ord, Read, Show)
-_SetAllPropertiesItem = Core.Name "openGql.grammar.SetAllPropertiesItem"
-_SetAllPropertiesItem_variable = Core.Name "variable"
-_SetAllPropertiesItem_properties = Core.Name "properties"
-data SetLabelItem =
-  SetLabelItem {
-    setLabelItemVariable :: BindingVariableReference,
-    setLabelItemIsOrColon :: IsOrColon,
-    setLabelItemLabel :: LabelName}
-  deriving (Eq, Ord, Read, Show)
-_SetLabelItem = Core.Name "openGql.grammar.SetLabelItem"
-_SetLabelItem_variable = Core.Name "variable"
-_SetLabelItem_isOrColon = Core.Name "isOrColon"
-_SetLabelItem_label = Core.Name "label"
-type RemoveStatement = RemoveItemList
-_RemoveStatement = Core.Name "openGql.grammar.RemoveStatement"
-type RemoveItemList = [RemoveItem]
-_RemoveItemList = Core.Name "openGql.grammar.RemoveItemList"
-data RemoveItem =
-  RemoveItemProperty RemovePropertyItem |
-  RemoveItemLabel RemoveLabelItem
-  deriving (Eq, Ord, Read, Show)
-_RemoveItem = Core.Name "openGql.grammar.RemoveItem"
-_RemoveItem_property = Core.Name "property"
-_RemoveItem_label = Core.Name "label"
-data RemovePropertyItem =
-  RemovePropertyItem {
-    removePropertyItemVariable :: BindingVariableReference,
-    removePropertyItemPropertyName :: PropertyName}
-  deriving (Eq, Ord, Read, Show)
-_RemovePropertyItem = Core.Name "openGql.grammar.RemovePropertyItem"
-_RemovePropertyItem_variable = Core.Name "variable"
-_RemovePropertyItem_propertyName = Core.Name "propertyName"
-data RemoveLabelItem =
-  RemoveLabelItem {
-    removeLabelItemVariable :: BindingVariableReference,
-    removeLabelItemIsOrColon :: IsOrColon,
-    removeLabelItemLabel :: LabelName}
-  deriving (Eq, Ord, Read, Show)
-_RemoveLabelItem = Core.Name "openGql.grammar.RemoveLabelItem"
-_RemoveLabelItem_variable = Core.Name "variable"
-_RemoveLabelItem_isOrColon = Core.Name "isOrColon"
-_RemoveLabelItem_label = Core.Name "label"
-data DeleteStatement =
-  DeleteStatement {
-    deleteStatementDetach :: (Maybe DetachOption),
-    deleteStatementItems :: DeleteItemList}
-  deriving (Eq, Ord, Read, Show)
-_DeleteStatement = Core.Name "openGql.grammar.DeleteStatement"
-_DeleteStatement_detach = Core.Name "detach"
-_DeleteStatement_items = Core.Name "items"
-data DetachOption =
-  DetachOptionDetach |
-  DetachOptionNoDetach
-  deriving (Eq, Ord, Read, Show)
-_DetachOption = Core.Name "openGql.grammar.DetachOption"
-_DetachOption_detach = Core.Name "detach"
-_DetachOption_noDetach = Core.Name "noDetach"
-type DeleteItemList = [DeleteItem]
-_DeleteItemList = Core.Name "openGql.grammar.DeleteItemList"
-type DeleteItem = ValueExpression
-_DeleteItem = Core.Name "openGql.grammar.DeleteItem"
-type CallDataModifyingProcedureStatement = CallProcedureStatement
-_CallDataModifyingProcedureStatement = Core.Name "openGql.grammar.CallDataModifyingProcedureStatement"
-type CompositeQueryStatement = CompositeQueryExpression
-_CompositeQueryStatement = Core.Name "openGql.grammar.CompositeQueryStatement"
-data CompositeQueryExpression =
-  CompositeQueryExpressionSimple CompositeQueryExpressionConjunction |
-  CompositeQueryExpressionPrimary CompositeQueryPrimary
-  deriving (Eq, Ord, Read, Show)
-_CompositeQueryExpression = Core.Name "openGql.grammar.CompositeQueryExpression"
-_CompositeQueryExpression_simple = Core.Name "simple"
-_CompositeQueryExpression_primary = Core.Name "primary"
-data CompositeQueryExpressionConjunction =
-  CompositeQueryExpressionConjunction {
-    compositeQueryExpressionConjunctionLeft :: CompositeQueryExpression,
-    compositeQueryExpressionConjunctionConjunction :: QueryConjunction,
-    compositeQueryExpressionConjunctionRight :: CompositeQueryPrimary}
-  deriving (Eq, Ord, Read, Show)
-_CompositeQueryExpressionConjunction = Core.Name "openGql.grammar.CompositeQueryExpressionConjunction"
-_CompositeQueryExpressionConjunction_left = Core.Name "left"
-_CompositeQueryExpressionConjunction_conjunction = Core.Name "conjunction"
-_CompositeQueryExpressionConjunction_right = Core.Name "right"
-data QueryConjunction =
-  QueryConjunctionSetOperator SetOperator |
-  QueryConjunctionOtherwise
-  deriving (Eq, Ord, Read, Show)
-_QueryConjunction = Core.Name "openGql.grammar.QueryConjunction"
-_QueryConjunction_setOperator = Core.Name "setOperator"
-_QueryConjunction_otherwise = Core.Name "otherwise"
-data SetOperator =
-  SetOperator {
-    setOperatorOperatorType :: SetOperatorType,
-    setOperatorQuantifier :: (Maybe SetQuantifier)}
-  deriving (Eq, Ord, Read, Show)
-_SetOperator = Core.Name "openGql.grammar.SetOperator"
-_SetOperator_operatorType = Core.Name "operatorType"
-_SetOperator_quantifier = Core.Name "quantifier"
-data SetOperatorType =
-  SetOperatorTypeUnion |
-  SetOperatorTypeExcept |
-  SetOperatorTypeIntersect
-  deriving (Eq, Ord, Read, Show)
-_SetOperatorType = Core.Name "openGql.grammar.SetOperatorType"
-_SetOperatorType_union = Core.Name "union"
-_SetOperatorType_except = Core.Name "except"
-_SetOperatorType_intersect = Core.Name "intersect"
-type CompositeQueryPrimary = LinearQueryStatement
-_CompositeQueryPrimary = Core.Name "openGql.grammar.CompositeQueryPrimary"
-data LinearQueryStatement =
-  LinearQueryStatementFocused FocusedLinearQueryStatement |
-  LinearQueryStatementAmbient AmbientLinearQueryStatement
-  deriving (Eq, Ord, Read, Show)
-_LinearQueryStatement = Core.Name "openGql.grammar.LinearQueryStatement"
-_LinearQueryStatement_focused = Core.Name "focused"
-_LinearQueryStatement_ambient = Core.Name "ambient"
-data FocusedLinearQueryStatement =
-  FocusedLinearQueryStatementParts FocusedLinearQueryStatementPartsAndResult |
-  FocusedLinearQueryStatementPrimitive FocusedPrimitiveResultStatement |
-  FocusedLinearQueryStatementNested FocusedNestedQuerySpecification |
-  FocusedLinearQueryStatementSelect SelectStatement
-  deriving (Eq, Ord, Read, Show)
-_FocusedLinearQueryStatement = Core.Name "openGql.grammar.FocusedLinearQueryStatement"
-_FocusedLinearQueryStatement_parts = Core.Name "parts"
-_FocusedLinearQueryStatement_primitive = Core.Name "primitive"
-_FocusedLinearQueryStatement_nested = Core.Name "nested"
-_FocusedLinearQueryStatement_select = Core.Name "select"
-data FocusedLinearQueryStatementPartsAndResult =
-  FocusedLinearQueryStatementPartsAndResult {
-    focusedLinearQueryStatementPartsAndResultParts :: [FocusedLinearQueryStatementPart],
-    focusedLinearQueryStatementPartsAndResultResult :: FocusedLinearQueryAndPrimitiveResultStatementPart}
-  deriving (Eq, Ord, Read, Show)
-_FocusedLinearQueryStatementPartsAndResult = Core.Name "openGql.grammar.FocusedLinearQueryStatementPartsAndResult"
-_FocusedLinearQueryStatementPartsAndResult_parts = Core.Name "parts"
-_FocusedLinearQueryStatementPartsAndResult_result = Core.Name "result"
-data FocusedLinearQueryStatementPart =
-  FocusedLinearQueryStatementPart {
-    focusedLinearQueryStatementPartUseGraph :: UseGraphClause,
-    focusedLinearQueryStatementPartSimple :: SimpleLinearQueryStatement}
-  deriving (Eq, Ord, Read, Show)
-_FocusedLinearQueryStatementPart = Core.Name "openGql.grammar.FocusedLinearQueryStatementPart"
-_FocusedLinearQueryStatementPart_useGraph = Core.Name "useGraph"
-_FocusedLinearQueryStatementPart_simple = Core.Name "simple"
-data FocusedLinearQueryAndPrimitiveResultStatementPart =
-  FocusedLinearQueryAndPrimitiveResultStatementPart {
-    focusedLinearQueryAndPrimitiveResultStatementPartUseGraph :: UseGraphClause,
-    focusedLinearQueryAndPrimitiveResultStatementPartSimple :: SimpleLinearQueryStatement,
-    focusedLinearQueryAndPrimitiveResultStatementPartPrimitiveResult :: PrimitiveResultStatement}
-  deriving (Eq, Ord, Read, Show)
-_FocusedLinearQueryAndPrimitiveResultStatementPart =
-    Core.Name "openGql.grammar.FocusedLinearQueryAndPrimitiveResultStatementPart"
-_FocusedLinearQueryAndPrimitiveResultStatementPart_useGraph = Core.Name "useGraph"
-_FocusedLinearQueryAndPrimitiveResultStatementPart_simple = Core.Name "simple"
-_FocusedLinearQueryAndPrimitiveResultStatementPart_primitiveResult = Core.Name "primitiveResult"
-data FocusedPrimitiveResultStatement =
-  FocusedPrimitiveResultStatement {
-    focusedPrimitiveResultStatementUseGraph :: UseGraphClause,
-    focusedPrimitiveResultStatementPrimitiveResult :: PrimitiveResultStatement}
-  deriving (Eq, Ord, Read, Show)
-_FocusedPrimitiveResultStatement = Core.Name "openGql.grammar.FocusedPrimitiveResultStatement"
-_FocusedPrimitiveResultStatement_useGraph = Core.Name "useGraph"
-_FocusedPrimitiveResultStatement_primitiveResult = Core.Name "primitiveResult"
-data FocusedNestedQuerySpecification =
-  FocusedNestedQuerySpecification {
-    focusedNestedQuerySpecificationUseGraph :: UseGraphClause,
-    focusedNestedQuerySpecificationNested :: NestedQuerySpecification}
-  deriving (Eq, Ord, Read, Show)
-_FocusedNestedQuerySpecification = Core.Name "openGql.grammar.FocusedNestedQuerySpecification"
-_FocusedNestedQuerySpecification_useGraph = Core.Name "useGraph"
-_FocusedNestedQuerySpecification_nested = Core.Name "nested"
-data AmbientLinearQueryStatement =
-  AmbientLinearQueryStatementSimple AmbientLinearQueryStatementSimpleAndPrimitiveResult |
-  AmbientLinearQueryStatementNested NestedQuerySpecification
-  deriving (Eq, Ord, Read, Show)
-_AmbientLinearQueryStatement = Core.Name "openGql.grammar.AmbientLinearQueryStatement"
-_AmbientLinearQueryStatement_simple = Core.Name "simple"
-_AmbientLinearQueryStatement_nested = Core.Name "nested"
-data AmbientLinearQueryStatementSimpleAndPrimitiveResult =
-  AmbientLinearQueryStatementSimpleAndPrimitiveResult {
-    ambientLinearQueryStatementSimpleAndPrimitiveResultSimple :: (Maybe SimpleLinearQueryStatement),
-    ambientLinearQueryStatementSimpleAndPrimitiveResultPrimitiveResult :: PrimitiveResultStatement}
-  deriving (Eq, Ord, Read, Show)
-_AmbientLinearQueryStatementSimpleAndPrimitiveResult =
-    Core.Name "openGql.grammar.AmbientLinearQueryStatementSimpleAndPrimitiveResult"
-_AmbientLinearQueryStatementSimpleAndPrimitiveResult_simple = Core.Name "simple"
-_AmbientLinearQueryStatementSimpleAndPrimitiveResult_primitiveResult = Core.Name "primitiveResult"
-type SimpleLinearQueryStatement = [SimpleQueryStatement]
-_SimpleLinearQueryStatement = Core.Name "openGql.grammar.SimpleLinearQueryStatement"
-data SimpleQueryStatement =
-  SimpleQueryStatementPrimitive PrimitiveQueryStatement |
-  SimpleQueryStatementCall CallQueryStatement
-  deriving (Eq, Ord, Read, Show)
-_SimpleQueryStatement = Core.Name "openGql.grammar.SimpleQueryStatement"
-_SimpleQueryStatement_primitive = Core.Name "primitive"
-_SimpleQueryStatement_call = Core.Name "call"
-data PrimitiveQueryStatement =
-  PrimitiveQueryStatementMatch MatchStatement |
-  PrimitiveQueryStatementLet LetStatement |
-  PrimitiveQueryStatementFor ForStatement |
-  PrimitiveQueryStatementFilter FilterStatement |
-  PrimitiveQueryStatementOrderByAndPage OrderByAndPageStatement
-  deriving (Eq, Ord, Read, Show)
-_PrimitiveQueryStatement = Core.Name "openGql.grammar.PrimitiveQueryStatement"
-_PrimitiveQueryStatement_match = Core.Name "match"
-_PrimitiveQueryStatement_let = Core.Name "let"
-_PrimitiveQueryStatement_for = Core.Name "for"
-_PrimitiveQueryStatement_filter = Core.Name "filter"
-_PrimitiveQueryStatement_orderByAndPage = Core.Name "orderByAndPage"
-data MatchStatement =
-  MatchStatementSimple SimpleMatchStatement |
-  MatchStatementOptional OptionalMatchStatement
-  deriving (Eq, Ord, Read, Show)
-_MatchStatement = Core.Name "openGql.grammar.MatchStatement"
-_MatchStatement_simple = Core.Name "simple"
-_MatchStatement_optional = Core.Name "optional"
-type SimpleMatchStatement = GraphPatternBindingTable
-_SimpleMatchStatement = Core.Name "openGql.grammar.SimpleMatchStatement"
-type OptionalMatchStatement = OptionalOperand
-_OptionalMatchStatement = Core.Name "openGql.grammar.OptionalMatchStatement"
-data OptionalOperand =
-  OptionalOperandSimple SimpleMatchStatement |
-  OptionalOperandBraceBlock MatchStatementBlock |
-  OptionalOperandParenBlock MatchStatementBlock
-  deriving (Eq, Ord, Read, Show)
-_OptionalOperand = Core.Name "openGql.grammar.OptionalOperand"
-_OptionalOperand_simple = Core.Name "simple"
-_OptionalOperand_braceBlock = Core.Name "braceBlock"
-_OptionalOperand_parenBlock = Core.Name "parenBlock"
-type MatchStatementBlock = [MatchStatement]
-_MatchStatementBlock = Core.Name "openGql.grammar.MatchStatementBlock"
-type CallQueryStatement = CallProcedureStatement
-_CallQueryStatement = Core.Name "openGql.grammar.CallQueryStatement"
-data FilterStatement =
-  FilterStatementWhereClause WhereClause |
-  FilterStatementSearchCondition SearchCondition
-  deriving (Eq, Ord, Read, Show)
-_FilterStatement = Core.Name "openGql.grammar.FilterStatement"
-_FilterStatement_whereClause = Core.Name "whereClause"
-_FilterStatement_searchCondition = Core.Name "searchCondition"
-type LetStatement = LetVariableDefinitionList
-_LetStatement = Core.Name "openGql.grammar.LetStatement"
-type LetVariableDefinitionList = [LetVariableDefinition]
-_LetVariableDefinitionList = Core.Name "openGql.grammar.LetVariableDefinitionList"
-data LetVariableDefinition =
-  LetVariableDefinitionValueVariable ValueVariableDefinition |
-  LetVariableDefinitionBindingEqualsValue BindingEqualsValue
-  deriving (Eq, Ord, Read, Show)
-_LetVariableDefinition = Core.Name "openGql.grammar.LetVariableDefinition"
-_LetVariableDefinition_valueVariable = Core.Name "valueVariable"
-_LetVariableDefinition_bindingEqualsValue = Core.Name "bindingEqualsValue"
-data BindingEqualsValue =
-  BindingEqualsValue {
-    bindingEqualsValueBinding :: BindingVariable,
-    bindingEqualsValueValue :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_BindingEqualsValue = Core.Name "openGql.grammar.BindingEqualsValue"
-_BindingEqualsValue_binding = Core.Name "binding"
-_BindingEqualsValue_value = Core.Name "value"
-data ForStatement =
-  ForStatement {
-    forStatementItem :: ForItem,
-    forStatementOrdinalityOrOffset :: (Maybe ForOrdinalityOrOffset)}
-  deriving (Eq, Ord, Read, Show)
-_ForStatement = Core.Name "openGql.grammar.ForStatement"
-_ForStatement_item = Core.Name "item"
-_ForStatement_ordinalityOrOffset = Core.Name "ordinalityOrOffset"
-data ForItem =
-  ForItem {
-    forItemAlias :: ForItemAlias,
-    forItemSource :: ForItemSource}
-  deriving (Eq, Ord, Read, Show)
-_ForItem = Core.Name "openGql.grammar.ForItem"
-_ForItem_alias = Core.Name "alias"
-_ForItem_source = Core.Name "source"
-type ForItemAlias = BindingVariable
-_ForItemAlias = Core.Name "openGql.grammar.ForItemAlias"
-type ForItemSource = ValueExpression
-_ForItemSource = Core.Name "openGql.grammar.ForItemSource"
-data ForOrdinalityOrOffset =
-  ForOrdinalityOrOffset {
-    forOrdinalityOrOffsetType :: OrdinalityOrOffsetType,
-    forOrdinalityOrOffsetVariable :: BindingVariable}
-  deriving (Eq, Ord, Read, Show)
-_ForOrdinalityOrOffset = Core.Name "openGql.grammar.ForOrdinalityOrOffset"
-_ForOrdinalityOrOffset_type = Core.Name "type"
-_ForOrdinalityOrOffset_variable = Core.Name "variable"
-data OrdinalityOrOffsetType =
-  OrdinalityOrOffsetTypeOrdinality |
-  OrdinalityOrOffsetTypeOffset
-  deriving (Eq, Ord, Read, Show)
-_OrdinalityOrOffsetType = Core.Name "openGql.grammar.OrdinalityOrOffsetType"
-_OrdinalityOrOffsetType_ordinality = Core.Name "ordinality"
-_OrdinalityOrOffsetType_offset = Core.Name "offset"
-data OrderByAndPageStatement =
-  OrderByAndPageStatementOrderByAndOptionalOffsetAndLimit OrderByAndOptionalOffsetAndLimit |
-  OrderByAndPageStatementOffsetAndOptionalLimit OffsetAndOptionalLimit |
-  OrderByAndPageStatementLimitOnly LimitClause
-  deriving (Eq, Ord, Read, Show)
-_OrderByAndPageStatement = Core.Name "openGql.grammar.OrderByAndPageStatement"
-_OrderByAndPageStatement_orderByAndOptionalOffsetAndLimit = Core.Name "orderByAndOptionalOffsetAndLimit"
-_OrderByAndPageStatement_offsetAndOptionalLimit = Core.Name "offsetAndOptionalLimit"
-_OrderByAndPageStatement_limitOnly = Core.Name "limitOnly"
-data OrderByAndOptionalOffsetAndLimit =
-  OrderByAndOptionalOffsetAndLimit {
-    orderByAndOptionalOffsetAndLimitOrderBy :: OrderByClause,
-    orderByAndOptionalOffsetAndLimitOffset :: (Maybe OffsetClause),
-    orderByAndOptionalOffsetAndLimitLimit :: (Maybe LimitClause)}
-  deriving (Eq, Ord, Read, Show)
-_OrderByAndOptionalOffsetAndLimit = Core.Name "openGql.grammar.OrderByAndOptionalOffsetAndLimit"
-_OrderByAndOptionalOffsetAndLimit_orderBy = Core.Name "orderBy"
-_OrderByAndOptionalOffsetAndLimit_offset = Core.Name "offset"
-_OrderByAndOptionalOffsetAndLimit_limit = Core.Name "limit"
-data OffsetAndOptionalLimit =
-  OffsetAndOptionalLimit {
-    offsetAndOptionalLimitOffset :: OffsetClause,
-    offsetAndOptionalLimitLimit :: (Maybe LimitClause)}
-  deriving (Eq, Ord, Read, Show)
-_OffsetAndOptionalLimit = Core.Name "openGql.grammar.OffsetAndOptionalLimit"
-_OffsetAndOptionalLimit_offset = Core.Name "offset"
-_OffsetAndOptionalLimit_limit = Core.Name "limit"
-data PrimitiveResultStatement =
-  PrimitiveResultStatementReturnAndOptionalOrderBy ReturnAndOptionalOrderByAndPage |
-  PrimitiveResultStatementFinish
-  deriving (Eq, Ord, Read, Show)
-_PrimitiveResultStatement = Core.Name "openGql.grammar.PrimitiveResultStatement"
-_PrimitiveResultStatement_returnAndOptionalOrderBy = Core.Name "returnAndOptionalOrderBy"
-_PrimitiveResultStatement_finish = Core.Name "finish"
-data ReturnAndOptionalOrderByAndPage =
-  ReturnAndOptionalOrderByAndPage {
-    returnAndOptionalOrderByAndPageReturn :: ReturnStatement,
-    returnAndOptionalOrderByAndPageOrderByAndPage :: (Maybe OrderByAndPageStatement)}
-  deriving (Eq, Ord, Read, Show)
-_ReturnAndOptionalOrderByAndPage = Core.Name "openGql.grammar.ReturnAndOptionalOrderByAndPage"
-_ReturnAndOptionalOrderByAndPage_return = Core.Name "return"
-_ReturnAndOptionalOrderByAndPage_orderByAndPage = Core.Name "orderByAndPage"
-type ReturnStatement = ReturnStatementBody
-_ReturnStatement = Core.Name "openGql.grammar.ReturnStatement"
-data ReturnStatementBody =
-  ReturnStatementBodyItems ReturnItemsAndGroupBy |
-  ReturnStatementBodyNoBindings
-  deriving (Eq, Ord, Read, Show)
-_ReturnStatementBody = Core.Name "openGql.grammar.ReturnStatementBody"
-_ReturnStatementBody_items = Core.Name "items"
-_ReturnStatementBody_noBindings = Core.Name "noBindings"
-data ReturnItemsAndGroupBy =
-  ReturnItemsAndGroupBy {
-    returnItemsAndGroupByQuantifier :: (Maybe SetQuantifier),
-    returnItemsAndGroupByItems :: ReturnItems,
-    returnItemsAndGroupByGroupBy :: (Maybe GroupByClause)}
-  deriving (Eq, Ord, Read, Show)
-_ReturnItemsAndGroupBy = Core.Name "openGql.grammar.ReturnItemsAndGroupBy"
-_ReturnItemsAndGroupBy_quantifier = Core.Name "quantifier"
-_ReturnItemsAndGroupBy_items = Core.Name "items"
-_ReturnItemsAndGroupBy_groupBy = Core.Name "groupBy"
-data ReturnItems =
-  ReturnItemsAsterisk |
-  ReturnItemsItemList ReturnItemList
-  deriving (Eq, Ord, Read, Show)
-_ReturnItems = Core.Name "openGql.grammar.ReturnItems"
-_ReturnItems_asterisk = Core.Name "asterisk"
-_ReturnItems_itemList = Core.Name "itemList"
-type ReturnItemList = [ReturnItem]
-_ReturnItemList = Core.Name "openGql.grammar.ReturnItemList"
-data ReturnItem =
-  ReturnItem {
-    returnItemExpression :: AggregatingValueExpression,
-    returnItemAlias :: (Maybe ReturnItemAlias)}
-  deriving (Eq, Ord, Read, Show)
-_ReturnItem = Core.Name "openGql.grammar.ReturnItem"
-_ReturnItem_expression = Core.Name "expression"
-_ReturnItem_alias = Core.Name "alias"
-type ReturnItemAlias = String
-_ReturnItemAlias = Core.Name "openGql.grammar.ReturnItemAlias"
-data SelectStatement =
-  SelectStatement {
-    selectStatementQuantifier :: (Maybe SetQuantifier),
-    selectStatementItems :: SelectItems,
-    selectStatementBody :: (Maybe SelectStatementBodyAndClauses)}
-  deriving (Eq, Ord, Read, Show)
-_SelectStatement = Core.Name "openGql.grammar.SelectStatement"
-_SelectStatement_quantifier = Core.Name "quantifier"
-_SelectStatement_items = Core.Name "items"
-_SelectStatement_body = Core.Name "body"
-data SelectItems =
-  SelectItemsAsterisk |
-  SelectItemsItemList SelectItemList
-  deriving (Eq, Ord, Read, Show)
-_SelectItems = Core.Name "openGql.grammar.SelectItems"
-_SelectItems_asterisk = Core.Name "asterisk"
-_SelectItems_itemList = Core.Name "itemList"
-data SelectStatementBodyAndClauses =
-  SelectStatementBodyAndClauses {
-    selectStatementBodyAndClausesBody :: SelectStatementBody,
-    selectStatementBodyAndClausesWhere :: (Maybe WhereClause),
-    selectStatementBodyAndClausesGroupBy :: (Maybe GroupByClause),
-    selectStatementBodyAndClausesHaving :: (Maybe HavingClause),
-    selectStatementBodyAndClausesOrderBy :: (Maybe OrderByClause),
-    selectStatementBodyAndClausesOffset :: (Maybe OffsetClause),
-    selectStatementBodyAndClausesLimit :: (Maybe LimitClause)}
-  deriving (Eq, Ord, Read, Show)
-_SelectStatementBodyAndClauses = Core.Name "openGql.grammar.SelectStatementBodyAndClauses"
-_SelectStatementBodyAndClauses_body = Core.Name "body"
-_SelectStatementBodyAndClauses_where = Core.Name "where"
-_SelectStatementBodyAndClauses_groupBy = Core.Name "groupBy"
-_SelectStatementBodyAndClauses_having = Core.Name "having"
-_SelectStatementBodyAndClauses_orderBy = Core.Name "orderBy"
-_SelectStatementBodyAndClauses_offset = Core.Name "offset"
-_SelectStatementBodyAndClauses_limit = Core.Name "limit"
-type SelectItemList = [SelectItem]
-_SelectItemList = Core.Name "openGql.grammar.SelectItemList"
-data SelectItem =
-  SelectItem {
-    selectItemExpression :: AggregatingValueExpression,
-    selectItemAlias :: (Maybe SelectItemAlias)}
-  deriving (Eq, Ord, Read, Show)
-_SelectItem = Core.Name "openGql.grammar.SelectItem"
-_SelectItem_expression = Core.Name "expression"
-_SelectItem_alias = Core.Name "alias"
-type SelectItemAlias = String
-_SelectItemAlias = Core.Name "openGql.grammar.SelectItemAlias"
-type HavingClause = SearchCondition
-_HavingClause = Core.Name "openGql.grammar.HavingClause"
-data SelectStatementBody =
-  SelectStatementBodyGraphMatchList SelectGraphMatchList |
-  SelectStatementBodyQuerySpecification SelectQuerySpecification
-  deriving (Eq, Ord, Read, Show)
-_SelectStatementBody = Core.Name "openGql.grammar.SelectStatementBody"
-_SelectStatementBody_graphMatchList = Core.Name "graphMatchList"
-_SelectStatementBody_querySpecification = Core.Name "querySpecification"
-type SelectGraphMatchList = [SelectGraphMatch]
-_SelectGraphMatchList = Core.Name "openGql.grammar.SelectGraphMatchList"
-data SelectGraphMatch =
-  SelectGraphMatch {
-    selectGraphMatchGraphExpression :: GraphExpression,
-    selectGraphMatchMatchStatement :: MatchStatement}
-  deriving (Eq, Ord, Read, Show)
-_SelectGraphMatch = Core.Name "openGql.grammar.SelectGraphMatch"
-_SelectGraphMatch_graphExpression = Core.Name "graphExpression"
-_SelectGraphMatch_matchStatement = Core.Name "matchStatement"
-data SelectQuerySpecification =
-  SelectQuerySpecificationNested NestedQuerySpecification |
-  SelectQuerySpecificationGraphAndNested GraphAndNestedQuerySpecification
-  deriving (Eq, Ord, Read, Show)
-_SelectQuerySpecification = Core.Name "openGql.grammar.SelectQuerySpecification"
-_SelectQuerySpecification_nested = Core.Name "nested"
-_SelectQuerySpecification_graphAndNested = Core.Name "graphAndNested"
-data GraphAndNestedQuerySpecification =
-  GraphAndNestedQuerySpecification {
-    graphAndNestedQuerySpecificationGraphExpression :: GraphExpression,
-    graphAndNestedQuerySpecificationNested :: NestedQuerySpecification}
-  deriving (Eq, Ord, Read, Show)
-_GraphAndNestedQuerySpecification = Core.Name "openGql.grammar.GraphAndNestedQuerySpecification"
-_GraphAndNestedQuerySpecification_graphExpression = Core.Name "graphExpression"
-_GraphAndNestedQuerySpecification_nested = Core.Name "nested"
-data CallProcedureStatement =
-  CallProcedureStatement {
-    callProcedureStatementOptional :: Bool,
-    callProcedureStatementCall :: ProcedureCall}
-  deriving (Eq, Ord, Read, Show)
-_CallProcedureStatement = Core.Name "openGql.grammar.CallProcedureStatement"
-_CallProcedureStatement_optional = Core.Name "optional"
-_CallProcedureStatement_call = Core.Name "call"
-data ProcedureCall =
-  ProcedureCallInline InlineProcedureCall |
-  ProcedureCallNamed NamedProcedureCall
-  deriving (Eq, Ord, Read, Show)
-_ProcedureCall = Core.Name "openGql.grammar.ProcedureCall"
-_ProcedureCall_inline = Core.Name "inline"
-_ProcedureCall_named = Core.Name "named"
-data InlineProcedureCall =
-  InlineProcedureCall {
-    inlineProcedureCallScope :: (Maybe VariableScopeClause),
-    inlineProcedureCallNested :: NestedProcedureSpecification}
-  deriving (Eq, Ord, Read, Show)
-_InlineProcedureCall = Core.Name "openGql.grammar.InlineProcedureCall"
-_InlineProcedureCall_scope = Core.Name "scope"
-_InlineProcedureCall_nested = Core.Name "nested"
-type VariableScopeClause = (Maybe BindingVariableReferenceList)
-_VariableScopeClause = Core.Name "openGql.grammar.VariableScopeClause"
-type BindingVariableReferenceList = [BindingVariableReference]
-_BindingVariableReferenceList = Core.Name "openGql.grammar.BindingVariableReferenceList"
-data NamedProcedureCall =
-  NamedProcedureCall {
-    namedProcedureCallReference :: ProcedureReference,
-    namedProcedureCallArguments :: (Maybe ProcedureArgumentList),
-    namedProcedureCallYield :: (Maybe YieldClause)}
-  deriving (Eq, Ord, Read, Show)
-_NamedProcedureCall = Core.Name "openGql.grammar.NamedProcedureCall"
-_NamedProcedureCall_reference = Core.Name "reference"
-_NamedProcedureCall_arguments = Core.Name "arguments"
-_NamedProcedureCall_yield = Core.Name "yield"
-type ProcedureArgumentList = [ProcedureArgument]
-_ProcedureArgumentList = Core.Name "openGql.grammar.ProcedureArgumentList"
-type ProcedureArgument = ValueExpression
-_ProcedureArgument = Core.Name "openGql.grammar.ProcedureArgument"
-type AtSchemaClause = SchemaReference
-_AtSchemaClause = Core.Name "openGql.grammar.AtSchemaClause"
-type UseGraphClause = GraphExpression
-_UseGraphClause = Core.Name "openGql.grammar.UseGraphClause"
-data GraphPatternBindingTable =
-  GraphPatternBindingTable {
-    graphPatternBindingTablePattern :: GraphPattern,
-    graphPatternBindingTableYieldClause :: (Maybe GraphPatternYieldClause)}
-  deriving (Eq, Ord, Read, Show)
-_GraphPatternBindingTable = Core.Name "openGql.grammar.GraphPatternBindingTable"
-_GraphPatternBindingTable_pattern = Core.Name "pattern"
-_GraphPatternBindingTable_yieldClause = Core.Name "yieldClause"
-type GraphPatternYieldClause = GraphPatternYieldItemList
-_GraphPatternYieldClause = Core.Name "openGql.grammar.GraphPatternYieldClause"
-data GraphPatternYieldItemList =
-  GraphPatternYieldItemListItems [GraphPatternYieldItem] |
-  GraphPatternYieldItemListNoBindings
-  deriving (Eq, Ord, Read, Show)
-_GraphPatternYieldItemList = Core.Name "openGql.grammar.GraphPatternYieldItemList"
-_GraphPatternYieldItemList_items = Core.Name "items"
-_GraphPatternYieldItemList_noBindings = Core.Name "noBindings"
-type GraphPatternYieldItem = BindingVariableReference
-_GraphPatternYieldItem = Core.Name "openGql.grammar.GraphPatternYieldItem"
-data GraphPattern =
-  GraphPattern {
-    graphPatternMatchMode :: (Maybe MatchMode),
-    graphPatternPathPatterns :: PathPatternList,
-    graphPatternKeepClause :: (Maybe KeepClause),
-    graphPatternWhereClause :: (Maybe GraphPatternWhereClause)}
-  deriving (Eq, Ord, Read, Show)
-_GraphPattern = Core.Name "openGql.grammar.GraphPattern"
-_GraphPattern_matchMode = Core.Name "matchMode"
-_GraphPattern_pathPatterns = Core.Name "pathPatterns"
-_GraphPattern_keepClause = Core.Name "keepClause"
-_GraphPattern_whereClause = Core.Name "whereClause"
-data MatchMode =
-  MatchModeRepeatableElements RepeatableElementsMatchMode |
-  MatchModeDifferentEdges DifferentEdgesMatchMode
-  deriving (Eq, Ord, Read, Show)
-_MatchMode = Core.Name "openGql.grammar.MatchMode"
-_MatchMode_repeatableElements = Core.Name "repeatableElements"
-_MatchMode_differentEdges = Core.Name "differentEdges"
-type RepeatableElementsMatchMode = ElementBindingsOrElements
-_RepeatableElementsMatchMode = Core.Name "openGql.grammar.RepeatableElementsMatchMode"
-type DifferentEdgesMatchMode = EdgeBindingsOrEdges
-_DifferentEdgesMatchMode = Core.Name "openGql.grammar.DifferentEdgesMatchMode"
-data ElementBindingsOrElements =
-  ElementBindingsOrElementsElementBindings Bool |
-  ElementBindingsOrElementsElements
-  deriving (Eq, Ord, Read, Show)
-_ElementBindingsOrElements = Core.Name "openGql.grammar.ElementBindingsOrElements"
-_ElementBindingsOrElements_elementBindings = Core.Name "elementBindings"
-_ElementBindingsOrElements_elements = Core.Name "elements"
-data EdgeBindingsOrEdges =
-  EdgeBindingsOrEdgesEdgeBindings Bool |
-  EdgeBindingsOrEdgesEdges
-  deriving (Eq, Ord, Read, Show)
-_EdgeBindingsOrEdges = Core.Name "openGql.grammar.EdgeBindingsOrEdges"
-_EdgeBindingsOrEdges_edgeBindings = Core.Name "edgeBindings"
-_EdgeBindingsOrEdges_edges = Core.Name "edges"
-type PathPatternList = [PathPattern]
-_PathPatternList = Core.Name "openGql.grammar.PathPatternList"
-data PathPattern =
-  PathPattern {
-    pathPatternVariableDeclaration :: (Maybe PathVariableDeclaration),
-    pathPatternPrefix :: (Maybe PathPatternPrefix),
-    pathPatternExpression :: PathPatternExpression}
-  deriving (Eq, Ord, Read, Show)
-_PathPattern = Core.Name "openGql.grammar.PathPattern"
-_PathPattern_variableDeclaration = Core.Name "variableDeclaration"
-_PathPattern_prefix = Core.Name "prefix"
-_PathPattern_expression = Core.Name "expression"
-type PathVariableDeclaration = PathVariable
-_PathVariableDeclaration = Core.Name "openGql.grammar.PathVariableDeclaration"
-type KeepClause = PathPatternPrefix
-_KeepClause = Core.Name "openGql.grammar.KeepClause"
-type GraphPatternWhereClause = SearchCondition
-_GraphPatternWhereClause = Core.Name "openGql.grammar.GraphPatternWhereClause"
-type InsertGraphPattern = InsertPathPatternList
-_InsertGraphPattern = Core.Name "openGql.grammar.InsertGraphPattern"
-type InsertPathPatternList = [InsertPathPattern]
-_InsertPathPatternList = Core.Name "openGql.grammar.InsertPathPatternList"
-data InsertPathPattern =
-  InsertPathPattern {
-    insertPathPatternStartNode :: InsertNodePattern,
-    insertPathPatternEdgesAndNodes :: [InsertEdgeAndNode]}
-  deriving (Eq, Ord, Read, Show)
-_InsertPathPattern = Core.Name "openGql.grammar.InsertPathPattern"
-_InsertPathPattern_startNode = Core.Name "startNode"
-_InsertPathPattern_edgesAndNodes = Core.Name "edgesAndNodes"
-data InsertEdgeAndNode =
-  InsertEdgeAndNode {
-    insertEdgeAndNodeEdge :: InsertEdgePattern,
-    insertEdgeAndNodeNode :: InsertNodePattern}
-  deriving (Eq, Ord, Read, Show)
-_InsertEdgeAndNode = Core.Name "openGql.grammar.InsertEdgeAndNode"
-_InsertEdgeAndNode_edge = Core.Name "edge"
-_InsertEdgeAndNode_node = Core.Name "node"
-type InsertNodePattern = (Maybe InsertElementPatternFiller)
-_InsertNodePattern = Core.Name "openGql.grammar.InsertNodePattern"
-data InsertEdgePattern =
-  InsertEdgePatternPointingLeft InsertEdgePointingLeft |
-  InsertEdgePatternPointingRight InsertEdgePointingRight |
-  InsertEdgePatternUndirected InsertEdgeUndirected
-  deriving (Eq, Ord, Read, Show)
-_InsertEdgePattern = Core.Name "openGql.grammar.InsertEdgePattern"
-_InsertEdgePattern_pointingLeft = Core.Name "pointingLeft"
-_InsertEdgePattern_pointingRight = Core.Name "pointingRight"
-_InsertEdgePattern_undirected = Core.Name "undirected"
-type InsertEdgePointingLeft = (Maybe InsertElementPatternFiller)
-_InsertEdgePointingLeft = Core.Name "openGql.grammar.InsertEdgePointingLeft"
-type InsertEdgePointingRight = (Maybe InsertElementPatternFiller)
-_InsertEdgePointingRight = Core.Name "openGql.grammar.InsertEdgePointingRight"
-type InsertEdgeUndirected = (Maybe InsertElementPatternFiller)
-_InsertEdgeUndirected = Core.Name "openGql.grammar.InsertEdgeUndirected"
-data InsertElementPatternFiller =
-  InsertElementPatternFiller {
-    insertElementPatternFillerVariableDeclaration :: (Maybe ElementVariableDeclaration),
-    insertElementPatternFillerLabelAndProperties :: (Maybe LabelAndPropertySetSpecification)}
-  deriving (Eq, Ord, Read, Show)
-_InsertElementPatternFiller = Core.Name "openGql.grammar.InsertElementPatternFiller"
-_InsertElementPatternFiller_variableDeclaration = Core.Name "variableDeclaration"
-_InsertElementPatternFiller_labelAndProperties = Core.Name "labelAndProperties"
-data LabelAndPropertySetSpecification =
-  LabelAndPropertySetSpecification {
-    labelAndPropertySetSpecificationIsOrColon :: (Maybe IsOrColon),
-    labelAndPropertySetSpecificationLabelSet :: (Maybe LabelSetSpecification),
-    labelAndPropertySetSpecificationPropertySpecification :: (Maybe ElementPropertySpecification)}
-  deriving (Eq, Ord, Read, Show)
-_LabelAndPropertySetSpecification = Core.Name "openGql.grammar.LabelAndPropertySetSpecification"
-_LabelAndPropertySetSpecification_isOrColon = Core.Name "isOrColon"
-_LabelAndPropertySetSpecification_labelSet = Core.Name "labelSet"
-_LabelAndPropertySetSpecification_propertySpecification = Core.Name "propertySpecification"
-data PathPatternPrefix =
-  PathPatternPrefixModePrefix PathModePrefix |
-  PathPatternPrefixSearchPrefix PathSearchPrefix
-  deriving (Eq, Ord, Read, Show)
-_PathPatternPrefix = Core.Name "openGql.grammar.PathPatternPrefix"
-_PathPatternPrefix_modePrefix = Core.Name "modePrefix"
-_PathPatternPrefix_searchPrefix = Core.Name "searchPrefix"
-data PathModePrefix =
-  PathModePrefix {
-    pathModePrefixMode :: PathMode,
-    pathModePrefixOrPaths :: (Maybe PathOrPaths)}
-  deriving (Eq, Ord, Read, Show)
-_PathModePrefix = Core.Name "openGql.grammar.PathModePrefix"
-_PathModePrefix_mode = Core.Name "mode"
-_PathModePrefix_orPaths = Core.Name "orPaths"
-data PathMode =
-  PathModeWalk |
-  PathModeTrail |
-  PathModeSimple |
-  PathModeAcyclic
-  deriving (Eq, Ord, Read, Show)
-_PathMode = Core.Name "openGql.grammar.PathMode"
-_PathMode_walk = Core.Name "walk"
-_PathMode_trail = Core.Name "trail"
-_PathMode_simple = Core.Name "simple"
-_PathMode_acyclic = Core.Name "acyclic"
-data PathSearchPrefix =
-  PathSearchPrefixAll AllPathSearch |
-  PathSearchPrefixAny AnyPathSearch |
-  PathSearchPrefixShortest ShortestPathSearch
-  deriving (Eq, Ord, Read, Show)
-_PathSearchPrefix = Core.Name "openGql.grammar.PathSearchPrefix"
-_PathSearchPrefix_all = Core.Name "all"
-_PathSearchPrefix_any = Core.Name "any"
-_PathSearchPrefix_shortest = Core.Name "shortest"
-data AllPathSearch =
-  AllPathSearch {
-    allPathSearchMode :: (Maybe PathMode),
-    allPathSearchOrPaths :: (Maybe PathOrPaths)}
-  deriving (Eq, Ord, Read, Show)
-_AllPathSearch = Core.Name "openGql.grammar.AllPathSearch"
-_AllPathSearch_mode = Core.Name "mode"
-_AllPathSearch_orPaths = Core.Name "orPaths"
-data PathOrPaths =
-  PathOrPathsPath |
-  PathOrPathsPaths
-  deriving (Eq, Ord, Read, Show)
-_PathOrPaths = Core.Name "openGql.grammar.PathOrPaths"
-_PathOrPaths_path = Core.Name "path"
-_PathOrPaths_paths = Core.Name "paths"
-data AnyPathSearch =
-  AnyPathSearch {
-    anyPathSearchNumberOfPaths :: (Maybe NumberOfPaths),
-    anyPathSearchMode :: (Maybe PathMode),
-    anyPathSearchOrPaths :: (Maybe PathOrPaths)}
-  deriving (Eq, Ord, Read, Show)
-_AnyPathSearch = Core.Name "openGql.grammar.AnyPathSearch"
-_AnyPathSearch_numberOfPaths = Core.Name "numberOfPaths"
-_AnyPathSearch_mode = Core.Name "mode"
-_AnyPathSearch_orPaths = Core.Name "orPaths"
-type NumberOfPaths = NonNegativeIntegerSpecification
-_NumberOfPaths = Core.Name "openGql.grammar.NumberOfPaths"
-data ShortestPathSearch =
-  ShortestPathSearchAllShortest AllShortestPathSearch |
-  ShortestPathSearchAnyShortest AnyShortestPathSearch |
-  ShortestPathSearchCountedShortest CountedShortestPathSearch |
-  ShortestPathSearchCountedShortestGroup CountedShortestGroupSearch
-  deriving (Eq, Ord, Read, Show)
-_ShortestPathSearch = Core.Name "openGql.grammar.ShortestPathSearch"
-_ShortestPathSearch_allShortest = Core.Name "allShortest"
-_ShortestPathSearch_anyShortest = Core.Name "anyShortest"
-_ShortestPathSearch_countedShortest = Core.Name "countedShortest"
-_ShortestPathSearch_countedShortestGroup = Core.Name "countedShortestGroup"
-data AllShortestPathSearch =
-  AllShortestPathSearch {
-    allShortestPathSearchMode :: (Maybe PathMode),
-    allShortestPathSearchOrPaths :: (Maybe PathOrPaths)}
-  deriving (Eq, Ord, Read, Show)
-_AllShortestPathSearch = Core.Name "openGql.grammar.AllShortestPathSearch"
-_AllShortestPathSearch_mode = Core.Name "mode"
-_AllShortestPathSearch_orPaths = Core.Name "orPaths"
-data AnyShortestPathSearch =
-  AnyShortestPathSearch {
-    anyShortestPathSearchMode :: (Maybe PathMode),
-    anyShortestPathSearchOrPaths :: (Maybe PathOrPaths)}
-  deriving (Eq, Ord, Read, Show)
-_AnyShortestPathSearch = Core.Name "openGql.grammar.AnyShortestPathSearch"
-_AnyShortestPathSearch_mode = Core.Name "mode"
-_AnyShortestPathSearch_orPaths = Core.Name "orPaths"
-data CountedShortestPathSearch =
-  CountedShortestPathSearch {
-    countedShortestPathSearchNumberOfPaths :: NumberOfPaths,
-    countedShortestPathSearchMode :: (Maybe PathMode),
-    countedShortestPathSearchOrPaths :: (Maybe PathOrPaths)}
-  deriving (Eq, Ord, Read, Show)
-_CountedShortestPathSearch = Core.Name "openGql.grammar.CountedShortestPathSearch"
-_CountedShortestPathSearch_numberOfPaths = Core.Name "numberOfPaths"
-_CountedShortestPathSearch_mode = Core.Name "mode"
-_CountedShortestPathSearch_orPaths = Core.Name "orPaths"
-data CountedShortestGroupSearch =
-  CountedShortestGroupSearch {
-    countedShortestGroupSearchNumberOfGroups :: (Maybe NumberOfGroups),
-    countedShortestGroupSearchMode :: (Maybe PathMode),
-    countedShortestGroupSearchOrPaths :: (Maybe PathOrPaths),
-    countedShortestGroupSearchGroups :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_CountedShortestGroupSearch = Core.Name "openGql.grammar.CountedShortestGroupSearch"
-_CountedShortestGroupSearch_numberOfGroups = Core.Name "numberOfGroups"
-_CountedShortestGroupSearch_mode = Core.Name "mode"
-_CountedShortestGroupSearch_orPaths = Core.Name "orPaths"
-_CountedShortestGroupSearch_groups = Core.Name "groups"
-type NumberOfGroups = NonNegativeIntegerSpecification
-_NumberOfGroups = Core.Name "openGql.grammar.NumberOfGroups"
-data PathPatternExpression =
-  PathPatternExpressionTerm PathTerm |
-  PathPatternExpressionMultisetAlternation [PathTerm] |
-  PathPatternExpressionPatternUnion [PathTerm]
-  deriving (Eq, Ord, Read, Show)
-_PathPatternExpression = Core.Name "openGql.grammar.PathPatternExpression"
-_PathPatternExpression_term = Core.Name "term"
-_PathPatternExpression_multisetAlternation = Core.Name "multisetAlternation"
-_PathPatternExpression_patternUnion = Core.Name "patternUnion"
-type PathTerm = [PathFactor]
-_PathTerm = Core.Name "openGql.grammar.PathTerm"
-data PathFactor =
-  PathFactorPrimary PathPrimary |
-  PathFactorQuantifiedPrimary QuantifiedPathPrimary |
-  PathFactorQuestionedPrimary QuestionedPathPrimary
-  deriving (Eq, Ord, Read, Show)
-_PathFactor = Core.Name "openGql.grammar.PathFactor"
-_PathFactor_primary = Core.Name "primary"
-_PathFactor_quantifiedPrimary = Core.Name "quantifiedPrimary"
-_PathFactor_questionedPrimary = Core.Name "questionedPrimary"
-data QuantifiedPathPrimary =
-  QuantifiedPathPrimary {
-    quantifiedPathPrimaryPrimary :: PathPrimary,
-    quantifiedPathPrimaryQuantifier :: GraphPatternQuantifier}
-  deriving (Eq, Ord, Read, Show)
-_QuantifiedPathPrimary = Core.Name "openGql.grammar.QuantifiedPathPrimary"
-_QuantifiedPathPrimary_primary = Core.Name "primary"
-_QuantifiedPathPrimary_quantifier = Core.Name "quantifier"
-type QuestionedPathPrimary = PathPrimary
-_QuestionedPathPrimary = Core.Name "openGql.grammar.QuestionedPathPrimary"
-data PathPrimary =
-  PathPrimaryElementPattern ElementPattern |
-  PathPrimaryParenthesizedExpression ParenthesizedPathPatternExpression |
-  PathPrimarySimplifiedExpression SimplifiedPathPatternExpression
-  deriving (Eq, Ord, Read, Show)
-_PathPrimary = Core.Name "openGql.grammar.PathPrimary"
-_PathPrimary_elementPattern = Core.Name "elementPattern"
-_PathPrimary_parenthesizedExpression = Core.Name "parenthesizedExpression"
-_PathPrimary_simplifiedExpression = Core.Name "simplifiedExpression"
-data ElementPattern =
-  ElementPatternNode NodePattern |
-  ElementPatternEdge EdgePattern
-  deriving (Eq, Ord, Read, Show)
-_ElementPattern = Core.Name "openGql.grammar.ElementPattern"
-_ElementPattern_node = Core.Name "node"
-_ElementPattern_edge = Core.Name "edge"
-type NodePattern = ElementPatternFiller
-_NodePattern = Core.Name "openGql.grammar.NodePattern"
-data ElementPatternFiller =
-  ElementPatternFiller {
-    elementPatternFillerVariableDeclaration :: (Maybe ElementVariableDeclaration),
-    elementPatternFillerIsLabelExpression :: (Maybe IsLabelExpression),
-    elementPatternFillerPredicate :: (Maybe ElementPatternPredicate)}
-  deriving (Eq, Ord, Read, Show)
-_ElementPatternFiller = Core.Name "openGql.grammar.ElementPatternFiller"
-_ElementPatternFiller_variableDeclaration = Core.Name "variableDeclaration"
-_ElementPatternFiller_isLabelExpression = Core.Name "isLabelExpression"
-_ElementPatternFiller_predicate = Core.Name "predicate"
-data ElementVariableDeclaration =
-  ElementVariableDeclaration {
-    elementVariableDeclarationTemp :: (Maybe Bool),
-    elementVariableDeclarationVariable :: ElementVariable}
-  deriving (Eq, Ord, Read, Show)
-_ElementVariableDeclaration = Core.Name "openGql.grammar.ElementVariableDeclaration"
-_ElementVariableDeclaration_temp = Core.Name "temp"
-_ElementVariableDeclaration_variable = Core.Name "variable"
-data IsLabelExpression =
-  IsLabelExpression {
-    isLabelExpressionIsOrColon :: IsOrColon,
-    isLabelExpressionLabel :: LabelExpression}
-  deriving (Eq, Ord, Read, Show)
-_IsLabelExpression = Core.Name "openGql.grammar.IsLabelExpression"
-_IsLabelExpression_isOrColon = Core.Name "isOrColon"
-_IsLabelExpression_label = Core.Name "label"
-data IsOrColon =
-  IsOrColonIs |
-  IsOrColonColon
-  deriving (Eq, Ord, Read, Show)
-_IsOrColon = Core.Name "openGql.grammar.IsOrColon"
-_IsOrColon_is = Core.Name "is"
-_IsOrColon_colon = Core.Name "colon"
-data ElementPatternPredicate =
-  ElementPatternPredicateWhereClause ElementPatternWhereClause |
-  ElementPatternPredicatePropertySpecification ElementPropertySpecification
-  deriving (Eq, Ord, Read, Show)
-_ElementPatternPredicate = Core.Name "openGql.grammar.ElementPatternPredicate"
-_ElementPatternPredicate_whereClause = Core.Name "whereClause"
-_ElementPatternPredicate_propertySpecification = Core.Name "propertySpecification"
-type ElementPatternWhereClause = SearchCondition
-_ElementPatternWhereClause = Core.Name "openGql.grammar.ElementPatternWhereClause"
-type ElementPropertySpecification = PropertyKeyValuePairList
-_ElementPropertySpecification = Core.Name "openGql.grammar.ElementPropertySpecification"
-type PropertyKeyValuePairList = [PropertyKeyValuePair]
-_PropertyKeyValuePairList = Core.Name "openGql.grammar.PropertyKeyValuePairList"
-data PropertyKeyValuePair =
-  PropertyKeyValuePair {
-    propertyKeyValuePairName :: PropertyName,
-    propertyKeyValuePairValue :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_PropertyKeyValuePair = Core.Name "openGql.grammar.PropertyKeyValuePair"
-_PropertyKeyValuePair_name = Core.Name "name"
-_PropertyKeyValuePair_value = Core.Name "value"
-data EdgePattern =
-  EdgePatternFullEdge FullEdgePattern |
-  EdgePatternAbbreviatedEdge AbbreviatedEdgePattern
-  deriving (Eq, Ord, Read, Show)
-_EdgePattern = Core.Name "openGql.grammar.EdgePattern"
-_EdgePattern_fullEdge = Core.Name "fullEdge"
-_EdgePattern_abbreviatedEdge = Core.Name "abbreviatedEdge"
-data FullEdgePattern =
-  FullEdgePatternPointingLeft FullEdgePointingLeft |
-  FullEdgePatternUndirected FullEdgeUndirected |
-  FullEdgePatternPointingRight FullEdgePointingRight |
-  FullEdgePatternLeftOrUndirected FullEdgeLeftOrUndirected |
-  FullEdgePatternUndirectedOrRight FullEdgeUndirectedOrRight |
-  FullEdgePatternLeftOrRight FullEdgeLeftOrRight |
-  FullEdgePatternAnyDirection FullEdgeAnyDirection
-  deriving (Eq, Ord, Read, Show)
-_FullEdgePattern = Core.Name "openGql.grammar.FullEdgePattern"
-_FullEdgePattern_pointingLeft = Core.Name "pointingLeft"
-_FullEdgePattern_undirected = Core.Name "undirected"
-_FullEdgePattern_pointingRight = Core.Name "pointingRight"
-_FullEdgePattern_leftOrUndirected = Core.Name "leftOrUndirected"
-_FullEdgePattern_undirectedOrRight = Core.Name "undirectedOrRight"
-_FullEdgePattern_leftOrRight = Core.Name "leftOrRight"
-_FullEdgePattern_anyDirection = Core.Name "anyDirection"
-type FullEdgePointingLeft = ElementPatternFiller
-_FullEdgePointingLeft = Core.Name "openGql.grammar.FullEdgePointingLeft"
-type FullEdgeUndirected = ElementPatternFiller
-_FullEdgeUndirected = Core.Name "openGql.grammar.FullEdgeUndirected"
-type FullEdgePointingRight = ElementPatternFiller
-_FullEdgePointingRight = Core.Name "openGql.grammar.FullEdgePointingRight"
-type FullEdgeLeftOrUndirected = ElementPatternFiller
-_FullEdgeLeftOrUndirected = Core.Name "openGql.grammar.FullEdgeLeftOrUndirected"
-type FullEdgeUndirectedOrRight = ElementPatternFiller
-_FullEdgeUndirectedOrRight = Core.Name "openGql.grammar.FullEdgeUndirectedOrRight"
-type FullEdgeLeftOrRight = ElementPatternFiller
-_FullEdgeLeftOrRight = Core.Name "openGql.grammar.FullEdgeLeftOrRight"
-type FullEdgeAnyDirection = ElementPatternFiller
-_FullEdgeAnyDirection = Core.Name "openGql.grammar.FullEdgeAnyDirection"
-data AbbreviatedEdgePattern =
-  AbbreviatedEdgePatternLeftArrow |
-  AbbreviatedEdgePatternTilde |
-  AbbreviatedEdgePatternRightArrow |
-  AbbreviatedEdgePatternLeftArrowTilde |
-  AbbreviatedEdgePatternTildeRightArrow |
-  AbbreviatedEdgePatternLeftMinusRight |
-  AbbreviatedEdgePatternMinusSign
-  deriving (Eq, Ord, Read, Show)
-_AbbreviatedEdgePattern = Core.Name "openGql.grammar.AbbreviatedEdgePattern"
-_AbbreviatedEdgePattern_leftArrow = Core.Name "leftArrow"
-_AbbreviatedEdgePattern_tilde = Core.Name "tilde"
-_AbbreviatedEdgePattern_rightArrow = Core.Name "rightArrow"
-_AbbreviatedEdgePattern_leftArrowTilde = Core.Name "leftArrowTilde"
-_AbbreviatedEdgePattern_tildeRightArrow = Core.Name "tildeRightArrow"
-_AbbreviatedEdgePattern_leftMinusRight = Core.Name "leftMinusRight"
-_AbbreviatedEdgePattern_minusSign = Core.Name "minusSign"
-data ParenthesizedPathPatternExpression =
-  ParenthesizedPathPatternExpression {
-    parenthesizedPathPatternExpressionSubpathDeclaration :: (Maybe SubpathVariableDeclaration),
-    parenthesizedPathPatternExpressionPathMode :: (Maybe PathModePrefix),
-    parenthesizedPathPatternExpressionExpression :: PathPatternExpression,
-    parenthesizedPathPatternExpressionWhereClause :: (Maybe ParenthesizedPathPatternWhereClause)}
-  deriving (Eq, Ord, Read, Show)
-_ParenthesizedPathPatternExpression = Core.Name "openGql.grammar.ParenthesizedPathPatternExpression"
-_ParenthesizedPathPatternExpression_subpathDeclaration = Core.Name "subpathDeclaration"
-_ParenthesizedPathPatternExpression_pathMode = Core.Name "pathMode"
-_ParenthesizedPathPatternExpression_expression = Core.Name "expression"
-_ParenthesizedPathPatternExpression_whereClause = Core.Name "whereClause"
-type SubpathVariableDeclaration = SubpathVariable
-_SubpathVariableDeclaration = Core.Name "openGql.grammar.SubpathVariableDeclaration"
-type ParenthesizedPathPatternWhereClause = SearchCondition
-_ParenthesizedPathPatternWhereClause = Core.Name "openGql.grammar.ParenthesizedPathPatternWhereClause"
-data LabelExpression =
-  LabelExpressionNegation LabelExpression |
-  LabelExpressionConjunction ConjunctionLabelExpression |
-  LabelExpressionDisjunction DisjunctionLabelExpression |
-  LabelExpressionName LabelName |
-  LabelExpressionWildcard |
-  LabelExpressionParenthesized LabelExpression
-  deriving (Eq, Ord, Read, Show)
-_LabelExpression = Core.Name "openGql.grammar.LabelExpression"
-_LabelExpression_negation = Core.Name "negation"
-_LabelExpression_conjunction = Core.Name "conjunction"
-_LabelExpression_disjunction = Core.Name "disjunction"
-_LabelExpression_name = Core.Name "name"
-_LabelExpression_wildcard = Core.Name "wildcard"
-_LabelExpression_parenthesized = Core.Name "parenthesized"
-data ConjunctionLabelExpression =
-  ConjunctionLabelExpression {
-    conjunctionLabelExpressionLeft :: LabelExpression,
-    conjunctionLabelExpressionRight :: LabelExpression}
-  deriving (Eq, Ord, Read, Show)
-_ConjunctionLabelExpression = Core.Name "openGql.grammar.ConjunctionLabelExpression"
-_ConjunctionLabelExpression_left = Core.Name "left"
-_ConjunctionLabelExpression_right = Core.Name "right"
-data DisjunctionLabelExpression =
-  DisjunctionLabelExpression {
-    disjunctionLabelExpressionLeft :: LabelExpression,
-    disjunctionLabelExpressionRight :: LabelExpression}
-  deriving (Eq, Ord, Read, Show)
-_DisjunctionLabelExpression = Core.Name "openGql.grammar.DisjunctionLabelExpression"
-_DisjunctionLabelExpression_left = Core.Name "left"
-_DisjunctionLabelExpression_right = Core.Name "right"
-type PathVariableReference = BindingVariableReference
-_PathVariableReference = Core.Name "openGql.grammar.PathVariableReference"
-type ElementVariableReference = BindingVariableReference
-_ElementVariableReference = Core.Name "openGql.grammar.ElementVariableReference"
-data GraphPatternQuantifier =
-  GraphPatternQuantifierAsterisk |
-  GraphPatternQuantifierPlusSign |
-  GraphPatternQuantifierFixed FixedQuantifier |
-  GraphPatternQuantifierGeneral GeneralQuantifier
-  deriving (Eq, Ord, Read, Show)
-_GraphPatternQuantifier = Core.Name "openGql.grammar.GraphPatternQuantifier"
-_GraphPatternQuantifier_asterisk = Core.Name "asterisk"
-_GraphPatternQuantifier_plusSign = Core.Name "plusSign"
-_GraphPatternQuantifier_fixed = Core.Name "fixed"
-_GraphPatternQuantifier_general = Core.Name "general"
-type FixedQuantifier = UnsignedInteger
-_FixedQuantifier = Core.Name "openGql.grammar.FixedQuantifier"
-data GeneralQuantifier =
-  GeneralQuantifier {
-    generalQuantifierLowerBound :: (Maybe LowerBound),
-    generalQuantifierUpperBound :: (Maybe UpperBound)}
-  deriving (Eq, Ord, Read, Show)
-_GeneralQuantifier = Core.Name "openGql.grammar.GeneralQuantifier"
-_GeneralQuantifier_lowerBound = Core.Name "lowerBound"
-_GeneralQuantifier_upperBound = Core.Name "upperBound"
-type LowerBound = UnsignedInteger
-_LowerBound = Core.Name "openGql.grammar.LowerBound"
-type UpperBound = UnsignedInteger
-_UpperBound = Core.Name "openGql.grammar.UpperBound"
-data SimplifiedPathPatternExpression =
-  SimplifiedPathPatternExpressionLeft SimplifiedDefaultingLeft |
-  SimplifiedPathPatternExpressionUndirected SimplifiedDefaultingUndirected |
-  SimplifiedPathPatternExpressionRight SimplifiedDefaultingRight |
-  SimplifiedPathPatternExpressionLeftOrUndirected SimplifiedDefaultingLeftOrUndirected |
-  SimplifiedPathPatternExpressionUndirectedOrRight SimplifiedDefaultingUndirectedOrRight |
-  SimplifiedPathPatternExpressionLeftOrRight SimplifiedDefaultingLeftOrRight |
-  SimplifiedPathPatternExpressionAnyDirection SimplifiedDefaultingAnyDirection
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedPathPatternExpression = Core.Name "openGql.grammar.SimplifiedPathPatternExpression"
-_SimplifiedPathPatternExpression_left = Core.Name "left"
-_SimplifiedPathPatternExpression_undirected = Core.Name "undirected"
-_SimplifiedPathPatternExpression_right = Core.Name "right"
-_SimplifiedPathPatternExpression_leftOrUndirected = Core.Name "leftOrUndirected"
-_SimplifiedPathPatternExpression_undirectedOrRight = Core.Name "undirectedOrRight"
-_SimplifiedPathPatternExpression_leftOrRight = Core.Name "leftOrRight"
-_SimplifiedPathPatternExpression_anyDirection = Core.Name "anyDirection"
-type SimplifiedDefaultingLeft = SimplifiedContents
-_SimplifiedDefaultingLeft = Core.Name "openGql.grammar.SimplifiedDefaultingLeft"
-type SimplifiedDefaultingUndirected = SimplifiedContents
-_SimplifiedDefaultingUndirected = Core.Name "openGql.grammar.SimplifiedDefaultingUndirected"
-type SimplifiedDefaultingRight = SimplifiedContents
-_SimplifiedDefaultingRight = Core.Name "openGql.grammar.SimplifiedDefaultingRight"
-type SimplifiedDefaultingLeftOrUndirected = SimplifiedContents
-_SimplifiedDefaultingLeftOrUndirected = Core.Name "openGql.grammar.SimplifiedDefaultingLeftOrUndirected"
-type SimplifiedDefaultingUndirectedOrRight = SimplifiedContents
-_SimplifiedDefaultingUndirectedOrRight = Core.Name "openGql.grammar.SimplifiedDefaultingUndirectedOrRight"
-type SimplifiedDefaultingLeftOrRight = SimplifiedContents
-_SimplifiedDefaultingLeftOrRight = Core.Name "openGql.grammar.SimplifiedDefaultingLeftOrRight"
-type SimplifiedDefaultingAnyDirection = SimplifiedContents
-_SimplifiedDefaultingAnyDirection = Core.Name "openGql.grammar.SimplifiedDefaultingAnyDirection"
-data SimplifiedContents =
-  SimplifiedContentsTerm SimplifiedTerm |
-  SimplifiedContentsPathUnion SimplifiedPathUnion |
-  SimplifiedContentsMultisetAlternation SimplifiedMultisetAlternation
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedContents = Core.Name "openGql.grammar.SimplifiedContents"
-_SimplifiedContents_term = Core.Name "term"
-_SimplifiedContents_pathUnion = Core.Name "pathUnion"
-_SimplifiedContents_multisetAlternation = Core.Name "multisetAlternation"
-type SimplifiedPathUnion = [SimplifiedTerm]
-_SimplifiedPathUnion = Core.Name "openGql.grammar.SimplifiedPathUnion"
-type SimplifiedMultisetAlternation = [SimplifiedTerm]
-_SimplifiedMultisetAlternation = Core.Name "openGql.grammar.SimplifiedMultisetAlternation"
-data SimplifiedTerm =
-  SimplifiedTermFactorLow SimplifiedFactorLow |
-  SimplifiedTermConcatenation SimplifiedConcatenation
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedTerm = Core.Name "openGql.grammar.SimplifiedTerm"
-_SimplifiedTerm_factorLow = Core.Name "factorLow"
-_SimplifiedTerm_concatenation = Core.Name "concatenation"
-data SimplifiedConcatenation =
-  SimplifiedConcatenation {
-    simplifiedConcatenationInitialTerm :: SimplifiedTerm,
-    simplifiedConcatenationNextFactor :: SimplifiedFactorLow}
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedConcatenation = Core.Name "openGql.grammar.SimplifiedConcatenation"
-_SimplifiedConcatenation_initialTerm = Core.Name "initialTerm"
-_SimplifiedConcatenation_nextFactor = Core.Name "nextFactor"
-data SimplifiedFactorLow =
-  SimplifiedFactorLowFactorHigh SimplifiedFactorHigh |
-  SimplifiedFactorLowConjunction SimplifiedConjunction
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedFactorLow = Core.Name "openGql.grammar.SimplifiedFactorLow"
-_SimplifiedFactorLow_factorHigh = Core.Name "factorHigh"
-_SimplifiedFactorLow_conjunction = Core.Name "conjunction"
-data SimplifiedConjunction =
-  SimplifiedConjunction {
-    simplifiedConjunctionLeft :: SimplifiedFactorLow,
-    simplifiedConjunctionRight :: SimplifiedFactorHigh}
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedConjunction = Core.Name "openGql.grammar.SimplifiedConjunction"
-_SimplifiedConjunction_left = Core.Name "left"
-_SimplifiedConjunction_right = Core.Name "right"
-data SimplifiedFactorHigh =
-  SimplifiedFactorHighTertiary SimplifiedTertiary |
-  SimplifiedFactorHighQuantified SimplifiedQuantified |
-  SimplifiedFactorHighQuestioned SimplifiedQuestioned
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedFactorHigh = Core.Name "openGql.grammar.SimplifiedFactorHigh"
-_SimplifiedFactorHigh_tertiary = Core.Name "tertiary"
-_SimplifiedFactorHigh_quantified = Core.Name "quantified"
-_SimplifiedFactorHigh_questioned = Core.Name "questioned"
-data SimplifiedQuantified =
-  SimplifiedQuantified {
-    simplifiedQuantifiedTertiary :: SimplifiedTertiary,
-    simplifiedQuantifiedQuantifier :: GraphPatternQuantifier}
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedQuantified = Core.Name "openGql.grammar.SimplifiedQuantified"
-_SimplifiedQuantified_tertiary = Core.Name "tertiary"
-_SimplifiedQuantified_quantifier = Core.Name "quantifier"
-type SimplifiedQuestioned = SimplifiedTertiary
-_SimplifiedQuestioned = Core.Name "openGql.grammar.SimplifiedQuestioned"
-data SimplifiedTertiary =
-  SimplifiedTertiaryDirectionOverride SimplifiedDirectionOverride |
-  SimplifiedTertiarySecondary SimplifiedSecondary
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedTertiary = Core.Name "openGql.grammar.SimplifiedTertiary"
-_SimplifiedTertiary_directionOverride = Core.Name "directionOverride"
-_SimplifiedTertiary_secondary = Core.Name "secondary"
-data SimplifiedDirectionOverride =
-  SimplifiedDirectionOverrideOverrideLeft SimplifiedOverrideLeft |
-  SimplifiedDirectionOverrideOverrideUndirected SimplifiedOverrideUndirected |
-  SimplifiedDirectionOverrideOverrideRight SimplifiedOverrideRight |
-  SimplifiedDirectionOverrideOverrideLeftOrUndirected SimplifiedOverrideLeftOrUndirected |
-  SimplifiedDirectionOverrideOverrideUndirectedOrRight SimplifiedOverrideUndirectedOrRight |
-  SimplifiedDirectionOverrideOverrideLeftOrRight SimplifiedOverrideLeftOrRight |
-  SimplifiedDirectionOverrideOverrideAnyDirection SimplifiedOverrideAnyDirection
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedDirectionOverride = Core.Name "openGql.grammar.SimplifiedDirectionOverride"
-_SimplifiedDirectionOverride_overrideLeft = Core.Name "overrideLeft"
-_SimplifiedDirectionOverride_overrideUndirected = Core.Name "overrideUndirected"
-_SimplifiedDirectionOverride_overrideRight = Core.Name "overrideRight"
-_SimplifiedDirectionOverride_overrideLeftOrUndirected = Core.Name "overrideLeftOrUndirected"
-_SimplifiedDirectionOverride_overrideUndirectedOrRight = Core.Name "overrideUndirectedOrRight"
-_SimplifiedDirectionOverride_overrideLeftOrRight = Core.Name "overrideLeftOrRight"
-_SimplifiedDirectionOverride_overrideAnyDirection = Core.Name "overrideAnyDirection"
-type SimplifiedOverrideLeft = SimplifiedSecondary
-_SimplifiedOverrideLeft = Core.Name "openGql.grammar.SimplifiedOverrideLeft"
-type SimplifiedOverrideUndirected = SimplifiedSecondary
-_SimplifiedOverrideUndirected = Core.Name "openGql.grammar.SimplifiedOverrideUndirected"
-type SimplifiedOverrideRight = SimplifiedSecondary
-_SimplifiedOverrideRight = Core.Name "openGql.grammar.SimplifiedOverrideRight"
-type SimplifiedOverrideLeftOrUndirected = SimplifiedSecondary
-_SimplifiedOverrideLeftOrUndirected = Core.Name "openGql.grammar.SimplifiedOverrideLeftOrUndirected"
-type SimplifiedOverrideUndirectedOrRight = SimplifiedSecondary
-_SimplifiedOverrideUndirectedOrRight = Core.Name "openGql.grammar.SimplifiedOverrideUndirectedOrRight"
-type SimplifiedOverrideLeftOrRight = SimplifiedSecondary
-_SimplifiedOverrideLeftOrRight = Core.Name "openGql.grammar.SimplifiedOverrideLeftOrRight"
-type SimplifiedOverrideAnyDirection = SimplifiedSecondary
-_SimplifiedOverrideAnyDirection = Core.Name "openGql.grammar.SimplifiedOverrideAnyDirection"
-data SimplifiedSecondary =
-  SimplifiedSecondaryPrimary SimplifiedPrimary |
-  SimplifiedSecondaryNegation SimplifiedNegation
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedSecondary = Core.Name "openGql.grammar.SimplifiedSecondary"
-_SimplifiedSecondary_primary = Core.Name "primary"
-_SimplifiedSecondary_negation = Core.Name "negation"
-type SimplifiedNegation = SimplifiedPrimary
-_SimplifiedNegation = Core.Name "openGql.grammar.SimplifiedNegation"
-data SimplifiedPrimary =
-  SimplifiedPrimaryLabelName LabelName |
-  SimplifiedPrimaryParenthesizedContents SimplifiedContents
-  deriving (Eq, Ord, Read, Show)
-_SimplifiedPrimary = Core.Name "openGql.grammar.SimplifiedPrimary"
-_SimplifiedPrimary_labelName = Core.Name "labelName"
-_SimplifiedPrimary_parenthesizedContents = Core.Name "parenthesizedContents"
-type WhereClause = SearchCondition
-_WhereClause = Core.Name "openGql.grammar.WhereClause"
-type YieldClause = YieldItemList
-_YieldClause = Core.Name "openGql.grammar.YieldClause"
-type YieldItemList = [YieldItem]
-_YieldItemList = Core.Name "openGql.grammar.YieldItemList"
-data YieldItem =
-  YieldItem {
-    yieldItemName :: YieldItemName,
-    yieldItemAlias :: (Maybe YieldItemAlias)}
-  deriving (Eq, Ord, Read, Show)
-_YieldItem = Core.Name "openGql.grammar.YieldItem"
-_YieldItem_name = Core.Name "name"
-_YieldItem_alias = Core.Name "alias"
-type YieldItemName = FieldName
-_YieldItemName = Core.Name "openGql.grammar.YieldItemName"
-type YieldItemAlias = BindingVariable
-_YieldItemAlias = Core.Name "openGql.grammar.YieldItemAlias"
-type GroupByClause = GroupingElementList
-_GroupByClause = Core.Name "openGql.grammar.GroupByClause"
-data GroupingElementList =
-  GroupingElementListElements [GroupingElement] |
-  GroupingElementListEmptySet
-  deriving (Eq, Ord, Read, Show)
-_GroupingElementList = Core.Name "openGql.grammar.GroupingElementList"
-_GroupingElementList_elements = Core.Name "elements"
-_GroupingElementList_emptySet = Core.Name "emptySet"
-type GroupingElement = BindingVariableReference
-_GroupingElement = Core.Name "openGql.grammar.GroupingElement"
-type OrderByClause = SortSpecificationList
-_OrderByClause = Core.Name "openGql.grammar.OrderByClause"
-type SortSpecificationList = [SortSpecification]
-_SortSpecificationList = Core.Name "openGql.grammar.SortSpecificationList"
-data SortSpecification =
-  SortSpecification {
-    sortSpecificationSortKey :: SortKey,
-    sortSpecificationOrdering :: (Maybe OrderingSpecification),
-    sortSpecificationNullOrdering :: (Maybe NullOrdering)}
-  deriving (Eq, Ord, Read, Show)
-_SortSpecification = Core.Name "openGql.grammar.SortSpecification"
-_SortSpecification_sortKey = Core.Name "sortKey"
-_SortSpecification_ordering = Core.Name "ordering"
-_SortSpecification_nullOrdering = Core.Name "nullOrdering"
-type SortKey = AggregatingValueExpression
-_SortKey = Core.Name "openGql.grammar.SortKey"
-data OrderingSpecification =
-  OrderingSpecificationAscending |
-  OrderingSpecificationDescending
-  deriving (Eq, Ord, Read, Show)
-_OrderingSpecification = Core.Name "openGql.grammar.OrderingSpecification"
-_OrderingSpecification_ascending = Core.Name "ascending"
-_OrderingSpecification_descending = Core.Name "descending"
-data NullOrdering =
-  NullOrderingNullsFirst |
-  NullOrderingNullsLast
-  deriving (Eq, Ord, Read, Show)
-_NullOrdering = Core.Name "openGql.grammar.NullOrdering"
-_NullOrdering_nullsFirst = Core.Name "nullsFirst"
-_NullOrdering_nullsLast = Core.Name "nullsLast"
-type LimitClause = NonNegativeIntegerSpecification
-_LimitClause = Core.Name "openGql.grammar.LimitClause"
-data OffsetClause =
-  OffsetClause {
-    offsetClauseSynonym :: OffsetSynonym,
-    offsetClauseValue :: NonNegativeIntegerSpecification}
-  deriving (Eq, Ord, Read, Show)
-_OffsetClause = Core.Name "openGql.grammar.OffsetClause"
-_OffsetClause_synonym = Core.Name "synonym"
-_OffsetClause_value = Core.Name "value"
-data OffsetSynonym =
-  OffsetSynonymOffset |
-  OffsetSynonymSkipReservedWord
-  deriving (Eq, Ord, Read, Show)
-_OffsetSynonym = Core.Name "openGql.grammar.OffsetSynonym"
-_OffsetSynonym_offset = Core.Name "offset"
-_OffsetSynonym_skipReservedWord = Core.Name "skipReservedWord"
-data SchemaReference =
-  SchemaReferenceAbsoluteReference AbsoluteCatalogSchemaReference |
-  SchemaReferenceRelativeReference RelativeCatalogSchemaReference |
-  SchemaReferenceParameterSpecification ReferenceParameterSpecification
-  deriving (Eq, Ord, Read, Show)
-_SchemaReference = Core.Name "openGql.grammar.SchemaReference"
-_SchemaReference_absoluteReference = Core.Name "absoluteReference"
-_SchemaReference_relativeReference = Core.Name "relativeReference"
-_SchemaReference_parameterSpecification = Core.Name "parameterSpecification"
-data AbsoluteCatalogSchemaReference =
-  AbsoluteCatalogSchemaReferenceRoot |
-  AbsoluteCatalogSchemaReferenceDirectoryAndSchema AbsoluteDirectoryAndSchema
-  deriving (Eq, Ord, Read, Show)
-_AbsoluteCatalogSchemaReference = Core.Name "openGql.grammar.AbsoluteCatalogSchemaReference"
-_AbsoluteCatalogSchemaReference_root = Core.Name "root"
-_AbsoluteCatalogSchemaReference_directoryAndSchema = Core.Name "directoryAndSchema"
-data AbsoluteDirectoryAndSchema =
-  AbsoluteDirectoryAndSchema {
-    absoluteDirectoryAndSchemaDirectoryPath :: AbsoluteDirectoryPath,
-    absoluteDirectoryAndSchemaSchemaName :: SchemaName}
-  deriving (Eq, Ord, Read, Show)
-_AbsoluteDirectoryAndSchema = Core.Name "openGql.grammar.AbsoluteDirectoryAndSchema"
-_AbsoluteDirectoryAndSchema_directoryPath = Core.Name "directoryPath"
-_AbsoluteDirectoryAndSchema_schemaName = Core.Name "schemaName"
-type CatalogSchemaParentAndName = AbsoluteDirectoryAndSchema
-_CatalogSchemaParentAndName = Core.Name "openGql.grammar.CatalogSchemaParentAndName"
-data RelativeCatalogSchemaReference =
-  RelativeCatalogSchemaReferencePredefinedReference PredefinedSchemaReference |
-  RelativeCatalogSchemaReferenceDirectoryAndSchema RelativeDirectoryAndSchema
-  deriving (Eq, Ord, Read, Show)
-_RelativeCatalogSchemaReference = Core.Name "openGql.grammar.RelativeCatalogSchemaReference"
-_RelativeCatalogSchemaReference_predefinedReference = Core.Name "predefinedReference"
-_RelativeCatalogSchemaReference_directoryAndSchema = Core.Name "directoryAndSchema"
-data RelativeDirectoryAndSchema =
-  RelativeDirectoryAndSchema {
-    relativeDirectoryAndSchemaDirectoryPath :: RelativeDirectoryPath,
-    relativeDirectoryAndSchemaSchemaName :: SchemaName}
-  deriving (Eq, Ord, Read, Show)
-_RelativeDirectoryAndSchema = Core.Name "openGql.grammar.RelativeDirectoryAndSchema"
-_RelativeDirectoryAndSchema_directoryPath = Core.Name "directoryPath"
-_RelativeDirectoryAndSchema_schemaName = Core.Name "schemaName"
-data PredefinedSchemaReference =
-  PredefinedSchemaReferenceHomeSchema |
-  PredefinedSchemaReferenceCurrentSchema |
-  PredefinedSchemaReferencePeriod
-  deriving (Eq, Ord, Read, Show)
-_PredefinedSchemaReference = Core.Name "openGql.grammar.PredefinedSchemaReference"
-_PredefinedSchemaReference_homeSchema = Core.Name "homeSchema"
-_PredefinedSchemaReference_currentSchema = Core.Name "currentSchema"
-_PredefinedSchemaReference_period = Core.Name "period"
-type AbsoluteDirectoryPath = (Maybe SimpleDirectoryPath)
-_AbsoluteDirectoryPath = Core.Name "openGql.grammar.AbsoluteDirectoryPath"
-data RelativeDirectoryPath =
-  RelativeDirectoryPath {
-    relativeDirectoryPathParentDirectories :: Int,
-    relativeDirectoryPathSimplePath :: (Maybe SimpleDirectoryPath)}
-  deriving (Eq, Ord, Read, Show)
-_RelativeDirectoryPath = Core.Name "openGql.grammar.RelativeDirectoryPath"
-_RelativeDirectoryPath_parentDirectories = Core.Name "parentDirectories"
-_RelativeDirectoryPath_simplePath = Core.Name "simplePath"
-type SimpleDirectoryPath = [DirectoryName]
-_SimpleDirectoryPath = Core.Name "openGql.grammar.SimpleDirectoryPath"
-data GraphReference =
-  GraphReferenceParentAndGraphName ParentAndGraphName |
-  GraphReferenceDelimitedGraphName DelimitedGraphName |
-  GraphReferenceHomeGraph HomeGraph |
-  GraphReferenceParameterSpecification ReferenceParameterSpecification
-  deriving (Eq, Ord, Read, Show)
-_GraphReference = Core.Name "openGql.grammar.GraphReference"
-_GraphReference_parentAndGraphName = Core.Name "parentAndGraphName"
-_GraphReference_delimitedGraphName = Core.Name "delimitedGraphName"
-_GraphReference_homeGraph = Core.Name "homeGraph"
-_GraphReference_parameterSpecification = Core.Name "parameterSpecification"
-data ParentAndGraphName =
-  ParentAndGraphName {
-    parentAndGraphNameParentReference :: CatalogObjectParentReference,
-    parentAndGraphNameGraphName :: GraphName}
-  deriving (Eq, Ord, Read, Show)
-_ParentAndGraphName = Core.Name "openGql.grammar.ParentAndGraphName"
-_ParentAndGraphName_parentReference = Core.Name "parentReference"
-_ParentAndGraphName_graphName = Core.Name "graphName"
-data CatalogGraphParentAndName =
-  CatalogGraphParentAndName {
-    catalogGraphParentAndNameParentReference :: (Maybe CatalogObjectParentReference),
-    catalogGraphParentAndNameGraphName :: GraphName}
-  deriving (Eq, Ord, Read, Show)
-_CatalogGraphParentAndName = Core.Name "openGql.grammar.CatalogGraphParentAndName"
-_CatalogGraphParentAndName_parentReference = Core.Name "parentReference"
-_CatalogGraphParentAndName_graphName = Core.Name "graphName"
-data HomeGraph =
-  HomeGraphHomePropertyGraph |
-  HomeGraphHomeGraph
-  deriving (Eq, Ord, Read, Show)
-_HomeGraph = Core.Name "openGql.grammar.HomeGraph"
-_HomeGraph_homePropertyGraph = Core.Name "homePropertyGraph"
-_HomeGraph_homeGraph = Core.Name "homeGraph"
-data GraphTypeReference =
-  GraphTypeReferenceParentAndTypeName CatalogGraphTypeParentAndName |
-  GraphTypeReferenceParameterSpecification ReferenceParameterSpecification
-  deriving (Eq, Ord, Read, Show)
-_GraphTypeReference = Core.Name "openGql.grammar.GraphTypeReference"
-_GraphTypeReference_parentAndTypeName = Core.Name "parentAndTypeName"
-_GraphTypeReference_parameterSpecification = Core.Name "parameterSpecification"
-data CatalogGraphTypeParentAndName =
-  CatalogGraphTypeParentAndName {
-    catalogGraphTypeParentAndNameParentReference :: (Maybe CatalogObjectParentReference),
-    catalogGraphTypeParentAndNameGraphTypeName :: GraphTypeName}
-  deriving (Eq, Ord, Read, Show)
-_CatalogGraphTypeParentAndName = Core.Name "openGql.grammar.CatalogGraphTypeParentAndName"
-_CatalogGraphTypeParentAndName_parentReference = Core.Name "parentReference"
-_CatalogGraphTypeParentAndName_graphTypeName = Core.Name "graphTypeName"
-data BindingTableReference =
-  BindingTableReferenceParentAndTableName ParentAndTableName |
-  BindingTableReferenceDelimitedBindingTableName DelimitedBindingTableName |
-  BindingTableReferenceParameterSpecification ReferenceParameterSpecification
-  deriving (Eq, Ord, Read, Show)
-_BindingTableReference = Core.Name "openGql.grammar.BindingTableReference"
-_BindingTableReference_parentAndTableName = Core.Name "parentAndTableName"
-_BindingTableReference_delimitedBindingTableName = Core.Name "delimitedBindingTableName"
-_BindingTableReference_parameterSpecification = Core.Name "parameterSpecification"
-data ParentAndTableName =
-  ParentAndTableName {
-    parentAndTableNameParentReference :: CatalogObjectParentReference,
-    parentAndTableNameTableName :: BindingTableName}
-  deriving (Eq, Ord, Read, Show)
-_ParentAndTableName = Core.Name "openGql.grammar.ParentAndTableName"
-_ParentAndTableName_parentReference = Core.Name "parentReference"
-_ParentAndTableName_tableName = Core.Name "tableName"
-data ProcedureReference =
-  ProcedureReferenceParentAndProcedureName CatalogProcedureParentAndName |
-  ProcedureReferenceParameterSpecification ReferenceParameterSpecification
-  deriving (Eq, Ord, Read, Show)
-_ProcedureReference = Core.Name "openGql.grammar.ProcedureReference"
-_ProcedureReference_parentAndProcedureName = Core.Name "parentAndProcedureName"
-_ProcedureReference_parameterSpecification = Core.Name "parameterSpecification"
-data CatalogProcedureParentAndName =
-  CatalogProcedureParentAndName {
-    catalogProcedureParentAndNameParentReference :: (Maybe CatalogObjectParentReference),
-    catalogProcedureParentAndNameProcedureName :: ProcedureName}
-  deriving (Eq, Ord, Read, Show)
-_CatalogProcedureParentAndName = Core.Name "openGql.grammar.CatalogProcedureParentAndName"
-_CatalogProcedureParentAndName_parentReference = Core.Name "parentReference"
-_CatalogProcedureParentAndName_procedureName = Core.Name "procedureName"
-data CatalogObjectParentReference =
-  CatalogObjectParentReferenceSchemaAndObjects SchemaAndObjects |
-  CatalogObjectParentReferenceObjectsOnly [ObjectName]
-  deriving (Eq, Ord, Read, Show)
-_CatalogObjectParentReference = Core.Name "openGql.grammar.CatalogObjectParentReference"
-_CatalogObjectParentReference_schemaAndObjects = Core.Name "schemaAndObjects"
-_CatalogObjectParentReference_objectsOnly = Core.Name "objectsOnly"
-data SchemaAndObjects =
-  SchemaAndObjects {
-    schemaAndObjectsSchemaReference :: SchemaReference,
-    schemaAndObjectsObjects :: [ObjectName]}
-  deriving (Eq, Ord, Read, Show)
-_SchemaAndObjects = Core.Name "openGql.grammar.SchemaAndObjects"
-_SchemaAndObjects_schemaReference = Core.Name "schemaReference"
-_SchemaAndObjects_objects = Core.Name "objects"
-type ReferenceParameterSpecification = ()
-_ReferenceParameterSpecification = Core.Name "openGql.grammar.ReferenceParameterSpecification"
-type NestedGraphTypeSpecification = GraphTypeSpecificationBody
-_NestedGraphTypeSpecification = Core.Name "openGql.grammar.NestedGraphTypeSpecification"
-type GraphTypeSpecificationBody = ElementTypeList
-_GraphTypeSpecificationBody = Core.Name "openGql.grammar.GraphTypeSpecificationBody"
-type ElementTypeList = [ElementTypeSpecification]
-_ElementTypeList = Core.Name "openGql.grammar.ElementTypeList"
-data ElementTypeSpecification =
-  ElementTypeSpecificationNodeType NodeTypeSpecification |
-  ElementTypeSpecificationEdgeType EdgeTypeSpecification
-  deriving (Eq, Ord, Read, Show)
-_ElementTypeSpecification = Core.Name "openGql.grammar.ElementTypeSpecification"
-_ElementTypeSpecification_nodeType = Core.Name "nodeType"
-_ElementTypeSpecification_edgeType = Core.Name "edgeType"
-data NodeTypeSpecification =
-  NodeTypeSpecificationPattern NodeTypePattern |
-  NodeTypeSpecificationPhrase NodeTypePhrase
-  deriving (Eq, Ord, Read, Show)
-_NodeTypeSpecification = Core.Name "openGql.grammar.NodeTypeSpecification"
-_NodeTypeSpecification_pattern = Core.Name "pattern"
-_NodeTypeSpecification_phrase = Core.Name "phrase"
-data NodeTypePattern =
-  NodeTypePattern {
-    nodeTypePatternSynonymAndTypeName :: (Maybe NodeSynonymAndTypeName),
-    nodeTypePatternAlias :: (Maybe LocalNodeTypeAlias),
-    nodeTypePatternFiller :: (Maybe NodeTypeFiller)}
-  deriving (Eq, Ord, Read, Show)
-_NodeTypePattern = Core.Name "openGql.grammar.NodeTypePattern"
-_NodeTypePattern_synonymAndTypeName = Core.Name "synonymAndTypeName"
-_NodeTypePattern_alias = Core.Name "alias"
-_NodeTypePattern_filler = Core.Name "filler"
-data NodeSynonymAndTypeName =
-  NodeSynonymAndTypeName {
-    nodeSynonymAndTypeNameNodeSynonym :: NodeSynonym,
-    nodeSynonymAndTypeNameTypeName :: (Maybe NodeTypeName)}
-  deriving (Eq, Ord, Read, Show)
-_NodeSynonymAndTypeName = Core.Name "openGql.grammar.NodeSynonymAndTypeName"
-_NodeSynonymAndTypeName_nodeSynonym = Core.Name "nodeSynonym"
-_NodeSynonymAndTypeName_typeName = Core.Name "typeName"
-data NodeTypePhrase =
-  NodeTypePhrase {
-    nodeTypePhraseSynonym :: NodeSynonym,
-    nodeTypePhraseTypePhraseFiller :: NodeTypePhraseFiller,
-    nodeTypePhraseAlias :: (Maybe LocalNodeTypeAlias)}
-  deriving (Eq, Ord, Read, Show)
-_NodeTypePhrase = Core.Name "openGql.grammar.NodeTypePhrase"
-_NodeTypePhrase_synonym = Core.Name "synonym"
-_NodeTypePhrase_typePhraseFiller = Core.Name "typePhraseFiller"
-_NodeTypePhrase_alias = Core.Name "alias"
-data NodeTypePhraseFiller =
-  NodeTypePhraseFillerTypeName NodeTypeNameWithFiller |
-  NodeTypePhraseFillerFillerOnly NodeTypeFiller
-  deriving (Eq, Ord, Read, Show)
-_NodeTypePhraseFiller = Core.Name "openGql.grammar.NodeTypePhraseFiller"
-_NodeTypePhraseFiller_typeName = Core.Name "typeName"
-_NodeTypePhraseFiller_fillerOnly = Core.Name "fillerOnly"
-data NodeTypeNameWithFiller =
-  NodeTypeNameWithFiller {
-    nodeTypeNameWithFillerTypeName :: NodeTypeName,
-    nodeTypeNameWithFillerFiller :: (Maybe NodeTypeFiller)}
-  deriving (Eq, Ord, Read, Show)
-_NodeTypeNameWithFiller = Core.Name "openGql.grammar.NodeTypeNameWithFiller"
-_NodeTypeNameWithFiller_typeName = Core.Name "typeName"
-_NodeTypeNameWithFiller_filler = Core.Name "filler"
-data NodeTypeFiller =
-  NodeTypeFillerKeyLabelSet NodeKeyLabelSetWithContent |
-  NodeTypeFillerImpliedContent NodeTypeImpliedContent
-  deriving (Eq, Ord, Read, Show)
-_NodeTypeFiller = Core.Name "openGql.grammar.NodeTypeFiller"
-_NodeTypeFiller_keyLabelSet = Core.Name "keyLabelSet"
-_NodeTypeFiller_impliedContent = Core.Name "impliedContent"
-data NodeKeyLabelSetWithContent =
-  NodeKeyLabelSetWithContent {
-    nodeKeyLabelSetWithContentKeyLabelSet :: NodeTypeKeyLabelSet,
-    nodeKeyLabelSetWithContentImpliedContent :: (Maybe NodeTypeImpliedContent)}
-  deriving (Eq, Ord, Read, Show)
-_NodeKeyLabelSetWithContent = Core.Name "openGql.grammar.NodeKeyLabelSetWithContent"
-_NodeKeyLabelSetWithContent_keyLabelSet = Core.Name "keyLabelSet"
-_NodeKeyLabelSetWithContent_impliedContent = Core.Name "impliedContent"
-type LocalNodeTypeAlias = String
-_LocalNodeTypeAlias = Core.Name "openGql.grammar.LocalNodeTypeAlias"
-data NodeTypeImpliedContent =
-  NodeTypeImpliedContentLabelSet NodeTypeLabelSet |
-  NodeTypeImpliedContentPropertyTypes NodeTypePropertyTypes |
-  NodeTypeImpliedContentLabelSetWithProperties NodeLabelSetWithProperties
-  deriving (Eq, Ord, Read, Show)
-_NodeTypeImpliedContent = Core.Name "openGql.grammar.NodeTypeImpliedContent"
-_NodeTypeImpliedContent_labelSet = Core.Name "labelSet"
-_NodeTypeImpliedContent_propertyTypes = Core.Name "propertyTypes"
-_NodeTypeImpliedContent_labelSetWithProperties = Core.Name "labelSetWithProperties"
-data NodeLabelSetWithProperties =
-  NodeLabelSetWithProperties {
-    nodeLabelSetWithPropertiesLabelSet :: NodeTypeLabelSet,
-    nodeLabelSetWithPropertiesPropertyTypes :: NodeTypePropertyTypes}
-  deriving (Eq, Ord, Read, Show)
-_NodeLabelSetWithProperties = Core.Name "openGql.grammar.NodeLabelSetWithProperties"
-_NodeLabelSetWithProperties_labelSet = Core.Name "labelSet"
-_NodeLabelSetWithProperties_propertyTypes = Core.Name "propertyTypes"
-type NodeTypeKeyLabelSet = (Maybe LabelSetPhrase)
-_NodeTypeKeyLabelSet = Core.Name "openGql.grammar.NodeTypeKeyLabelSet"
-type NodeTypeLabelSet = LabelSetPhrase
-_NodeTypeLabelSet = Core.Name "openGql.grammar.NodeTypeLabelSet"
-type NodeTypePropertyTypes = PropertyTypesSpecification
-_NodeTypePropertyTypes = Core.Name "openGql.grammar.NodeTypePropertyTypes"
-data EdgeTypeSpecification =
-  EdgeTypeSpecificationPattern EdgeTypePattern |
-  EdgeTypeSpecificationPhrase EdgeTypePhrase
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypeSpecification = Core.Name "openGql.grammar.EdgeTypeSpecification"
-_EdgeTypeSpecification_pattern = Core.Name "pattern"
-_EdgeTypeSpecification_phrase = Core.Name "phrase"
-data EdgeTypePattern =
-  EdgeTypePattern {
-    edgeTypePatternKindAndSynonym :: (Maybe EdgeKindAndSynonym),
-    edgeTypePatternPatternType :: EdgeTypePatternType}
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypePattern = Core.Name "openGql.grammar.EdgeTypePattern"
-_EdgeTypePattern_kindAndSynonym = Core.Name "kindAndSynonym"
-_EdgeTypePattern_patternType = Core.Name "patternType"
-data EdgeKindAndSynonym =
-  EdgeKindAndSynonym {
-    edgeKindAndSynonymKind :: (Maybe EdgeKind),
-    edgeKindAndSynonymSynonym :: EdgeSynonym,
-    edgeKindAndSynonymTypeName :: (Maybe EdgeTypeName)}
-  deriving (Eq, Ord, Read, Show)
-_EdgeKindAndSynonym = Core.Name "openGql.grammar.EdgeKindAndSynonym"
-_EdgeKindAndSynonym_kind = Core.Name "kind"
-_EdgeKindAndSynonym_synonym = Core.Name "synonym"
-_EdgeKindAndSynonym_typeName = Core.Name "typeName"
-data EdgeTypePatternType =
-  EdgeTypePatternTypeDirected EdgeTypePatternDirected |
-  EdgeTypePatternTypeUndirected EdgeTypePatternUndirected
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypePatternType = Core.Name "openGql.grammar.EdgeTypePatternType"
-_EdgeTypePatternType_directed = Core.Name "directed"
-_EdgeTypePatternType_undirected = Core.Name "undirected"
-data EdgeTypePhrase =
-  EdgeTypePhrase {
-    edgeTypePhraseKind :: EdgeKind,
-    edgeTypePhraseSynonym :: EdgeSynonym,
-    edgeTypePhraseTypeNameAndFiller :: EdgeTypePhraseFiller,
-    edgeTypePhraseEndpointPair :: EndpointPairPhrase}
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypePhrase = Core.Name "openGql.grammar.EdgeTypePhrase"
-_EdgeTypePhrase_kind = Core.Name "kind"
-_EdgeTypePhrase_synonym = Core.Name "synonym"
-_EdgeTypePhrase_typeNameAndFiller = Core.Name "typeNameAndFiller"
-_EdgeTypePhrase_endpointPair = Core.Name "endpointPair"
-data EdgeTypePhraseFiller =
-  EdgeTypePhraseFillerTypeNameWithFiller EdgeTypeNameWithFiller |
-  EdgeTypePhraseFillerFillerOnly EdgeTypeFiller
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypePhraseFiller = Core.Name "openGql.grammar.EdgeTypePhraseFiller"
-_EdgeTypePhraseFiller_typeNameWithFiller = Core.Name "typeNameWithFiller"
-_EdgeTypePhraseFiller_fillerOnly = Core.Name "fillerOnly"
-data EdgeTypeNameWithFiller =
-  EdgeTypeNameWithFiller {
-    edgeTypeNameWithFillerTypeName :: EdgeTypeName,
-    edgeTypeNameWithFillerFiller :: (Maybe EdgeTypeFiller)}
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypeNameWithFiller = Core.Name "openGql.grammar.EdgeTypeNameWithFiller"
-_EdgeTypeNameWithFiller_typeName = Core.Name "typeName"
-_EdgeTypeNameWithFiller_filler = Core.Name "filler"
-data EdgeTypeFiller =
-  EdgeTypeFillerKeyLabelSetWithContent EdgeKeyLabelSetWithContent |
-  EdgeTypeFillerImpliedContent EdgeTypeImpliedContent
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypeFiller = Core.Name "openGql.grammar.EdgeTypeFiller"
-_EdgeTypeFiller_keyLabelSetWithContent = Core.Name "keyLabelSetWithContent"
-_EdgeTypeFiller_impliedContent = Core.Name "impliedContent"
-data EdgeKeyLabelSetWithContent =
-  EdgeKeyLabelSetWithContent {
-    edgeKeyLabelSetWithContentKeyLabelSet :: EdgeTypeKeyLabelSet,
-    edgeKeyLabelSetWithContentImpliedContent :: (Maybe EdgeTypeImpliedContent)}
-  deriving (Eq, Ord, Read, Show)
-_EdgeKeyLabelSetWithContent = Core.Name "openGql.grammar.EdgeKeyLabelSetWithContent"
-_EdgeKeyLabelSetWithContent_keyLabelSet = Core.Name "keyLabelSet"
-_EdgeKeyLabelSetWithContent_impliedContent = Core.Name "impliedContent"
-data EdgeTypeImpliedContent =
-  EdgeTypeImpliedContentLabelSet EdgeTypeLabelSet |
-  EdgeTypeImpliedContentPropertyTypes EdgeTypePropertyTypes |
-  EdgeTypeImpliedContentLabelSetWithProperties EdgeLabelSetWithProperties
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypeImpliedContent = Core.Name "openGql.grammar.EdgeTypeImpliedContent"
-_EdgeTypeImpliedContent_labelSet = Core.Name "labelSet"
-_EdgeTypeImpliedContent_propertyTypes = Core.Name "propertyTypes"
-_EdgeTypeImpliedContent_labelSetWithProperties = Core.Name "labelSetWithProperties"
-data EdgeLabelSetWithProperties =
-  EdgeLabelSetWithProperties {
-    edgeLabelSetWithPropertiesLabelSet :: EdgeTypeLabelSet,
-    edgeLabelSetWithPropertiesPropertyTypes :: EdgeTypePropertyTypes}
-  deriving (Eq, Ord, Read, Show)
-_EdgeLabelSetWithProperties = Core.Name "openGql.grammar.EdgeLabelSetWithProperties"
-_EdgeLabelSetWithProperties_labelSet = Core.Name "labelSet"
-_EdgeLabelSetWithProperties_propertyTypes = Core.Name "propertyTypes"
-type EdgeTypeKeyLabelSet = (Maybe LabelSetPhrase)
-_EdgeTypeKeyLabelSet = Core.Name "openGql.grammar.EdgeTypeKeyLabelSet"
-type EdgeTypeLabelSet = LabelSetPhrase
-_EdgeTypeLabelSet = Core.Name "openGql.grammar.EdgeTypeLabelSet"
-type EdgeTypePropertyTypes = PropertyTypesSpecification
-_EdgeTypePropertyTypes = Core.Name "openGql.grammar.EdgeTypePropertyTypes"
-data EdgeTypePatternDirected =
-  EdgeTypePatternDirectedPointingRight EdgeTypePatternPointingRight |
-  EdgeTypePatternDirectedPointingLeft EdgeTypePatternPointingLeft
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypePatternDirected = Core.Name "openGql.grammar.EdgeTypePatternDirected"
-_EdgeTypePatternDirected_pointingRight = Core.Name "pointingRight"
-_EdgeTypePatternDirected_pointingLeft = Core.Name "pointingLeft"
-data EdgeTypePatternPointingRight =
-  EdgeTypePatternPointingRight {
-    edgeTypePatternPointingRightSource :: SourceNodeTypeReference,
-    edgeTypePatternPointingRightArc :: ArcTypePointingRight,
-    edgeTypePatternPointingRightDestination :: DestinationNodeTypeReference}
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypePatternPointingRight = Core.Name "openGql.grammar.EdgeTypePatternPointingRight"
-_EdgeTypePatternPointingRight_source = Core.Name "source"
-_EdgeTypePatternPointingRight_arc = Core.Name "arc"
-_EdgeTypePatternPointingRight_destination = Core.Name "destination"
-data EdgeTypePatternPointingLeft =
-  EdgeTypePatternPointingLeft {
-    edgeTypePatternPointingLeftDestination :: DestinationNodeTypeReference,
-    edgeTypePatternPointingLeftArc :: ArcTypePointingLeft,
-    edgeTypePatternPointingLeftSource :: SourceNodeTypeReference}
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypePatternPointingLeft = Core.Name "openGql.grammar.EdgeTypePatternPointingLeft"
-_EdgeTypePatternPointingLeft_destination = Core.Name "destination"
-_EdgeTypePatternPointingLeft_arc = Core.Name "arc"
-_EdgeTypePatternPointingLeft_source = Core.Name "source"
-data EdgeTypePatternUndirected =
-  EdgeTypePatternUndirected {
-    edgeTypePatternUndirectedSource :: SourceNodeTypeReference,
-    edgeTypePatternUndirectedArc :: ArcTypeUndirected,
-    edgeTypePatternUndirectedDestination :: DestinationNodeTypeReference}
-  deriving (Eq, Ord, Read, Show)
-_EdgeTypePatternUndirected = Core.Name "openGql.grammar.EdgeTypePatternUndirected"
-_EdgeTypePatternUndirected_source = Core.Name "source"
-_EdgeTypePatternUndirected_arc = Core.Name "arc"
-_EdgeTypePatternUndirected_destination = Core.Name "destination"
-type ArcTypePointingRight = EdgeTypeFiller
-_ArcTypePointingRight = Core.Name "openGql.grammar.ArcTypePointingRight"
-type ArcTypePointingLeft = EdgeTypeFiller
-_ArcTypePointingLeft = Core.Name "openGql.grammar.ArcTypePointingLeft"
-type ArcTypeUndirected = EdgeTypeFiller
-_ArcTypeUndirected = Core.Name "openGql.grammar.ArcTypeUndirected"
-data SourceNodeTypeReference =
-  SourceNodeTypeReferenceAlias SourceNodeTypeAlias |
-  SourceNodeTypeReferenceFiller (Maybe NodeTypeFiller)
-  deriving (Eq, Ord, Read, Show)
-_SourceNodeTypeReference = Core.Name "openGql.grammar.SourceNodeTypeReference"
-_SourceNodeTypeReference_alias = Core.Name "alias"
-_SourceNodeTypeReference_filler = Core.Name "filler"
-data DestinationNodeTypeReference =
-  DestinationNodeTypeReferenceAlias DestinationNodeTypeAlias |
-  DestinationNodeTypeReferenceFiller (Maybe NodeTypeFiller)
-  deriving (Eq, Ord, Read, Show)
-_DestinationNodeTypeReference = Core.Name "openGql.grammar.DestinationNodeTypeReference"
-_DestinationNodeTypeReference_alias = Core.Name "alias"
-_DestinationNodeTypeReference_filler = Core.Name "filler"
-data EdgeKind =
-  EdgeKindDirected |
-  EdgeKindUndirected
-  deriving (Eq, Ord, Read, Show)
-_EdgeKind = Core.Name "openGql.grammar.EdgeKind"
-_EdgeKind_directed = Core.Name "directed"
-_EdgeKind_undirected = Core.Name "undirected"
-type EndpointPairPhrase = EndpointPair
-_EndpointPairPhrase = Core.Name "openGql.grammar.EndpointPairPhrase"
-data EndpointPair =
-  EndpointPairDirectedPair EndpointPairDirected |
-  EndpointPairUndirectedPair EndpointPairUndirected
-  deriving (Eq, Ord, Read, Show)
-_EndpointPair = Core.Name "openGql.grammar.EndpointPair"
-_EndpointPair_directedPair = Core.Name "directedPair"
-_EndpointPair_undirectedPair = Core.Name "undirectedPair"
-data EndpointPairDirected =
-  EndpointPairDirectedPointingRight EndpointPairPointingRight |
-  EndpointPairDirectedPointingLeft EndpointPairPointingLeft
-  deriving (Eq, Ord, Read, Show)
-_EndpointPairDirected = Core.Name "openGql.grammar.EndpointPairDirected"
-_EndpointPairDirected_pointingRight = Core.Name "pointingRight"
-_EndpointPairDirected_pointingLeft = Core.Name "pointingLeft"
-data EndpointPairPointingRight =
-  EndpointPairPointingRight {
-    endpointPairPointingRightSourceAlias :: SourceNodeTypeAlias,
-    endpointPairPointingRightConnector :: ConnectorPointingRight,
-    endpointPairPointingRightDestinationAlias :: DestinationNodeTypeAlias}
-  deriving (Eq, Ord, Read, Show)
-_EndpointPairPointingRight = Core.Name "openGql.grammar.EndpointPairPointingRight"
-_EndpointPairPointingRight_sourceAlias = Core.Name "sourceAlias"
-_EndpointPairPointingRight_connector = Core.Name "connector"
-_EndpointPairPointingRight_destinationAlias = Core.Name "destinationAlias"
-data EndpointPairPointingLeft =
-  EndpointPairPointingLeft {
-    endpointPairPointingLeftDestinationAlias :: DestinationNodeTypeAlias,
-    endpointPairPointingLeftSourceAlias :: SourceNodeTypeAlias}
-  deriving (Eq, Ord, Read, Show)
-_EndpointPairPointingLeft = Core.Name "openGql.grammar.EndpointPairPointingLeft"
-_EndpointPairPointingLeft_destinationAlias = Core.Name "destinationAlias"
-_EndpointPairPointingLeft_sourceAlias = Core.Name "sourceAlias"
-data EndpointPairUndirected =
-  EndpointPairUndirected {
-    endpointPairUndirectedSourceAlias :: SourceNodeTypeAlias,
-    endpointPairUndirectedConnector :: ConnectorUndirected,
-    endpointPairUndirectedDestinationAlias :: DestinationNodeTypeAlias}
-  deriving (Eq, Ord, Read, Show)
-_EndpointPairUndirected = Core.Name "openGql.grammar.EndpointPairUndirected"
-_EndpointPairUndirected_sourceAlias = Core.Name "sourceAlias"
-_EndpointPairUndirected_connector = Core.Name "connector"
-_EndpointPairUndirected_destinationAlias = Core.Name "destinationAlias"
-data ConnectorPointingRight =
-  ConnectorPointingRightTo |
-  ConnectorPointingRightRightArrow
-  deriving (Eq, Ord, Read, Show)
-_ConnectorPointingRight = Core.Name "openGql.grammar.ConnectorPointingRight"
-_ConnectorPointingRight_to = Core.Name "to"
-_ConnectorPointingRight_rightArrow = Core.Name "rightArrow"
-data ConnectorUndirected =
-  ConnectorUndirectedTo |
-  ConnectorUndirectedTilde
-  deriving (Eq, Ord, Read, Show)
-_ConnectorUndirected = Core.Name "openGql.grammar.ConnectorUndirected"
-_ConnectorUndirected_to = Core.Name "to"
-_ConnectorUndirected_tilde = Core.Name "tilde"
-type SourceNodeTypeAlias = String
-_SourceNodeTypeAlias = Core.Name "openGql.grammar.SourceNodeTypeAlias"
-type DestinationNodeTypeAlias = String
-_DestinationNodeTypeAlias = Core.Name "openGql.grammar.DestinationNodeTypeAlias"
-data LabelSetPhrase =
-  LabelSetPhraseSingleLabel LabelName |
-  LabelSetPhraseMultipleLabels LabelSetSpecification |
-  LabelSetPhraseIsOrColonWithLabels IsOrColonWithLabels
-  deriving (Eq, Ord, Read, Show)
-_LabelSetPhrase = Core.Name "openGql.grammar.LabelSetPhrase"
-_LabelSetPhrase_singleLabel = Core.Name "singleLabel"
-_LabelSetPhrase_multipleLabels = Core.Name "multipleLabels"
-_LabelSetPhrase_isOrColonWithLabels = Core.Name "isOrColonWithLabels"
-data IsOrColonWithLabels =
-  IsOrColonWithLabels {
-    isOrColonWithLabelsIsOrColon :: IsOrColon,
-    isOrColonWithLabelsLabels :: LabelSetSpecification}
-  deriving (Eq, Ord, Read, Show)
-_IsOrColonWithLabels = Core.Name "openGql.grammar.IsOrColonWithLabels"
-_IsOrColonWithLabels_isOrColon = Core.Name "isOrColon"
-_IsOrColonWithLabels_labels = Core.Name "labels"
-type LabelSetSpecification = [LabelName]
-_LabelSetSpecification = Core.Name "openGql.grammar.LabelSetSpecification"
-type PropertyTypesSpecification = (Maybe PropertyTypeList)
-_PropertyTypesSpecification = Core.Name "openGql.grammar.PropertyTypesSpecification"
-type PropertyTypeList = [PropertyType]
-_PropertyTypeList = Core.Name "openGql.grammar.PropertyTypeList"
-data PropertyType =
-  PropertyType {
-    propertyTypeName :: PropertyName,
-    propertyTypeTyped :: (Maybe Typed),
-    propertyTypeValueType :: PropertyValueType}
-  deriving (Eq, Ord, Read, Show)
-_PropertyType = Core.Name "openGql.grammar.PropertyType"
-_PropertyType_name = Core.Name "name"
-_PropertyType_typed = Core.Name "typed"
-_PropertyType_valueType = Core.Name "valueType"
-type PropertyValueType = ValueType
-_PropertyValueType = Core.Name "openGql.grammar.PropertyValueType"
-data BindingTableType =
-  BindingTableType {
-    bindingTableTypeBinding :: Bool,
-    bindingTableTypeFieldTypes :: FieldTypesSpecification}
-  deriving (Eq, Ord, Read, Show)
-_BindingTableType = Core.Name "openGql.grammar.BindingTableType"
-_BindingTableType_binding = Core.Name "binding"
-_BindingTableType_fieldTypes = Core.Name "fieldTypes"
-data ValueType =
-  ValueTypePredefinedType PredefinedType |
-  ValueTypePathValueType PathValueType |
-  ValueTypeListValueTypeAlt1 ListValueTypeAlt1 |
-  ValueTypeListValueTypeAlt2 ListValueTypeAlt2 |
-  ValueTypeListValueTypeAlt3 ListValueTypeAlt3 |
-  ValueTypeRecordType RecordType |
-  ValueTypeOpenDynamicUnionType OpenDynamicUnionType |
-  ValueTypeDynamicPropertyValueType DynamicPropertyValueType |
-  ValueTypeClosedDynamicUnionTypeAlt1 ClosedDynamicUnionTypeAlt1 |
-  ValueTypeClosedDynamicUnionTypeAlt2 ClosedDynamicUnionTypeAlt2
-  deriving (Eq, Ord, Read, Show)
-_ValueType = Core.Name "openGql.grammar.ValueType"
-_ValueType_predefinedType = Core.Name "predefinedType"
-_ValueType_pathValueType = Core.Name "pathValueType"
-_ValueType_listValueTypeAlt1 = Core.Name "listValueTypeAlt1"
-_ValueType_listValueTypeAlt2 = Core.Name "listValueTypeAlt2"
-_ValueType_listValueTypeAlt3 = Core.Name "listValueTypeAlt3"
-_ValueType_recordType = Core.Name "recordType"
-_ValueType_openDynamicUnionType = Core.Name "openDynamicUnionType"
-_ValueType_dynamicPropertyValueType = Core.Name "dynamicPropertyValueType"
-_ValueType_closedDynamicUnionTypeAlt1 = Core.Name "closedDynamicUnionTypeAlt1"
-_ValueType_closedDynamicUnionTypeAlt2 = Core.Name "closedDynamicUnionTypeAlt2"
-data ListValueTypeAlt1 =
-  ListValueTypeAlt1 {
-    listValueTypeAlt1TypeName :: ListValueTypeName,
-    listValueTypeAlt1ValueType :: ValueType,
-    listValueTypeAlt1MaxLength :: (Maybe MaxLength),
-    listValueTypeAlt1NotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ListValueTypeAlt1 = Core.Name "openGql.grammar.ListValueTypeAlt1"
-_ListValueTypeAlt1_typeName = Core.Name "typeName"
-_ListValueTypeAlt1_valueType = Core.Name "valueType"
-_ListValueTypeAlt1_maxLength = Core.Name "maxLength"
-_ListValueTypeAlt1_notNull = Core.Name "notNull"
-data ListValueTypeAlt2 =
-  ListValueTypeAlt2 {
-    listValueTypeAlt2ValueType :: ValueType,
-    listValueTypeAlt2TypeName :: ListValueTypeName,
-    listValueTypeAlt2MaxLength :: (Maybe MaxLength),
-    listValueTypeAlt2NotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ListValueTypeAlt2 = Core.Name "openGql.grammar.ListValueTypeAlt2"
-_ListValueTypeAlt2_valueType = Core.Name "valueType"
-_ListValueTypeAlt2_typeName = Core.Name "typeName"
-_ListValueTypeAlt2_maxLength = Core.Name "maxLength"
-_ListValueTypeAlt2_notNull = Core.Name "notNull"
-data ListValueTypeAlt3 =
-  ListValueTypeAlt3 {
-    listValueTypeAlt3TypeName :: ListValueTypeName,
-    listValueTypeAlt3MaxLength :: (Maybe MaxLength),
-    listValueTypeAlt3NotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ListValueTypeAlt3 = Core.Name "openGql.grammar.ListValueTypeAlt3"
-_ListValueTypeAlt3_typeName = Core.Name "typeName"
-_ListValueTypeAlt3_maxLength = Core.Name "maxLength"
-_ListValueTypeAlt3_notNull = Core.Name "notNull"
-data OpenDynamicUnionType =
-  OpenDynamicUnionType {
-    openDynamicUnionTypeValue :: Bool,
-    openDynamicUnionTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_OpenDynamicUnionType = Core.Name "openGql.grammar.OpenDynamicUnionType"
-_OpenDynamicUnionType_value = Core.Name "value"
-_OpenDynamicUnionType_notNull = Core.Name "notNull"
-data DynamicPropertyValueType =
-  DynamicPropertyValueType {
-    dynamicPropertyValueTypeAny :: (Maybe Bool),
-    dynamicPropertyValueTypeProperty :: (),
-    dynamicPropertyValueTypeValue :: (),
-    dynamicPropertyValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_DynamicPropertyValueType = Core.Name "openGql.grammar.DynamicPropertyValueType"
-_DynamicPropertyValueType_any = Core.Name "any"
-_DynamicPropertyValueType_property = Core.Name "property"
-_DynamicPropertyValueType_value = Core.Name "value"
-_DynamicPropertyValueType_notNull = Core.Name "notNull"
-data ClosedDynamicUnionTypeAlt1 =
-  ClosedDynamicUnionTypeAlt1 {
-    closedDynamicUnionTypeAlt1AnyValue :: (Maybe Bool),
-    closedDynamicUnionTypeAlt1ValueTypes :: [ValueType]}
-  deriving (Eq, Ord, Read, Show)
-_ClosedDynamicUnionTypeAlt1 = Core.Name "openGql.grammar.ClosedDynamicUnionTypeAlt1"
-_ClosedDynamicUnionTypeAlt1_anyValue = Core.Name "anyValue"
-_ClosedDynamicUnionTypeAlt1_valueTypes = Core.Name "valueTypes"
-data ClosedDynamicUnionTypeAlt2 =
-  ClosedDynamicUnionTypeAlt2 {
-    closedDynamicUnionTypeAlt2ValueTypes :: [ValueType]}
-  deriving (Eq, Ord, Read, Show)
-_ClosedDynamicUnionTypeAlt2 = Core.Name "openGql.grammar.ClosedDynamicUnionTypeAlt2"
-_ClosedDynamicUnionTypeAlt2_valueTypes = Core.Name "valueTypes"
-type Typed = ()
-_Typed = Core.Name "openGql.grammar.Typed"
-data PredefinedType =
-  PredefinedTypeBooleanType BooleanType |
-  PredefinedTypeCharacterStringType CharacterStringType |
-  PredefinedTypeByteStringType ByteStringType |
-  PredefinedTypeNumericType NumericType |
-  PredefinedTypeTemporalType TemporalType |
-  PredefinedTypeReferenceValueType ReferenceValueType |
-  PredefinedTypeImmaterialValueType ImmaterialValueType
-  deriving (Eq, Ord, Read, Show)
-_PredefinedType = Core.Name "openGql.grammar.PredefinedType"
-_PredefinedType_booleanType = Core.Name "booleanType"
-_PredefinedType_characterStringType = Core.Name "characterStringType"
-_PredefinedType_byteStringType = Core.Name "byteStringType"
-_PredefinedType_numericType = Core.Name "numericType"
-_PredefinedType_temporalType = Core.Name "temporalType"
-_PredefinedType_referenceValueType = Core.Name "referenceValueType"
-_PredefinedType_immaterialValueType = Core.Name "immaterialValueType"
-data BooleanType =
-  BooleanType {
-    booleanTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_BooleanType = Core.Name "openGql.grammar.BooleanType"
-_BooleanType_notNull = Core.Name "notNull"
-data CharacterStringType =
-  CharacterStringTypeStringType StringType |
-  CharacterStringTypeCharType CharType |
-  CharacterStringTypeVarcharType VarcharType
-  deriving (Eq, Ord, Read, Show)
-_CharacterStringType = Core.Name "openGql.grammar.CharacterStringType"
-_CharacterStringType_stringType = Core.Name "stringType"
-_CharacterStringType_charType = Core.Name "charType"
-_CharacterStringType_varcharType = Core.Name "varcharType"
-data StringType =
-  StringType {
-    stringTypeMinLength :: (Maybe MinLength),
-    stringTypeMaxLength :: (Maybe MaxLength),
-    stringTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_StringType = Core.Name "openGql.grammar.StringType"
-_StringType_minLength = Core.Name "minLength"
-_StringType_maxLength = Core.Name "maxLength"
-_StringType_notNull = Core.Name "notNull"
-data CharType =
-  CharType {
-    charTypeFixedLength :: (Maybe FixedLength),
-    charTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_CharType = Core.Name "openGql.grammar.CharType"
-_CharType_fixedLength = Core.Name "fixedLength"
-_CharType_notNull = Core.Name "notNull"
-data VarcharType =
-  VarcharType {
-    varcharTypeMaxLength :: (Maybe MaxLength),
-    varcharTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_VarcharType = Core.Name "openGql.grammar.VarcharType"
-_VarcharType_maxLength = Core.Name "maxLength"
-_VarcharType_notNull = Core.Name "notNull"
-data ByteStringType =
-  ByteStringTypeBytesType BytesType |
-  ByteStringTypeBinaryType BinaryType |
-  ByteStringTypeVarbinaryType VarbinaryType
-  deriving (Eq, Ord, Read, Show)
-_ByteStringType = Core.Name "openGql.grammar.ByteStringType"
-_ByteStringType_bytesType = Core.Name "bytesType"
-_ByteStringType_binaryType = Core.Name "binaryType"
-_ByteStringType_varbinaryType = Core.Name "varbinaryType"
-data BytesType =
-  BytesType {
-    bytesTypeMinLength :: (Maybe MinLength),
-    bytesTypeMaxLength :: (Maybe MaxLength),
-    bytesTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_BytesType = Core.Name "openGql.grammar.BytesType"
-_BytesType_minLength = Core.Name "minLength"
-_BytesType_maxLength = Core.Name "maxLength"
-_BytesType_notNull = Core.Name "notNull"
-data BinaryType =
-  BinaryType {
-    binaryTypeFixedLength :: (Maybe FixedLength),
-    binaryTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_BinaryType = Core.Name "openGql.grammar.BinaryType"
-_BinaryType_fixedLength = Core.Name "fixedLength"
-_BinaryType_notNull = Core.Name "notNull"
-data VarbinaryType =
-  VarbinaryType {
-    varbinaryTypeMaxLength :: (Maybe MaxLength),
-    varbinaryTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_VarbinaryType = Core.Name "openGql.grammar.VarbinaryType"
-_VarbinaryType_maxLength = Core.Name "maxLength"
-_VarbinaryType_notNull = Core.Name "notNull"
-type MinLength = UnsignedInteger
-_MinLength = Core.Name "openGql.grammar.MinLength"
-type FixedLength = UnsignedInteger
-_FixedLength = Core.Name "openGql.grammar.FixedLength"
-type MaxLength = UnsignedInteger
-_MaxLength = Core.Name "openGql.grammar.MaxLength"
-data NumericType =
-  NumericTypeExact ExactNumericType |
-  NumericTypeApproximate ApproximateNumericType
-  deriving (Eq, Ord, Read, Show)
-_NumericType = Core.Name "openGql.grammar.NumericType"
-_NumericType_exact = Core.Name "exact"
-_NumericType_approximate = Core.Name "approximate"
-data ExactNumericType =
-  ExactNumericTypeBinary BinaryExactNumericType |
-  ExactNumericTypeDecimal DecimalExactNumericType
-  deriving (Eq, Ord, Read, Show)
-_ExactNumericType = Core.Name "openGql.grammar.ExactNumericType"
-_ExactNumericType_binary = Core.Name "binary"
-_ExactNumericType_decimal = Core.Name "decimal"
-data BinaryExactNumericType =
-  BinaryExactNumericTypeSigned SignedBinaryExactNumericType |
-  BinaryExactNumericTypeUnsigned UnsignedBinaryExactNumericType
-  deriving (Eq, Ord, Read, Show)
-_BinaryExactNumericType = Core.Name "openGql.grammar.BinaryExactNumericType"
-_BinaryExactNumericType_signed = Core.Name "signed"
-_BinaryExactNumericType_unsigned = Core.Name "unsigned"
-data SignedBinaryExactNumericType =
-  SignedBinaryExactNumericTypeInt8 Int8Type |
-  SignedBinaryExactNumericTypeInt16 Int16Type |
-  SignedBinaryExactNumericTypeInt32 Int32Type |
-  SignedBinaryExactNumericTypeInt64 Int64Type |
-  SignedBinaryExactNumericTypeInt128 Int128Type |
-  SignedBinaryExactNumericTypeInt256 Int256Type |
-  SignedBinaryExactNumericTypeSmallInt SmallIntType |
-  SignedBinaryExactNumericTypeIntWithPrecision IntWithPrecision |
-  SignedBinaryExactNumericTypeBigInt BigIntType |
-  SignedBinaryExactNumericTypeSignedVerboseType SignedVerboseBinaryExactNumericType
-  deriving (Eq, Ord, Read, Show)
-_SignedBinaryExactNumericType = Core.Name "openGql.grammar.SignedBinaryExactNumericType"
-_SignedBinaryExactNumericType_int8 = Core.Name "int8"
-_SignedBinaryExactNumericType_int16 = Core.Name "int16"
-_SignedBinaryExactNumericType_int32 = Core.Name "int32"
-_SignedBinaryExactNumericType_int64 = Core.Name "int64"
-_SignedBinaryExactNumericType_int128 = Core.Name "int128"
-_SignedBinaryExactNumericType_int256 = Core.Name "int256"
-_SignedBinaryExactNumericType_smallInt = Core.Name "smallInt"
-_SignedBinaryExactNumericType_intWithPrecision = Core.Name "intWithPrecision"
-_SignedBinaryExactNumericType_bigInt = Core.Name "bigInt"
-_SignedBinaryExactNumericType_signedVerboseType = Core.Name "signedVerboseType"
-data Int8Type =
-  Int8Type {
-    int8TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Int8Type = Core.Name "openGql.grammar.Int8Type"
-_Int8Type_notNull = Core.Name "notNull"
-data Int16Type =
-  Int16Type {
-    int16TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Int16Type = Core.Name "openGql.grammar.Int16Type"
-_Int16Type_notNull = Core.Name "notNull"
-data Int32Type =
-  Int32Type {
-    int32TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Int32Type = Core.Name "openGql.grammar.Int32Type"
-_Int32Type_notNull = Core.Name "notNull"
-data Int64Type =
-  Int64Type {
-    int64TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Int64Type = Core.Name "openGql.grammar.Int64Type"
-_Int64Type_notNull = Core.Name "notNull"
-data Int128Type =
-  Int128Type {
-    int128TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Int128Type = Core.Name "openGql.grammar.Int128Type"
-_Int128Type_notNull = Core.Name "notNull"
-data Int256Type =
-  Int256Type {
-    int256TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Int256Type = Core.Name "openGql.grammar.Int256Type"
-_Int256Type_notNull = Core.Name "notNull"
-data SmallIntType =
-  SmallIntType {
-    smallIntTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_SmallIntType = Core.Name "openGql.grammar.SmallIntType"
-_SmallIntType_notNull = Core.Name "notNull"
-data BigIntType =
-  BigIntType {
-    bigIntTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_BigIntType = Core.Name "openGql.grammar.BigIntType"
-_BigIntType_notNull = Core.Name "notNull"
-data IntWithPrecision =
-  IntWithPrecision {
-    intWithPrecisionPrecision :: (Maybe Precision),
-    intWithPrecisionNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_IntWithPrecision = Core.Name "openGql.grammar.IntWithPrecision"
-_IntWithPrecision_precision = Core.Name "precision"
-_IntWithPrecision_notNull = Core.Name "notNull"
-data SignedVerboseBinaryExactNumericType =
-  SignedVerboseBinaryExactNumericType {
-    signedVerboseBinaryExactNumericTypeSigned :: Bool,
-    signedVerboseBinaryExactNumericTypeVerboseType :: VerboseBinaryExactNumericType}
-  deriving (Eq, Ord, Read, Show)
-_SignedVerboseBinaryExactNumericType = Core.Name "openGql.grammar.SignedVerboseBinaryExactNumericType"
-_SignedVerboseBinaryExactNumericType_signed = Core.Name "signed"
-_SignedVerboseBinaryExactNumericType_verboseType = Core.Name "verboseType"
-data UnsignedBinaryExactNumericType =
-  UnsignedBinaryExactNumericTypeUint8 Uint8Type |
-  UnsignedBinaryExactNumericTypeUint16 Uint16Type |
-  UnsignedBinaryExactNumericTypeUint32 Uint32Type |
-  UnsignedBinaryExactNumericTypeUint64 Uint64Type |
-  UnsignedBinaryExactNumericTypeUint128 Uint128Type |
-  UnsignedBinaryExactNumericTypeUint256 Uint256Type |
-  UnsignedBinaryExactNumericTypeUSmallInt USmallIntType |
-  UnsignedBinaryExactNumericTypeUintWithPrecision UintWithPrecision |
-  UnsignedBinaryExactNumericTypeUBigInt UBigIntType |
-  UnsignedBinaryExactNumericTypeUnsigned VerboseBinaryExactNumericType
-  deriving (Eq, Ord, Read, Show)
-_UnsignedBinaryExactNumericType = Core.Name "openGql.grammar.UnsignedBinaryExactNumericType"
-_UnsignedBinaryExactNumericType_uint8 = Core.Name "uint8"
-_UnsignedBinaryExactNumericType_uint16 = Core.Name "uint16"
-_UnsignedBinaryExactNumericType_uint32 = Core.Name "uint32"
-_UnsignedBinaryExactNumericType_uint64 = Core.Name "uint64"
-_UnsignedBinaryExactNumericType_uint128 = Core.Name "uint128"
-_UnsignedBinaryExactNumericType_uint256 = Core.Name "uint256"
-_UnsignedBinaryExactNumericType_uSmallInt = Core.Name "uSmallInt"
-_UnsignedBinaryExactNumericType_uintWithPrecision = Core.Name "uintWithPrecision"
-_UnsignedBinaryExactNumericType_uBigInt = Core.Name "uBigInt"
-_UnsignedBinaryExactNumericType_unsigned = Core.Name "unsigned"
-data Uint8Type =
-  Uint8Type {
-    uint8TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Uint8Type = Core.Name "openGql.grammar.Uint8Type"
-_Uint8Type_notNull = Core.Name "notNull"
-data Uint16Type =
-  Uint16Type {
-    uint16TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Uint16Type = Core.Name "openGql.grammar.Uint16Type"
-_Uint16Type_notNull = Core.Name "notNull"
-data Uint32Type =
-  Uint32Type {
-    uint32TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Uint32Type = Core.Name "openGql.grammar.Uint32Type"
-_Uint32Type_notNull = Core.Name "notNull"
-data Uint64Type =
-  Uint64Type {
-    uint64TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Uint64Type = Core.Name "openGql.grammar.Uint64Type"
-_Uint64Type_notNull = Core.Name "notNull"
-data Uint128Type =
-  Uint128Type {
-    uint128TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Uint128Type = Core.Name "openGql.grammar.Uint128Type"
-_Uint128Type_notNull = Core.Name "notNull"
-data Uint256Type =
-  Uint256Type {
-    uint256TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Uint256Type = Core.Name "openGql.grammar.Uint256Type"
-_Uint256Type_notNull = Core.Name "notNull"
-data USmallIntType =
-  USmallIntType {
-    uSmallIntTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_USmallIntType = Core.Name "openGql.grammar.USmallIntType"
-_USmallIntType_notNull = Core.Name "notNull"
-data UBigIntType =
-  UBigIntType {
-    uBigIntTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_UBigIntType = Core.Name "openGql.grammar.UBigIntType"
-_UBigIntType_notNull = Core.Name "notNull"
-data UintWithPrecision =
-  UintWithPrecision {
-    uintWithPrecisionPrecision :: (Maybe Precision),
-    uintWithPrecisionNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_UintWithPrecision = Core.Name "openGql.grammar.UintWithPrecision"
-_UintWithPrecision_precision = Core.Name "precision"
-_UintWithPrecision_notNull = Core.Name "notNull"
-data VerboseBinaryExactNumericType =
-  VerboseBinaryExactNumericTypeInteger8 Integer8Type |
-  VerboseBinaryExactNumericTypeInteger16 Integer16Type |
-  VerboseBinaryExactNumericTypeInteger32 Integer32Type |
-  VerboseBinaryExactNumericTypeInteger64 Integer64Type |
-  VerboseBinaryExactNumericTypeInteger128 Integer128Type |
-  VerboseBinaryExactNumericTypeInteger256 Integer256Type |
-  VerboseBinaryExactNumericTypeSmallInteger SmallIntegerType |
-  VerboseBinaryExactNumericTypeIntegerWithPrecision IntegerWithPrecision |
-  VerboseBinaryExactNumericTypeBigInteger BigIntegerType
-  deriving (Eq, Ord, Read, Show)
-_VerboseBinaryExactNumericType = Core.Name "openGql.grammar.VerboseBinaryExactNumericType"
-_VerboseBinaryExactNumericType_integer8 = Core.Name "integer8"
-_VerboseBinaryExactNumericType_integer16 = Core.Name "integer16"
-_VerboseBinaryExactNumericType_integer32 = Core.Name "integer32"
-_VerboseBinaryExactNumericType_integer64 = Core.Name "integer64"
-_VerboseBinaryExactNumericType_integer128 = Core.Name "integer128"
-_VerboseBinaryExactNumericType_integer256 = Core.Name "integer256"
-_VerboseBinaryExactNumericType_smallInteger = Core.Name "smallInteger"
-_VerboseBinaryExactNumericType_integerWithPrecision = Core.Name "integerWithPrecision"
-_VerboseBinaryExactNumericType_bigInteger = Core.Name "bigInteger"
-data Integer8Type =
-  Integer8Type {
-    integer8TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Integer8Type = Core.Name "openGql.grammar.Integer8Type"
-_Integer8Type_notNull = Core.Name "notNull"
-data Integer16Type =
-  Integer16Type {
-    integer16TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Integer16Type = Core.Name "openGql.grammar.Integer16Type"
-_Integer16Type_notNull = Core.Name "notNull"
-data Integer32Type =
-  Integer32Type {
-    integer32TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Integer32Type = Core.Name "openGql.grammar.Integer32Type"
-_Integer32Type_notNull = Core.Name "notNull"
-data Integer64Type =
-  Integer64Type {
-    integer64TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Integer64Type = Core.Name "openGql.grammar.Integer64Type"
-_Integer64Type_notNull = Core.Name "notNull"
-data Integer128Type =
-  Integer128Type {
-    integer128TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Integer128Type = Core.Name "openGql.grammar.Integer128Type"
-_Integer128Type_notNull = Core.Name "notNull"
-data Integer256Type =
-  Integer256Type {
-    integer256TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Integer256Type = Core.Name "openGql.grammar.Integer256Type"
-_Integer256Type_notNull = Core.Name "notNull"
-data SmallIntegerType =
-  SmallIntegerType {
-    smallIntegerTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_SmallIntegerType = Core.Name "openGql.grammar.SmallIntegerType"
-_SmallIntegerType_notNull = Core.Name "notNull"
-data BigIntegerType =
-  BigIntegerType {
-    bigIntegerTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_BigIntegerType = Core.Name "openGql.grammar.BigIntegerType"
-_BigIntegerType_notNull = Core.Name "notNull"
-data IntegerWithPrecision =
-  IntegerWithPrecision {
-    integerWithPrecisionPrecision :: (Maybe Precision),
-    integerWithPrecisionNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_IntegerWithPrecision = Core.Name "openGql.grammar.IntegerWithPrecision"
-_IntegerWithPrecision_precision = Core.Name "precision"
-_IntegerWithPrecision_notNull = Core.Name "notNull"
-type Precision = UnsignedDecimalInteger
-_Precision = Core.Name "openGql.grammar.Precision"
-type DecimalExactNumericType = (Maybe PrecisionAndScale)
-_DecimalExactNumericType = Core.Name "openGql.grammar.DecimalExactNumericType"
-data PrecisionAndScale =
-  PrecisionAndScale {
-    precisionAndScalePrecision :: Precision,
-    precisionAndScaleScale :: (Maybe Scale),
-    precisionAndScaleNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_PrecisionAndScale = Core.Name "openGql.grammar.PrecisionAndScale"
-_PrecisionAndScale_precision = Core.Name "precision"
-_PrecisionAndScale_scale = Core.Name "scale"
-_PrecisionAndScale_notNull = Core.Name "notNull"
-type Scale = UnsignedDecimalInteger
-_Scale = Core.Name "openGql.grammar.Scale"
-data ApproximateNumericType =
-  ApproximateNumericTypeFloat16 Float16Type |
-  ApproximateNumericTypeFloat32 Float32Type |
-  ApproximateNumericTypeFloat64 Float64Type |
-  ApproximateNumericTypeFloat128 Float128Type |
-  ApproximateNumericTypeFloat256 Float256Type |
-  ApproximateNumericTypeFloatWithPrecision FloatTypeWithPrecision |
-  ApproximateNumericTypeReal RealType |
-  ApproximateNumericTypeDoubleWithPrecision DoubleTypeWithPrecision
-  deriving (Eq, Ord, Read, Show)
-_ApproximateNumericType = Core.Name "openGql.grammar.ApproximateNumericType"
-_ApproximateNumericType_float16 = Core.Name "float16"
-_ApproximateNumericType_float32 = Core.Name "float32"
-_ApproximateNumericType_float64 = Core.Name "float64"
-_ApproximateNumericType_float128 = Core.Name "float128"
-_ApproximateNumericType_float256 = Core.Name "float256"
-_ApproximateNumericType_floatWithPrecision = Core.Name "floatWithPrecision"
-_ApproximateNumericType_real = Core.Name "real"
-_ApproximateNumericType_doubleWithPrecision = Core.Name "doubleWithPrecision"
-data Float16Type =
-  Float16Type {
-    float16TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Float16Type = Core.Name "openGql.grammar.Float16Type"
-_Float16Type_notNull = Core.Name "notNull"
-data Float32Type =
-  Float32Type {
-    float32TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Float32Type = Core.Name "openGql.grammar.Float32Type"
-_Float32Type_notNull = Core.Name "notNull"
-data Float64Type =
-  Float64Type {
-    float64TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Float64Type = Core.Name "openGql.grammar.Float64Type"
-_Float64Type_notNull = Core.Name "notNull"
-data Float128Type =
-  Float128Type {
-    float128TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Float128Type = Core.Name "openGql.grammar.Float128Type"
-_Float128Type_notNull = Core.Name "notNull"
-data Float256Type =
-  Float256Type {
-    float256TypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_Float256Type = Core.Name "openGql.grammar.Float256Type"
-_Float256Type_notNull = Core.Name "notNull"
-data FloatTypeWithPrecision =
-  FloatTypeWithPrecision {
-    floatTypeWithPrecisionPrecisionAndScale :: (Maybe PrecisionAndScale),
-    floatTypeWithPrecisionNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_FloatTypeWithPrecision = Core.Name "openGql.grammar.FloatTypeWithPrecision"
-_FloatTypeWithPrecision_precisionAndScale = Core.Name "precisionAndScale"
-_FloatTypeWithPrecision_notNull = Core.Name "notNull"
-data RealType =
-  RealType {
-    realTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_RealType = Core.Name "openGql.grammar.RealType"
-_RealType_notNull = Core.Name "notNull"
-data DoubleTypeWithPrecision =
-  DoubleTypeWithPrecision {
-    doubleTypeWithPrecisionPrecision :: Bool,
-    doubleTypeWithPrecisionNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_DoubleTypeWithPrecision = Core.Name "openGql.grammar.DoubleTypeWithPrecision"
-_DoubleTypeWithPrecision_precision = Core.Name "precision"
-_DoubleTypeWithPrecision_notNull = Core.Name "notNull"
-data TemporalType =
-  TemporalTypeInstantType TemporalInstantType |
-  TemporalTypeDurationType TemporalDurationType
-  deriving (Eq, Ord, Read, Show)
-_TemporalType = Core.Name "openGql.grammar.TemporalType"
-_TemporalType_instantType = Core.Name "instantType"
-_TemporalType_durationType = Core.Name "durationType"
-data TemporalInstantType =
-  TemporalInstantTypeDatetimeType DatetimeType |
-  TemporalInstantTypeLocalDatetimeTypeChoice LocalDatetimeTypeChoice |
-  TemporalInstantTypeDateType DateType |
-  TemporalInstantTypeTimeType TimeType |
-  TemporalInstantTypeLocalTimeTypeChoice LocalTimeTypeChoice
-  deriving (Eq, Ord, Read, Show)
-_TemporalInstantType = Core.Name "openGql.grammar.TemporalInstantType"
-_TemporalInstantType_datetimeType = Core.Name "datetimeType"
-_TemporalInstantType_localDatetimeTypeChoice = Core.Name "localDatetimeTypeChoice"
-_TemporalInstantType_dateType = Core.Name "dateType"
-_TemporalInstantType_timeType = Core.Name "timeType"
-_TemporalInstantType_localTimeTypeChoice = Core.Name "localTimeTypeChoice"
-data DatetimeType =
-  DatetimeTypeZonedDatetime ZonedDatetimeType |
-  DatetimeTypeTimestampWithTimeZone TimestampWithTimeZoneType
-  deriving (Eq, Ord, Read, Show)
-_DatetimeType = Core.Name "openGql.grammar.DatetimeType"
-_DatetimeType_zonedDatetime = Core.Name "zonedDatetime"
-_DatetimeType_timestampWithTimeZone = Core.Name "timestampWithTimeZone"
-data ZonedDatetimeType =
-  ZonedDatetimeType {
-    zonedDatetimeTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ZonedDatetimeType = Core.Name "openGql.grammar.ZonedDatetimeType"
-_ZonedDatetimeType_notNull = Core.Name "notNull"
-data TimestampWithTimeZoneType =
-  TimestampWithTimeZoneType {
-    timestampWithTimeZoneTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_TimestampWithTimeZoneType = Core.Name "openGql.grammar.TimestampWithTimeZoneType"
-_TimestampWithTimeZoneType_notNull = Core.Name "notNull"
-data LocalDatetimeTypeChoice =
-  LocalDatetimeTypeChoiceLocalDatetime LocalDatetimeType |
-  LocalDatetimeTypeChoiceTimestampWithoutTimeZone TimestampWithoutTimeZoneType
-  deriving (Eq, Ord, Read, Show)
-_LocalDatetimeTypeChoice = Core.Name "openGql.grammar.LocalDatetimeTypeChoice"
-_LocalDatetimeTypeChoice_localDatetime = Core.Name "localDatetime"
-_LocalDatetimeTypeChoice_timestampWithoutTimeZone = Core.Name "timestampWithoutTimeZone"
-data LocalDatetimeType =
-  LocalDatetimeType {
-    localDatetimeTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_LocalDatetimeType = Core.Name "openGql.grammar.LocalDatetimeType"
-_LocalDatetimeType_notNull = Core.Name "notNull"
-data TimestampWithoutTimeZoneType =
-  TimestampWithoutTimeZoneType {
-    timestampWithoutTimeZoneTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_TimestampWithoutTimeZoneType = Core.Name "openGql.grammar.TimestampWithoutTimeZoneType"
-_TimestampWithoutTimeZoneType_notNull = Core.Name "notNull"
-data DateType =
-  DateType {
-    dateTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_DateType = Core.Name "openGql.grammar.DateType"
-_DateType_notNull = Core.Name "notNull"
-data TimeType =
-  TimeTypeZonedTime ZonedTimeType |
-  TimeTypeTimeWithTimeZone TimeWithTimeZoneType
-  deriving (Eq, Ord, Read, Show)
-_TimeType = Core.Name "openGql.grammar.TimeType"
-_TimeType_zonedTime = Core.Name "zonedTime"
-_TimeType_timeWithTimeZone = Core.Name "timeWithTimeZone"
-data ZonedTimeType =
-  ZonedTimeType {
-    zonedTimeTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ZonedTimeType = Core.Name "openGql.grammar.ZonedTimeType"
-_ZonedTimeType_notNull = Core.Name "notNull"
-data TimeWithTimeZoneType =
-  TimeWithTimeZoneType {
-    timeWithTimeZoneTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_TimeWithTimeZoneType = Core.Name "openGql.grammar.TimeWithTimeZoneType"
-_TimeWithTimeZoneType_notNull = Core.Name "notNull"
-data LocalTimeTypeChoice =
-  LocalTimeTypeChoiceLocalTime LocalTimeType |
-  LocalTimeTypeChoiceTimeWithoutTimeZone TimeWithoutTimeZoneType
-  deriving (Eq, Ord, Read, Show)
-_LocalTimeTypeChoice = Core.Name "openGql.grammar.LocalTimeTypeChoice"
-_LocalTimeTypeChoice_localTime = Core.Name "localTime"
-_LocalTimeTypeChoice_timeWithoutTimeZone = Core.Name "timeWithoutTimeZone"
-data LocalTimeType =
-  LocalTimeType {
-    localTimeTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_LocalTimeType = Core.Name "openGql.grammar.LocalTimeType"
-_LocalTimeType_notNull = Core.Name "notNull"
-data TimeWithoutTimeZoneType =
-  TimeWithoutTimeZoneType {
-    timeWithoutTimeZoneTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_TimeWithoutTimeZoneType = Core.Name "openGql.grammar.TimeWithoutTimeZoneType"
-_TimeWithoutTimeZoneType_notNull = Core.Name "notNull"
-data TemporalDurationType =
-  TemporalDurationType {
-    temporalDurationTypeQualifier :: TemporalDurationQualifier,
-    temporalDurationTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_TemporalDurationType = Core.Name "openGql.grammar.TemporalDurationType"
-_TemporalDurationType_qualifier = Core.Name "qualifier"
-_TemporalDurationType_notNull = Core.Name "notNull"
-data TemporalDurationQualifier =
-  TemporalDurationQualifierYearToMonth |
-  TemporalDurationQualifierDayToSecond
-  deriving (Eq, Ord, Read, Show)
-_TemporalDurationQualifier = Core.Name "openGql.grammar.TemporalDurationQualifier"
-_TemporalDurationQualifier_yearToMonth = Core.Name "yearToMonth"
-_TemporalDurationQualifier_dayToSecond = Core.Name "dayToSecond"
-data ReferenceValueType =
-  ReferenceValueTypeGraph GraphReferenceValueType |
-  ReferenceValueTypeBindingTable BindingTableReferenceValueType |
-  ReferenceValueTypeNode NodeReferenceValueType |
-  ReferenceValueTypeEdge EdgeReferenceValueType
-  deriving (Eq, Ord, Read, Show)
-_ReferenceValueType = Core.Name "openGql.grammar.ReferenceValueType"
-_ReferenceValueType_graph = Core.Name "graph"
-_ReferenceValueType_bindingTable = Core.Name "bindingTable"
-_ReferenceValueType_node = Core.Name "node"
-_ReferenceValueType_edge = Core.Name "edge"
-data ImmaterialValueType =
-  ImmaterialValueTypeNullType NullType |
-  ImmaterialValueTypeEmptyType EmptyType
-  deriving (Eq, Ord, Read, Show)
-_ImmaterialValueType = Core.Name "openGql.grammar.ImmaterialValueType"
-_ImmaterialValueType_nullType = Core.Name "nullType"
-_ImmaterialValueType_emptyType = Core.Name "emptyType"
-type NullType = ()
-_NullType = Core.Name "openGql.grammar.NullType"
-type EmptyType = ()
-_EmptyType = Core.Name "openGql.grammar.EmptyType"
-data GraphReferenceValueType =
-  GraphReferenceValueTypeOpen OpenGraphReferenceValueType |
-  GraphReferenceValueTypeClosed ClosedGraphReferenceValueType
-  deriving (Eq, Ord, Read, Show)
-_GraphReferenceValueType = Core.Name "openGql.grammar.GraphReferenceValueType"
-_GraphReferenceValueType_open = Core.Name "open"
-_GraphReferenceValueType_closed = Core.Name "closed"
-data ClosedGraphReferenceValueType =
-  ClosedGraphReferenceValueType {
-    closedGraphReferenceValueTypeProperty :: Bool,
-    closedGraphReferenceValueTypeNestedSpec :: NestedGraphTypeSpecification,
-    closedGraphReferenceValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ClosedGraphReferenceValueType = Core.Name "openGql.grammar.ClosedGraphReferenceValueType"
-_ClosedGraphReferenceValueType_property = Core.Name "property"
-_ClosedGraphReferenceValueType_nestedSpec = Core.Name "nestedSpec"
-_ClosedGraphReferenceValueType_notNull = Core.Name "notNull"
-data OpenGraphReferenceValueType =
-  OpenGraphReferenceValueType {
-    openGraphReferenceValueTypeAny :: (Maybe Bool),
-    openGraphReferenceValueTypeProperty :: Bool,
-    openGraphReferenceValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_OpenGraphReferenceValueType = Core.Name "openGql.grammar.OpenGraphReferenceValueType"
-_OpenGraphReferenceValueType_any = Core.Name "any"
-_OpenGraphReferenceValueType_property = Core.Name "property"
-_OpenGraphReferenceValueType_notNull = Core.Name "notNull"
-data BindingTableReferenceValueType =
-  BindingTableReferenceValueType {
-    bindingTableReferenceValueTypeBindingTableType :: BindingTableType,
-    bindingTableReferenceValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_BindingTableReferenceValueType = Core.Name "openGql.grammar.BindingTableReferenceValueType"
-_BindingTableReferenceValueType_bindingTableType = Core.Name "bindingTableType"
-_BindingTableReferenceValueType_notNull = Core.Name "notNull"
-data NodeReferenceValueType =
-  NodeReferenceValueTypeOpen OpenNodeReferenceValueType |
-  NodeReferenceValueTypeClosed ClosedNodeReferenceValueType
-  deriving (Eq, Ord, Read, Show)
-_NodeReferenceValueType = Core.Name "openGql.grammar.NodeReferenceValueType"
-_NodeReferenceValueType_open = Core.Name "open"
-_NodeReferenceValueType_closed = Core.Name "closed"
-data ClosedNodeReferenceValueType =
-  ClosedNodeReferenceValueType {
-    closedNodeReferenceValueTypeNodeTypeSpec :: NodeTypeSpecification,
-    closedNodeReferenceValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ClosedNodeReferenceValueType = Core.Name "openGql.grammar.ClosedNodeReferenceValueType"
-_ClosedNodeReferenceValueType_nodeTypeSpec = Core.Name "nodeTypeSpec"
-_ClosedNodeReferenceValueType_notNull = Core.Name "notNull"
-data OpenNodeReferenceValueType =
-  OpenNodeReferenceValueType {
-    openNodeReferenceValueTypeAny :: Bool,
-    openNodeReferenceValueTypeNodeSynonym :: NodeSynonym,
-    openNodeReferenceValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_OpenNodeReferenceValueType = Core.Name "openGql.grammar.OpenNodeReferenceValueType"
-_OpenNodeReferenceValueType_any = Core.Name "any"
-_OpenNodeReferenceValueType_nodeSynonym = Core.Name "nodeSynonym"
-_OpenNodeReferenceValueType_notNull = Core.Name "notNull"
-data EdgeReferenceValueType =
-  EdgeReferenceValueTypeOpen OpenEdgeReferenceValueType |
-  EdgeReferenceValueTypeClosed ClosedEdgeReferenceValueType
-  deriving (Eq, Ord, Read, Show)
-_EdgeReferenceValueType = Core.Name "openGql.grammar.EdgeReferenceValueType"
-_EdgeReferenceValueType_open = Core.Name "open"
-_EdgeReferenceValueType_closed = Core.Name "closed"
-data ClosedEdgeReferenceValueType =
-  ClosedEdgeReferenceValueType {
-    closedEdgeReferenceValueTypeEdgeTypeSpec :: EdgeTypeSpecification,
-    closedEdgeReferenceValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_ClosedEdgeReferenceValueType = Core.Name "openGql.grammar.ClosedEdgeReferenceValueType"
-_ClosedEdgeReferenceValueType_edgeTypeSpec = Core.Name "edgeTypeSpec"
-_ClosedEdgeReferenceValueType_notNull = Core.Name "notNull"
-data OpenEdgeReferenceValueType =
-  OpenEdgeReferenceValueType {
-    openEdgeReferenceValueTypeAny :: Bool,
-    openEdgeReferenceValueTypeEdgeSynonym :: EdgeSynonym,
-    openEdgeReferenceValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_OpenEdgeReferenceValueType = Core.Name "openGql.grammar.OpenEdgeReferenceValueType"
-_OpenEdgeReferenceValueType_any = Core.Name "any"
-_OpenEdgeReferenceValueType_edgeSynonym = Core.Name "edgeSynonym"
-_OpenEdgeReferenceValueType_notNull = Core.Name "notNull"
-data PathValueType =
-  PathValueType {
-    pathValueTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_PathValueType = Core.Name "openGql.grammar.PathValueType"
-_PathValueType_notNull = Core.Name "notNull"
-data ListValueTypeName =
-  ListValueTypeName {
-    listValueTypeNameGroup :: Bool,
-    listValueTypeNameSynonym :: ListValueTypeNameSynonym}
-  deriving (Eq, Ord, Read, Show)
-_ListValueTypeName = Core.Name "openGql.grammar.ListValueTypeName"
-_ListValueTypeName_group = Core.Name "group"
-_ListValueTypeName_synonym = Core.Name "synonym"
-data ListValueTypeNameSynonym =
-  ListValueTypeNameSynonymList |
-  ListValueTypeNameSynonymArray
-  deriving (Eq, Ord, Read, Show)
-_ListValueTypeNameSynonym = Core.Name "openGql.grammar.ListValueTypeNameSynonym"
-_ListValueTypeNameSynonym_list = Core.Name "list"
-_ListValueTypeNameSynonym_array = Core.Name "array"
-data RecordType =
-  RecordTypeAnyRecord AnyRecordType |
-  RecordTypeSpecifiedRecord SpecifiedRecordType
-  deriving (Eq, Ord, Read, Show)
-_RecordType = Core.Name "openGql.grammar.RecordType"
-_RecordType_anyRecord = Core.Name "anyRecord"
-_RecordType_specifiedRecord = Core.Name "specifiedRecord"
-data AnyRecordType =
-  AnyRecordType {
-    anyRecordTypeAny :: Bool,
-    anyRecordTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_AnyRecordType = Core.Name "openGql.grammar.AnyRecordType"
-_AnyRecordType_any = Core.Name "any"
-_AnyRecordType_notNull = Core.Name "notNull"
-data SpecifiedRecordType =
-  SpecifiedRecordType {
-    specifiedRecordTypeRecord :: Bool,
-    specifiedRecordTypeFieldTypes :: FieldTypesSpecification,
-    specifiedRecordTypeNotNull :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_SpecifiedRecordType = Core.Name "openGql.grammar.SpecifiedRecordType"
-_SpecifiedRecordType_record = Core.Name "record"
-_SpecifiedRecordType_fieldTypes = Core.Name "fieldTypes"
-_SpecifiedRecordType_notNull = Core.Name "notNull"
-type FieldTypesSpecification = (Maybe FieldTypeList)
-_FieldTypesSpecification = Core.Name "openGql.grammar.FieldTypesSpecification"
-type FieldTypeList = [FieldType]
-_FieldTypeList = Core.Name "openGql.grammar.FieldTypeList"
-type NotNull = ()
-_NotNull = Core.Name "openGql.grammar.NotNull"
-data FieldType =
-  FieldType {
-    fieldTypeFieldName :: FieldName,
-    fieldTypeTyped :: (Maybe Typed),
-    fieldTypeValueType :: ValueType}
-  deriving (Eq, Ord, Read, Show)
-_FieldType = Core.Name "openGql.grammar.FieldType"
-_FieldType_fieldName = Core.Name "fieldName"
-_FieldType_typed = Core.Name "typed"
-_FieldType_valueType = Core.Name "valueType"
-type SearchCondition = BooleanValueExpression
-_SearchCondition = Core.Name "openGql.grammar.SearchCondition"
-data Predicate =
-  PredicateExistsPredicate ExistsPredicate |
-  PredicateNullPredicate NullPredicate |
-  PredicateValueTypePredicate ValueTypePredicate |
-  PredicateDirectedPredicate DirectedPredicate |
-  PredicateLabeledPredicate LabeledPredicate |
-  PredicateSourceDestinationPredicate SourceDestinationPredicate |
-  PredicateAllDifferentPredicate AllDifferentPredicate |
-  PredicateSamePredicate SamePredicate |
-  PredicatePropertyExistsPredicate PropertyExistsPredicate
-  deriving (Eq, Ord, Read, Show)
-_Predicate = Core.Name "openGql.grammar.Predicate"
-_Predicate_existsPredicate = Core.Name "existsPredicate"
-_Predicate_nullPredicate = Core.Name "nullPredicate"
-_Predicate_valueTypePredicate = Core.Name "valueTypePredicate"
-_Predicate_directedPredicate = Core.Name "directedPredicate"
-_Predicate_labeledPredicate = Core.Name "labeledPredicate"
-_Predicate_sourceDestinationPredicate = Core.Name "sourceDestinationPredicate"
-_Predicate_allDifferentPredicate = Core.Name "allDifferentPredicate"
-_Predicate_samePredicate = Core.Name "samePredicate"
-_Predicate_propertyExistsPredicate = Core.Name "propertyExistsPredicate"
-data ComparisonPredicatePart2 =
-  ComparisonPredicatePart2 {
-    comparisonPredicatePart2CompOp :: CompOp,
-    comparisonPredicatePart2ValueExpression :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_ComparisonPredicatePart2 = Core.Name "openGql.grammar.ComparisonPredicatePart2"
-_ComparisonPredicatePart2_compOp = Core.Name "compOp"
-_ComparisonPredicatePart2_valueExpression = Core.Name "valueExpression"
-data CompOp =
-  CompOpEquals |
-  CompOpNotEquals |
-  CompOpLessThan |
-  CompOpGreaterThan |
-  CompOpLessThanOrEquals |
-  CompOpGreaterThanOrEquals
-  deriving (Eq, Ord, Read, Show)
-_CompOp = Core.Name "openGql.grammar.CompOp"
-_CompOp_equals = Core.Name "equals"
-_CompOp_notEquals = Core.Name "notEquals"
-_CompOp_lessThan = Core.Name "lessThan"
-_CompOp_greaterThan = Core.Name "greaterThan"
-_CompOp_lessThanOrEquals = Core.Name "lessThanOrEquals"
-_CompOp_greaterThanOrEquals = Core.Name "greaterThanOrEquals"
-data ExistsPredicate =
-  ExistsPredicateGraphPatternBrace GraphPattern |
-  ExistsPredicateGraphPatternParen GraphPattern |
-  ExistsPredicateMatchBlockBrace MatchStatementBlock |
-  ExistsPredicateMatchBlockParen MatchStatementBlock |
-  ExistsPredicateNestedQuery NestedQuerySpecification
-  deriving (Eq, Ord, Read, Show)
-_ExistsPredicate = Core.Name "openGql.grammar.ExistsPredicate"
-_ExistsPredicate_graphPatternBrace = Core.Name "graphPatternBrace"
-_ExistsPredicate_graphPatternParen = Core.Name "graphPatternParen"
-_ExistsPredicate_matchBlockBrace = Core.Name "matchBlockBrace"
-_ExistsPredicate_matchBlockParen = Core.Name "matchBlockParen"
-_ExistsPredicate_nestedQuery = Core.Name "nestedQuery"
-data NullPredicate =
-  NullPredicate {
-    nullPredicateValueExpression :: PrimaryValueExpression,
-    nullPredicateNullPart :: NullPredicatePart2}
-  deriving (Eq, Ord, Read, Show)
-_NullPredicate = Core.Name "openGql.grammar.NullPredicate"
-_NullPredicate_valueExpression = Core.Name "valueExpression"
-_NullPredicate_nullPart = Core.Name "nullPart"
-data NullPredicatePart2 =
-  NullPredicatePart2 {
-    nullPredicatePart2Not :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_NullPredicatePart2 = Core.Name "openGql.grammar.NullPredicatePart2"
-_NullPredicatePart2_not = Core.Name "not"
-data ValueTypePredicate =
-  ValueTypePredicate {
-    valueTypePredicateValueExpression :: PrimaryValueExpression,
-    valueTypePredicateValueTypePart :: ValueTypePredicatePart2}
-  deriving (Eq, Ord, Read, Show)
-_ValueTypePredicate = Core.Name "openGql.grammar.ValueTypePredicate"
-_ValueTypePredicate_valueExpression = Core.Name "valueExpression"
-_ValueTypePredicate_valueTypePart = Core.Name "valueTypePart"
-data ValueTypePredicatePart2 =
-  ValueTypePredicatePart2 {
-    valueTypePredicatePart2Not :: Bool,
-    valueTypePredicatePart2Typed :: Typed,
-    valueTypePredicatePart2ValueType :: ValueType}
-  deriving (Eq, Ord, Read, Show)
-_ValueTypePredicatePart2 = Core.Name "openGql.grammar.ValueTypePredicatePart2"
-_ValueTypePredicatePart2_not = Core.Name "not"
-_ValueTypePredicatePart2_typed = Core.Name "typed"
-_ValueTypePredicatePart2_valueType = Core.Name "valueType"
-data NormalizedPredicatePart2 =
-  NormalizedPredicatePart2 {
-    normalizedPredicatePart2Not :: Bool,
-    normalizedPredicatePart2NormalForm :: (Maybe NormalForm)}
-  deriving (Eq, Ord, Read, Show)
-_NormalizedPredicatePart2 = Core.Name "openGql.grammar.NormalizedPredicatePart2"
-_NormalizedPredicatePart2_not = Core.Name "not"
-_NormalizedPredicatePart2_normalForm = Core.Name "normalForm"
-data DirectedPredicate =
-  DirectedPredicate {
-    directedPredicateElementVariableReference :: ElementVariableReference,
-    directedPredicateDirectedPart :: DirectedPredicatePart2}
-  deriving (Eq, Ord, Read, Show)
-_DirectedPredicate = Core.Name "openGql.grammar.DirectedPredicate"
-_DirectedPredicate_elementVariableReference = Core.Name "elementVariableReference"
-_DirectedPredicate_directedPart = Core.Name "directedPart"
-data DirectedPredicatePart2 =
-  DirectedPredicatePart2 {
-    directedPredicatePart2Not :: Bool}
-  deriving (Eq, Ord, Read, Show)
-_DirectedPredicatePart2 = Core.Name "openGql.grammar.DirectedPredicatePart2"
-_DirectedPredicatePart2_not = Core.Name "not"
-data LabeledPredicate =
-  LabeledPredicate {
-    labeledPredicateElementVariableReference :: ElementVariableReference,
-    labeledPredicateLabeledPart :: LabeledPredicatePart2}
-  deriving (Eq, Ord, Read, Show)
-_LabeledPredicate = Core.Name "openGql.grammar.LabeledPredicate"
-_LabeledPredicate_elementVariableReference = Core.Name "elementVariableReference"
-_LabeledPredicate_labeledPart = Core.Name "labeledPart"
-data LabeledPredicatePart2 =
-  LabeledPredicatePart2 {
-    labeledPredicatePart2IsLabeledOrColon :: IsLabeledOrColon,
-    labeledPredicatePart2LabelExpression :: LabelExpression}
-  deriving (Eq, Ord, Read, Show)
-_LabeledPredicatePart2 = Core.Name "openGql.grammar.LabeledPredicatePart2"
-_LabeledPredicatePart2_isLabeledOrColon = Core.Name "isLabeledOrColon"
-_LabeledPredicatePart2_labelExpression = Core.Name "labelExpression"
-data IsLabeledOrColon =
-  IsLabeledOrColonNot Bool |
-  IsLabeledOrColonColon
-  deriving (Eq, Ord, Read, Show)
-_IsLabeledOrColon = Core.Name "openGql.grammar.IsLabeledOrColon"
-_IsLabeledOrColon_not = Core.Name "not"
-_IsLabeledOrColon_colon = Core.Name "colon"
-data SourceDestinationPredicate =
-  SourceDestinationPredicateSourcePredicate SourcePredicate |
-  SourceDestinationPredicateDestinationPredicate DestinationPredicate
-  deriving (Eq, Ord, Read, Show)
-_SourceDestinationPredicate = Core.Name "openGql.grammar.SourceDestinationPredicate"
-_SourceDestinationPredicate_sourcePredicate = Core.Name "sourcePredicate"
-_SourceDestinationPredicate_destinationPredicate = Core.Name "destinationPredicate"
-type NodeReference = ElementVariableReference
-_NodeReference = Core.Name "openGql.grammar.NodeReference"
-data SourcePredicate =
-  SourcePredicate {
-    sourcePredicateNot :: Bool,
-    sourcePredicateSourceOf :: EdgeReference}
-  deriving (Eq, Ord, Read, Show)
-_SourcePredicate = Core.Name "openGql.grammar.SourcePredicate"
-_SourcePredicate_not = Core.Name "not"
-_SourcePredicate_sourceOf = Core.Name "sourceOf"
-data DestinationPredicate =
-  DestinationPredicate {
-    destinationPredicateNodeReference :: NodeReference,
-    destinationPredicateNot :: Bool,
-    destinationPredicateDestinationOf :: EdgeReference}
-  deriving (Eq, Ord, Read, Show)
-_DestinationPredicate = Core.Name "openGql.grammar.DestinationPredicate"
-_DestinationPredicate_nodeReference = Core.Name "nodeReference"
-_DestinationPredicate_not = Core.Name "not"
-_DestinationPredicate_destinationOf = Core.Name "destinationOf"
-type EdgeReference = ElementVariableReference
-_EdgeReference = Core.Name "openGql.grammar.EdgeReference"
-data AllDifferentPredicate =
-  AllDifferentPredicate {
-    allDifferentPredicateReferences :: [ElementVariableReference]}
-  deriving (Eq, Ord, Read, Show)
-_AllDifferentPredicate = Core.Name "openGql.grammar.AllDifferentPredicate"
-_AllDifferentPredicate_references = Core.Name "references"
-data SamePredicate =
-  SamePredicate {
-    samePredicateReferences :: [ElementVariableReference]}
-  deriving (Eq, Ord, Read, Show)
-_SamePredicate = Core.Name "openGql.grammar.SamePredicate"
-_SamePredicate_references = Core.Name "references"
-data PropertyExistsPredicate =
-  PropertyExistsPredicate {
-    propertyExistsPredicateElementVariableReference :: ElementVariableReference,
-    propertyExistsPredicatePropertyName :: PropertyName}
-  deriving (Eq, Ord, Read, Show)
-_PropertyExistsPredicate = Core.Name "openGql.grammar.PropertyExistsPredicate"
-_PropertyExistsPredicate_elementVariableReference = Core.Name "elementVariableReference"
-_PropertyExistsPredicate_propertyName = Core.Name "propertyName"
-data ValueExpression =
-  ValueExpressionSigned SignedExpr |
-  ValueExpressionMultDiv MultDivExpr |
-  ValueExpressionAddSubtract AddSubtractExpr |
-  ValueExpressionConcatenation ConcatenationExpr |
-  ValueExpressionNot NotExpr |
-  ValueExpressionIsNot IsNotExpr |
-  ValueExpressionConjunctive ConjunctiveExpr |
-  ValueExpressionDisjunctive DisjunctiveExpr |
-  ValueExpressionComparison ComparisonExpr |
-  ValueExpressionPredicate Predicate |
-  ValueExpressionNormalizedPredicate NormalizedPredicateExpr |
-  ValueExpressionPropertyGraph GraphExpression |
-  ValueExpressionBindingTable BindingTableExpression |
-  ValueExpressionValueFunction ValueFunction |
-  ValueExpressionPrimary PrimaryValueExpression
-  deriving (Eq, Ord, Read, Show)
-_ValueExpression = Core.Name "openGql.grammar.ValueExpression"
-_ValueExpression_signed = Core.Name "signed"
-_ValueExpression_multDiv = Core.Name "multDiv"
-_ValueExpression_addSubtract = Core.Name "addSubtract"
-_ValueExpression_concatenation = Core.Name "concatenation"
-_ValueExpression_not = Core.Name "not"
-_ValueExpression_isNot = Core.Name "isNot"
-_ValueExpression_conjunctive = Core.Name "conjunctive"
-_ValueExpression_disjunctive = Core.Name "disjunctive"
-_ValueExpression_comparison = Core.Name "comparison"
-_ValueExpression_predicate = Core.Name "predicate"
-_ValueExpression_normalizedPredicate = Core.Name "normalizedPredicate"
-_ValueExpression_propertyGraph = Core.Name "propertyGraph"
-_ValueExpression_bindingTable = Core.Name "bindingTable"
-_ValueExpression_valueFunction = Core.Name "valueFunction"
-_ValueExpression_primary = Core.Name "primary"
-data SignedExpr =
-  SignedExpr {
-    signedExprSign :: Sign,
-    signedExprValueExpression :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_SignedExpr = Core.Name "openGql.grammar.SignedExpr"
-_SignedExpr_sign = Core.Name "sign"
-_SignedExpr_valueExpression = Core.Name "valueExpression"
-data MultDivExpr =
-  MultDivExpr {
-    multDivExprLeft :: ValueExpression,
-    multDivExprOperator :: MultDivOperator,
-    multDivExprRight :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_MultDivExpr = Core.Name "openGql.grammar.MultDivExpr"
-_MultDivExpr_left = Core.Name "left"
-_MultDivExpr_operator = Core.Name "operator"
-_MultDivExpr_right = Core.Name "right"
-data AddSubtractExpr =
-  AddSubtractExpr {
-    addSubtractExprLeft :: ValueExpression,
-    addSubtractExprOperator :: AddSubtractOperator,
-    addSubtractExprRight :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_AddSubtractExpr = Core.Name "openGql.grammar.AddSubtractExpr"
-_AddSubtractExpr_left = Core.Name "left"
-_AddSubtractExpr_operator = Core.Name "operator"
-_AddSubtractExpr_right = Core.Name "right"
-data ConcatenationExpr =
-  ConcatenationExpr {
-    concatenationExprLeft :: ValueExpression,
-    concatenationExprRight :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_ConcatenationExpr = Core.Name "openGql.grammar.ConcatenationExpr"
-_ConcatenationExpr_left = Core.Name "left"
-_ConcatenationExpr_right = Core.Name "right"
-type NotExpr = ValueExpression
-_NotExpr = Core.Name "openGql.grammar.NotExpr"
-data IsNotExpr =
-  IsNotExpr {
-    isNotExprValueExpression :: ValueExpression,
-    isNotExprNot :: Bool,
-    isNotExprTruthValue :: TruthValue}
-  deriving (Eq, Ord, Read, Show)
-_IsNotExpr = Core.Name "openGql.grammar.IsNotExpr"
-_IsNotExpr_valueExpression = Core.Name "valueExpression"
-_IsNotExpr_not = Core.Name "not"
-_IsNotExpr_truthValue = Core.Name "truthValue"
-data ConjunctiveExpr =
-  ConjunctiveExpr {
-    conjunctiveExprLeft :: ValueExpression,
-    conjunctiveExprRight :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_ConjunctiveExpr = Core.Name "openGql.grammar.ConjunctiveExpr"
-_ConjunctiveExpr_left = Core.Name "left"
-_ConjunctiveExpr_right = Core.Name "right"
-data DisjunctiveExpr =
-  DisjunctiveExpr {
-    disjunctiveExprLeft :: ValueExpression,
-    disjunctiveExprOperator :: DisjunctiveOperator,
-    disjunctiveExprRight :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_DisjunctiveExpr = Core.Name "openGql.grammar.DisjunctiveExpr"
-_DisjunctiveExpr_left = Core.Name "left"
-_DisjunctiveExpr_operator = Core.Name "operator"
-_DisjunctiveExpr_right = Core.Name "right"
-data ComparisonExpr =
-  ComparisonExpr {
-    comparisonExprValueExpression :: ValueExpression,
-    comparisonExprComparison :: ComparisonPredicatePart2}
-  deriving (Eq, Ord, Read, Show)
-_ComparisonExpr = Core.Name "openGql.grammar.ComparisonExpr"
-_ComparisonExpr_valueExpression = Core.Name "valueExpression"
-_ComparisonExpr_comparison = Core.Name "comparison"
-data NormalizedPredicateExpr =
-  NormalizedPredicateExpr {
-    normalizedPredicateExprValueExpression :: ValueExpression,
-    normalizedPredicateExprNormalizedPredicate :: NormalizedPredicatePart2}
-  deriving (Eq, Ord, Read, Show)
-_NormalizedPredicateExpr = Core.Name "openGql.grammar.NormalizedPredicateExpr"
-_NormalizedPredicateExpr_valueExpression = Core.Name "valueExpression"
-_NormalizedPredicateExpr_normalizedPredicate = Core.Name "normalizedPredicate"
-data Sign =
-  SignPlus |
-  SignMinus
-  deriving (Eq, Ord, Read, Show)
-_Sign = Core.Name "openGql.grammar.Sign"
-_Sign_plus = Core.Name "plus"
-_Sign_minus = Core.Name "minus"
-data MultDivOperator =
-  MultDivOperatorMultiply |
-  MultDivOperatorDivide
-  deriving (Eq, Ord, Read, Show)
-_MultDivOperator = Core.Name "openGql.grammar.MultDivOperator"
-_MultDivOperator_multiply = Core.Name "multiply"
-_MultDivOperator_divide = Core.Name "divide"
-data AddSubtractOperator =
-  AddSubtractOperatorAdd |
-  AddSubtractOperatorSubtract
-  deriving (Eq, Ord, Read, Show)
-_AddSubtractOperator = Core.Name "openGql.grammar.AddSubtractOperator"
-_AddSubtractOperator_add = Core.Name "add"
-_AddSubtractOperator_subtract = Core.Name "subtract"
-data DisjunctiveOperator =
-  DisjunctiveOperatorOr |
-  DisjunctiveOperatorXor
-  deriving (Eq, Ord, Read, Show)
-_DisjunctiveOperator = Core.Name "openGql.grammar.DisjunctiveOperator"
-_DisjunctiveOperator_or = Core.Name "or"
-_DisjunctiveOperator_xor = Core.Name "xor"
-data ValueFunction =
-  ValueFunctionNumeric NumericValueFunction |
-  ValueFunctionDatetimeSubtraction DatetimeSubtraction |
-  ValueFunctionDatetime DatetimeValueFunction |
-  ValueFunctionDuration DurationValueFunction |
-  ValueFunctionCharacterOrByteString CharacterOrByteStringFunction |
-  ValueFunctionList ListValueFunction
-  deriving (Eq, Ord, Read, Show)
-_ValueFunction = Core.Name "openGql.grammar.ValueFunction"
-_ValueFunction_numeric = Core.Name "numeric"
-_ValueFunction_datetimeSubtraction = Core.Name "datetimeSubtraction"
-_ValueFunction_datetime = Core.Name "datetime"
-_ValueFunction_duration = Core.Name "duration"
-_ValueFunction_characterOrByteString = Core.Name "characterOrByteString"
-_ValueFunction_list = Core.Name "list"
-type BooleanValueExpression = ValueExpression
-_BooleanValueExpression = Core.Name "openGql.grammar.BooleanValueExpression"
-data CharacterOrByteStringFunction =
-  CharacterOrByteStringFunctionSub SubCharacterOrByteString |
-  CharacterOrByteStringFunctionTrimSingle TrimSingleCharacterOrByteString |
-  CharacterOrByteStringFunctionFold FoldCharacterString |
-  CharacterOrByteStringFunctionTrimMultiCharacter TrimMultiCharacterCharacterString |
-  CharacterOrByteStringFunctionNormalize NormalizeCharacterString
-  deriving (Eq, Ord, Read, Show)
-_CharacterOrByteStringFunction = Core.Name "openGql.grammar.CharacterOrByteStringFunction"
-_CharacterOrByteStringFunction_sub = Core.Name "sub"
-_CharacterOrByteStringFunction_trimSingle = Core.Name "trimSingle"
-_CharacterOrByteStringFunction_fold = Core.Name "fold"
-_CharacterOrByteStringFunction_trimMultiCharacter = Core.Name "trimMultiCharacter"
-_CharacterOrByteStringFunction_normalize = Core.Name "normalize"
-data SubCharacterOrByteString =
-  SubCharacterOrByteString {
-    subCharacterOrByteStringSide :: Side,
-    subCharacterOrByteStringValueExpression :: ValueExpression,
-    subCharacterOrByteStringStringLength :: StringLength}
-  deriving (Eq, Ord, Read, Show)
-_SubCharacterOrByteString = Core.Name "openGql.grammar.SubCharacterOrByteString"
-_SubCharacterOrByteString_side = Core.Name "side"
-_SubCharacterOrByteString_valueExpression = Core.Name "valueExpression"
-_SubCharacterOrByteString_stringLength = Core.Name "stringLength"
-data Side =
-  SideLeft |
-  SideRight
-  deriving (Eq, Ord, Read, Show)
-_Side = Core.Name "openGql.grammar.Side"
-_Side_left = Core.Name "left"
-_Side_right = Core.Name "right"
-type TrimSingleCharacterOrByteString = TrimOperands
-_TrimSingleCharacterOrByteString = Core.Name "openGql.grammar.TrimSingleCharacterOrByteString"
-data FoldCharacterString =
-  FoldCharacterString {
-    foldCharacterStringCase :: Case,
-    foldCharacterStringValueExpression :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_FoldCharacterString = Core.Name "openGql.grammar.FoldCharacterString"
-_FoldCharacterString_case = Core.Name "case"
-_FoldCharacterString_valueExpression = Core.Name "valueExpression"
-data Case =
-  CaseUpper |
-  CaseLower
-  deriving (Eq, Ord, Read, Show)
-_Case = Core.Name "openGql.grammar.Case"
-_Case_upper = Core.Name "upper"
-_Case_lower = Core.Name "lower"
-data TrimMultiCharacterCharacterString =
-  TrimMultiCharacterCharacterString {
-    trimMultiCharacterCharacterStringTrimType :: TrimType,
-    trimMultiCharacterCharacterStringValueExpression :: ValueExpression,
-    trimMultiCharacterCharacterStringOptionalValueExpression :: (Maybe ValueExpression)}
-  deriving (Eq, Ord, Read, Show)
-_TrimMultiCharacterCharacterString = Core.Name "openGql.grammar.TrimMultiCharacterCharacterString"
-_TrimMultiCharacterCharacterString_trimType = Core.Name "trimType"
-_TrimMultiCharacterCharacterString_valueExpression = Core.Name "valueExpression"
-_TrimMultiCharacterCharacterString_optionalValueExpression = Core.Name "optionalValueExpression"
-data TrimType =
-  TrimTypeBtrim |
-  TrimTypeLtrim |
-  TrimTypeRtrim
-  deriving (Eq, Ord, Read, Show)
-_TrimType = Core.Name "openGql.grammar.TrimType"
-_TrimType_btrim = Core.Name "btrim"
-_TrimType_ltrim = Core.Name "ltrim"
-_TrimType_rtrim = Core.Name "rtrim"
-data NormalizeCharacterString =
-  NormalizeCharacterString {
-    normalizeCharacterStringValueExpression :: ValueExpression,
-    normalizeCharacterStringNormalForm :: (Maybe NormalForm)}
-  deriving (Eq, Ord, Read, Show)
-_NormalizeCharacterString = Core.Name "openGql.grammar.NormalizeCharacterString"
-_NormalizeCharacterString_valueExpression = Core.Name "valueExpression"
-_NormalizeCharacterString_normalForm = Core.Name "normalForm"
-type NodeReferenceValueExpression = PrimaryValueExpression
-_NodeReferenceValueExpression = Core.Name "openGql.grammar.NodeReferenceValueExpression"
-type EdgeReferenceValueExpression = PrimaryValueExpression
-_EdgeReferenceValueExpression = Core.Name "openGql.grammar.EdgeReferenceValueExpression"
-type AggregatingValueExpression = ValueExpression
-_AggregatingValueExpression = Core.Name "openGql.grammar.AggregatingValueExpression"
-data PrimaryValueExpression =
-  PrimaryValueExpressionParenthesized ParenthesizedValueExpression |
-  PrimaryValueExpressionAggregateFunction AggregateFunction |
-  PrimaryValueExpressionUnsignedValueSpecification UnsignedValueSpecification |
-  PrimaryValueExpressionPathValueConstructor PathValueConstructor |
-  PrimaryValueExpressionPropertyReference PropertyReference |
-  PrimaryValueExpressionValueQueryExpression ValueQueryExpression |
-  PrimaryValueExpressionCaseExpression CaseExpression |
-  PrimaryValueExpressionCastSpecification CastSpecification |
-  PrimaryValueExpressionElementIdFunction ElementIdFunction |
-  PrimaryValueExpressionLetValueExpression LetValueExpression |
-  PrimaryValueExpressionBindingVariableReference BindingVariableReference
-  deriving (Eq, Ord, Read, Show)
-_PrimaryValueExpression = Core.Name "openGql.grammar.PrimaryValueExpression"
-_PrimaryValueExpression_parenthesized = Core.Name "parenthesized"
-_PrimaryValueExpression_aggregateFunction = Core.Name "aggregateFunction"
-_PrimaryValueExpression_unsignedValueSpecification = Core.Name "unsignedValueSpecification"
-_PrimaryValueExpression_pathValueConstructor = Core.Name "pathValueConstructor"
-_PrimaryValueExpression_propertyReference = Core.Name "propertyReference"
-_PrimaryValueExpression_valueQueryExpression = Core.Name "valueQueryExpression"
-_PrimaryValueExpression_caseExpression = Core.Name "caseExpression"
-_PrimaryValueExpression_castSpecification = Core.Name "castSpecification"
-_PrimaryValueExpression_elementIdFunction = Core.Name "elementIdFunction"
-_PrimaryValueExpression_letValueExpression = Core.Name "letValueExpression"
-_PrimaryValueExpression_bindingVariableReference = Core.Name "bindingVariableReference"
-type ParenthesizedValueExpression = ValueExpression
-_ParenthesizedValueExpression = Core.Name "openGql.grammar.ParenthesizedValueExpression"
-data NonParenthesizedPrimaryValueExpression =
-  NonParenthesizedPrimaryValueExpressionSpecial NonParenthesizedPrimaryValueExpressionSpecialCase |
-  NonParenthesizedPrimaryValueExpressionBindingVariable BindingVariableReference
-  deriving (Eq, Ord, Read, Show)
-_NonParenthesizedPrimaryValueExpression = Core.Name "openGql.grammar.NonParenthesizedPrimaryValueExpression"
-_NonParenthesizedPrimaryValueExpression_special = Core.Name "special"
-_NonParenthesizedPrimaryValueExpression_bindingVariable = Core.Name "bindingVariable"
-data NonParenthesizedPrimaryValueExpressionSpecialCase =
-  NonParenthesizedPrimaryValueExpressionSpecialCaseAggregateFunction AggregateFunction |
-  NonParenthesizedPrimaryValueExpressionSpecialCaseUnsignedValueSpecification UnsignedValueSpecification |
-  NonParenthesizedPrimaryValueExpressionSpecialCasePathValueConstructor PathValueConstructor |
-  NonParenthesizedPrimaryValueExpressionSpecialCasePropertyReference PropertyReference |
-  NonParenthesizedPrimaryValueExpressionSpecialCaseValueQueryExpression ValueQueryExpression |
-  NonParenthesizedPrimaryValueExpressionSpecialCaseCaseExpression CaseExpression |
-  NonParenthesizedPrimaryValueExpressionSpecialCaseCastSpecification CastSpecification |
-  NonParenthesizedPrimaryValueExpressionSpecialCaseElementIdFunction ElementIdFunction |
-  NonParenthesizedPrimaryValueExpressionSpecialCaseLetValueExpression LetValueExpression
-  deriving (Eq, Ord, Read, Show)
-_NonParenthesizedPrimaryValueExpressionSpecialCase =
-    Core.Name "openGql.grammar.NonParenthesizedPrimaryValueExpressionSpecialCase"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_aggregateFunction = Core.Name "aggregateFunction"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_unsignedValueSpecification = Core.Name "unsignedValueSpecification"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_pathValueConstructor = Core.Name "pathValueConstructor"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_propertyReference = Core.Name "propertyReference"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_valueQueryExpression = Core.Name "valueQueryExpression"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_caseExpression = Core.Name "caseExpression"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_castSpecification = Core.Name "castSpecification"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_elementIdFunction = Core.Name "elementIdFunction"
-_NonParenthesizedPrimaryValueExpressionSpecialCase_letValueExpression = Core.Name "letValueExpression"
-data UnsignedValueSpecification =
-  UnsignedValueSpecificationUnsignedLiteral UnsignedLiteral |
-  UnsignedValueSpecificationGeneralValueSpecification GeneralValueSpecification
-  deriving (Eq, Ord, Read, Show)
-_UnsignedValueSpecification = Core.Name "openGql.grammar.UnsignedValueSpecification"
-_UnsignedValueSpecification_unsignedLiteral = Core.Name "unsignedLiteral"
-_UnsignedValueSpecification_generalValueSpecification = Core.Name "generalValueSpecification"
-data NonNegativeIntegerSpecification =
-  NonNegativeIntegerSpecificationUnsignedInteger UnsignedInteger |
-  NonNegativeIntegerSpecificationDynamicParameterSpecification DynamicParameterSpecification
-  deriving (Eq, Ord, Read, Show)
-_NonNegativeIntegerSpecification = Core.Name "openGql.grammar.NonNegativeIntegerSpecification"
-_NonNegativeIntegerSpecification_unsignedInteger = Core.Name "unsignedInteger"
-_NonNegativeIntegerSpecification_dynamicParameterSpecification = Core.Name "dynamicParameterSpecification"
-data GeneralValueSpecification =
-  GeneralValueSpecificationDynamicParameterSpecification DynamicParameterSpecification |
-  GeneralValueSpecificationSessionUser
-  deriving (Eq, Ord, Read, Show)
-_GeneralValueSpecification = Core.Name "openGql.grammar.GeneralValueSpecification"
-_GeneralValueSpecification_dynamicParameterSpecification = Core.Name "dynamicParameterSpecification"
-_GeneralValueSpecification_sessionUser = Core.Name "sessionUser"
-type DynamicParameterSpecification = ParameterName
-_DynamicParameterSpecification = Core.Name "openGql.grammar.DynamicParameterSpecification"
-data LetValueExpression =
-  LetValueExpression {
-    letValueExpressionLetVariables :: LetVariableDefinitionList,
-    letValueExpressionValueExpression :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_LetValueExpression = Core.Name "openGql.grammar.LetValueExpression"
-_LetValueExpression_letVariables = Core.Name "letVariables"
-_LetValueExpression_valueExpression = Core.Name "valueExpression"
-type ValueQueryExpression = NestedQuerySpecification
-_ValueQueryExpression = Core.Name "openGql.grammar.ValueQueryExpression"
-data CaseExpression =
-  CaseExpressionAbbreviation CaseAbbreviation |
-  CaseExpressionSpecification CaseSpecification
-  deriving (Eq, Ord, Read, Show)
-_CaseExpression = Core.Name "openGql.grammar.CaseExpression"
-_CaseExpression_abbreviation = Core.Name "abbreviation"
-_CaseExpression_specification = Core.Name "specification"
-data CaseAbbreviation =
-  CaseAbbreviationNullIf NullIfAbbreviation |
-  CaseAbbreviationCoalesce [ValueExpression]
-  deriving (Eq, Ord, Read, Show)
-_CaseAbbreviation = Core.Name "openGql.grammar.CaseAbbreviation"
-_CaseAbbreviation_nullIf = Core.Name "nullIf"
-_CaseAbbreviation_coalesce = Core.Name "coalesce"
-data NullIfAbbreviation =
-  NullIfAbbreviation {
-    nullIfAbbreviationFirst :: ValueExpression,
-    nullIfAbbreviationSecond :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_NullIfAbbreviation = Core.Name "openGql.grammar.NullIfAbbreviation"
-_NullIfAbbreviation_first = Core.Name "first"
-_NullIfAbbreviation_second = Core.Name "second"
-data CaseSpecification =
-  CaseSpecificationSimple SimpleCase |
-  CaseSpecificationSearched SearchedCase
-  deriving (Eq, Ord, Read, Show)
-_CaseSpecification = Core.Name "openGql.grammar.CaseSpecification"
-_CaseSpecification_simple = Core.Name "simple"
-_CaseSpecification_searched = Core.Name "searched"
-data SimpleCase =
-  SimpleCase {
-    simpleCaseCaseOperand :: CaseOperand,
-    simpleCaseWhenClauses :: [SimpleWhenClause],
-    simpleCaseElseClause :: (Maybe ElseClause)}
-  deriving (Eq, Ord, Read, Show)
-_SimpleCase = Core.Name "openGql.grammar.SimpleCase"
-_SimpleCase_caseOperand = Core.Name "caseOperand"
-_SimpleCase_whenClauses = Core.Name "whenClauses"
-_SimpleCase_elseClause = Core.Name "elseClause"
-data SearchedCase =
-  SearchedCase {
-    searchedCaseWhenClauses :: [SearchedWhenClause],
-    searchedCaseElseClause :: (Maybe ElseClause)}
-  deriving (Eq, Ord, Read, Show)
-_SearchedCase = Core.Name "openGql.grammar.SearchedCase"
-_SearchedCase_whenClauses = Core.Name "whenClauses"
-_SearchedCase_elseClause = Core.Name "elseClause"
-data SimpleWhenClause =
-  SimpleWhenClause {
-    simpleWhenClauseWhenOperands :: WhenOperandList,
-    simpleWhenClauseResult :: Result}
-  deriving (Eq, Ord, Read, Show)
-_SimpleWhenClause = Core.Name "openGql.grammar.SimpleWhenClause"
-_SimpleWhenClause_whenOperands = Core.Name "whenOperands"
-_SimpleWhenClause_result = Core.Name "result"
-data SearchedWhenClause =
-  SearchedWhenClause {
-    searchedWhenClauseSearchCondition :: SearchCondition,
-    searchedWhenClauseResult :: Result}
-  deriving (Eq, Ord, Read, Show)
-_SearchedWhenClause = Core.Name "openGql.grammar.SearchedWhenClause"
-_SearchedWhenClause_searchCondition = Core.Name "searchCondition"
-_SearchedWhenClause_result = Core.Name "result"
-type ElseClause = Result
-_ElseClause = Core.Name "openGql.grammar.ElseClause"
-data CaseOperand =
-  CaseOperandValueExpression NonParenthesizedPrimaryValueExpression |
-  CaseOperandElementReference ElementVariableReference
-  deriving (Eq, Ord, Read, Show)
-_CaseOperand = Core.Name "openGql.grammar.CaseOperand"
-_CaseOperand_valueExpression = Core.Name "valueExpression"
-_CaseOperand_elementReference = Core.Name "elementReference"
-type WhenOperandList = [WhenOperand]
-_WhenOperandList = Core.Name "openGql.grammar.WhenOperandList"
-data WhenOperand =
-  WhenOperandValueExpression NonParenthesizedPrimaryValueExpression |
-  WhenOperandComparison ComparisonPredicatePart2 |
-  WhenOperandNullPredicate NullPredicatePart2 |
-  WhenOperandValueTypePredicate ValueTypePredicatePart2 |
-  WhenOperandNormalizedPredicate NormalizedPredicatePart2 |
-  WhenOperandDirectedPredicate DirectedPredicatePart2 |
-  WhenOperandLabeledPredicate LabeledPredicatePart2 |
-  WhenOperandSourcePredicate SourcePredicate |
-  WhenOperandDestinationPredicate DestinationPredicate
-  deriving (Eq, Ord, Read, Show)
-_WhenOperand = Core.Name "openGql.grammar.WhenOperand"
-_WhenOperand_valueExpression = Core.Name "valueExpression"
-_WhenOperand_comparison = Core.Name "comparison"
-_WhenOperand_nullPredicate = Core.Name "nullPredicate"
-_WhenOperand_valueTypePredicate = Core.Name "valueTypePredicate"
-_WhenOperand_normalizedPredicate = Core.Name "normalizedPredicate"
-_WhenOperand_directedPredicate = Core.Name "directedPredicate"
-_WhenOperand_labeledPredicate = Core.Name "labeledPredicate"
-_WhenOperand_sourcePredicate = Core.Name "sourcePredicate"
-_WhenOperand_destinationPredicate = Core.Name "destinationPredicate"
-data Result =
-  ResultSimple ResultExpression |
-  ResultNullLiteral
-  deriving (Eq, Ord, Read, Show)
-_Result = Core.Name "openGql.grammar.Result"
-_Result_simple = Core.Name "simple"
-_Result_nullLiteral = Core.Name "nullLiteral"
-type ResultExpression = ValueExpression
-_ResultExpression = Core.Name "openGql.grammar.ResultExpression"
-data CastSpecification =
-  CastSpecification {
-    castSpecificationOperand :: CastOperand,
-    castSpecificationTarget :: CastTarget}
-  deriving (Eq, Ord, Read, Show)
-_CastSpecification = Core.Name "openGql.grammar.CastSpecification"
-_CastSpecification_operand = Core.Name "operand"
-_CastSpecification_target = Core.Name "target"
-data CastOperand =
-  CastOperandValueExpression ValueExpression |
-  CastOperandNullLiteral
-  deriving (Eq, Ord, Read, Show)
-_CastOperand = Core.Name "openGql.grammar.CastOperand"
-_CastOperand_valueExpression = Core.Name "valueExpression"
-_CastOperand_nullLiteral = Core.Name "nullLiteral"
-type CastTarget = ValueType
-_CastTarget = Core.Name "openGql.grammar.CastTarget"
-data AggregateFunction =
-  AggregateFunctionCountAll |
-  AggregateFunctionGeneralSetFunction GeneralSetFunction |
-  AggregateFunctionBinarySetFunction BinarySetFunction
-  deriving (Eq, Ord, Read, Show)
-_AggregateFunction = Core.Name "openGql.grammar.AggregateFunction"
-_AggregateFunction_countAll = Core.Name "countAll"
-_AggregateFunction_generalSetFunction = Core.Name "generalSetFunction"
-_AggregateFunction_binarySetFunction = Core.Name "binarySetFunction"
-data GeneralSetFunction =
-  GeneralSetFunction {
-    generalSetFunctionFunctionType :: GeneralSetFunctionType,
-    generalSetFunctionSetQuantifier :: (Maybe SetQuantifier),
-    generalSetFunctionValueExpression :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_GeneralSetFunction = Core.Name "openGql.grammar.GeneralSetFunction"
-_GeneralSetFunction_functionType = Core.Name "functionType"
-_GeneralSetFunction_setQuantifier = Core.Name "setQuantifier"
-_GeneralSetFunction_valueExpression = Core.Name "valueExpression"
-data BinarySetFunction =
-  BinarySetFunction {
-    binarySetFunctionFunctionType :: BinarySetFunctionType,
-    binarySetFunctionDependentValue :: DependentValueExpression,
-    binarySetFunctionIndependentValue :: IndependentValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_BinarySetFunction = Core.Name "openGql.grammar.BinarySetFunction"
-_BinarySetFunction_functionType = Core.Name "functionType"
-_BinarySetFunction_dependentValue = Core.Name "dependentValue"
-_BinarySetFunction_independentValue = Core.Name "independentValue"
-data GeneralSetFunctionType =
-  GeneralSetFunctionTypeAvg |
-  GeneralSetFunctionTypeCount |
-  GeneralSetFunctionTypeMax |
-  GeneralSetFunctionTypeMin |
-  GeneralSetFunctionTypeSum |
-  GeneralSetFunctionTypeCollectList |
-  GeneralSetFunctionTypeStddevSamp |
-  GeneralSetFunctionTypeStddevPop
-  deriving (Eq, Ord, Read, Show)
-_GeneralSetFunctionType = Core.Name "openGql.grammar.GeneralSetFunctionType"
-_GeneralSetFunctionType_avg = Core.Name "avg"
-_GeneralSetFunctionType_count = Core.Name "count"
-_GeneralSetFunctionType_max = Core.Name "max"
-_GeneralSetFunctionType_min = Core.Name "min"
-_GeneralSetFunctionType_sum = Core.Name "sum"
-_GeneralSetFunctionType_collectList = Core.Name "collectList"
-_GeneralSetFunctionType_stddevSamp = Core.Name "stddevSamp"
-_GeneralSetFunctionType_stddevPop = Core.Name "stddevPop"
-data SetQuantifier =
-  SetQuantifierDistinct |
-  SetQuantifierAll
-  deriving (Eq, Ord, Read, Show)
-_SetQuantifier = Core.Name "openGql.grammar.SetQuantifier"
-_SetQuantifier_distinct = Core.Name "distinct"
-_SetQuantifier_all = Core.Name "all"
-data BinarySetFunctionType =
-  BinarySetFunctionTypePercentileCont |
-  BinarySetFunctionTypePercentileDisc
-  deriving (Eq, Ord, Read, Show)
-_BinarySetFunctionType = Core.Name "openGql.grammar.BinarySetFunctionType"
-_BinarySetFunctionType_percentileCont = Core.Name "percentileCont"
-_BinarySetFunctionType_percentileDisc = Core.Name "percentileDisc"
-data DependentValueExpression =
-  DependentValueExpression {
-    dependentValueExpressionSetQuantifier :: (Maybe SetQuantifier),
-    dependentValueExpressionNumericValue :: NumericValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_DependentValueExpression = Core.Name "openGql.grammar.DependentValueExpression"
-_DependentValueExpression_setQuantifier = Core.Name "setQuantifier"
-_DependentValueExpression_numericValue = Core.Name "numericValue"
-type IndependentValueExpression = NumericValueExpression
-_IndependentValueExpression = Core.Name "openGql.grammar.IndependentValueExpression"
-type ElementIdFunction = ElementVariableReference
-_ElementIdFunction = Core.Name "openGql.grammar.ElementIdFunction"
-data PropertyReference =
-  PropertyReference {
-    propertyReferenceValueExpression :: PrimaryValueExpression,
-    propertyReferencePropertyName :: PropertyName}
-  deriving (Eq, Ord, Read, Show)
-_PropertyReference = Core.Name "openGql.grammar.PropertyReference"
-_PropertyReference_valueExpression = Core.Name "valueExpression"
-_PropertyReference_propertyName = Core.Name "propertyName"
-type BindingVariableReference = BindingVariable
-_BindingVariableReference = Core.Name "openGql.grammar.BindingVariableReference"
-type PathValueExpression = ValueExpression
-_PathValueExpression = Core.Name "openGql.grammar.PathValueExpression"
-type PathValueConstructor = PathValueConstructorByEnumeration
-_PathValueConstructor = Core.Name "openGql.grammar.PathValueConstructor"
-type PathValueConstructorByEnumeration = PathElementList
-_PathValueConstructorByEnumeration = Core.Name "openGql.grammar.PathValueConstructorByEnumeration"
-data PathElementList =
-  PathElementList {
-    pathElementListStart :: PathElementListStart,
-    pathElementListSteps :: [PathElementListStep]}
-  deriving (Eq, Ord, Read, Show)
-_PathElementList = Core.Name "openGql.grammar.PathElementList"
-_PathElementList_start = Core.Name "start"
-_PathElementList_steps = Core.Name "steps"
-type PathElementListStart = NodeReferenceValueExpression
-_PathElementListStart = Core.Name "openGql.grammar.PathElementListStart"
-data PathElementListStep =
-  PathElementListStep {
-    pathElementListStepEdgeReference :: EdgeReferenceValueExpression,
-    pathElementListStepNodeReference :: NodeReferenceValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_PathElementListStep = Core.Name "openGql.grammar.PathElementListStep"
-_PathElementListStep_edgeReference = Core.Name "edgeReference"
-_PathElementListStep_nodeReference = Core.Name "nodeReference"
-type ListValueExpression = ValueExpression
-_ListValueExpression = Core.Name "openGql.grammar.ListValueExpression"
-data ListValueFunction =
-  ListValueFunctionTrim TrimListFunction |
-  ListValueFunctionElements ElementsFunction
-  deriving (Eq, Ord, Read, Show)
-_ListValueFunction = Core.Name "openGql.grammar.ListValueFunction"
-_ListValueFunction_trim = Core.Name "trim"
-_ListValueFunction_elements = Core.Name "elements"
-data TrimListFunction =
-  TrimListFunction {
-    trimListFunctionListValue :: ListValueExpression,
-    trimListFunctionNumericValue :: NumericValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_TrimListFunction = Core.Name "openGql.grammar.TrimListFunction"
-_TrimListFunction_listValue = Core.Name "listValue"
-_TrimListFunction_numericValue = Core.Name "numericValue"
-type ElementsFunction = PathValueExpression
-_ElementsFunction = Core.Name "openGql.grammar.ElementsFunction"
-type ListValueConstructor = ListValueConstructorByEnumeration
-_ListValueConstructor = Core.Name "openGql.grammar.ListValueConstructor"
-data ListValueConstructorByEnumeration =
-  ListValueConstructorByEnumeration {
-    listValueConstructorByEnumerationListValueTypeName :: (Maybe ListValueTypeName),
-    listValueConstructorByEnumerationElements :: (Maybe ListElementList)}
-  deriving (Eq, Ord, Read, Show)
-_ListValueConstructorByEnumeration = Core.Name "openGql.grammar.ListValueConstructorByEnumeration"
-_ListValueConstructorByEnumeration_listValueTypeName = Core.Name "listValueTypeName"
-_ListValueConstructorByEnumeration_elements = Core.Name "elements"
-type ListElementList = [ListElement]
-_ListElementList = Core.Name "openGql.grammar.ListElementList"
-type ListElement = ValueExpression
-_ListElement = Core.Name "openGql.grammar.ListElement"
-type RecordConstructor = FieldsSpecification
-_RecordConstructor = Core.Name "openGql.grammar.RecordConstructor"
-type FieldsSpecification = (Maybe FieldList)
-_FieldsSpecification = Core.Name "openGql.grammar.FieldsSpecification"
-type FieldList = [Field]
-_FieldList = Core.Name "openGql.grammar.FieldList"
-data Field =
-  Field {
-    fieldName :: FieldName,
-    fieldValue :: ValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_Field = Core.Name "openGql.grammar.Field"
-_Field_name = Core.Name "name"
-_Field_value = Core.Name "value"
-type TruthValue = BooleanLiteral
-_TruthValue = Core.Name "openGql.grammar.TruthValue"
-data NumericValueExpression =
-  NumericValueExpressionSigned SignedNumericValueExpression |
-  NumericValueExpressionMultiplicationOrDivision MulDivNumericValueExpression |
-  NumericValueExpressionAdditionOrSubtraction AddSubNumericValueExpression |
-  NumericValueExpressionPrimary PrimaryValueExpression |
-  NumericValueExpressionFunction NumericValueFunction
-  deriving (Eq, Ord, Read, Show)
-_NumericValueExpression = Core.Name "openGql.grammar.NumericValueExpression"
-_NumericValueExpression_signed = Core.Name "signed"
-_NumericValueExpression_multiplicationOrDivision = Core.Name "multiplicationOrDivision"
-_NumericValueExpression_additionOrSubtraction = Core.Name "additionOrSubtraction"
-_NumericValueExpression_primary = Core.Name "primary"
-_NumericValueExpression_function = Core.Name "function"
-data SignedNumericValueExpression =
-  SignedNumericValueExpression {
-    signedNumericValueExpressionSign :: Sign,
-    signedNumericValueExpressionExpression :: NumericValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_SignedNumericValueExpression = Core.Name "openGql.grammar.SignedNumericValueExpression"
-_SignedNumericValueExpression_sign = Core.Name "sign"
-_SignedNumericValueExpression_expression = Core.Name "expression"
-data MulDivNumericValueExpression =
-  MulDivNumericValueExpression {
-    mulDivNumericValueExpressionLeft :: NumericValueExpression,
-    mulDivNumericValueExpressionOperator :: MultDivOperator,
-    mulDivNumericValueExpressionRight :: NumericValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_MulDivNumericValueExpression = Core.Name "openGql.grammar.MulDivNumericValueExpression"
-_MulDivNumericValueExpression_left = Core.Name "left"
-_MulDivNumericValueExpression_operator = Core.Name "operator"
-_MulDivNumericValueExpression_right = Core.Name "right"
-data AddSubNumericValueExpression =
-  AddSubNumericValueExpression {
-    addSubNumericValueExpressionLeft :: NumericValueExpression,
-    addSubNumericValueExpressionOperator :: AddSubtractOperator,
-    addSubNumericValueExpressionRight :: NumericValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_AddSubNumericValueExpression = Core.Name "openGql.grammar.AddSubNumericValueExpression"
-_AddSubNumericValueExpression_left = Core.Name "left"
-_AddSubNumericValueExpression_operator = Core.Name "operator"
-_AddSubNumericValueExpression_right = Core.Name "right"
-data NumericValueFunction =
-  NumericValueFunctionLength LengthExpression |
-  NumericValueFunctionCardinality CardinalityExpression |
-  NumericValueFunctionAbsoluteValue AbsoluteValueExpression |
-  NumericValueFunctionModulus ModulusExpression |
-  NumericValueFunctionTrigonometric TrigonometricFunction |
-  NumericValueFunctionLogarithm GeneralLogarithmFunction |
-  NumericValueFunctionCommonLogarithm CommonLogarithm |
-  NumericValueFunctionNaturalLogarithm NaturalLogarithm |
-  NumericValueFunctionExponential ExponentialFunction |
-  NumericValueFunctionPower PowerFunction |
-  NumericValueFunctionSquareRoot SquareRoot |
-  NumericValueFunctionFloor FloorFunction |
-  NumericValueFunctionCeiling CeilingFunction
-  deriving (Eq, Ord, Read, Show)
-_NumericValueFunction = Core.Name "openGql.grammar.NumericValueFunction"
-_NumericValueFunction_length = Core.Name "length"
-_NumericValueFunction_cardinality = Core.Name "cardinality"
-_NumericValueFunction_absoluteValue = Core.Name "absoluteValue"
-_NumericValueFunction_modulus = Core.Name "modulus"
-_NumericValueFunction_trigonometric = Core.Name "trigonometric"
-_NumericValueFunction_logarithm = Core.Name "logarithm"
-_NumericValueFunction_commonLogarithm = Core.Name "commonLogarithm"
-_NumericValueFunction_naturalLogarithm = Core.Name "naturalLogarithm"
-_NumericValueFunction_exponential = Core.Name "exponential"
-_NumericValueFunction_power = Core.Name "power"
-_NumericValueFunction_squareRoot = Core.Name "squareRoot"
-_NumericValueFunction_floor = Core.Name "floor"
-_NumericValueFunction_ceiling = Core.Name "ceiling"
-data LengthExpression =
-  LengthExpressionChar CharLengthExpression |
-  LengthExpressionByte ByteLengthExpression |
-  LengthExpressionPath PathLengthExpression
-  deriving (Eq, Ord, Read, Show)
-_LengthExpression = Core.Name "openGql.grammar.LengthExpression"
-_LengthExpression_char = Core.Name "char"
-_LengthExpression_byte = Core.Name "byte"
-_LengthExpression_path = Core.Name "path"
-data CardinalityExpression =
-  CardinalityExpressionCardinality CardinalityArgumentExpression |
-  CardinalityExpressionSize ListValueExpression
-  deriving (Eq, Ord, Read, Show)
-_CardinalityExpression = Core.Name "openGql.grammar.CardinalityExpression"
-_CardinalityExpression_cardinality = Core.Name "cardinality"
-_CardinalityExpression_size = Core.Name "size"
-type CardinalityArgumentExpression = ValueExpression
-_CardinalityArgumentExpression = Core.Name "openGql.grammar.CardinalityArgumentExpression"
-type CharLengthExpression = CharacterStringValueExpression
-_CharLengthExpression = Core.Name "openGql.grammar.CharLengthExpression"
-type ByteLengthExpression = ByteStringValueExpression
-_ByteLengthExpression = Core.Name "openGql.grammar.ByteLengthExpression"
-type PathLengthExpression = PathValueExpression
-_PathLengthExpression = Core.Name "openGql.grammar.PathLengthExpression"
-type AbsoluteValueExpression = ValueExpression
-_AbsoluteValueExpression = Core.Name "openGql.grammar.AbsoluteValueExpression"
-data ModulusExpression =
-  ModulusExpression {
-    modulusExpressionDividend :: NumericValueExpressionDividend,
-    modulusExpressionDivisor :: NumericValueExpressionDivisor}
-  deriving (Eq, Ord, Read, Show)
-_ModulusExpression = Core.Name "openGql.grammar.ModulusExpression"
-_ModulusExpression_dividend = Core.Name "dividend"
-_ModulusExpression_divisor = Core.Name "divisor"
-type NumericValueExpressionDividend = NumericValueExpression
-_NumericValueExpressionDividend = Core.Name "openGql.grammar.NumericValueExpressionDividend"
-type NumericValueExpressionDivisor = NumericValueExpression
-_NumericValueExpressionDivisor = Core.Name "openGql.grammar.NumericValueExpressionDivisor"
-data TrigonometricFunction =
-  TrigonometricFunction {
-    trigonometricFunctionName :: TrigonometricFunctionName,
-    trigonometricFunctionValue :: NumericValueExpression}
-  deriving (Eq, Ord, Read, Show)
-_TrigonometricFunction = Core.Name "openGql.grammar.TrigonometricFunction"
-_TrigonometricFunction_name = Core.Name "name"
-_TrigonometricFunction_value = Core.Name "value"
-data TrigonometricFunctionName =
-  TrigonometricFunctionNameSin |
-  TrigonometricFunctionNameCos |
-  TrigonometricFunctionNameTan |
-  TrigonometricFunctionNameCot |
-  TrigonometricFunctionNameSinh |
-  TrigonometricFunctionNameCosh |
-  TrigonometricFunctionNameTanh |
-  TrigonometricFunctionNameAsin |
-  TrigonometricFunctionNameAcos |
-  TrigonometricFunctionNameAtan |
-  TrigonometricFunctionNameDegrees |
-  TrigonometricFunctionNameRadians
-  deriving (Eq, Ord, Read, Show)
-_TrigonometricFunctionName = Core.Name "openGql.grammar.TrigonometricFunctionName"
-_TrigonometricFunctionName_sin = Core.Name "sin"
-_TrigonometricFunctionName_cos = Core.Name "cos"
-_TrigonometricFunctionName_tan = Core.Name "tan"
-_TrigonometricFunctionName_cot = Core.Name "cot"
-_TrigonometricFunctionName_sinh = Core.Name "sinh"
-_TrigonometricFunctionName_cosh = Core.Name "cosh"
-_TrigonometricFunctionName_tanh = Core.Name "tanh"
-_TrigonometricFunctionName_asin = Core.Name "asin"
-_TrigonometricFunctionName_acos = Core.Name "acos"
-_TrigonometricFunctionName_atan = Core.Name "atan"
-_TrigonometricFunctionName_degrees = Core.Name "degrees"
-_TrigonometricFunctionName_radians = Core.Name "radians"
-data GeneralLogarithmFunction =
-  GeneralLogarithmFunction {
-    generalLogarithmFunctionBase :: GeneralLogarithmBase,
-    generalLogarithmFunctionArgument :: GeneralLogarithmArgument}
-  deriving (Eq, Ord, Read, Show)
-_GeneralLogarithmFunction = Core.Name "openGql.grammar.GeneralLogarithmFunction"
-_GeneralLogarithmFunction_base = Core.Name "base"
-_GeneralLogarithmFunction_argument = Core.Name "argument"
-type GeneralLogarithmBase = NumericValueExpression
-_GeneralLogarithmBase = Core.Name "openGql.grammar.GeneralLogarithmBase"
-type GeneralLogarithmArgument = NumericValueExpression
-_GeneralLogarithmArgument = Core.Name "openGql.grammar.GeneralLogarithmArgument"
-type CommonLogarithm = NumericValueExpression
-_CommonLogarithm = Core.Name "openGql.grammar.CommonLogarithm"
-type NaturalLogarithm = NumericValueExpression
-_NaturalLogarithm = Core.Name "openGql.grammar.NaturalLogarithm"
-type ExponentialFunction = NumericValueExpression
-_ExponentialFunction = Core.Name "openGql.grammar.ExponentialFunction"
-data PowerFunction =
-  PowerFunction {
-    powerFunctionBase :: NumericValueExpressionBase,
-    powerFunctionExponent :: NumericValueExpressionExponent}
-  deriving (Eq, Ord, Read, Show)
-_PowerFunction = Core.Name "openGql.grammar.PowerFunction"
-_PowerFunction_base = Core.Name "base"
-_PowerFunction_exponent = Core.Name "exponent"
-type NumericValueExpressionBase = NumericValueExpression
-_NumericValueExpressionBase = Core.Name "openGql.grammar.NumericValueExpressionBase"
-type NumericValueExpressionExponent = NumericValueExpression
-_NumericValueExpressionExponent = Core.Name "openGql.grammar.NumericValueExpressionExponent"
-type SquareRoot = NumericValueExpression
-_SquareRoot = Core.Name "openGql.grammar.SquareRoot"
-type FloorFunction = NumericValueExpression
-_FloorFunction = Core.Name "openGql.grammar.FloorFunction"
-type CeilingFunction = NumericValueExpression
-_CeilingFunction = Core.Name "openGql.grammar.CeilingFunction"
-type CharacterStringValueExpression = ValueExpression
-_CharacterStringValueExpression = Core.Name "openGql.grammar.CharacterStringValueExpression"
-type ByteStringValueExpression = ValueExpression
-_ByteStringValueExpression = Core.Name "openGql.grammar.ByteStringValueExpression"
-data TrimOperands =
-  TrimOperands {
-    trimOperandsSpecification :: (Maybe TrimSpecification),
-    trimOperandsCharacterOrByteString :: (Maybe TrimCharacterOrByteString),
-    trimOperandsSource :: TrimCharacterOrByteStringSource}
-  deriving (Eq, Ord, Read, Show)
-_TrimOperands = Core.Name "openGql.grammar.TrimOperands"
-_TrimOperands_specification = Core.Name "specification"
-_TrimOperands_characterOrByteString = Core.Name "characterOrByteString"
-_TrimOperands_source = Core.Name "source"
-type TrimCharacterOrByteStringSource = ValueExpression
-_TrimCharacterOrByteStringSource = Core.Name "openGql.grammar.TrimCharacterOrByteStringSource"
-data TrimSpecification =
-  TrimSpecificationLeading |
-  TrimSpecificationTrailing |
-  TrimSpecificationBoth
-  deriving (Eq, Ord, Read, Show)
-_TrimSpecification = Core.Name "openGql.grammar.TrimSpecification"
-_TrimSpecification_leading = Core.Name "leading"
-_TrimSpecification_trailing = Core.Name "trailing"
-_TrimSpecification_both = Core.Name "both"
-type TrimCharacterOrByteString = ValueExpression
-_TrimCharacterOrByteString = Core.Name "openGql.grammar.TrimCharacterOrByteString"
-data NormalForm =
-  NormalFormNfc |
-  NormalFormNfd |
-  NormalFormNfkc |
-  NormalFormNfkd
-  deriving (Eq, Ord, Read, Show)
-_NormalForm = Core.Name "openGql.grammar.NormalForm"
-_NormalForm_nfc = Core.Name "nfc"
-_NormalForm_nfd = Core.Name "nfd"
-_NormalForm_nfkc = Core.Name "nfkc"
-_NormalForm_nfkd = Core.Name "nfkd"
-type StringLength = NumericValueExpression
-_StringLength = Core.Name "openGql.grammar.StringLength"
-type DatetimeValueExpression = ValueExpression
-_DatetimeValueExpression = Core.Name "openGql.grammar.DatetimeValueExpression"
-data DatetimeValueFunction =
-  DatetimeValueFunctionDateFunction DateFunction |
-  DatetimeValueFunctionTimeFunction TimeFunction |
-  DatetimeValueFunctionDatetimeFunction DatetimeFunction |
-  DatetimeValueFunctionLocaltimeFunction LocaltimeFunction |
-  DatetimeValueFunctionLocaldatetimeFunction LocaldatetimeFunction
-  deriving (Eq, Ord, Read, Show)
-_DatetimeValueFunction = Core.Name "openGql.grammar.DatetimeValueFunction"
-_DatetimeValueFunction_dateFunction = Core.Name "dateFunction"
-_DatetimeValueFunction_timeFunction = Core.Name "timeFunction"
-_DatetimeValueFunction_datetimeFunction = Core.Name "datetimeFunction"
-_DatetimeValueFunction_localtimeFunction = Core.Name "localtimeFunction"
-_DatetimeValueFunction_localdatetimeFunction = Core.Name "localdatetimeFunction"
-data DateFunction =
-  DateFunctionCurrentDate |
-  DateFunctionDateWithParams (Maybe DateFunctionParameters)
-  deriving (Eq, Ord, Read, Show)
-_DateFunction = Core.Name "openGql.grammar.DateFunction"
-_DateFunction_currentDate = Core.Name "currentDate"
-_DateFunction_dateWithParams = Core.Name "dateWithParams"
-data TimeFunction =
-  TimeFunctionCurrentTime |
-  TimeFunctionZonedTimeWithParams (Maybe TimeFunctionParameters)
-  deriving (Eq, Ord, Read, Show)
-_TimeFunction = Core.Name "openGql.grammar.TimeFunction"
-_TimeFunction_currentTime = Core.Name "currentTime"
-_TimeFunction_zonedTimeWithParams = Core.Name "zonedTimeWithParams"
-type LocaltimeFunction = (Maybe TimeFunctionParameters)
-_LocaltimeFunction = Core.Name "openGql.grammar.LocaltimeFunction"
-data DatetimeFunction =
-  DatetimeFunctionCurrentTimestamp |
-  DatetimeFunctionZonedDatetimeWithParams (Maybe DatetimeFunctionParameters)
-  deriving (Eq, Ord, Read, Show)
-_DatetimeFunction = Core.Name "openGql.grammar.DatetimeFunction"
-_DatetimeFunction_currentTimestamp = Core.Name "currentTimestamp"
-_DatetimeFunction_zonedDatetimeWithParams = Core.Name "zonedDatetimeWithParams"
-data LocaldatetimeFunction =
-  LocaldatetimeFunctionLocalTimestamp |
-  LocaldatetimeFunctionLocalDatetimeWithParams (Maybe DatetimeFunctionParameters)
-  deriving (Eq, Ord, Read, Show)
-_LocaldatetimeFunction = Core.Name "openGql.grammar.LocaldatetimeFunction"
-_LocaldatetimeFunction_localTimestamp = Core.Name "localTimestamp"
-_LocaldatetimeFunction_localDatetimeWithParams = Core.Name "localDatetimeWithParams"
-data DateFunctionParameters =
-  DateFunctionParametersDateString DateString |
-  DateFunctionParametersRecordConstructor RecordConstructor
-  deriving (Eq, Ord, Read, Show)
-_DateFunctionParameters = Core.Name "openGql.grammar.DateFunctionParameters"
-_DateFunctionParameters_dateString = Core.Name "dateString"
-_DateFunctionParameters_recordConstructor = Core.Name "recordConstructor"
-data TimeFunctionParameters =
-  TimeFunctionParametersTimeString TimeString |
-  TimeFunctionParametersRecordConstructor RecordConstructor
-  deriving (Eq, Ord, Read, Show)
-_TimeFunctionParameters = Core.Name "openGql.grammar.TimeFunctionParameters"
-_TimeFunctionParameters_timeString = Core.Name "timeString"
-_TimeFunctionParameters_recordConstructor = Core.Name "recordConstructor"
-data DatetimeFunctionParameters =
-  DatetimeFunctionParametersDatetimeString DatetimeString |
-  DatetimeFunctionParametersRecordConstructor RecordConstructor
-  deriving (Eq, Ord, Read, Show)
-_DatetimeFunctionParameters = Core.Name "openGql.grammar.DatetimeFunctionParameters"
-_DatetimeFunctionParameters_datetimeString = Core.Name "datetimeString"
-_DatetimeFunctionParameters_recordConstructor = Core.Name "recordConstructor"
-type DurationValueExpression = ValueExpression
-_DurationValueExpression = Core.Name "openGql.grammar.DurationValueExpression"
-data DatetimeSubtraction =
-  DatetimeSubtraction {
-    datetimeSubtractionParameters :: DatetimeSubtractionParameters,
-    datetimeSubtractionTemporalDurationQualifier :: (Maybe TemporalDurationQualifier)}
-  deriving (Eq, Ord, Read, Show)
-_DatetimeSubtraction = Core.Name "openGql.grammar.DatetimeSubtraction"
-_DatetimeSubtraction_parameters = Core.Name "parameters"
-_DatetimeSubtraction_temporalDurationQualifier = Core.Name "temporalDurationQualifier"
-data DatetimeSubtractionParameters =
-  DatetimeSubtractionParameters {
-    datetimeSubtractionParametersExpression1 :: DatetimeValueExpression1,
-    datetimeSubtractionParametersExpression2 :: DatetimeValueExpression2}
-  deriving (Eq, Ord, Read, Show)
-_DatetimeSubtractionParameters = Core.Name "openGql.grammar.DatetimeSubtractionParameters"
-_DatetimeSubtractionParameters_expression1 = Core.Name "expression1"
-_DatetimeSubtractionParameters_expression2 = Core.Name "expression2"
-type DatetimeValueExpression1 = DatetimeValueExpression
-_DatetimeValueExpression1 = Core.Name "openGql.grammar.DatetimeValueExpression1"
-type DatetimeValueExpression2 = DatetimeValueExpression
-_DatetimeValueExpression2 = Core.Name "openGql.grammar.DatetimeValueExpression2"
-data DurationValueFunction =
-  DurationValueFunctionDurationFunction DurationFunction |
-  DurationValueFunctionAbsoluteValue AbsoluteValueExpression
-  deriving (Eq, Ord, Read, Show)
-_DurationValueFunction = Core.Name "openGql.grammar.DurationValueFunction"
-_DurationValueFunction_durationFunction = Core.Name "durationFunction"
-_DurationValueFunction_absoluteValue = Core.Name "absoluteValue"
-type DurationFunction = DurationFunctionParameters
-_DurationFunction = Core.Name "openGql.grammar.DurationFunction"
-data DurationFunctionParameters =
-  DurationFunctionParametersDurationString DurationString |
-  DurationFunctionParametersRecordConstructor RecordConstructor
-  deriving (Eq, Ord, Read, Show)
-_DurationFunctionParameters = Core.Name "openGql.grammar.DurationFunctionParameters"
-_DurationFunctionParameters_durationString = Core.Name "durationString"
-_DurationFunctionParameters_recordConstructor = Core.Name "recordConstructor"
-type ObjectName = String
-_ObjectName = Core.Name "openGql.grammar.ObjectName"
-type ObjectNameOrBindingVariable = String
-_ObjectNameOrBindingVariable = Core.Name "openGql.grammar.ObjectNameOrBindingVariable"
-type DirectoryName = String
-_DirectoryName = Core.Name "openGql.grammar.DirectoryName"
-type SchemaName = String
-_SchemaName = Core.Name "openGql.grammar.SchemaName"
-type GraphName = String
-_GraphName = Core.Name "openGql.grammar.GraphName"
-type DelimitedGraphName = String
-_DelimitedGraphName = Core.Name "openGql.grammar.DelimitedGraphName"
-type GraphTypeName = String
-_GraphTypeName = Core.Name "openGql.grammar.GraphTypeName"
-type NodeTypeName = String
-_NodeTypeName = Core.Name "openGql.grammar.NodeTypeName"
-type EdgeTypeName = String
-_EdgeTypeName = Core.Name "openGql.grammar.EdgeTypeName"
-data BindingTableName =
-  BindingTableNameRegularIdentifier String |
-  BindingTableNameDelimitedBindingTableName DelimitedBindingTableName
-  deriving (Eq, Ord, Read, Show)
-_BindingTableName = Core.Name "openGql.grammar.BindingTableName"
-_BindingTableName_regularIdentifier = Core.Name "regularIdentifier"
-_BindingTableName_delimitedBindingTableName = Core.Name "delimitedBindingTableName"
-type DelimitedBindingTableName = String
-_DelimitedBindingTableName = Core.Name "openGql.grammar.DelimitedBindingTableName"
-type ProcedureName = String
-_ProcedureName = Core.Name "openGql.grammar.ProcedureName"
-type LabelName = String
-_LabelName = Core.Name "openGql.grammar.LabelName"
-type PropertyName = String
-_PropertyName = Core.Name "openGql.grammar.PropertyName"
-type FieldName = String
-_FieldName = Core.Name "openGql.grammar.FieldName"
-type ElementVariable = BindingVariable
-_ElementVariable = Core.Name "openGql.grammar.ElementVariable"
-type PathVariable = BindingVariable
-_PathVariable = Core.Name "openGql.grammar.PathVariable"
-type SubpathVariable = String
-_SubpathVariable = Core.Name "openGql.grammar.SubpathVariable"
-type BindingVariable = String
-_BindingVariable = Core.Name "openGql.grammar.BindingVariable"
-data UnsignedLiteral =
-  UnsignedLiteralNumeric UnsignedNumericLiteral |
-  UnsignedLiteralGeneral GeneralLiteral
-  deriving (Eq, Ord, Read, Show)
-_UnsignedLiteral = Core.Name "openGql.grammar.UnsignedLiteral"
-_UnsignedLiteral_numeric = Core.Name "numeric"
-_UnsignedLiteral_general = Core.Name "general"
-data GeneralLiteral =
-  GeneralLiteralBoolean BooleanLiteral |
-  GeneralLiteralCharacterString CharacterStringLiteral |
-  GeneralLiteralByteString ByteStringLiteral |
-  GeneralLiteralTemporal TemporalLiteral |
-  GeneralLiteralDuration DurationLiteral |
-  GeneralLiteralNullLiteral NullLiteral |
-  GeneralLiteralList ListLiteral |
-  GeneralLiteralRecord RecordLiteral
-  deriving (Eq, Ord, Read, Show)
-_GeneralLiteral = Core.Name "openGql.grammar.GeneralLiteral"
-_GeneralLiteral_boolean = Core.Name "boolean"
-_GeneralLiteral_characterString = Core.Name "characterString"
-_GeneralLiteral_byteString = Core.Name "byteString"
-_GeneralLiteral_temporal = Core.Name "temporal"
-_GeneralLiteral_duration = Core.Name "duration"
-_GeneralLiteral_nullLiteral = Core.Name "nullLiteral"
-_GeneralLiteral_list = Core.Name "list"
-_GeneralLiteral_record = Core.Name "record"
-data TemporalLiteral =
-  TemporalLiteralDate DateLiteral |
-  TemporalLiteralTime TimeLiteral |
-  TemporalLiteralDatetime DatetimeLiteral
-  deriving (Eq, Ord, Read, Show)
-_TemporalLiteral = Core.Name "openGql.grammar.TemporalLiteral"
-_TemporalLiteral_date = Core.Name "date"
-_TemporalLiteral_time = Core.Name "time"
-_TemporalLiteral_datetime = Core.Name "datetime"
-type DateLiteral = DateString
-_DateLiteral = Core.Name "openGql.grammar.DateLiteral"
-type TimeLiteral = TimeString
-_TimeLiteral = Core.Name "openGql.grammar.TimeLiteral"
-type DatetimeLiteral = DatetimeString
-_DatetimeLiteral = Core.Name "openGql.grammar.DatetimeLiteral"
-type ListLiteral = ListValueConstructorByEnumeration
-_ListLiteral = Core.Name "openGql.grammar.ListLiteral"
-type RecordLiteral = RecordConstructor
-_RecordLiteral = Core.Name "openGql.grammar.RecordLiteral"
-type Identifier = String
-_Identifier = Core.Name "openGql.grammar.Identifier"
-type RegularIdentifier = String
-_RegularIdentifier = Core.Name "openGql.grammar.RegularIdentifier"
-type TimeZoneString = CharacterStringLiteral
-_TimeZoneString = Core.Name "openGql.grammar.TimeZoneString"
-type CharacterStringLiteral = String
-_CharacterStringLiteral = Core.Name "openGql.grammar.CharacterStringLiteral"
-data UnsignedNumericLiteral =
-  UnsignedNumericLiteralExact ExactNumericLiteral |
-  UnsignedNumericLiteralApproximate ApproximateNumericLiteral
-  deriving (Eq, Ord, Read, Show)
-_UnsignedNumericLiteral = Core.Name "openGql.grammar.UnsignedNumericLiteral"
-_UnsignedNumericLiteral_exact = Core.Name "exact"
-_UnsignedNumericLiteral_approximate = Core.Name "approximate"
-data ExactNumericLiteral =
-  ExactNumericLiteralScientificWithSuffix String |
-  ExactNumericLiteralCommonWithSuffix String |
-  ExactNumericLiteralCommonWithoutSuffix String |
-  ExactNumericLiteralIntegerWithSuffix String |
-  ExactNumericLiteralUnsignedInteger UnsignedInteger
-  deriving (Eq, Ord, Read, Show)
-_ExactNumericLiteral = Core.Name "openGql.grammar.ExactNumericLiteral"
-_ExactNumericLiteral_scientificWithSuffix = Core.Name "scientificWithSuffix"
-_ExactNumericLiteral_commonWithSuffix = Core.Name "commonWithSuffix"
-_ExactNumericLiteral_commonWithoutSuffix = Core.Name "commonWithoutSuffix"
-_ExactNumericLiteral_integerWithSuffix = Core.Name "integerWithSuffix"
-_ExactNumericLiteral_unsignedInteger = Core.Name "unsignedInteger"
-data ApproximateNumericLiteral =
-  ApproximateNumericLiteralScientificWithSuffix String |
-  ApproximateNumericLiteralScientificWithoutSuffix String |
-  ApproximateNumericLiteralCommonWithSuffix String |
-  ApproximateNumericLiteralIntegerWithSuffix String
-  deriving (Eq, Ord, Read, Show)
-_ApproximateNumericLiteral = Core.Name "openGql.grammar.ApproximateNumericLiteral"
-_ApproximateNumericLiteral_scientificWithSuffix = Core.Name "scientificWithSuffix"
-_ApproximateNumericLiteral_scientificWithoutSuffix = Core.Name "scientificWithoutSuffix"
-_ApproximateNumericLiteral_commonWithSuffix = Core.Name "commonWithSuffix"
-_ApproximateNumericLiteral_integerWithSuffix = Core.Name "integerWithSuffix"
-data UnsignedInteger =
-  UnsignedIntegerDecimal String |
-  UnsignedIntegerHexadecimal String |
-  UnsignedIntegerOctal String |
-  UnsignedIntegerBinary String
-  deriving (Eq, Ord, Read, Show)
-_UnsignedInteger = Core.Name "openGql.grammar.UnsignedInteger"
-_UnsignedInteger_decimal = Core.Name "decimal"
-_UnsignedInteger_hexadecimal = Core.Name "hexadecimal"
-_UnsignedInteger_octal = Core.Name "octal"
-_UnsignedInteger_binary = Core.Name "binary"
-type UnsignedDecimalInteger = String
-_UnsignedDecimalInteger = Core.Name "openGql.grammar.UnsignedDecimalInteger"
-type NullLiteral = ()
-_NullLiteral = Core.Name "openGql.grammar.NullLiteral"
-type DateString = CharacterStringLiteral
-_DateString = Core.Name "openGql.grammar.DateString"
-type TimeString = CharacterStringLiteral
-_TimeString = Core.Name "openGql.grammar.TimeString"
-type DatetimeString = CharacterStringLiteral
-_DatetimeString = Core.Name "openGql.grammar.DatetimeString"
-type DurationLiteral = DurationString
-_DurationLiteral = Core.Name "openGql.grammar.DurationLiteral"
-type DurationString = CharacterStringLiteral
-_DurationString = Core.Name "openGql.grammar.DurationString"
-data NodeSynonym =
-  NodeSynonymNode |
-  NodeSynonymVertex
-  deriving (Eq, Ord, Read, Show)
-_NodeSynonym = Core.Name "openGql.grammar.NodeSynonym"
-_NodeSynonym_node = Core.Name "node"
-_NodeSynonym_vertex = Core.Name "vertex"
-data EdgesSynonym =
-  EdgesSynonymEdges |
-  EdgesSynonymRelationships
-  deriving (Eq, Ord, Read, Show)
-_EdgesSynonym = Core.Name "openGql.grammar.EdgesSynonym"
-_EdgesSynonym_edges = Core.Name "edges"
-_EdgesSynonym_relationships = Core.Name "relationships"
-data EdgeSynonym =
-  EdgeSynonymEdge |
-  EdgeSynonymRelationship
-  deriving (Eq, Ord, Read, Show)
-_EdgeSynonym = Core.Name "openGql.grammar.EdgeSynonym"
-_EdgeSynonym_edge = Core.Name "edge"
-_EdgeSynonym_relationship = Core.Name "relationship"
-data Implies =
-  ImpliesRightDoubleArrow |
-  ImpliesImplies
-  deriving (Eq, Ord, Read, Show)
-_Implies = Core.Name "openGql.grammar.Implies"
-_Implies_rightDoubleArrow = Core.Name "rightDoubleArrow"
-_Implies_implies = Core.Name "implies"
-type ParameterName = String
-_ParameterName = Core.Name "openGql.grammar.ParameterName"
-data BooleanLiteral =
-  BooleanLiteralTrue |
-  BooleanLiteralFalse |
-  BooleanLiteralUnknown
-  deriving (Eq, Ord, Read, Show)
-_BooleanLiteral = Core.Name "openGql.grammar.BooleanLiteral"
-_BooleanLiteral_true = Core.Name "true"
-_BooleanLiteral_false = Core.Name "false"
-_BooleanLiteral_unknown = Core.Name "unknown"
-type ByteStringLiteral = String
-_ByteStringLiteral = Core.Name "openGql.grammar.ByteStringLiteral"
+
+-- | A GQL model based on the OpenGQL ANTLR grammar, version 15b256b (2024-09-05), available at: https://github.com/opengql/grammar/blob/main/GQL.g4
+
+module OpenGql.Grammar where
+
+import qualified Hydra.Core as Core
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
+import qualified Data.Scientific as Sci
+
+-- | A GQL abbreviated edge pattern: one of a fixed set of alternatives
+data AbbreviatedEdgePattern =
+  AbbreviatedEdgePatternLeftArrow |
+  AbbreviatedEdgePatternTilde |
+  AbbreviatedEdgePatternRightArrow |
+  AbbreviatedEdgePatternLeftArrowTilde |
+  AbbreviatedEdgePatternTildeRightArrow |
+  AbbreviatedEdgePatternLeftMinusRight |
+  AbbreviatedEdgePatternMinusSign
+  deriving (Eq, Ord, Read, Show)
+
+_AbbreviatedEdgePattern = Core.Name "openGql.grammar.AbbreviatedEdgePattern"
+
+_AbbreviatedEdgePattern_leftArrow = Core.Name "leftArrow"
+
+_AbbreviatedEdgePattern_tilde = Core.Name "tilde"
+
+_AbbreviatedEdgePattern_rightArrow = Core.Name "rightArrow"
+
+_AbbreviatedEdgePattern_leftArrowTilde = Core.Name "leftArrowTilde"
+
+_AbbreviatedEdgePattern_tildeRightArrow = Core.Name "tildeRightArrow"
+
+_AbbreviatedEdgePattern_leftMinusRight = Core.Name "leftMinusRight"
+
+_AbbreviatedEdgePattern_minusSign = Core.Name "minusSign"
+
+-- | A GQL absolute catalog schema reference: one of several alternative forms
+data AbsoluteCatalogSchemaReference =
+  AbsoluteCatalogSchemaReferenceRoot |
+  AbsoluteCatalogSchemaReferenceDirectoryAndSchema AbsoluteDirectoryAndSchema
+  deriving (Eq, Ord, Read, Show)
+
+_AbsoluteCatalogSchemaReference = Core.Name "openGql.grammar.AbsoluteCatalogSchemaReference"
+
+_AbsoluteCatalogSchemaReference_root = Core.Name "root"
+
+_AbsoluteCatalogSchemaReference_directoryAndSchema = Core.Name "directoryAndSchema"
+
+-- | A GQL absolute directory and schema
+data AbsoluteDirectoryAndSchema =
+  AbsoluteDirectoryAndSchema {
+    absoluteDirectoryAndSchemaDirectoryPath :: AbsoluteDirectoryPath,
+    absoluteDirectoryAndSchemaSchemaName :: SchemaName}
+  deriving (Eq, Ord, Read, Show)
+
+_AbsoluteDirectoryAndSchema = Core.Name "openGql.grammar.AbsoluteDirectoryAndSchema"
+
+_AbsoluteDirectoryAndSchema_directoryPath = Core.Name "directoryPath"
+
+_AbsoluteDirectoryAndSchema_schemaName = Core.Name "schemaName"
+
+-- | An optional GQL absolute directory path
+type AbsoluteDirectoryPath = (Maybe SimpleDirectoryPath)
+
+_AbsoluteDirectoryPath = Core.Name "openGql.grammar.AbsoluteDirectoryPath"
+
+-- | A GQL absolute value expression, equivalent to a value expression
+type AbsoluteValueExpression = ValueExpression
+
+_AbsoluteValueExpression = Core.Name "openGql.grammar.AbsoluteValueExpression"
+
+-- | A GQL addition subtraction numeric value expression
+data AddSubNumericValueExpression =
+  AddSubNumericValueExpression {
+    addSubNumericValueExpressionLeft :: NumericValueExpression,
+    addSubNumericValueExpressionOperator :: AddSubtractOperator,
+    addSubNumericValueExpressionRight :: NumericValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_AddSubNumericValueExpression = Core.Name "openGql.grammar.AddSubNumericValueExpression"
+
+_AddSubNumericValueExpression_left = Core.Name "left"
+
+_AddSubNumericValueExpression_operator = Core.Name "operator"
+
+_AddSubNumericValueExpression_right = Core.Name "right"
+
+-- | A GQL addition subtract expression
+data AddSubtractExpr =
+  AddSubtractExpr {
+    addSubtractExprLeft :: ValueExpression,
+    addSubtractExprOperator :: AddSubtractOperator,
+    addSubtractExprRight :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_AddSubtractExpr = Core.Name "openGql.grammar.AddSubtractExpr"
+
+_AddSubtractExpr_left = Core.Name "left"
+
+_AddSubtractExpr_operator = Core.Name "operator"
+
+_AddSubtractExpr_right = Core.Name "right"
+
+-- | A GQL addition subtract operator: one of a fixed set of alternatives
+data AddSubtractOperator =
+  AddSubtractOperatorAdd |
+  AddSubtractOperatorSubtract
+  deriving (Eq, Ord, Read, Show)
+
+_AddSubtractOperator = Core.Name "openGql.grammar.AddSubtractOperator"
+
+_AddSubtractOperator_add = Core.Name "add"
+
+_AddSubtractOperator_subtract = Core.Name "subtract"
+
+-- | A GQL aggregate function: one of several alternative forms
+data AggregateFunction =
+  AggregateFunctionCountAll |
+  AggregateFunctionGeneralSetFunction GeneralSetFunction |
+  AggregateFunctionBinarySetFunction BinarySetFunction
+  deriving (Eq, Ord, Read, Show)
+
+_AggregateFunction = Core.Name "openGql.grammar.AggregateFunction"
+
+_AggregateFunction_countAll = Core.Name "countAll"
+
+_AggregateFunction_generalSetFunction = Core.Name "generalSetFunction"
+
+_AggregateFunction_binarySetFunction = Core.Name "binarySetFunction"
+
+-- | A GQL aggregating value expression, equivalent to a value expression
+type AggregatingValueExpression = ValueExpression
+
+_AggregatingValueExpression = Core.Name "openGql.grammar.AggregatingValueExpression"
+
+-- | A GQL all different predicate
+data AllDifferentPredicate =
+  AllDifferentPredicate {
+    allDifferentPredicateReferences :: [ElementVariableReference]}
+  deriving (Eq, Ord, Read, Show)
+
+_AllDifferentPredicate = Core.Name "openGql.grammar.AllDifferentPredicate"
+
+_AllDifferentPredicate_references = Core.Name "references"
+
+-- | A GQL all parameters or characteristics
+data AllParametersOrCharacteristics =
+  AllParametersOrCharacteristics {
+    allParametersOrCharacteristicsAll :: Bool,
+    allParametersOrCharacteristicsType :: ParametersOrCharacteristics}
+  deriving (Eq, Ord, Read, Show)
+
+_AllParametersOrCharacteristics = Core.Name "openGql.grammar.AllParametersOrCharacteristics"
+
+_AllParametersOrCharacteristics_all = Core.Name "all"
+
+_AllParametersOrCharacteristics_type = Core.Name "type"
+
+-- | A GQL all path search
+data AllPathSearch =
+  AllPathSearch {
+    allPathSearchMode :: (Maybe PathMode),
+    allPathSearchOrPaths :: (Maybe PathOrPaths)}
+  deriving (Eq, Ord, Read, Show)
+
+_AllPathSearch = Core.Name "openGql.grammar.AllPathSearch"
+
+_AllPathSearch_mode = Core.Name "mode"
+
+_AllPathSearch_orPaths = Core.Name "orPaths"
+
+-- | A GQL all shortest path search
+data AllShortestPathSearch =
+  AllShortestPathSearch {
+    allShortestPathSearchMode :: (Maybe PathMode),
+    allShortestPathSearchOrPaths :: (Maybe PathOrPaths)}
+  deriving (Eq, Ord, Read, Show)
+
+_AllShortestPathSearch = Core.Name "openGql.grammar.AllShortestPathSearch"
+
+_AllShortestPathSearch_mode = Core.Name "mode"
+
+_AllShortestPathSearch_orPaths = Core.Name "orPaths"
+
+-- | A GQL ambient linear data modifying statement: one of several alternative forms
+data AmbientLinearDataModifyingStatement =
+  AmbientLinearDataModifyingStatementSimple AmbientLinearDataModifyingStatementBody |
+  AmbientLinearDataModifyingStatementNested NestedDataModifyingProcedureSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_AmbientLinearDataModifyingStatement = Core.Name "openGql.grammar.AmbientLinearDataModifyingStatement"
+
+_AmbientLinearDataModifyingStatement_simple = Core.Name "simple"
+
+_AmbientLinearDataModifyingStatement_nested = Core.Name "nested"
+
+-- | A GQL ambient linear data modifying statement body
+data AmbientLinearDataModifyingStatementBody =
+  AmbientLinearDataModifyingStatementBody {
+    ambientLinearDataModifyingStatementBodySimpleAccess :: SimpleLinearDataAccessingStatement,
+    ambientLinearDataModifyingStatementBodyPrimitiveResult :: (Maybe PrimitiveResultStatement)}
+  deriving (Eq, Ord, Read, Show)
+
+_AmbientLinearDataModifyingStatementBody = Core.Name "openGql.grammar.AmbientLinearDataModifyingStatementBody"
+
+_AmbientLinearDataModifyingStatementBody_simpleAccess = Core.Name "simpleAccess"
+
+_AmbientLinearDataModifyingStatementBody_primitiveResult = Core.Name "primitiveResult"
+
+-- | A GQL ambient linear query statement: one of several alternative forms
+data AmbientLinearQueryStatement =
+  AmbientLinearQueryStatementSimple AmbientLinearQueryStatementSimpleAndPrimitiveResult |
+  AmbientLinearQueryStatementNested NestedQuerySpecification
+  deriving (Eq, Ord, Read, Show)
+
+_AmbientLinearQueryStatement = Core.Name "openGql.grammar.AmbientLinearQueryStatement"
+
+_AmbientLinearQueryStatement_simple = Core.Name "simple"
+
+_AmbientLinearQueryStatement_nested = Core.Name "nested"
+
+-- | A GQL ambient linear query statement simple and primitive result
+data AmbientLinearQueryStatementSimpleAndPrimitiveResult =
+  AmbientLinearQueryStatementSimpleAndPrimitiveResult {
+    ambientLinearQueryStatementSimpleAndPrimitiveResultSimple :: (Maybe SimpleLinearQueryStatement),
+    ambientLinearQueryStatementSimpleAndPrimitiveResultPrimitiveResult :: PrimitiveResultStatement}
+  deriving (Eq, Ord, Read, Show)
+
+_AmbientLinearQueryStatementSimpleAndPrimitiveResult =
+    Core.Name "openGql.grammar.AmbientLinearQueryStatementSimpleAndPrimitiveResult"
+
+_AmbientLinearQueryStatementSimpleAndPrimitiveResult_simple = Core.Name "simple"
+
+_AmbientLinearQueryStatementSimpleAndPrimitiveResult_primitiveResult = Core.Name "primitiveResult"
+
+-- | A GQL any path search
+data AnyPathSearch =
+  AnyPathSearch {
+    anyPathSearchNumberOfPaths :: (Maybe NumberOfPaths),
+    anyPathSearchMode :: (Maybe PathMode),
+    anyPathSearchOrPaths :: (Maybe PathOrPaths)}
+  deriving (Eq, Ord, Read, Show)
+
+_AnyPathSearch = Core.Name "openGql.grammar.AnyPathSearch"
+
+_AnyPathSearch_numberOfPaths = Core.Name "numberOfPaths"
+
+_AnyPathSearch_mode = Core.Name "mode"
+
+_AnyPathSearch_orPaths = Core.Name "orPaths"
+
+-- | A GQL any record type
+data AnyRecordType =
+  AnyRecordType {
+    anyRecordTypeAny :: Bool,
+    anyRecordTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_AnyRecordType = Core.Name "openGql.grammar.AnyRecordType"
+
+_AnyRecordType_any = Core.Name "any"
+
+_AnyRecordType_notNull = Core.Name "notNull"
+
+-- | A GQL any shortest path search
+data AnyShortestPathSearch =
+  AnyShortestPathSearch {
+    anyShortestPathSearchMode :: (Maybe PathMode),
+    anyShortestPathSearchOrPaths :: (Maybe PathOrPaths)}
+  deriving (Eq, Ord, Read, Show)
+
+_AnyShortestPathSearch = Core.Name "openGql.grammar.AnyShortestPathSearch"
+
+_AnyShortestPathSearch_mode = Core.Name "mode"
+
+_AnyShortestPathSearch_orPaths = Core.Name "orPaths"
+
+-- | A GQL approximate numeric literal: one of several alternative forms
+data ApproximateNumericLiteral =
+  ApproximateNumericLiteralScientificWithSuffix String |
+  ApproximateNumericLiteralScientificWithoutSuffix String |
+  ApproximateNumericLiteralCommonWithSuffix String |
+  ApproximateNumericLiteralIntegerWithSuffix String
+  deriving (Eq, Ord, Read, Show)
+
+_ApproximateNumericLiteral = Core.Name "openGql.grammar.ApproximateNumericLiteral"
+
+_ApproximateNumericLiteral_scientificWithSuffix = Core.Name "scientificWithSuffix"
+
+_ApproximateNumericLiteral_scientificWithoutSuffix = Core.Name "scientificWithoutSuffix"
+
+_ApproximateNumericLiteral_commonWithSuffix = Core.Name "commonWithSuffix"
+
+_ApproximateNumericLiteral_integerWithSuffix = Core.Name "integerWithSuffix"
+
+-- | A GQL approximate numeric type: one of several alternative forms
+data ApproximateNumericType =
+  ApproximateNumericTypeFloat16 Float16Type |
+  ApproximateNumericTypeFloat32 Float32Type |
+  ApproximateNumericTypeFloat64 Float64Type |
+  ApproximateNumericTypeFloat128 Float128Type |
+  ApproximateNumericTypeFloat256 Float256Type |
+  ApproximateNumericTypeFloatWithPrecision FloatTypeWithPrecision |
+  ApproximateNumericTypeReal RealType |
+  ApproximateNumericTypeDoubleWithPrecision DoubleTypeWithPrecision
+  deriving (Eq, Ord, Read, Show)
+
+_ApproximateNumericType = Core.Name "openGql.grammar.ApproximateNumericType"
+
+_ApproximateNumericType_float16 = Core.Name "float16"
+
+_ApproximateNumericType_float32 = Core.Name "float32"
+
+_ApproximateNumericType_float64 = Core.Name "float64"
+
+_ApproximateNumericType_float128 = Core.Name "float128"
+
+_ApproximateNumericType_float256 = Core.Name "float256"
+
+_ApproximateNumericType_floatWithPrecision = Core.Name "floatWithPrecision"
+
+_ApproximateNumericType_real = Core.Name "real"
+
+_ApproximateNumericType_doubleWithPrecision = Core.Name "doubleWithPrecision"
+
+-- | A GQL arc type pointing left, equivalent to a edge type filler
+type ArcTypePointingLeft = EdgeTypeFiller
+
+_ArcTypePointingLeft = Core.Name "openGql.grammar.ArcTypePointingLeft"
+
+-- | A GQL arc type pointing right, equivalent to a edge type filler
+type ArcTypePointingRight = EdgeTypeFiller
+
+_ArcTypePointingRight = Core.Name "openGql.grammar.ArcTypePointingRight"
+
+-- | A GQL arc type undirected, equivalent to a edge type filler
+type ArcTypeUndirected = EdgeTypeFiller
+
+_ArcTypeUndirected = Core.Name "openGql.grammar.ArcTypeUndirected"
+
+-- | A GQL at schema clause, equivalent to a schema reference
+type AtSchemaClause = SchemaReference
+
+_AtSchemaClause = Core.Name "openGql.grammar.AtSchemaClause"
+
+-- | A GQL big int type
+data BigIntType =
+  BigIntType {
+    bigIntTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_BigIntType = Core.Name "openGql.grammar.BigIntType"
+
+_BigIntType_notNull = Core.Name "notNull"
+
+-- | A GQL big integer type
+data BigIntegerType =
+  BigIntegerType {
+    bigIntegerTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_BigIntegerType = Core.Name "openGql.grammar.BigIntegerType"
+
+_BigIntegerType_notNull = Core.Name "notNull"
+
+-- | A GQL binary exact numeric type: one of several alternative forms
+data BinaryExactNumericType =
+  BinaryExactNumericTypeSigned SignedBinaryExactNumericType |
+  BinaryExactNumericTypeUnsigned UnsignedBinaryExactNumericType
+  deriving (Eq, Ord, Read, Show)
+
+_BinaryExactNumericType = Core.Name "openGql.grammar.BinaryExactNumericType"
+
+_BinaryExactNumericType_signed = Core.Name "signed"
+
+_BinaryExactNumericType_unsigned = Core.Name "unsigned"
+
+-- | A GQL binary set function
+data BinarySetFunction =
+  BinarySetFunction {
+    binarySetFunctionFunctionType :: BinarySetFunctionType,
+    binarySetFunctionDependentValue :: DependentValueExpression,
+    binarySetFunctionIndependentValue :: IndependentValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_BinarySetFunction = Core.Name "openGql.grammar.BinarySetFunction"
+
+_BinarySetFunction_functionType = Core.Name "functionType"
+
+_BinarySetFunction_dependentValue = Core.Name "dependentValue"
+
+_BinarySetFunction_independentValue = Core.Name "independentValue"
+
+-- | A GQL binary set function type: one of a fixed set of alternatives
+data BinarySetFunctionType =
+  BinarySetFunctionTypePercentileCont |
+  BinarySetFunctionTypePercentileDisc
+  deriving (Eq, Ord, Read, Show)
+
+_BinarySetFunctionType = Core.Name "openGql.grammar.BinarySetFunctionType"
+
+_BinarySetFunctionType_percentileCont = Core.Name "percentileCont"
+
+_BinarySetFunctionType_percentileDisc = Core.Name "percentileDisc"
+
+-- | A GQL binary type
+data BinaryType =
+  BinaryType {
+    binaryTypeFixedLength :: (Maybe FixedLength),
+    binaryTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_BinaryType = Core.Name "openGql.grammar.BinaryType"
+
+_BinaryType_fixedLength = Core.Name "fixedLength"
+
+_BinaryType_notNull = Core.Name "notNull"
+
+-- | A GQL binding equals value
+data BindingEqualsValue =
+  BindingEqualsValue {
+    bindingEqualsValueBinding :: BindingVariable,
+    bindingEqualsValueValue :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_BindingEqualsValue = Core.Name "openGql.grammar.BindingEqualsValue"
+
+_BindingEqualsValue_binding = Core.Name "binding"
+
+_BindingEqualsValue_value = Core.Name "value"
+
+-- | A GQL binding table expression: one of several alternative forms
+data BindingTableExpression =
+  BindingTableExpressionNested NestedBindingTableQuerySpecification |
+  BindingTableExpressionObject ObjectExpressionPrimary |
+  BindingTableExpressionTable BindingTableReference |
+  BindingTableExpressionName ObjectNameOrBindingVariable
+  deriving (Eq, Ord, Read, Show)
+
+_BindingTableExpression = Core.Name "openGql.grammar.BindingTableExpression"
+
+_BindingTableExpression_nested = Core.Name "nested"
+
+_BindingTableExpression_object = Core.Name "object"
+
+_BindingTableExpression_table = Core.Name "table"
+
+_BindingTableExpression_name = Core.Name "name"
+
+-- | A GQL binding table initializer
+type BindingTableInitializer = ()
+
+_BindingTableInitializer = Core.Name "openGql.grammar.BindingTableInitializer"
+
+-- | A GQL binding table name: one of several alternative forms
+data BindingTableName =
+  BindingTableNameRegularIdentifier String |
+  BindingTableNameDelimitedBindingTableName DelimitedBindingTableName
+  deriving (Eq, Ord, Read, Show)
+
+_BindingTableName = Core.Name "openGql.grammar.BindingTableName"
+
+_BindingTableName_regularIdentifier = Core.Name "regularIdentifier"
+
+_BindingTableName_delimitedBindingTableName = Core.Name "delimitedBindingTableName"
+
+-- | A GQL binding table reference: one of several alternative forms
+data BindingTableReference =
+  BindingTableReferenceParentAndTableName ParentAndTableName |
+  BindingTableReferenceDelimitedBindingTableName DelimitedBindingTableName |
+  BindingTableReferenceParameterSpecification ReferenceParameterSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_BindingTableReference = Core.Name "openGql.grammar.BindingTableReference"
+
+_BindingTableReference_parentAndTableName = Core.Name "parentAndTableName"
+
+_BindingTableReference_delimitedBindingTableName = Core.Name "delimitedBindingTableName"
+
+_BindingTableReference_parameterSpecification = Core.Name "parameterSpecification"
+
+-- | A GQL binding table reference value type
+data BindingTableReferenceValueType =
+  BindingTableReferenceValueType {
+    bindingTableReferenceValueTypeBindingTableType :: BindingTableType,
+    bindingTableReferenceValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_BindingTableReferenceValueType = Core.Name "openGql.grammar.BindingTableReferenceValueType"
+
+_BindingTableReferenceValueType_bindingTableType = Core.Name "bindingTableType"
+
+_BindingTableReferenceValueType_notNull = Core.Name "notNull"
+
+-- | A GQL binding table type
+data BindingTableType =
+  BindingTableType {
+    bindingTableTypeBinding :: Bool,
+    bindingTableTypeFieldTypes :: FieldTypesSpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_BindingTableType = Core.Name "openGql.grammar.BindingTableType"
+
+_BindingTableType_binding = Core.Name "binding"
+
+_BindingTableType_fieldTypes = Core.Name "fieldTypes"
+
+-- | A GQL binding table variable definition
+data BindingTableVariableDefinition =
+  BindingTableVariableDefinition {
+    bindingTableVariableDefinitionBinding :: Bool,
+    bindingTableVariableDefinitionVariable :: BindingVariable,
+    bindingTableVariableDefinitionInitializer :: OptTypedBindingTableInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_BindingTableVariableDefinition = Core.Name "openGql.grammar.BindingTableVariableDefinition"
+
+_BindingTableVariableDefinition_binding = Core.Name "binding"
+
+_BindingTableVariableDefinition_variable = Core.Name "variable"
+
+_BindingTableVariableDefinition_initializer = Core.Name "initializer"
+
+-- | A GQL binding variable
+type BindingVariable = String
+
+_BindingVariable = Core.Name "openGql.grammar.BindingVariable"
+
+-- | A GQL binding variable definition: one of several alternative forms
+data BindingVariableDefinition =
+  BindingVariableDefinitionGraph GraphVariableDefinition |
+  BindingVariableDefinitionTable BindingTableVariableDefinition |
+  BindingVariableDefinitionValue ValueVariableDefinition
+  deriving (Eq, Ord, Read, Show)
+
+_BindingVariableDefinition = Core.Name "openGql.grammar.BindingVariableDefinition"
+
+_BindingVariableDefinition_graph = Core.Name "graph"
+
+_BindingVariableDefinition_table = Core.Name "table"
+
+_BindingVariableDefinition_value = Core.Name "value"
+
+-- | A list of GQL binding variable definition block elements
+type BindingVariableDefinitionBlock = [BindingVariableDefinition]
+
+_BindingVariableDefinitionBlock = Core.Name "openGql.grammar.BindingVariableDefinitionBlock"
+
+-- | A GQL binding variable reference, equivalent to a binding variable
+type BindingVariableReference = BindingVariable
+
+_BindingVariableReference = Core.Name "openGql.grammar.BindingVariableReference"
+
+-- | A list of GQL binding variable reference list elements
+type BindingVariableReferenceList = [BindingVariableReference]
+
+_BindingVariableReferenceList = Core.Name "openGql.grammar.BindingVariableReferenceList"
+
+-- | A GQL boolean literal: one of a fixed set of alternatives
+data BooleanLiteral =
+  BooleanLiteralTrue |
+  BooleanLiteralFalse |
+  BooleanLiteralUnknown
+  deriving (Eq, Ord, Read, Show)
+
+_BooleanLiteral = Core.Name "openGql.grammar.BooleanLiteral"
+
+_BooleanLiteral_true = Core.Name "true"
+
+_BooleanLiteral_false = Core.Name "false"
+
+_BooleanLiteral_unknown = Core.Name "unknown"
+
+-- | A GQL boolean type
+data BooleanType =
+  BooleanType {
+    booleanTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_BooleanType = Core.Name "openGql.grammar.BooleanType"
+
+_BooleanType_notNull = Core.Name "notNull"
+
+-- | A GQL boolean value expression, equivalent to a value expression
+type BooleanValueExpression = ValueExpression
+
+_BooleanValueExpression = Core.Name "openGql.grammar.BooleanValueExpression"
+
+-- | A GQL byte length expression, equivalent to a byte string value expression
+type ByteLengthExpression = ByteStringValueExpression
+
+_ByteLengthExpression = Core.Name "openGql.grammar.ByteLengthExpression"
+
+-- | A GQL byte string literal
+type ByteStringLiteral = String
+
+_ByteStringLiteral = Core.Name "openGql.grammar.ByteStringLiteral"
+
+-- | A GQL byte string type: one of several alternative forms
+data ByteStringType =
+  ByteStringTypeBytesType BytesType |
+  ByteStringTypeBinaryType BinaryType |
+  ByteStringTypeVarbinaryType VarbinaryType
+  deriving (Eq, Ord, Read, Show)
+
+_ByteStringType = Core.Name "openGql.grammar.ByteStringType"
+
+_ByteStringType_bytesType = Core.Name "bytesType"
+
+_ByteStringType_binaryType = Core.Name "binaryType"
+
+_ByteStringType_varbinaryType = Core.Name "varbinaryType"
+
+-- | A GQL byte string value expression, equivalent to a value expression
+type ByteStringValueExpression = ValueExpression
+
+_ByteStringValueExpression = Core.Name "openGql.grammar.ByteStringValueExpression"
+
+-- | A GQL bytes type
+data BytesType =
+  BytesType {
+    bytesTypeMinLength :: (Maybe MinLength),
+    bytesTypeMaxLength :: (Maybe MaxLength),
+    bytesTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_BytesType = Core.Name "openGql.grammar.BytesType"
+
+_BytesType_minLength = Core.Name "minLength"
+
+_BytesType_maxLength = Core.Name "maxLength"
+
+_BytesType_notNull = Core.Name "notNull"
+
+-- | A GQL call catalog modifying procedure statement, equivalent to a call procedure statement
+type CallCatalogModifyingProcedureStatement = CallProcedureStatement
+
+_CallCatalogModifyingProcedureStatement = Core.Name "openGql.grammar.CallCatalogModifyingProcedureStatement"
+
+-- | A GQL call data modifying procedure statement, equivalent to a call procedure statement
+type CallDataModifyingProcedureStatement = CallProcedureStatement
+
+_CallDataModifyingProcedureStatement = Core.Name "openGql.grammar.CallDataModifyingProcedureStatement"
+
+-- | A GQL call procedure statement
+data CallProcedureStatement =
+  CallProcedureStatement {
+    callProcedureStatementOptional :: Bool,
+    callProcedureStatementCall :: ProcedureCall}
+  deriving (Eq, Ord, Read, Show)
+
+_CallProcedureStatement = Core.Name "openGql.grammar.CallProcedureStatement"
+
+_CallProcedureStatement_optional = Core.Name "optional"
+
+_CallProcedureStatement_call = Core.Name "call"
+
+-- | A GQL call query statement, equivalent to a call procedure statement
+type CallQueryStatement = CallProcedureStatement
+
+_CallQueryStatement = Core.Name "openGql.grammar.CallQueryStatement"
+
+-- | A GQL cardinality argument expression, equivalent to a value expression
+type CardinalityArgumentExpression = ValueExpression
+
+_CardinalityArgumentExpression = Core.Name "openGql.grammar.CardinalityArgumentExpression"
+
+-- | A GQL cardinality expression: one of several alternative forms
+data CardinalityExpression =
+  CardinalityExpressionCardinality CardinalityArgumentExpression |
+  CardinalityExpressionSize ListValueExpression
+  deriving (Eq, Ord, Read, Show)
+
+_CardinalityExpression = Core.Name "openGql.grammar.CardinalityExpression"
+
+_CardinalityExpression_cardinality = Core.Name "cardinality"
+
+_CardinalityExpression_size = Core.Name "size"
+
+-- | A GQL case: one of a fixed set of alternatives
+data Case =
+  CaseUpper |
+  CaseLower
+  deriving (Eq, Ord, Read, Show)
+
+_Case = Core.Name "openGql.grammar.Case"
+
+_Case_upper = Core.Name "upper"
+
+_Case_lower = Core.Name "lower"
+
+-- | A GQL case abbreviation: one of several alternative forms
+data CaseAbbreviation =
+  CaseAbbreviationNullIf NullIfAbbreviation |
+  CaseAbbreviationCoalesce [ValueExpression]
+  deriving (Eq, Ord, Read, Show)
+
+_CaseAbbreviation = Core.Name "openGql.grammar.CaseAbbreviation"
+
+_CaseAbbreviation_nullIf = Core.Name "nullIf"
+
+_CaseAbbreviation_coalesce = Core.Name "coalesce"
+
+-- | A GQL case expression: one of several alternative forms
+data CaseExpression =
+  CaseExpressionAbbreviation CaseAbbreviation |
+  CaseExpressionSpecification CaseSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_CaseExpression = Core.Name "openGql.grammar.CaseExpression"
+
+_CaseExpression_abbreviation = Core.Name "abbreviation"
+
+_CaseExpression_specification = Core.Name "specification"
+
+-- | A GQL case operand: one of several alternative forms
+data CaseOperand =
+  CaseOperandValueExpression NonParenthesizedPrimaryValueExpression |
+  CaseOperandElementReference ElementVariableReference
+  deriving (Eq, Ord, Read, Show)
+
+_CaseOperand = Core.Name "openGql.grammar.CaseOperand"
+
+_CaseOperand_valueExpression = Core.Name "valueExpression"
+
+_CaseOperand_elementReference = Core.Name "elementReference"
+
+-- | A GQL case specification: one of several alternative forms
+data CaseSpecification =
+  CaseSpecificationSimple SimpleCase |
+  CaseSpecificationSearched SearchedCase
+  deriving (Eq, Ord, Read, Show)
+
+_CaseSpecification = Core.Name "openGql.grammar.CaseSpecification"
+
+_CaseSpecification_simple = Core.Name "simple"
+
+_CaseSpecification_searched = Core.Name "searched"
+
+-- | A GQL cast operand: one of several alternative forms
+data CastOperand =
+  CastOperandValueExpression ValueExpression |
+  CastOperandNullLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_CastOperand = Core.Name "openGql.grammar.CastOperand"
+
+_CastOperand_valueExpression = Core.Name "valueExpression"
+
+_CastOperand_nullLiteral = Core.Name "nullLiteral"
+
+-- | A GQL cast specification
+data CastSpecification =
+  CastSpecification {
+    castSpecificationOperand :: CastOperand,
+    castSpecificationTarget :: CastTarget}
+  deriving (Eq, Ord, Read, Show)
+
+_CastSpecification = Core.Name "openGql.grammar.CastSpecification"
+
+_CastSpecification_operand = Core.Name "operand"
+
+_CastSpecification_target = Core.Name "target"
+
+-- | A GQL cast target, equivalent to a value type
+type CastTarget = ValueType
+
+_CastTarget = Core.Name "openGql.grammar.CastTarget"
+
+-- | A GQL catalog graph parent and name
+data CatalogGraphParentAndName =
+  CatalogGraphParentAndName {
+    catalogGraphParentAndNameParentReference :: (Maybe CatalogObjectParentReference),
+    catalogGraphParentAndNameGraphName :: GraphName}
+  deriving (Eq, Ord, Read, Show)
+
+_CatalogGraphParentAndName = Core.Name "openGql.grammar.CatalogGraphParentAndName"
+
+_CatalogGraphParentAndName_parentReference = Core.Name "parentReference"
+
+_CatalogGraphParentAndName_graphName = Core.Name "graphName"
+
+-- | A GQL catalog graph type parent and name
+data CatalogGraphTypeParentAndName =
+  CatalogGraphTypeParentAndName {
+    catalogGraphTypeParentAndNameParentReference :: (Maybe CatalogObjectParentReference),
+    catalogGraphTypeParentAndNameGraphTypeName :: GraphTypeName}
+  deriving (Eq, Ord, Read, Show)
+
+_CatalogGraphTypeParentAndName = Core.Name "openGql.grammar.CatalogGraphTypeParentAndName"
+
+_CatalogGraphTypeParentAndName_parentReference = Core.Name "parentReference"
+
+_CatalogGraphTypeParentAndName_graphTypeName = Core.Name "graphTypeName"
+
+-- | A GQL catalog object parent reference: one of several alternative forms
+data CatalogObjectParentReference =
+  CatalogObjectParentReferenceSchemaAndObjects SchemaAndObjects |
+  CatalogObjectParentReferenceObjectsOnly [ObjectName]
+  deriving (Eq, Ord, Read, Show)
+
+_CatalogObjectParentReference = Core.Name "openGql.grammar.CatalogObjectParentReference"
+
+_CatalogObjectParentReference_schemaAndObjects = Core.Name "schemaAndObjects"
+
+_CatalogObjectParentReference_objectsOnly = Core.Name "objectsOnly"
+
+-- | A GQL catalog procedure parent and name
+data CatalogProcedureParentAndName =
+  CatalogProcedureParentAndName {
+    catalogProcedureParentAndNameParentReference :: (Maybe CatalogObjectParentReference),
+    catalogProcedureParentAndNameProcedureName :: ProcedureName}
+  deriving (Eq, Ord, Read, Show)
+
+_CatalogProcedureParentAndName = Core.Name "openGql.grammar.CatalogProcedureParentAndName"
+
+_CatalogProcedureParentAndName_parentReference = Core.Name "parentReference"
+
+_CatalogProcedureParentAndName_procedureName = Core.Name "procedureName"
+
+-- | A GQL catalog schema parent and name, equivalent to a absolute directory and schema
+type CatalogSchemaParentAndName = AbsoluteDirectoryAndSchema
+
+_CatalogSchemaParentAndName = Core.Name "openGql.grammar.CatalogSchemaParentAndName"
+
+-- | A GQL ceiling function, equivalent to a numeric value expression
+type CeilingFunction = NumericValueExpression
+
+_CeilingFunction = Core.Name "openGql.grammar.CeilingFunction"
+
+-- | A GQL char length expression, equivalent to a character string value expression
+type CharLengthExpression = CharacterStringValueExpression
+
+_CharLengthExpression = Core.Name "openGql.grammar.CharLengthExpression"
+
+-- | A GQL char type
+data CharType =
+  CharType {
+    charTypeFixedLength :: (Maybe FixedLength),
+    charTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_CharType = Core.Name "openGql.grammar.CharType"
+
+_CharType_fixedLength = Core.Name "fixedLength"
+
+_CharType_notNull = Core.Name "notNull"
+
+-- | A GQL character or byte string function: one of several alternative forms
+data CharacterOrByteStringFunction =
+  CharacterOrByteStringFunctionSub SubCharacterOrByteString |
+  CharacterOrByteStringFunctionTrimSingle TrimSingleCharacterOrByteString |
+  CharacterOrByteStringFunctionFold FoldCharacterString |
+  CharacterOrByteStringFunctionTrimMultiCharacter TrimMultiCharacterCharacterString |
+  CharacterOrByteStringFunctionNormalize NormalizeCharacterString
+  deriving (Eq, Ord, Read, Show)
+
+_CharacterOrByteStringFunction = Core.Name "openGql.grammar.CharacterOrByteStringFunction"
+
+_CharacterOrByteStringFunction_sub = Core.Name "sub"
+
+_CharacterOrByteStringFunction_trimSingle = Core.Name "trimSingle"
+
+_CharacterOrByteStringFunction_fold = Core.Name "fold"
+
+_CharacterOrByteStringFunction_trimMultiCharacter = Core.Name "trimMultiCharacter"
+
+_CharacterOrByteStringFunction_normalize = Core.Name "normalize"
+
+-- | A GQL character string literal
+type CharacterStringLiteral = String
+
+_CharacterStringLiteral = Core.Name "openGql.grammar.CharacterStringLiteral"
+
+-- | A GQL character string type: one of several alternative forms
+data CharacterStringType =
+  CharacterStringTypeStringType StringType |
+  CharacterStringTypeCharType CharType |
+  CharacterStringTypeVarcharType VarcharType
+  deriving (Eq, Ord, Read, Show)
+
+_CharacterStringType = Core.Name "openGql.grammar.CharacterStringType"
+
+_CharacterStringType_stringType = Core.Name "stringType"
+
+_CharacterStringType_charType = Core.Name "charType"
+
+_CharacterStringType_varcharType = Core.Name "varcharType"
+
+-- | A GQL character string value expression, equivalent to a value expression
+type CharacterStringValueExpression = ValueExpression
+
+_CharacterStringValueExpression = Core.Name "openGql.grammar.CharacterStringValueExpression"
+
+-- | A GQL closed dynamic union type alt1
+data ClosedDynamicUnionTypeAlt1 =
+  ClosedDynamicUnionTypeAlt1 {
+    closedDynamicUnionTypeAlt1AnyValue :: (Maybe Bool),
+    closedDynamicUnionTypeAlt1ValueTypes :: [ValueType]}
+  deriving (Eq, Ord, Read, Show)
+
+_ClosedDynamicUnionTypeAlt1 = Core.Name "openGql.grammar.ClosedDynamicUnionTypeAlt1"
+
+_ClosedDynamicUnionTypeAlt1_anyValue = Core.Name "anyValue"
+
+_ClosedDynamicUnionTypeAlt1_valueTypes = Core.Name "valueTypes"
+
+-- | A GQL closed dynamic union type alt2
+data ClosedDynamicUnionTypeAlt2 =
+  ClosedDynamicUnionTypeAlt2 {
+    closedDynamicUnionTypeAlt2ValueTypes :: [ValueType]}
+  deriving (Eq, Ord, Read, Show)
+
+_ClosedDynamicUnionTypeAlt2 = Core.Name "openGql.grammar.ClosedDynamicUnionTypeAlt2"
+
+_ClosedDynamicUnionTypeAlt2_valueTypes = Core.Name "valueTypes"
+
+-- | A GQL closed edge reference value type
+data ClosedEdgeReferenceValueType =
+  ClosedEdgeReferenceValueType {
+    closedEdgeReferenceValueTypeEdgeTypeSpec :: EdgeTypeSpecification,
+    closedEdgeReferenceValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ClosedEdgeReferenceValueType = Core.Name "openGql.grammar.ClosedEdgeReferenceValueType"
+
+_ClosedEdgeReferenceValueType_edgeTypeSpec = Core.Name "edgeTypeSpec"
+
+_ClosedEdgeReferenceValueType_notNull = Core.Name "notNull"
+
+-- | A GQL closed graph reference value type
+data ClosedGraphReferenceValueType =
+  ClosedGraphReferenceValueType {
+    closedGraphReferenceValueTypeProperty :: Bool,
+    closedGraphReferenceValueTypeNestedSpec :: NestedGraphTypeSpecification,
+    closedGraphReferenceValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ClosedGraphReferenceValueType = Core.Name "openGql.grammar.ClosedGraphReferenceValueType"
+
+_ClosedGraphReferenceValueType_property = Core.Name "property"
+
+_ClosedGraphReferenceValueType_nestedSpec = Core.Name "nestedSpec"
+
+_ClosedGraphReferenceValueType_notNull = Core.Name "notNull"
+
+-- | A GQL closed node reference value type
+data ClosedNodeReferenceValueType =
+  ClosedNodeReferenceValueType {
+    closedNodeReferenceValueTypeNodeTypeSpec :: NodeTypeSpecification,
+    closedNodeReferenceValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ClosedNodeReferenceValueType = Core.Name "openGql.grammar.ClosedNodeReferenceValueType"
+
+_ClosedNodeReferenceValueType_nodeTypeSpec = Core.Name "nodeTypeSpec"
+
+_ClosedNodeReferenceValueType_notNull = Core.Name "notNull"
+
+-- | A GQL commit command
+type CommitCommand = ()
+
+_CommitCommand = Core.Name "openGql.grammar.CommitCommand"
+
+-- | A GQL common logarithm, equivalent to a numeric value expression
+type CommonLogarithm = NumericValueExpression
+
+_CommonLogarithm = Core.Name "openGql.grammar.CommonLogarithm"
+
+-- | A GQL comp op: one of a fixed set of alternatives
+data CompOp =
+  CompOpEquals |
+  CompOpNotEquals |
+  CompOpLessThan |
+  CompOpGreaterThan |
+  CompOpLessThanOrEquals |
+  CompOpGreaterThanOrEquals
+  deriving (Eq, Ord, Read, Show)
+
+_CompOp = Core.Name "openGql.grammar.CompOp"
+
+_CompOp_equals = Core.Name "equals"
+
+_CompOp_notEquals = Core.Name "notEquals"
+
+_CompOp_lessThan = Core.Name "lessThan"
+
+_CompOp_greaterThan = Core.Name "greaterThan"
+
+_CompOp_lessThanOrEquals = Core.Name "lessThanOrEquals"
+
+_CompOp_greaterThanOrEquals = Core.Name "greaterThanOrEquals"
+
+-- | A GQL comparison expression
+data ComparisonExpr =
+  ComparisonExpr {
+    comparisonExprValueExpression :: ValueExpression,
+    comparisonExprComparison :: ComparisonPredicatePart2}
+  deriving (Eq, Ord, Read, Show)
+
+_ComparisonExpr = Core.Name "openGql.grammar.ComparisonExpr"
+
+_ComparisonExpr_valueExpression = Core.Name "valueExpression"
+
+_ComparisonExpr_comparison = Core.Name "comparison"
+
+-- | A GQL comparison predicate part2
+data ComparisonPredicatePart2 =
+  ComparisonPredicatePart2 {
+    comparisonPredicatePart2CompOp :: CompOp,
+    comparisonPredicatePart2ValueExpression :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ComparisonPredicatePart2 = Core.Name "openGql.grammar.ComparisonPredicatePart2"
+
+_ComparisonPredicatePart2_compOp = Core.Name "compOp"
+
+_ComparisonPredicatePart2_valueExpression = Core.Name "valueExpression"
+
+-- | A GQL composite query expression: one of several alternative forms
+data CompositeQueryExpression =
+  CompositeQueryExpressionSimple CompositeQueryExpressionConjunction |
+  CompositeQueryExpressionPrimary CompositeQueryPrimary
+  deriving (Eq, Ord, Read, Show)
+
+_CompositeQueryExpression = Core.Name "openGql.grammar.CompositeQueryExpression"
+
+_CompositeQueryExpression_simple = Core.Name "simple"
+
+_CompositeQueryExpression_primary = Core.Name "primary"
+
+-- | A GQL composite query expression conjunction
+data CompositeQueryExpressionConjunction =
+  CompositeQueryExpressionConjunction {
+    compositeQueryExpressionConjunctionLeft :: CompositeQueryExpression,
+    compositeQueryExpressionConjunctionConjunction :: QueryConjunction,
+    compositeQueryExpressionConjunctionRight :: CompositeQueryPrimary}
+  deriving (Eq, Ord, Read, Show)
+
+_CompositeQueryExpressionConjunction = Core.Name "openGql.grammar.CompositeQueryExpressionConjunction"
+
+_CompositeQueryExpressionConjunction_left = Core.Name "left"
+
+_CompositeQueryExpressionConjunction_conjunction = Core.Name "conjunction"
+
+_CompositeQueryExpressionConjunction_right = Core.Name "right"
+
+-- | A GQL composite query primary, equivalent to a linear query statement
+type CompositeQueryPrimary = LinearQueryStatement
+
+_CompositeQueryPrimary = Core.Name "openGql.grammar.CompositeQueryPrimary"
+
+-- | A GQL composite query statement, equivalent to a composite query expression
+type CompositeQueryStatement = CompositeQueryExpression
+
+_CompositeQueryStatement = Core.Name "openGql.grammar.CompositeQueryStatement"
+
+-- | A GQL concatenation expression
+data ConcatenationExpr =
+  ConcatenationExpr {
+    concatenationExprLeft :: ValueExpression,
+    concatenationExprRight :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ConcatenationExpr = Core.Name "openGql.grammar.ConcatenationExpr"
+
+_ConcatenationExpr_left = Core.Name "left"
+
+_ConcatenationExpr_right = Core.Name "right"
+
+-- | A GQL conjunction label expression
+data ConjunctionLabelExpression =
+  ConjunctionLabelExpression {
+    conjunctionLabelExpressionLeft :: LabelExpression,
+    conjunctionLabelExpressionRight :: LabelExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ConjunctionLabelExpression = Core.Name "openGql.grammar.ConjunctionLabelExpression"
+
+_ConjunctionLabelExpression_left = Core.Name "left"
+
+_ConjunctionLabelExpression_right = Core.Name "right"
+
+-- | A GQL conjunctive expression
+data ConjunctiveExpr =
+  ConjunctiveExpr {
+    conjunctiveExprLeft :: ValueExpression,
+    conjunctiveExprRight :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ConjunctiveExpr = Core.Name "openGql.grammar.ConjunctiveExpr"
+
+_ConjunctiveExpr_left = Core.Name "left"
+
+_ConjunctiveExpr_right = Core.Name "right"
+
+-- | A GQL connector pointing right: one of a fixed set of alternatives
+data ConnectorPointingRight =
+  ConnectorPointingRightTo |
+  ConnectorPointingRightRightArrow
+  deriving (Eq, Ord, Read, Show)
+
+_ConnectorPointingRight = Core.Name "openGql.grammar.ConnectorPointingRight"
+
+_ConnectorPointingRight_to = Core.Name "to"
+
+_ConnectorPointingRight_rightArrow = Core.Name "rightArrow"
+
+-- | A GQL connector undirected: one of a fixed set of alternatives
+data ConnectorUndirected =
+  ConnectorUndirectedTo |
+  ConnectorUndirectedTilde
+  deriving (Eq, Ord, Read, Show)
+
+_ConnectorUndirected = Core.Name "openGql.grammar.ConnectorUndirected"
+
+_ConnectorUndirected_to = Core.Name "to"
+
+_ConnectorUndirected_tilde = Core.Name "tilde"
+
+-- | A GQL copy of graph type, equivalent to a graph type reference
+type CopyOfGraphType = GraphTypeReference
+
+_CopyOfGraphType = Core.Name "openGql.grammar.CopyOfGraphType"
+
+-- | A GQL counted shortest group search
+data CountedShortestGroupSearch =
+  CountedShortestGroupSearch {
+    countedShortestGroupSearchNumberOfGroups :: (Maybe NumberOfGroups),
+    countedShortestGroupSearchMode :: (Maybe PathMode),
+    countedShortestGroupSearchOrPaths :: (Maybe PathOrPaths),
+    countedShortestGroupSearchGroups :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_CountedShortestGroupSearch = Core.Name "openGql.grammar.CountedShortestGroupSearch"
+
+_CountedShortestGroupSearch_numberOfGroups = Core.Name "numberOfGroups"
+
+_CountedShortestGroupSearch_mode = Core.Name "mode"
+
+_CountedShortestGroupSearch_orPaths = Core.Name "orPaths"
+
+_CountedShortestGroupSearch_groups = Core.Name "groups"
+
+-- | A GQL counted shortest path search
+data CountedShortestPathSearch =
+  CountedShortestPathSearch {
+    countedShortestPathSearchNumberOfPaths :: NumberOfPaths,
+    countedShortestPathSearchMode :: (Maybe PathMode),
+    countedShortestPathSearchOrPaths :: (Maybe PathOrPaths)}
+  deriving (Eq, Ord, Read, Show)
+
+_CountedShortestPathSearch = Core.Name "openGql.grammar.CountedShortestPathSearch"
+
+_CountedShortestPathSearch_numberOfPaths = Core.Name "numberOfPaths"
+
+_CountedShortestPathSearch_mode = Core.Name "mode"
+
+_CountedShortestPathSearch_orPaths = Core.Name "orPaths"
+
+-- | A GQL create graph option: one of several alternative forms
+data CreateGraphOption =
+  CreateGraphOptionGraphIfNotExists Bool |
+  CreateGraphOptionOrReplace
+  deriving (Eq, Ord, Read, Show)
+
+_CreateGraphOption = Core.Name "openGql.grammar.CreateGraphOption"
+
+_CreateGraphOption_graphIfNotExists = Core.Name "graphIfNotExists"
+
+_CreateGraphOption_orReplace = Core.Name "orReplace"
+
+-- | A GQL create graph statement
+data CreateGraphStatement =
+  CreateGraphStatement {
+    createGraphStatementCreateOption :: CreateGraphOption,
+    createGraphStatementParentAndName :: CatalogGraphParentAndName,
+    createGraphStatementType :: GraphTypeOption,
+    createGraphStatementSource :: (Maybe GraphSource)}
+  deriving (Eq, Ord, Read, Show)
+
+_CreateGraphStatement = Core.Name "openGql.grammar.CreateGraphStatement"
+
+_CreateGraphStatement_createOption = Core.Name "createOption"
+
+_CreateGraphStatement_parentAndName = Core.Name "parentAndName"
+
+_CreateGraphStatement_type = Core.Name "type"
+
+_CreateGraphStatement_source = Core.Name "source"
+
+-- | A GQL create graph type option: one of several alternative forms
+data CreateGraphTypeOption =
+  CreateGraphTypeOptionTypeIfNotExists Bool |
+  CreateGraphTypeOptionOrReplace
+  deriving (Eq, Ord, Read, Show)
+
+_CreateGraphTypeOption = Core.Name "openGql.grammar.CreateGraphTypeOption"
+
+_CreateGraphTypeOption_typeIfNotExists = Core.Name "typeIfNotExists"
+
+_CreateGraphTypeOption_orReplace = Core.Name "orReplace"
+
+-- | A GQL create graph type statement
+data CreateGraphTypeStatement =
+  CreateGraphTypeStatement {
+    createGraphTypeStatementCreateOption :: CreateGraphTypeOption,
+    createGraphTypeStatementParentAndName :: CatalogGraphTypeParentAndName,
+    createGraphTypeStatementSource :: GraphTypeSource}
+  deriving (Eq, Ord, Read, Show)
+
+_CreateGraphTypeStatement = Core.Name "openGql.grammar.CreateGraphTypeStatement"
+
+_CreateGraphTypeStatement_createOption = Core.Name "createOption"
+
+_CreateGraphTypeStatement_parentAndName = Core.Name "parentAndName"
+
+_CreateGraphTypeStatement_source = Core.Name "source"
+
+-- | A GQL create schema statement
+data CreateSchemaStatement =
+  CreateSchemaStatement {
+    createSchemaStatementIfNotExists :: Bool,
+    createSchemaStatementParentAndName :: CatalogSchemaParentAndName}
+  deriving (Eq, Ord, Read, Show)
+
+_CreateSchemaStatement = Core.Name "openGql.grammar.CreateSchemaStatement"
+
+_CreateSchemaStatement_ifNotExists = Core.Name "ifNotExists"
+
+_CreateSchemaStatement_parentAndName = Core.Name "parentAndName"
+
+-- | A GQL current graph: one of a fixed set of alternatives
+data CurrentGraph =
+  CurrentGraphGraph |
+  CurrentGraphPropertyGraph
+  deriving (Eq, Ord, Read, Show)
+
+_CurrentGraph = Core.Name "openGql.grammar.CurrentGraph"
+
+_CurrentGraph_graph = Core.Name "graph"
+
+_CurrentGraph_propertyGraph = Core.Name "propertyGraph"
+
+-- | A GQL date function: one of several alternative forms
+data DateFunction =
+  DateFunctionCurrentDate |
+  DateFunctionDateWithParams (Maybe DateFunctionParameters)
+  deriving (Eq, Ord, Read, Show)
+
+_DateFunction = Core.Name "openGql.grammar.DateFunction"
+
+_DateFunction_currentDate = Core.Name "currentDate"
+
+_DateFunction_dateWithParams = Core.Name "dateWithParams"
+
+-- | A GQL date function parameters: one of several alternative forms
+data DateFunctionParameters =
+  DateFunctionParametersDateString DateString |
+  DateFunctionParametersRecordConstructor RecordConstructor
+  deriving (Eq, Ord, Read, Show)
+
+_DateFunctionParameters = Core.Name "openGql.grammar.DateFunctionParameters"
+
+_DateFunctionParameters_dateString = Core.Name "dateString"
+
+_DateFunctionParameters_recordConstructor = Core.Name "recordConstructor"
+
+-- | A GQL date literal, equivalent to a date string
+type DateLiteral = DateString
+
+_DateLiteral = Core.Name "openGql.grammar.DateLiteral"
+
+-- | A GQL date string, equivalent to a character string literal
+type DateString = CharacterStringLiteral
+
+_DateString = Core.Name "openGql.grammar.DateString"
+
+-- | A GQL date type
+data DateType =
+  DateType {
+    dateTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_DateType = Core.Name "openGql.grammar.DateType"
+
+_DateType_notNull = Core.Name "notNull"
+
+-- | A GQL datetime function: one of several alternative forms
+data DatetimeFunction =
+  DatetimeFunctionCurrentTimestamp |
+  DatetimeFunctionZonedDatetimeWithParams (Maybe DatetimeFunctionParameters)
+  deriving (Eq, Ord, Read, Show)
+
+_DatetimeFunction = Core.Name "openGql.grammar.DatetimeFunction"
+
+_DatetimeFunction_currentTimestamp = Core.Name "currentTimestamp"
+
+_DatetimeFunction_zonedDatetimeWithParams = Core.Name "zonedDatetimeWithParams"
+
+-- | A GQL datetime function parameters: one of several alternative forms
+data DatetimeFunctionParameters =
+  DatetimeFunctionParametersDatetimeString DatetimeString |
+  DatetimeFunctionParametersRecordConstructor RecordConstructor
+  deriving (Eq, Ord, Read, Show)
+
+_DatetimeFunctionParameters = Core.Name "openGql.grammar.DatetimeFunctionParameters"
+
+_DatetimeFunctionParameters_datetimeString = Core.Name "datetimeString"
+
+_DatetimeFunctionParameters_recordConstructor = Core.Name "recordConstructor"
+
+-- | A GQL datetime literal, equivalent to a datetime string
+type DatetimeLiteral = DatetimeString
+
+_DatetimeLiteral = Core.Name "openGql.grammar.DatetimeLiteral"
+
+-- | A GQL datetime string, equivalent to a character string literal
+type DatetimeString = CharacterStringLiteral
+
+_DatetimeString = Core.Name "openGql.grammar.DatetimeString"
+
+-- | A GQL datetime subtraction
+data DatetimeSubtraction =
+  DatetimeSubtraction {
+    datetimeSubtractionParameters :: DatetimeSubtractionParameters,
+    datetimeSubtractionTemporalDurationQualifier :: (Maybe TemporalDurationQualifier)}
+  deriving (Eq, Ord, Read, Show)
+
+_DatetimeSubtraction = Core.Name "openGql.grammar.DatetimeSubtraction"
+
+_DatetimeSubtraction_parameters = Core.Name "parameters"
+
+_DatetimeSubtraction_temporalDurationQualifier = Core.Name "temporalDurationQualifier"
+
+-- | A GQL datetime subtraction parameters
+data DatetimeSubtractionParameters =
+  DatetimeSubtractionParameters {
+    datetimeSubtractionParametersExpression1 :: DatetimeValueExpression1,
+    datetimeSubtractionParametersExpression2 :: DatetimeValueExpression2}
+  deriving (Eq, Ord, Read, Show)
+
+_DatetimeSubtractionParameters = Core.Name "openGql.grammar.DatetimeSubtractionParameters"
+
+_DatetimeSubtractionParameters_expression1 = Core.Name "expression1"
+
+_DatetimeSubtractionParameters_expression2 = Core.Name "expression2"
+
+-- | A GQL datetime type: one of several alternative forms
+data DatetimeType =
+  DatetimeTypeZonedDatetime ZonedDatetimeType |
+  DatetimeTypeTimestampWithTimeZone TimestampWithTimeZoneType
+  deriving (Eq, Ord, Read, Show)
+
+_DatetimeType = Core.Name "openGql.grammar.DatetimeType"
+
+_DatetimeType_zonedDatetime = Core.Name "zonedDatetime"
+
+_DatetimeType_timestampWithTimeZone = Core.Name "timestampWithTimeZone"
+
+-- | A GQL datetime value expression, equivalent to a value expression
+type DatetimeValueExpression = ValueExpression
+
+_DatetimeValueExpression = Core.Name "openGql.grammar.DatetimeValueExpression"
+
+-- | A GQL datetime value expression1, equivalent to a datetime value expression
+type DatetimeValueExpression1 = DatetimeValueExpression
+
+_DatetimeValueExpression1 = Core.Name "openGql.grammar.DatetimeValueExpression1"
+
+-- | A GQL datetime value expression2, equivalent to a datetime value expression
+type DatetimeValueExpression2 = DatetimeValueExpression
+
+_DatetimeValueExpression2 = Core.Name "openGql.grammar.DatetimeValueExpression2"
+
+-- | A GQL datetime value function: one of several alternative forms
+data DatetimeValueFunction =
+  DatetimeValueFunctionDateFunction DateFunction |
+  DatetimeValueFunctionTimeFunction TimeFunction |
+  DatetimeValueFunctionDatetimeFunction DatetimeFunction |
+  DatetimeValueFunctionLocaltimeFunction LocaltimeFunction |
+  DatetimeValueFunctionLocaldatetimeFunction LocaldatetimeFunction
+  deriving (Eq, Ord, Read, Show)
+
+_DatetimeValueFunction = Core.Name "openGql.grammar.DatetimeValueFunction"
+
+_DatetimeValueFunction_dateFunction = Core.Name "dateFunction"
+
+_DatetimeValueFunction_timeFunction = Core.Name "timeFunction"
+
+_DatetimeValueFunction_datetimeFunction = Core.Name "datetimeFunction"
+
+_DatetimeValueFunction_localtimeFunction = Core.Name "localtimeFunction"
+
+_DatetimeValueFunction_localdatetimeFunction = Core.Name "localdatetimeFunction"
+
+-- | An optional GQL decimal exact numeric type
+type DecimalExactNumericType = (Maybe PrecisionAndScale)
+
+_DecimalExactNumericType = Core.Name "openGql.grammar.DecimalExactNumericType"
+
+-- | A GQL delete item, equivalent to a value expression
+type DeleteItem = ValueExpression
+
+_DeleteItem = Core.Name "openGql.grammar.DeleteItem"
+
+-- | A list of GQL delete item list elements
+type DeleteItemList = [DeleteItem]
+
+_DeleteItemList = Core.Name "openGql.grammar.DeleteItemList"
+
+-- | A GQL delete statement
+data DeleteStatement =
+  DeleteStatement {
+    deleteStatementDetach :: (Maybe DetachOption),
+    deleteStatementItems :: DeleteItemList}
+  deriving (Eq, Ord, Read, Show)
+
+_DeleteStatement = Core.Name "openGql.grammar.DeleteStatement"
+
+_DeleteStatement_detach = Core.Name "detach"
+
+_DeleteStatement_items = Core.Name "items"
+
+-- | A GQL delimited binding table name
+type DelimitedBindingTableName = String
+
+_DelimitedBindingTableName = Core.Name "openGql.grammar.DelimitedBindingTableName"
+
+-- | A GQL delimited graph name
+type DelimitedGraphName = String
+
+_DelimitedGraphName = Core.Name "openGql.grammar.DelimitedGraphName"
+
+-- | A GQL dependent value expression
+data DependentValueExpression =
+  DependentValueExpression {
+    dependentValueExpressionSetQuantifier :: (Maybe SetQuantifier),
+    dependentValueExpressionNumericValue :: NumericValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_DependentValueExpression = Core.Name "openGql.grammar.DependentValueExpression"
+
+_DependentValueExpression_setQuantifier = Core.Name "setQuantifier"
+
+_DependentValueExpression_numericValue = Core.Name "numericValue"
+
+-- | A GQL destination node type alias
+type DestinationNodeTypeAlias = String
+
+_DestinationNodeTypeAlias = Core.Name "openGql.grammar.DestinationNodeTypeAlias"
+
+-- | A GQL destination node type reference: one of several alternative forms
+data DestinationNodeTypeReference =
+  DestinationNodeTypeReferenceAlias DestinationNodeTypeAlias |
+  DestinationNodeTypeReferenceFiller (Maybe NodeTypeFiller)
+  deriving (Eq, Ord, Read, Show)
+
+_DestinationNodeTypeReference = Core.Name "openGql.grammar.DestinationNodeTypeReference"
+
+_DestinationNodeTypeReference_alias = Core.Name "alias"
+
+_DestinationNodeTypeReference_filler = Core.Name "filler"
+
+-- | A GQL destination predicate
+data DestinationPredicate =
+  DestinationPredicate {
+    destinationPredicateNodeReference :: NodeReference,
+    destinationPredicateNot :: Bool,
+    destinationPredicateDestinationOf :: EdgeReference}
+  deriving (Eq, Ord, Read, Show)
+
+_DestinationPredicate = Core.Name "openGql.grammar.DestinationPredicate"
+
+_DestinationPredicate_nodeReference = Core.Name "nodeReference"
+
+_DestinationPredicate_not = Core.Name "not"
+
+_DestinationPredicate_destinationOf = Core.Name "destinationOf"
+
+-- | A GQL detach option: one of a fixed set of alternatives
+data DetachOption =
+  DetachOptionDetach |
+  DetachOptionNoDetach
+  deriving (Eq, Ord, Read, Show)
+
+_DetachOption = Core.Name "openGql.grammar.DetachOption"
+
+_DetachOption_detach = Core.Name "detach"
+
+_DetachOption_noDetach = Core.Name "noDetach"
+
+-- | A GQL different edges match mode, equivalent to a edge bindings or edges
+type DifferentEdgesMatchMode = EdgeBindingsOrEdges
+
+_DifferentEdgesMatchMode = Core.Name "openGql.grammar.DifferentEdgesMatchMode"
+
+-- | A GQL directed predicate
+data DirectedPredicate =
+  DirectedPredicate {
+    directedPredicateElementVariableReference :: ElementVariableReference,
+    directedPredicateDirectedPart :: DirectedPredicatePart2}
+  deriving (Eq, Ord, Read, Show)
+
+_DirectedPredicate = Core.Name "openGql.grammar.DirectedPredicate"
+
+_DirectedPredicate_elementVariableReference = Core.Name "elementVariableReference"
+
+_DirectedPredicate_directedPart = Core.Name "directedPart"
+
+-- | A GQL directed predicate part2
+data DirectedPredicatePart2 =
+  DirectedPredicatePart2 {
+    directedPredicatePart2Not :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_DirectedPredicatePart2 = Core.Name "openGql.grammar.DirectedPredicatePart2"
+
+_DirectedPredicatePart2_not = Core.Name "not"
+
+-- | A GQL directory name
+type DirectoryName = String
+
+_DirectoryName = Core.Name "openGql.grammar.DirectoryName"
+
+-- | A GQL disjunction label expression
+data DisjunctionLabelExpression =
+  DisjunctionLabelExpression {
+    disjunctionLabelExpressionLeft :: LabelExpression,
+    disjunctionLabelExpressionRight :: LabelExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_DisjunctionLabelExpression = Core.Name "openGql.grammar.DisjunctionLabelExpression"
+
+_DisjunctionLabelExpression_left = Core.Name "left"
+
+_DisjunctionLabelExpression_right = Core.Name "right"
+
+-- | A GQL disjunctive expression
+data DisjunctiveExpr =
+  DisjunctiveExpr {
+    disjunctiveExprLeft :: ValueExpression,
+    disjunctiveExprOperator :: DisjunctiveOperator,
+    disjunctiveExprRight :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_DisjunctiveExpr = Core.Name "openGql.grammar.DisjunctiveExpr"
+
+_DisjunctiveExpr_left = Core.Name "left"
+
+_DisjunctiveExpr_operator = Core.Name "operator"
+
+_DisjunctiveExpr_right = Core.Name "right"
+
+-- | A GQL disjunctive operator: one of a fixed set of alternatives
+data DisjunctiveOperator =
+  DisjunctiveOperatorOr |
+  DisjunctiveOperatorXor
+  deriving (Eq, Ord, Read, Show)
+
+_DisjunctiveOperator = Core.Name "openGql.grammar.DisjunctiveOperator"
+
+_DisjunctiveOperator_or = Core.Name "or"
+
+_DisjunctiveOperator_xor = Core.Name "xor"
+
+-- | A GQL double type with precision
+data DoubleTypeWithPrecision =
+  DoubleTypeWithPrecision {
+    doubleTypeWithPrecisionPrecision :: Bool,
+    doubleTypeWithPrecisionNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_DoubleTypeWithPrecision = Core.Name "openGql.grammar.DoubleTypeWithPrecision"
+
+_DoubleTypeWithPrecision_precision = Core.Name "precision"
+
+_DoubleTypeWithPrecision_notNull = Core.Name "notNull"
+
+-- | A GQL drop graph statement
+data DropGraphStatement =
+  DropGraphStatement {
+    dropGraphStatementIfExists :: Bool,
+    dropGraphStatementParentAndName :: CatalogGraphParentAndName}
+  deriving (Eq, Ord, Read, Show)
+
+_DropGraphStatement = Core.Name "openGql.grammar.DropGraphStatement"
+
+_DropGraphStatement_ifExists = Core.Name "ifExists"
+
+_DropGraphStatement_parentAndName = Core.Name "parentAndName"
+
+-- | A GQL drop graph type statement
+data DropGraphTypeStatement =
+  DropGraphTypeStatement {
+    dropGraphTypeStatementIfExists :: Bool,
+    dropGraphTypeStatementParentAndName :: CatalogGraphTypeParentAndName}
+  deriving (Eq, Ord, Read, Show)
+
+_DropGraphTypeStatement = Core.Name "openGql.grammar.DropGraphTypeStatement"
+
+_DropGraphTypeStatement_ifExists = Core.Name "ifExists"
+
+_DropGraphTypeStatement_parentAndName = Core.Name "parentAndName"
+
+-- | A GQL drop schema statement
+data DropSchemaStatement =
+  DropSchemaStatement {
+    dropSchemaStatementIfExists :: Bool,
+    dropSchemaStatementParentAndName :: CatalogSchemaParentAndName}
+  deriving (Eq, Ord, Read, Show)
+
+_DropSchemaStatement = Core.Name "openGql.grammar.DropSchemaStatement"
+
+_DropSchemaStatement_ifExists = Core.Name "ifExists"
+
+_DropSchemaStatement_parentAndName = Core.Name "parentAndName"
+
+-- | A GQL duration function, equivalent to a duration function parameters
+type DurationFunction = DurationFunctionParameters
+
+_DurationFunction = Core.Name "openGql.grammar.DurationFunction"
+
+-- | A GQL duration function parameters: one of several alternative forms
+data DurationFunctionParameters =
+  DurationFunctionParametersDurationString DurationString |
+  DurationFunctionParametersRecordConstructor RecordConstructor
+  deriving (Eq, Ord, Read, Show)
+
+_DurationFunctionParameters = Core.Name "openGql.grammar.DurationFunctionParameters"
+
+_DurationFunctionParameters_durationString = Core.Name "durationString"
+
+_DurationFunctionParameters_recordConstructor = Core.Name "recordConstructor"
+
+-- | A GQL duration literal, equivalent to a duration string
+type DurationLiteral = DurationString
+
+_DurationLiteral = Core.Name "openGql.grammar.DurationLiteral"
+
+-- | A GQL duration string, equivalent to a character string literal
+type DurationString = CharacterStringLiteral
+
+_DurationString = Core.Name "openGql.grammar.DurationString"
+
+-- | A GQL duration value expression, equivalent to a value expression
+type DurationValueExpression = ValueExpression
+
+_DurationValueExpression = Core.Name "openGql.grammar.DurationValueExpression"
+
+-- | A GQL duration value function: one of several alternative forms
+data DurationValueFunction =
+  DurationValueFunctionDurationFunction DurationFunction |
+  DurationValueFunctionAbsoluteValue AbsoluteValueExpression
+  deriving (Eq, Ord, Read, Show)
+
+_DurationValueFunction = Core.Name "openGql.grammar.DurationValueFunction"
+
+_DurationValueFunction_durationFunction = Core.Name "durationFunction"
+
+_DurationValueFunction_absoluteValue = Core.Name "absoluteValue"
+
+-- | A GQL dynamic parameter specification, equivalent to a parameter name
+type DynamicParameterSpecification = ParameterName
+
+_DynamicParameterSpecification = Core.Name "openGql.grammar.DynamicParameterSpecification"
+
+-- | A GQL dynamic property value type
+data DynamicPropertyValueType =
+  DynamicPropertyValueType {
+    dynamicPropertyValueTypeAny :: (Maybe Bool),
+    dynamicPropertyValueTypeProperty :: (),
+    dynamicPropertyValueTypeValue :: (),
+    dynamicPropertyValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_DynamicPropertyValueType = Core.Name "openGql.grammar.DynamicPropertyValueType"
+
+_DynamicPropertyValueType_any = Core.Name "any"
+
+_DynamicPropertyValueType_property = Core.Name "property"
+
+_DynamicPropertyValueType_value = Core.Name "value"
+
+_DynamicPropertyValueType_notNull = Core.Name "notNull"
+
+-- | A GQL edge bindings or edges: one of several alternative forms
+data EdgeBindingsOrEdges =
+  EdgeBindingsOrEdgesEdgeBindings Bool |
+  EdgeBindingsOrEdgesEdges
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeBindingsOrEdges = Core.Name "openGql.grammar.EdgeBindingsOrEdges"
+
+_EdgeBindingsOrEdges_edgeBindings = Core.Name "edgeBindings"
+
+_EdgeBindingsOrEdges_edges = Core.Name "edges"
+
+-- | A GQL edge key label set with content
+data EdgeKeyLabelSetWithContent =
+  EdgeKeyLabelSetWithContent {
+    edgeKeyLabelSetWithContentKeyLabelSet :: EdgeTypeKeyLabelSet,
+    edgeKeyLabelSetWithContentImpliedContent :: (Maybe EdgeTypeImpliedContent)}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeKeyLabelSetWithContent = Core.Name "openGql.grammar.EdgeKeyLabelSetWithContent"
+
+_EdgeKeyLabelSetWithContent_keyLabelSet = Core.Name "keyLabelSet"
+
+_EdgeKeyLabelSetWithContent_impliedContent = Core.Name "impliedContent"
+
+-- | A GQL edge kind: one of a fixed set of alternatives
+data EdgeKind =
+  EdgeKindDirected |
+  EdgeKindUndirected
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeKind = Core.Name "openGql.grammar.EdgeKind"
+
+_EdgeKind_directed = Core.Name "directed"
+
+_EdgeKind_undirected = Core.Name "undirected"
+
+-- | A GQL edge kind and synonym
+data EdgeKindAndSynonym =
+  EdgeKindAndSynonym {
+    edgeKindAndSynonymKind :: (Maybe EdgeKind),
+    edgeKindAndSynonymSynonym :: EdgeSynonym,
+    edgeKindAndSynonymTypeName :: (Maybe EdgeTypeName)}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeKindAndSynonym = Core.Name "openGql.grammar.EdgeKindAndSynonym"
+
+_EdgeKindAndSynonym_kind = Core.Name "kind"
+
+_EdgeKindAndSynonym_synonym = Core.Name "synonym"
+
+_EdgeKindAndSynonym_typeName = Core.Name "typeName"
+
+-- | A GQL edge label set with properties
+data EdgeLabelSetWithProperties =
+  EdgeLabelSetWithProperties {
+    edgeLabelSetWithPropertiesLabelSet :: EdgeTypeLabelSet,
+    edgeLabelSetWithPropertiesPropertyTypes :: EdgeTypePropertyTypes}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeLabelSetWithProperties = Core.Name "openGql.grammar.EdgeLabelSetWithProperties"
+
+_EdgeLabelSetWithProperties_labelSet = Core.Name "labelSet"
+
+_EdgeLabelSetWithProperties_propertyTypes = Core.Name "propertyTypes"
+
+-- | A GQL edge pattern: one of several alternative forms
+data EdgePattern =
+  EdgePatternFullEdge FullEdgePattern |
+  EdgePatternAbbreviatedEdge AbbreviatedEdgePattern
+  deriving (Eq, Ord, Read, Show)
+
+_EdgePattern = Core.Name "openGql.grammar.EdgePattern"
+
+_EdgePattern_fullEdge = Core.Name "fullEdge"
+
+_EdgePattern_abbreviatedEdge = Core.Name "abbreviatedEdge"
+
+-- | A GQL edge reference, equivalent to a element variable reference
+type EdgeReference = ElementVariableReference
+
+_EdgeReference = Core.Name "openGql.grammar.EdgeReference"
+
+-- | A GQL edge reference value expression, equivalent to a primary value expression
+type EdgeReferenceValueExpression = PrimaryValueExpression
+
+_EdgeReferenceValueExpression = Core.Name "openGql.grammar.EdgeReferenceValueExpression"
+
+-- | A GQL edge reference value type: one of several alternative forms
+data EdgeReferenceValueType =
+  EdgeReferenceValueTypeOpen OpenEdgeReferenceValueType |
+  EdgeReferenceValueTypeClosed ClosedEdgeReferenceValueType
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeReferenceValueType = Core.Name "openGql.grammar.EdgeReferenceValueType"
+
+_EdgeReferenceValueType_open = Core.Name "open"
+
+_EdgeReferenceValueType_closed = Core.Name "closed"
+
+-- | A GQL edge synonym: one of a fixed set of alternatives
+data EdgeSynonym =
+  EdgeSynonymEdge |
+  EdgeSynonymRelationship
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeSynonym = Core.Name "openGql.grammar.EdgeSynonym"
+
+_EdgeSynonym_edge = Core.Name "edge"
+
+_EdgeSynonym_relationship = Core.Name "relationship"
+
+-- | A GQL edge type filler: one of several alternative forms
+data EdgeTypeFiller =
+  EdgeTypeFillerKeyLabelSetWithContent EdgeKeyLabelSetWithContent |
+  EdgeTypeFillerImpliedContent EdgeTypeImpliedContent
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypeFiller = Core.Name "openGql.grammar.EdgeTypeFiller"
+
+_EdgeTypeFiller_keyLabelSetWithContent = Core.Name "keyLabelSetWithContent"
+
+_EdgeTypeFiller_impliedContent = Core.Name "impliedContent"
+
+-- | A GQL edge type implied content: one of several alternative forms
+data EdgeTypeImpliedContent =
+  EdgeTypeImpliedContentLabelSet EdgeTypeLabelSet |
+  EdgeTypeImpliedContentPropertyTypes EdgeTypePropertyTypes |
+  EdgeTypeImpliedContentLabelSetWithProperties EdgeLabelSetWithProperties
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypeImpliedContent = Core.Name "openGql.grammar.EdgeTypeImpliedContent"
+
+_EdgeTypeImpliedContent_labelSet = Core.Name "labelSet"
+
+_EdgeTypeImpliedContent_propertyTypes = Core.Name "propertyTypes"
+
+_EdgeTypeImpliedContent_labelSetWithProperties = Core.Name "labelSetWithProperties"
+
+-- | An optional GQL edge type key label set
+type EdgeTypeKeyLabelSet = (Maybe LabelSetPhrase)
+
+_EdgeTypeKeyLabelSet = Core.Name "openGql.grammar.EdgeTypeKeyLabelSet"
+
+-- | A GQL edge type label set, equivalent to a label set phrase
+type EdgeTypeLabelSet = LabelSetPhrase
+
+_EdgeTypeLabelSet = Core.Name "openGql.grammar.EdgeTypeLabelSet"
+
+-- | A GQL edge type name
+type EdgeTypeName = String
+
+_EdgeTypeName = Core.Name "openGql.grammar.EdgeTypeName"
+
+-- | A GQL edge type name with filler
+data EdgeTypeNameWithFiller =
+  EdgeTypeNameWithFiller {
+    edgeTypeNameWithFillerTypeName :: EdgeTypeName,
+    edgeTypeNameWithFillerFiller :: (Maybe EdgeTypeFiller)}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypeNameWithFiller = Core.Name "openGql.grammar.EdgeTypeNameWithFiller"
+
+_EdgeTypeNameWithFiller_typeName = Core.Name "typeName"
+
+_EdgeTypeNameWithFiller_filler = Core.Name "filler"
+
+-- | A GQL edge type pattern
+data EdgeTypePattern =
+  EdgeTypePattern {
+    edgeTypePatternKindAndSynonym :: (Maybe EdgeKindAndSynonym),
+    edgeTypePatternPatternType :: EdgeTypePatternType}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypePattern = Core.Name "openGql.grammar.EdgeTypePattern"
+
+_EdgeTypePattern_kindAndSynonym = Core.Name "kindAndSynonym"
+
+_EdgeTypePattern_patternType = Core.Name "patternType"
+
+-- | A GQL edge type pattern directed: one of several alternative forms
+data EdgeTypePatternDirected =
+  EdgeTypePatternDirectedPointingRight EdgeTypePatternPointingRight |
+  EdgeTypePatternDirectedPointingLeft EdgeTypePatternPointingLeft
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypePatternDirected = Core.Name "openGql.grammar.EdgeTypePatternDirected"
+
+_EdgeTypePatternDirected_pointingRight = Core.Name "pointingRight"
+
+_EdgeTypePatternDirected_pointingLeft = Core.Name "pointingLeft"
+
+-- | A GQL edge type pattern pointing left
+data EdgeTypePatternPointingLeft =
+  EdgeTypePatternPointingLeft {
+    edgeTypePatternPointingLeftDestination :: DestinationNodeTypeReference,
+    edgeTypePatternPointingLeftArc :: ArcTypePointingLeft,
+    edgeTypePatternPointingLeftSource :: SourceNodeTypeReference}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypePatternPointingLeft = Core.Name "openGql.grammar.EdgeTypePatternPointingLeft"
+
+_EdgeTypePatternPointingLeft_destination = Core.Name "destination"
+
+_EdgeTypePatternPointingLeft_arc = Core.Name "arc"
+
+_EdgeTypePatternPointingLeft_source = Core.Name "source"
+
+-- | A GQL edge type pattern pointing right
+data EdgeTypePatternPointingRight =
+  EdgeTypePatternPointingRight {
+    edgeTypePatternPointingRightSource :: SourceNodeTypeReference,
+    edgeTypePatternPointingRightArc :: ArcTypePointingRight,
+    edgeTypePatternPointingRightDestination :: DestinationNodeTypeReference}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypePatternPointingRight = Core.Name "openGql.grammar.EdgeTypePatternPointingRight"
+
+_EdgeTypePatternPointingRight_source = Core.Name "source"
+
+_EdgeTypePatternPointingRight_arc = Core.Name "arc"
+
+_EdgeTypePatternPointingRight_destination = Core.Name "destination"
+
+-- | A GQL edge type pattern type: one of several alternative forms
+data EdgeTypePatternType =
+  EdgeTypePatternTypeDirected EdgeTypePatternDirected |
+  EdgeTypePatternTypeUndirected EdgeTypePatternUndirected
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypePatternType = Core.Name "openGql.grammar.EdgeTypePatternType"
+
+_EdgeTypePatternType_directed = Core.Name "directed"
+
+_EdgeTypePatternType_undirected = Core.Name "undirected"
+
+-- | A GQL edge type pattern undirected
+data EdgeTypePatternUndirected =
+  EdgeTypePatternUndirected {
+    edgeTypePatternUndirectedSource :: SourceNodeTypeReference,
+    edgeTypePatternUndirectedArc :: ArcTypeUndirected,
+    edgeTypePatternUndirectedDestination :: DestinationNodeTypeReference}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypePatternUndirected = Core.Name "openGql.grammar.EdgeTypePatternUndirected"
+
+_EdgeTypePatternUndirected_source = Core.Name "source"
+
+_EdgeTypePatternUndirected_arc = Core.Name "arc"
+
+_EdgeTypePatternUndirected_destination = Core.Name "destination"
+
+-- | A GQL edge type phrase
+data EdgeTypePhrase =
+  EdgeTypePhrase {
+    edgeTypePhraseKind :: EdgeKind,
+    edgeTypePhraseSynonym :: EdgeSynonym,
+    edgeTypePhraseTypeNameAndFiller :: EdgeTypePhraseFiller,
+    edgeTypePhraseEndpointPair :: EndpointPairPhrase}
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypePhrase = Core.Name "openGql.grammar.EdgeTypePhrase"
+
+_EdgeTypePhrase_kind = Core.Name "kind"
+
+_EdgeTypePhrase_synonym = Core.Name "synonym"
+
+_EdgeTypePhrase_typeNameAndFiller = Core.Name "typeNameAndFiller"
+
+_EdgeTypePhrase_endpointPair = Core.Name "endpointPair"
+
+-- | A GQL edge type phrase filler: one of several alternative forms
+data EdgeTypePhraseFiller =
+  EdgeTypePhraseFillerTypeNameWithFiller EdgeTypeNameWithFiller |
+  EdgeTypePhraseFillerFillerOnly EdgeTypeFiller
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypePhraseFiller = Core.Name "openGql.grammar.EdgeTypePhraseFiller"
+
+_EdgeTypePhraseFiller_typeNameWithFiller = Core.Name "typeNameWithFiller"
+
+_EdgeTypePhraseFiller_fillerOnly = Core.Name "fillerOnly"
+
+-- | A GQL edge type property types, equivalent to a property types specification
+type EdgeTypePropertyTypes = PropertyTypesSpecification
+
+_EdgeTypePropertyTypes = Core.Name "openGql.grammar.EdgeTypePropertyTypes"
+
+-- | A GQL edge type specification: one of several alternative forms
+data EdgeTypeSpecification =
+  EdgeTypeSpecificationPattern EdgeTypePattern |
+  EdgeTypeSpecificationPhrase EdgeTypePhrase
+  deriving (Eq, Ord, Read, Show)
+
+_EdgeTypeSpecification = Core.Name "openGql.grammar.EdgeTypeSpecification"
+
+_EdgeTypeSpecification_pattern = Core.Name "pattern"
+
+_EdgeTypeSpecification_phrase = Core.Name "phrase"
+
+-- | A GQL edges synonym: one of a fixed set of alternatives
+data EdgesSynonym =
+  EdgesSynonymEdges |
+  EdgesSynonymRelationships
+  deriving (Eq, Ord, Read, Show)
+
+_EdgesSynonym = Core.Name "openGql.grammar.EdgesSynonym"
+
+_EdgesSynonym_edges = Core.Name "edges"
+
+_EdgesSynonym_relationships = Core.Name "relationships"
+
+-- | A GQL element bindings or elements: one of several alternative forms
+data ElementBindingsOrElements =
+  ElementBindingsOrElementsElementBindings Bool |
+  ElementBindingsOrElementsElements
+  deriving (Eq, Ord, Read, Show)
+
+_ElementBindingsOrElements = Core.Name "openGql.grammar.ElementBindingsOrElements"
+
+_ElementBindingsOrElements_elementBindings = Core.Name "elementBindings"
+
+_ElementBindingsOrElements_elements = Core.Name "elements"
+
+-- | A GQL element id function, equivalent to a element variable reference
+type ElementIdFunction = ElementVariableReference
+
+_ElementIdFunction = Core.Name "openGql.grammar.ElementIdFunction"
+
+-- | A GQL element pattern: one of several alternative forms
+data ElementPattern =
+  ElementPatternNode NodePattern |
+  ElementPatternEdge EdgePattern
+  deriving (Eq, Ord, Read, Show)
+
+_ElementPattern = Core.Name "openGql.grammar.ElementPattern"
+
+_ElementPattern_node = Core.Name "node"
+
+_ElementPattern_edge = Core.Name "edge"
+
+-- | A GQL element pattern filler
+data ElementPatternFiller =
+  ElementPatternFiller {
+    elementPatternFillerVariableDeclaration :: (Maybe ElementVariableDeclaration),
+    elementPatternFillerIsLabelExpression :: (Maybe IsLabelExpression),
+    elementPatternFillerPredicate :: (Maybe ElementPatternPredicate)}
+  deriving (Eq, Ord, Read, Show)
+
+_ElementPatternFiller = Core.Name "openGql.grammar.ElementPatternFiller"
+
+_ElementPatternFiller_variableDeclaration = Core.Name "variableDeclaration"
+
+_ElementPatternFiller_isLabelExpression = Core.Name "isLabelExpression"
+
+_ElementPatternFiller_predicate = Core.Name "predicate"
+
+-- | A GQL element pattern predicate: one of several alternative forms
+data ElementPatternPredicate =
+  ElementPatternPredicateWhereClause ElementPatternWhereClause |
+  ElementPatternPredicatePropertySpecification ElementPropertySpecification
+  deriving (Eq, Ord, Read, Show)
+
+_ElementPatternPredicate = Core.Name "openGql.grammar.ElementPatternPredicate"
+
+_ElementPatternPredicate_whereClause = Core.Name "whereClause"
+
+_ElementPatternPredicate_propertySpecification = Core.Name "propertySpecification"
+
+-- | A GQL element pattern where clause, equivalent to a search condition
+type ElementPatternWhereClause = SearchCondition
+
+_ElementPatternWhereClause = Core.Name "openGql.grammar.ElementPatternWhereClause"
+
+-- | A GQL element property specification, equivalent to a property key value pair list
+type ElementPropertySpecification = PropertyKeyValuePairList
+
+_ElementPropertySpecification = Core.Name "openGql.grammar.ElementPropertySpecification"
+
+-- | A list of GQL element type list elements
+type ElementTypeList = [ElementTypeSpecification]
+
+_ElementTypeList = Core.Name "openGql.grammar.ElementTypeList"
+
+-- | A GQL element type specification: one of several alternative forms
+data ElementTypeSpecification =
+  ElementTypeSpecificationNodeType NodeTypeSpecification |
+  ElementTypeSpecificationEdgeType EdgeTypeSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_ElementTypeSpecification = Core.Name "openGql.grammar.ElementTypeSpecification"
+
+_ElementTypeSpecification_nodeType = Core.Name "nodeType"
+
+_ElementTypeSpecification_edgeType = Core.Name "edgeType"
+
+-- | A GQL element variable, equivalent to a binding variable
+type ElementVariable = BindingVariable
+
+_ElementVariable = Core.Name "openGql.grammar.ElementVariable"
+
+-- | A GQL element variable declaration
+data ElementVariableDeclaration =
+  ElementVariableDeclaration {
+    elementVariableDeclarationTemp :: (Maybe Bool),
+    elementVariableDeclarationVariable :: ElementVariable}
+  deriving (Eq, Ord, Read, Show)
+
+_ElementVariableDeclaration = Core.Name "openGql.grammar.ElementVariableDeclaration"
+
+_ElementVariableDeclaration_temp = Core.Name "temp"
+
+_ElementVariableDeclaration_variable = Core.Name "variable"
+
+-- | A GQL element variable reference, equivalent to a binding variable reference
+type ElementVariableReference = BindingVariableReference
+
+_ElementVariableReference = Core.Name "openGql.grammar.ElementVariableReference"
+
+-- | A GQL elements function, equivalent to a path value expression
+type ElementsFunction = PathValueExpression
+
+_ElementsFunction = Core.Name "openGql.grammar.ElementsFunction"
+
+-- | A GQL else clause, equivalent to a result
+type ElseClause = Result
+
+_ElseClause = Core.Name "openGql.grammar.ElseClause"
+
+-- | A GQL empty type
+type EmptyType = ()
+
+_EmptyType = Core.Name "openGql.grammar.EmptyType"
+
+-- | A GQL end transaction command: one of several alternative forms
+data EndTransactionCommand =
+  EndTransactionCommandRollback RollbackCommand |
+  EndTransactionCommandCommit CommitCommand
+  deriving (Eq, Ord, Read, Show)
+
+_EndTransactionCommand = Core.Name "openGql.grammar.EndTransactionCommand"
+
+_EndTransactionCommand_rollback = Core.Name "rollback"
+
+_EndTransactionCommand_commit = Core.Name "commit"
+
+-- | A GQL endpoint pair: one of several alternative forms
+data EndpointPair =
+  EndpointPairDirectedPair EndpointPairDirected |
+  EndpointPairUndirectedPair EndpointPairUndirected
+  deriving (Eq, Ord, Read, Show)
+
+_EndpointPair = Core.Name "openGql.grammar.EndpointPair"
+
+_EndpointPair_directedPair = Core.Name "directedPair"
+
+_EndpointPair_undirectedPair = Core.Name "undirectedPair"
+
+-- | A GQL endpoint pair directed: one of several alternative forms
+data EndpointPairDirected =
+  EndpointPairDirectedPointingRight EndpointPairPointingRight |
+  EndpointPairDirectedPointingLeft EndpointPairPointingLeft
+  deriving (Eq, Ord, Read, Show)
+
+_EndpointPairDirected = Core.Name "openGql.grammar.EndpointPairDirected"
+
+_EndpointPairDirected_pointingRight = Core.Name "pointingRight"
+
+_EndpointPairDirected_pointingLeft = Core.Name "pointingLeft"
+
+-- | A GQL endpoint pair phrase, equivalent to a endpoint pair
+type EndpointPairPhrase = EndpointPair
+
+_EndpointPairPhrase = Core.Name "openGql.grammar.EndpointPairPhrase"
+
+-- | A GQL endpoint pair pointing left
+data EndpointPairPointingLeft =
+  EndpointPairPointingLeft {
+    endpointPairPointingLeftDestinationAlias :: DestinationNodeTypeAlias,
+    endpointPairPointingLeftSourceAlias :: SourceNodeTypeAlias}
+  deriving (Eq, Ord, Read, Show)
+
+_EndpointPairPointingLeft = Core.Name "openGql.grammar.EndpointPairPointingLeft"
+
+_EndpointPairPointingLeft_destinationAlias = Core.Name "destinationAlias"
+
+_EndpointPairPointingLeft_sourceAlias = Core.Name "sourceAlias"
+
+-- | A GQL endpoint pair pointing right
+data EndpointPairPointingRight =
+  EndpointPairPointingRight {
+    endpointPairPointingRightSourceAlias :: SourceNodeTypeAlias,
+    endpointPairPointingRightConnector :: ConnectorPointingRight,
+    endpointPairPointingRightDestinationAlias :: DestinationNodeTypeAlias}
+  deriving (Eq, Ord, Read, Show)
+
+_EndpointPairPointingRight = Core.Name "openGql.grammar.EndpointPairPointingRight"
+
+_EndpointPairPointingRight_sourceAlias = Core.Name "sourceAlias"
+
+_EndpointPairPointingRight_connector = Core.Name "connector"
+
+_EndpointPairPointingRight_destinationAlias = Core.Name "destinationAlias"
+
+-- | A GQL endpoint pair undirected
+data EndpointPairUndirected =
+  EndpointPairUndirected {
+    endpointPairUndirectedSourceAlias :: SourceNodeTypeAlias,
+    endpointPairUndirectedConnector :: ConnectorUndirected,
+    endpointPairUndirectedDestinationAlias :: DestinationNodeTypeAlias}
+  deriving (Eq, Ord, Read, Show)
+
+_EndpointPairUndirected = Core.Name "openGql.grammar.EndpointPairUndirected"
+
+_EndpointPairUndirected_sourceAlias = Core.Name "sourceAlias"
+
+_EndpointPairUndirected_connector = Core.Name "connector"
+
+_EndpointPairUndirected_destinationAlias = Core.Name "destinationAlias"
+
+-- | A GQL exact numeric literal: one of several alternative forms
+data ExactNumericLiteral =
+  ExactNumericLiteralScientificWithSuffix String |
+  ExactNumericLiteralCommonWithSuffix String |
+  ExactNumericLiteralCommonWithoutSuffix String |
+  ExactNumericLiteralIntegerWithSuffix String |
+  ExactNumericLiteralUnsignedInteger UnsignedInteger
+  deriving (Eq, Ord, Read, Show)
+
+_ExactNumericLiteral = Core.Name "openGql.grammar.ExactNumericLiteral"
+
+_ExactNumericLiteral_scientificWithSuffix = Core.Name "scientificWithSuffix"
+
+_ExactNumericLiteral_commonWithSuffix = Core.Name "commonWithSuffix"
+
+_ExactNumericLiteral_commonWithoutSuffix = Core.Name "commonWithoutSuffix"
+
+_ExactNumericLiteral_integerWithSuffix = Core.Name "integerWithSuffix"
+
+_ExactNumericLiteral_unsignedInteger = Core.Name "unsignedInteger"
+
+-- | A GQL exact numeric type: one of several alternative forms
+data ExactNumericType =
+  ExactNumericTypeBinary BinaryExactNumericType |
+  ExactNumericTypeDecimal DecimalExactNumericType
+  deriving (Eq, Ord, Read, Show)
+
+_ExactNumericType = Core.Name "openGql.grammar.ExactNumericType"
+
+_ExactNumericType_binary = Core.Name "binary"
+
+_ExactNumericType_decimal = Core.Name "decimal"
+
+-- | A GQL exists predicate: one of several alternative forms
+data ExistsPredicate =
+  ExistsPredicateGraphPatternBrace GraphPattern |
+  ExistsPredicateGraphPatternParen GraphPattern |
+  ExistsPredicateMatchBlockBrace MatchStatementBlock |
+  ExistsPredicateMatchBlockParen MatchStatementBlock |
+  ExistsPredicateNestedQuery NestedQuerySpecification
+  deriving (Eq, Ord, Read, Show)
+
+_ExistsPredicate = Core.Name "openGql.grammar.ExistsPredicate"
+
+_ExistsPredicate_graphPatternBrace = Core.Name "graphPatternBrace"
+
+_ExistsPredicate_graphPatternParen = Core.Name "graphPatternParen"
+
+_ExistsPredicate_matchBlockBrace = Core.Name "matchBlockBrace"
+
+_ExistsPredicate_matchBlockParen = Core.Name "matchBlockParen"
+
+_ExistsPredicate_nestedQuery = Core.Name "nestedQuery"
+
+-- | A GQL exponential function, equivalent to a numeric value expression
+type ExponentialFunction = NumericValueExpression
+
+_ExponentialFunction = Core.Name "openGql.grammar.ExponentialFunction"
+
+-- | A GQL field
+data Field =
+  Field {
+    fieldName :: FieldName,
+    fieldValue :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_Field = Core.Name "openGql.grammar.Field"
+
+_Field_name = Core.Name "name"
+
+_Field_value = Core.Name "value"
+
+-- | A list of GQL field list elements
+type FieldList = [Field]
+
+_FieldList = Core.Name "openGql.grammar.FieldList"
+
+-- | A GQL field name
+type FieldName = String
+
+_FieldName = Core.Name "openGql.grammar.FieldName"
+
+-- | A GQL field type
+data FieldType =
+  FieldType {
+    fieldTypeFieldName :: FieldName,
+    fieldTypeTyped :: (Maybe Typed),
+    fieldTypeValueType :: ValueType}
+  deriving (Eq, Ord, Read, Show)
+
+_FieldType = Core.Name "openGql.grammar.FieldType"
+
+_FieldType_fieldName = Core.Name "fieldName"
+
+_FieldType_typed = Core.Name "typed"
+
+_FieldType_valueType = Core.Name "valueType"
+
+-- | A list of GQL field type list elements
+type FieldTypeList = [FieldType]
+
+_FieldTypeList = Core.Name "openGql.grammar.FieldTypeList"
+
+-- | An optional GQL field types specification
+type FieldTypesSpecification = (Maybe FieldTypeList)
+
+_FieldTypesSpecification = Core.Name "openGql.grammar.FieldTypesSpecification"
+
+-- | An optional GQL fields specification
+type FieldsSpecification = (Maybe FieldList)
+
+_FieldsSpecification = Core.Name "openGql.grammar.FieldsSpecification"
+
+-- | A GQL filter statement: one of several alternative forms
+data FilterStatement =
+  FilterStatementWhereClause WhereClause |
+  FilterStatementSearchCondition SearchCondition
+  deriving (Eq, Ord, Read, Show)
+
+_FilterStatement = Core.Name "openGql.grammar.FilterStatement"
+
+_FilterStatement_whereClause = Core.Name "whereClause"
+
+_FilterStatement_searchCondition = Core.Name "searchCondition"
+
+-- | A GQL fixed length, equivalent to a unsigned integer
+type FixedLength = UnsignedInteger
+
+_FixedLength = Core.Name "openGql.grammar.FixedLength"
+
+-- | A GQL fixed quantifier, equivalent to a unsigned integer
+type FixedQuantifier = UnsignedInteger
+
+_FixedQuantifier = Core.Name "openGql.grammar.FixedQuantifier"
+
+-- | A GQL float128 type
+data Float128Type =
+  Float128Type {
+    float128TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Float128Type = Core.Name "openGql.grammar.Float128Type"
+
+_Float128Type_notNull = Core.Name "notNull"
+
+-- | A GQL float16 type
+data Float16Type =
+  Float16Type {
+    float16TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Float16Type = Core.Name "openGql.grammar.Float16Type"
+
+_Float16Type_notNull = Core.Name "notNull"
+
+-- | A GQL float256 type
+data Float256Type =
+  Float256Type {
+    float256TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Float256Type = Core.Name "openGql.grammar.Float256Type"
+
+_Float256Type_notNull = Core.Name "notNull"
+
+-- | A GQL float32 type
+data Float32Type =
+  Float32Type {
+    float32TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Float32Type = Core.Name "openGql.grammar.Float32Type"
+
+_Float32Type_notNull = Core.Name "notNull"
+
+-- | A GQL float64 type
+data Float64Type =
+  Float64Type {
+    float64TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Float64Type = Core.Name "openGql.grammar.Float64Type"
+
+_Float64Type_notNull = Core.Name "notNull"
+
+-- | A GQL float type with precision
+data FloatTypeWithPrecision =
+  FloatTypeWithPrecision {
+    floatTypeWithPrecisionPrecisionAndScale :: (Maybe PrecisionAndScale),
+    floatTypeWithPrecisionNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_FloatTypeWithPrecision = Core.Name "openGql.grammar.FloatTypeWithPrecision"
+
+_FloatTypeWithPrecision_precisionAndScale = Core.Name "precisionAndScale"
+
+_FloatTypeWithPrecision_notNull = Core.Name "notNull"
+
+-- | A GQL floor function, equivalent to a numeric value expression
+type FloorFunction = NumericValueExpression
+
+_FloorFunction = Core.Name "openGql.grammar.FloorFunction"
+
+-- | A GQL focused linear data modifying statement: one of several alternative forms
+data FocusedLinearDataModifyingStatement =
+  FocusedLinearDataModifyingStatementSimple FocusedLinearDataModifyingStatementBody |
+  FocusedLinearDataModifyingStatementNested FocusedNestedDataModifyingProcedureSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedLinearDataModifyingStatement = Core.Name "openGql.grammar.FocusedLinearDataModifyingStatement"
+
+_FocusedLinearDataModifyingStatement_simple = Core.Name "simple"
+
+_FocusedLinearDataModifyingStatement_nested = Core.Name "nested"
+
+-- | A GQL focused linear data modifying statement body
+data FocusedLinearDataModifyingStatementBody =
+  FocusedLinearDataModifyingStatementBody {
+    focusedLinearDataModifyingStatementBodyUseGraph :: UseGraphClause,
+    focusedLinearDataModifyingStatementBodySimpleAccess :: SimpleLinearDataAccessingStatement,
+    focusedLinearDataModifyingStatementBodyPrimitiveResult :: (Maybe PrimitiveResultStatement)}
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedLinearDataModifyingStatementBody = Core.Name "openGql.grammar.FocusedLinearDataModifyingStatementBody"
+
+_FocusedLinearDataModifyingStatementBody_useGraph = Core.Name "useGraph"
+
+_FocusedLinearDataModifyingStatementBody_simpleAccess = Core.Name "simpleAccess"
+
+_FocusedLinearDataModifyingStatementBody_primitiveResult = Core.Name "primitiveResult"
+
+-- | A GQL focused linear query and primitive result statement part
+data FocusedLinearQueryAndPrimitiveResultStatementPart =
+  FocusedLinearQueryAndPrimitiveResultStatementPart {
+    focusedLinearQueryAndPrimitiveResultStatementPartUseGraph :: UseGraphClause,
+    focusedLinearQueryAndPrimitiveResultStatementPartSimple :: SimpleLinearQueryStatement,
+    focusedLinearQueryAndPrimitiveResultStatementPartPrimitiveResult :: PrimitiveResultStatement}
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedLinearQueryAndPrimitiveResultStatementPart =
+    Core.Name "openGql.grammar.FocusedLinearQueryAndPrimitiveResultStatementPart"
+
+_FocusedLinearQueryAndPrimitiveResultStatementPart_useGraph = Core.Name "useGraph"
+
+_FocusedLinearQueryAndPrimitiveResultStatementPart_simple = Core.Name "simple"
+
+_FocusedLinearQueryAndPrimitiveResultStatementPart_primitiveResult = Core.Name "primitiveResult"
+
+-- | A GQL focused linear query statement: one of several alternative forms
+data FocusedLinearQueryStatement =
+  FocusedLinearQueryStatementParts FocusedLinearQueryStatementPartsAndResult |
+  FocusedLinearQueryStatementPrimitive FocusedPrimitiveResultStatement |
+  FocusedLinearQueryStatementNested FocusedNestedQuerySpecification |
+  FocusedLinearQueryStatementSelect SelectStatement
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedLinearQueryStatement = Core.Name "openGql.grammar.FocusedLinearQueryStatement"
+
+_FocusedLinearQueryStatement_parts = Core.Name "parts"
+
+_FocusedLinearQueryStatement_primitive = Core.Name "primitive"
+
+_FocusedLinearQueryStatement_nested = Core.Name "nested"
+
+_FocusedLinearQueryStatement_select = Core.Name "select"
+
+-- | A GQL focused linear query statement part
+data FocusedLinearQueryStatementPart =
+  FocusedLinearQueryStatementPart {
+    focusedLinearQueryStatementPartUseGraph :: UseGraphClause,
+    focusedLinearQueryStatementPartSimple :: SimpleLinearQueryStatement}
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedLinearQueryStatementPart = Core.Name "openGql.grammar.FocusedLinearQueryStatementPart"
+
+_FocusedLinearQueryStatementPart_useGraph = Core.Name "useGraph"
+
+_FocusedLinearQueryStatementPart_simple = Core.Name "simple"
+
+-- | A GQL focused linear query statement parts and result
+data FocusedLinearQueryStatementPartsAndResult =
+  FocusedLinearQueryStatementPartsAndResult {
+    focusedLinearQueryStatementPartsAndResultParts :: [FocusedLinearQueryStatementPart],
+    focusedLinearQueryStatementPartsAndResultResult :: FocusedLinearQueryAndPrimitiveResultStatementPart}
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedLinearQueryStatementPartsAndResult = Core.Name "openGql.grammar.FocusedLinearQueryStatementPartsAndResult"
+
+_FocusedLinearQueryStatementPartsAndResult_parts = Core.Name "parts"
+
+_FocusedLinearQueryStatementPartsAndResult_result = Core.Name "result"
+
+-- | A GQL focused nested data modifying procedure specification
+data FocusedNestedDataModifyingProcedureSpecification =
+  FocusedNestedDataModifyingProcedureSpecification {
+    focusedNestedDataModifyingProcedureSpecificationUseGraph :: UseGraphClause,
+    focusedNestedDataModifyingProcedureSpecificationNestedSpec :: NestedDataModifyingProcedureSpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedNestedDataModifyingProcedureSpecification =
+    Core.Name "openGql.grammar.FocusedNestedDataModifyingProcedureSpecification"
+
+_FocusedNestedDataModifyingProcedureSpecification_useGraph = Core.Name "useGraph"
+
+_FocusedNestedDataModifyingProcedureSpecification_nestedSpec = Core.Name "nestedSpec"
+
+-- | A GQL focused nested query specification
+data FocusedNestedQuerySpecification =
+  FocusedNestedQuerySpecification {
+    focusedNestedQuerySpecificationUseGraph :: UseGraphClause,
+    focusedNestedQuerySpecificationNested :: NestedQuerySpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedNestedQuerySpecification = Core.Name "openGql.grammar.FocusedNestedQuerySpecification"
+
+_FocusedNestedQuerySpecification_useGraph = Core.Name "useGraph"
+
+_FocusedNestedQuerySpecification_nested = Core.Name "nested"
+
+-- | A GQL focused primitive result statement
+data FocusedPrimitiveResultStatement =
+  FocusedPrimitiveResultStatement {
+    focusedPrimitiveResultStatementUseGraph :: UseGraphClause,
+    focusedPrimitiveResultStatementPrimitiveResult :: PrimitiveResultStatement}
+  deriving (Eq, Ord, Read, Show)
+
+_FocusedPrimitiveResultStatement = Core.Name "openGql.grammar.FocusedPrimitiveResultStatement"
+
+_FocusedPrimitiveResultStatement_useGraph = Core.Name "useGraph"
+
+_FocusedPrimitiveResultStatement_primitiveResult = Core.Name "primitiveResult"
+
+-- | A GQL fold character string
+data FoldCharacterString =
+  FoldCharacterString {
+    foldCharacterStringCase :: Case,
+    foldCharacterStringValueExpression :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_FoldCharacterString = Core.Name "openGql.grammar.FoldCharacterString"
+
+_FoldCharacterString_case = Core.Name "case"
+
+_FoldCharacterString_valueExpression = Core.Name "valueExpression"
+
+-- | A GQL for item
+data ForItem =
+  ForItem {
+    forItemAlias :: ForItemAlias,
+    forItemSource :: ForItemSource}
+  deriving (Eq, Ord, Read, Show)
+
+_ForItem = Core.Name "openGql.grammar.ForItem"
+
+_ForItem_alias = Core.Name "alias"
+
+_ForItem_source = Core.Name "source"
+
+-- | A GQL for item alias, equivalent to a binding variable
+type ForItemAlias = BindingVariable
+
+_ForItemAlias = Core.Name "openGql.grammar.ForItemAlias"
+
+-- | A GQL for item source, equivalent to a value expression
+type ForItemSource = ValueExpression
+
+_ForItemSource = Core.Name "openGql.grammar.ForItemSource"
+
+-- | A GQL for ordinality or offset
+data ForOrdinalityOrOffset =
+  ForOrdinalityOrOffset {
+    forOrdinalityOrOffsetType :: OrdinalityOrOffsetType,
+    forOrdinalityOrOffsetVariable :: BindingVariable}
+  deriving (Eq, Ord, Read, Show)
+
+_ForOrdinalityOrOffset = Core.Name "openGql.grammar.ForOrdinalityOrOffset"
+
+_ForOrdinalityOrOffset_type = Core.Name "type"
+
+_ForOrdinalityOrOffset_variable = Core.Name "variable"
+
+-- | A GQL for statement
+data ForStatement =
+  ForStatement {
+    forStatementItem :: ForItem,
+    forStatementOrdinalityOrOffset :: (Maybe ForOrdinalityOrOffset)}
+  deriving (Eq, Ord, Read, Show)
+
+_ForStatement = Core.Name "openGql.grammar.ForStatement"
+
+_ForStatement_item = Core.Name "item"
+
+_ForStatement_ordinalityOrOffset = Core.Name "ordinalityOrOffset"
+
+-- | A GQL full edge any direction, equivalent to a element pattern filler
+type FullEdgeAnyDirection = ElementPatternFiller
+
+_FullEdgeAnyDirection = Core.Name "openGql.grammar.FullEdgeAnyDirection"
+
+-- | A GQL full edge left or right, equivalent to a element pattern filler
+type FullEdgeLeftOrRight = ElementPatternFiller
+
+_FullEdgeLeftOrRight = Core.Name "openGql.grammar.FullEdgeLeftOrRight"
+
+-- | A GQL full edge left or undirected, equivalent to a element pattern filler
+type FullEdgeLeftOrUndirected = ElementPatternFiller
+
+_FullEdgeLeftOrUndirected = Core.Name "openGql.grammar.FullEdgeLeftOrUndirected"
+
+-- | A GQL full edge pattern: one of several alternative forms
+data FullEdgePattern =
+  FullEdgePatternPointingLeft FullEdgePointingLeft |
+  FullEdgePatternUndirected FullEdgeUndirected |
+  FullEdgePatternPointingRight FullEdgePointingRight |
+  FullEdgePatternLeftOrUndirected FullEdgeLeftOrUndirected |
+  FullEdgePatternUndirectedOrRight FullEdgeUndirectedOrRight |
+  FullEdgePatternLeftOrRight FullEdgeLeftOrRight |
+  FullEdgePatternAnyDirection FullEdgeAnyDirection
+  deriving (Eq, Ord, Read, Show)
+
+_FullEdgePattern = Core.Name "openGql.grammar.FullEdgePattern"
+
+_FullEdgePattern_pointingLeft = Core.Name "pointingLeft"
+
+_FullEdgePattern_undirected = Core.Name "undirected"
+
+_FullEdgePattern_pointingRight = Core.Name "pointingRight"
+
+_FullEdgePattern_leftOrUndirected = Core.Name "leftOrUndirected"
+
+_FullEdgePattern_undirectedOrRight = Core.Name "undirectedOrRight"
+
+_FullEdgePattern_leftOrRight = Core.Name "leftOrRight"
+
+_FullEdgePattern_anyDirection = Core.Name "anyDirection"
+
+-- | A GQL full edge pointing left, equivalent to a element pattern filler
+type FullEdgePointingLeft = ElementPatternFiller
+
+_FullEdgePointingLeft = Core.Name "openGql.grammar.FullEdgePointingLeft"
+
+-- | A GQL full edge pointing right, equivalent to a element pattern filler
+type FullEdgePointingRight = ElementPatternFiller
+
+_FullEdgePointingRight = Core.Name "openGql.grammar.FullEdgePointingRight"
+
+-- | A GQL full edge undirected, equivalent to a element pattern filler
+type FullEdgeUndirected = ElementPatternFiller
+
+_FullEdgeUndirected = Core.Name "openGql.grammar.FullEdgeUndirected"
+
+-- | A GQL full edge undirected or right, equivalent to a element pattern filler
+type FullEdgeUndirectedOrRight = ElementPatternFiller
+
+_FullEdgeUndirectedOrRight = Core.Name "openGql.grammar.FullEdgeUndirectedOrRight"
+
+-- | A GQL general literal: one of several alternative forms
+data GeneralLiteral =
+  GeneralLiteralBoolean BooleanLiteral |
+  GeneralLiteralCharacterString CharacterStringLiteral |
+  GeneralLiteralByteString ByteStringLiteral |
+  GeneralLiteralTemporal TemporalLiteral |
+  GeneralLiteralDuration DurationLiteral |
+  GeneralLiteralNullLiteral NullLiteral |
+  GeneralLiteralList ListLiteral |
+  GeneralLiteralRecord RecordLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_GeneralLiteral = Core.Name "openGql.grammar.GeneralLiteral"
+
+_GeneralLiteral_boolean = Core.Name "boolean"
+
+_GeneralLiteral_characterString = Core.Name "characterString"
+
+_GeneralLiteral_byteString = Core.Name "byteString"
+
+_GeneralLiteral_temporal = Core.Name "temporal"
+
+_GeneralLiteral_duration = Core.Name "duration"
+
+_GeneralLiteral_nullLiteral = Core.Name "nullLiteral"
+
+_GeneralLiteral_list = Core.Name "list"
+
+_GeneralLiteral_record = Core.Name "record"
+
+-- | A GQL general logarithm argument, equivalent to a numeric value expression
+type GeneralLogarithmArgument = NumericValueExpression
+
+_GeneralLogarithmArgument = Core.Name "openGql.grammar.GeneralLogarithmArgument"
+
+-- | A GQL general logarithm base, equivalent to a numeric value expression
+type GeneralLogarithmBase = NumericValueExpression
+
+_GeneralLogarithmBase = Core.Name "openGql.grammar.GeneralLogarithmBase"
+
+-- | A GQL general logarithm function
+data GeneralLogarithmFunction =
+  GeneralLogarithmFunction {
+    generalLogarithmFunctionBase :: GeneralLogarithmBase,
+    generalLogarithmFunctionArgument :: GeneralLogarithmArgument}
+  deriving (Eq, Ord, Read, Show)
+
+_GeneralLogarithmFunction = Core.Name "openGql.grammar.GeneralLogarithmFunction"
+
+_GeneralLogarithmFunction_base = Core.Name "base"
+
+_GeneralLogarithmFunction_argument = Core.Name "argument"
+
+-- | A GQL general quantifier
+data GeneralQuantifier =
+  GeneralQuantifier {
+    generalQuantifierLowerBound :: (Maybe LowerBound),
+    generalQuantifierUpperBound :: (Maybe UpperBound)}
+  deriving (Eq, Ord, Read, Show)
+
+_GeneralQuantifier = Core.Name "openGql.grammar.GeneralQuantifier"
+
+_GeneralQuantifier_lowerBound = Core.Name "lowerBound"
+
+_GeneralQuantifier_upperBound = Core.Name "upperBound"
+
+-- | A GQL general set function
+data GeneralSetFunction =
+  GeneralSetFunction {
+    generalSetFunctionFunctionType :: GeneralSetFunctionType,
+    generalSetFunctionSetQuantifier :: (Maybe SetQuantifier),
+    generalSetFunctionValueExpression :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_GeneralSetFunction = Core.Name "openGql.grammar.GeneralSetFunction"
+
+_GeneralSetFunction_functionType = Core.Name "functionType"
+
+_GeneralSetFunction_setQuantifier = Core.Name "setQuantifier"
+
+_GeneralSetFunction_valueExpression = Core.Name "valueExpression"
+
+-- | A GQL general set function type: one of a fixed set of alternatives
+data GeneralSetFunctionType =
+  GeneralSetFunctionTypeAvg |
+  GeneralSetFunctionTypeCount |
+  GeneralSetFunctionTypeMax |
+  GeneralSetFunctionTypeMin |
+  GeneralSetFunctionTypeSum |
+  GeneralSetFunctionTypeCollectList |
+  GeneralSetFunctionTypeStddevSamp |
+  GeneralSetFunctionTypeStddevPop
+  deriving (Eq, Ord, Read, Show)
+
+_GeneralSetFunctionType = Core.Name "openGql.grammar.GeneralSetFunctionType"
+
+_GeneralSetFunctionType_avg = Core.Name "avg"
+
+_GeneralSetFunctionType_count = Core.Name "count"
+
+_GeneralSetFunctionType_max = Core.Name "max"
+
+_GeneralSetFunctionType_min = Core.Name "min"
+
+_GeneralSetFunctionType_sum = Core.Name "sum"
+
+_GeneralSetFunctionType_collectList = Core.Name "collectList"
+
+_GeneralSetFunctionType_stddevSamp = Core.Name "stddevSamp"
+
+_GeneralSetFunctionType_stddevPop = Core.Name "stddevPop"
+
+-- | A GQL general value specification: one of several alternative forms
+data GeneralValueSpecification =
+  GeneralValueSpecificationDynamicParameterSpecification DynamicParameterSpecification |
+  GeneralValueSpecificationSessionUser
+  deriving (Eq, Ord, Read, Show)
+
+_GeneralValueSpecification = Core.Name "openGql.grammar.GeneralValueSpecification"
+
+_GeneralValueSpecification_dynamicParameterSpecification = Core.Name "dynamicParameterSpecification"
+
+_GeneralValueSpecification_sessionUser = Core.Name "sessionUser"
+
+-- | A GQL gql program
+data GqlProgram =
+  GqlProgram {
+    gqlProgramActivity :: (Maybe ProgramActivity),
+    gqlProgramClose :: (Maybe SessionCloseCommand)}
+  deriving (Eq, Ord, Read, Show)
+
+_GqlProgram = Core.Name "openGql.grammar.GqlProgram"
+
+_GqlProgram_activity = Core.Name "activity"
+
+_GqlProgram_close = Core.Name "close"
+
+-- | A GQL graph and nested query specification
+data GraphAndNestedQuerySpecification =
+  GraphAndNestedQuerySpecification {
+    graphAndNestedQuerySpecificationGraphExpression :: GraphExpression,
+    graphAndNestedQuerySpecificationNested :: NestedQuerySpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_GraphAndNestedQuerySpecification = Core.Name "openGql.grammar.GraphAndNestedQuerySpecification"
+
+_GraphAndNestedQuerySpecification_graphExpression = Core.Name "graphExpression"
+
+_GraphAndNestedQuerySpecification_nested = Core.Name "nested"
+
+-- | A GQL graph expression: one of several alternative forms
+data GraphExpression =
+  GraphExpressionObject ObjectExpressionPrimary |
+  GraphExpressionReference GraphReference |
+  GraphExpressionName ObjectNameOrBindingVariable |
+  GraphExpressionCurrent CurrentGraph
+  deriving (Eq, Ord, Read, Show)
+
+_GraphExpression = Core.Name "openGql.grammar.GraphExpression"
+
+_GraphExpression_object = Core.Name "object"
+
+_GraphExpression_reference = Core.Name "reference"
+
+_GraphExpression_name = Core.Name "name"
+
+_GraphExpression_current = Core.Name "current"
+
+-- | A GQL graph initializer
+type GraphInitializer = ()
+
+_GraphInitializer = Core.Name "openGql.grammar.GraphInitializer"
+
+-- | A GQL graph name
+type GraphName = String
+
+_GraphName = Core.Name "openGql.grammar.GraphName"
+
+-- | A GQL graph pattern
+data GraphPattern =
+  GraphPattern {
+    graphPatternMatchMode :: (Maybe MatchMode),
+    graphPatternPathPatterns :: PathPatternList,
+    graphPatternKeepClause :: (Maybe KeepClause),
+    graphPatternWhereClause :: (Maybe GraphPatternWhereClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_GraphPattern = Core.Name "openGql.grammar.GraphPattern"
+
+_GraphPattern_matchMode = Core.Name "matchMode"
+
+_GraphPattern_pathPatterns = Core.Name "pathPatterns"
+
+_GraphPattern_keepClause = Core.Name "keepClause"
+
+_GraphPattern_whereClause = Core.Name "whereClause"
+
+-- | A GQL graph pattern binding table
+data GraphPatternBindingTable =
+  GraphPatternBindingTable {
+    graphPatternBindingTablePattern :: GraphPattern,
+    graphPatternBindingTableYieldClause :: (Maybe GraphPatternYieldClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_GraphPatternBindingTable = Core.Name "openGql.grammar.GraphPatternBindingTable"
+
+_GraphPatternBindingTable_pattern = Core.Name "pattern"
+
+_GraphPatternBindingTable_yieldClause = Core.Name "yieldClause"
+
+-- | A GQL graph pattern quantifier: one of several alternative forms
+data GraphPatternQuantifier =
+  GraphPatternQuantifierAsterisk |
+  GraphPatternQuantifierPlusSign |
+  GraphPatternQuantifierFixed FixedQuantifier |
+  GraphPatternQuantifierGeneral GeneralQuantifier
+  deriving (Eq, Ord, Read, Show)
+
+_GraphPatternQuantifier = Core.Name "openGql.grammar.GraphPatternQuantifier"
+
+_GraphPatternQuantifier_asterisk = Core.Name "asterisk"
+
+_GraphPatternQuantifier_plusSign = Core.Name "plusSign"
+
+_GraphPatternQuantifier_fixed = Core.Name "fixed"
+
+_GraphPatternQuantifier_general = Core.Name "general"
+
+-- | A GQL graph pattern where clause, equivalent to a search condition
+type GraphPatternWhereClause = SearchCondition
+
+_GraphPatternWhereClause = Core.Name "openGql.grammar.GraphPatternWhereClause"
+
+-- | A GQL graph pattern yield clause, equivalent to a graph pattern yield item list
+type GraphPatternYieldClause = GraphPatternYieldItemList
+
+_GraphPatternYieldClause = Core.Name "openGql.grammar.GraphPatternYieldClause"
+
+-- | A GQL graph pattern yield item, equivalent to a binding variable reference
+type GraphPatternYieldItem = BindingVariableReference
+
+_GraphPatternYieldItem = Core.Name "openGql.grammar.GraphPatternYieldItem"
+
+-- | A GQL graph pattern yield item list: one of several alternative forms
+data GraphPatternYieldItemList =
+  GraphPatternYieldItemListItems [GraphPatternYieldItem] |
+  GraphPatternYieldItemListNoBindings
+  deriving (Eq, Ord, Read, Show)
+
+_GraphPatternYieldItemList = Core.Name "openGql.grammar.GraphPatternYieldItemList"
+
+_GraphPatternYieldItemList_items = Core.Name "items"
+
+_GraphPatternYieldItemList_noBindings = Core.Name "noBindings"
+
+-- | A GQL graph reference: one of several alternative forms
+data GraphReference =
+  GraphReferenceParentAndGraphName ParentAndGraphName |
+  GraphReferenceDelimitedGraphName DelimitedGraphName |
+  GraphReferenceHomeGraph HomeGraph |
+  GraphReferenceParameterSpecification ReferenceParameterSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_GraphReference = Core.Name "openGql.grammar.GraphReference"
+
+_GraphReference_parentAndGraphName = Core.Name "parentAndGraphName"
+
+_GraphReference_delimitedGraphName = Core.Name "delimitedGraphName"
+
+_GraphReference_homeGraph = Core.Name "homeGraph"
+
+_GraphReference_parameterSpecification = Core.Name "parameterSpecification"
+
+-- | A GQL graph reference value type: one of several alternative forms
+data GraphReferenceValueType =
+  GraphReferenceValueTypeOpen OpenGraphReferenceValueType |
+  GraphReferenceValueTypeClosed ClosedGraphReferenceValueType
+  deriving (Eq, Ord, Read, Show)
+
+_GraphReferenceValueType = Core.Name "openGql.grammar.GraphReferenceValueType"
+
+_GraphReferenceValueType_open = Core.Name "open"
+
+_GraphReferenceValueType_closed = Core.Name "closed"
+
+-- | A GQL graph source, equivalent to a graph expression
+type GraphSource = GraphExpression
+
+_GraphSource = Core.Name "openGql.grammar.GraphSource"
+
+-- | A GQL graph type like graph, equivalent to a graph expression
+type GraphTypeLikeGraph = GraphExpression
+
+_GraphTypeLikeGraph = Core.Name "openGql.grammar.GraphTypeLikeGraph"
+
+-- | A GQL graph type name
+type GraphTypeName = String
+
+_GraphTypeName = Core.Name "openGql.grammar.GraphTypeName"
+
+-- | A GQL graph type option: one of several alternative forms
+data GraphTypeOption =
+  GraphTypeOptionOpenGraphType OpenGraphType |
+  GraphTypeOptionOfGraphType OfGraphType
+  deriving (Eq, Ord, Read, Show)
+
+_GraphTypeOption = Core.Name "openGql.grammar.GraphTypeOption"
+
+_GraphTypeOption_openGraphType = Core.Name "openGraphType"
+
+_GraphTypeOption_ofGraphType = Core.Name "ofGraphType"
+
+-- | A GQL graph type reference: one of several alternative forms
+data GraphTypeReference =
+  GraphTypeReferenceParentAndTypeName CatalogGraphTypeParentAndName |
+  GraphTypeReferenceParameterSpecification ReferenceParameterSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_GraphTypeReference = Core.Name "openGql.grammar.GraphTypeReference"
+
+_GraphTypeReference_parentAndTypeName = Core.Name "parentAndTypeName"
+
+_GraphTypeReference_parameterSpecification = Core.Name "parameterSpecification"
+
+-- | A GQL graph type source: one of several alternative forms
+data GraphTypeSource =
+  GraphTypeSourceCopyOf CopyOfGraphType |
+  GraphTypeSourceLikeGraph GraphTypeLikeGraph |
+  GraphTypeSourceNestedSpecification NestedGraphTypeSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_GraphTypeSource = Core.Name "openGql.grammar.GraphTypeSource"
+
+_GraphTypeSource_copyOf = Core.Name "copyOf"
+
+_GraphTypeSource_likeGraph = Core.Name "likeGraph"
+
+_GraphTypeSource_nestedSpecification = Core.Name "nestedSpecification"
+
+-- | A GQL graph type specification body, equivalent to a element type list
+type GraphTypeSpecificationBody = ElementTypeList
+
+_GraphTypeSpecificationBody = Core.Name "openGql.grammar.GraphTypeSpecificationBody"
+
+-- | A GQL graph variable definition
+data GraphVariableDefinition =
+  GraphVariableDefinition {
+    graphVariableDefinitionVariable :: BindingVariable,
+    graphVariableDefinitionInitializer :: OptTypedGraphInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_GraphVariableDefinition = Core.Name "openGql.grammar.GraphVariableDefinition"
+
+_GraphVariableDefinition_variable = Core.Name "variable"
+
+_GraphVariableDefinition_initializer = Core.Name "initializer"
+
+-- | A GQL group by clause, equivalent to a grouping element list
+type GroupByClause = GroupingElementList
+
+_GroupByClause = Core.Name "openGql.grammar.GroupByClause"
+
+-- | A GQL grouping element, equivalent to a binding variable reference
+type GroupingElement = BindingVariableReference
+
+_GroupingElement = Core.Name "openGql.grammar.GroupingElement"
+
+-- | A GQL grouping element list: one of several alternative forms
+data GroupingElementList =
+  GroupingElementListElements [GroupingElement] |
+  GroupingElementListEmptySet
+  deriving (Eq, Ord, Read, Show)
+
+_GroupingElementList = Core.Name "openGql.grammar.GroupingElementList"
+
+_GroupingElementList_elements = Core.Name "elements"
+
+_GroupingElementList_emptySet = Core.Name "emptySet"
+
+-- | A GQL having clause, equivalent to a search condition
+type HavingClause = SearchCondition
+
+_HavingClause = Core.Name "openGql.grammar.HavingClause"
+
+-- | A GQL home graph: one of a fixed set of alternatives
+data HomeGraph =
+  HomeGraphHomePropertyGraph |
+  HomeGraphHomeGraph
+  deriving (Eq, Ord, Read, Show)
+
+_HomeGraph = Core.Name "openGql.grammar.HomeGraph"
+
+_HomeGraph_homePropertyGraph = Core.Name "homePropertyGraph"
+
+_HomeGraph_homeGraph = Core.Name "homeGraph"
+
+-- | A GQL identifier
+type Identifier = String
+
+_Identifier = Core.Name "openGql.grammar.Identifier"
+
+-- | A GQL immaterial value type: one of several alternative forms
+data ImmaterialValueType =
+  ImmaterialValueTypeNullType NullType |
+  ImmaterialValueTypeEmptyType EmptyType
+  deriving (Eq, Ord, Read, Show)
+
+_ImmaterialValueType = Core.Name "openGql.grammar.ImmaterialValueType"
+
+_ImmaterialValueType_nullType = Core.Name "nullType"
+
+_ImmaterialValueType_emptyType = Core.Name "emptyType"
+
+-- | A GQL implies: one of a fixed set of alternatives
+data Implies =
+  ImpliesRightDoubleArrow |
+  ImpliesImplies
+  deriving (Eq, Ord, Read, Show)
+
+_Implies = Core.Name "openGql.grammar.Implies"
+
+_Implies_rightDoubleArrow = Core.Name "rightDoubleArrow"
+
+_Implies_implies = Core.Name "implies"
+
+-- | A GQL independent value expression, equivalent to a numeric value expression
+type IndependentValueExpression = NumericValueExpression
+
+_IndependentValueExpression = Core.Name "openGql.grammar.IndependentValueExpression"
+
+-- | A GQL inline procedure call
+data InlineProcedureCall =
+  InlineProcedureCall {
+    inlineProcedureCallScope :: (Maybe VariableScopeClause),
+    inlineProcedureCallNested :: NestedProcedureSpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_InlineProcedureCall = Core.Name "openGql.grammar.InlineProcedureCall"
+
+_InlineProcedureCall_scope = Core.Name "scope"
+
+_InlineProcedureCall_nested = Core.Name "nested"
+
+-- | A GQL insert edge and node
+data InsertEdgeAndNode =
+  InsertEdgeAndNode {
+    insertEdgeAndNodeEdge :: InsertEdgePattern,
+    insertEdgeAndNodeNode :: InsertNodePattern}
+  deriving (Eq, Ord, Read, Show)
+
+_InsertEdgeAndNode = Core.Name "openGql.grammar.InsertEdgeAndNode"
+
+_InsertEdgeAndNode_edge = Core.Name "edge"
+
+_InsertEdgeAndNode_node = Core.Name "node"
+
+-- | A GQL insert edge pattern: one of several alternative forms
+data InsertEdgePattern =
+  InsertEdgePatternPointingLeft InsertEdgePointingLeft |
+  InsertEdgePatternPointingRight InsertEdgePointingRight |
+  InsertEdgePatternUndirected InsertEdgeUndirected
+  deriving (Eq, Ord, Read, Show)
+
+_InsertEdgePattern = Core.Name "openGql.grammar.InsertEdgePattern"
+
+_InsertEdgePattern_pointingLeft = Core.Name "pointingLeft"
+
+_InsertEdgePattern_pointingRight = Core.Name "pointingRight"
+
+_InsertEdgePattern_undirected = Core.Name "undirected"
+
+-- | An optional GQL insert edge pointing left
+type InsertEdgePointingLeft = (Maybe InsertElementPatternFiller)
+
+_InsertEdgePointingLeft = Core.Name "openGql.grammar.InsertEdgePointingLeft"
+
+-- | An optional GQL insert edge pointing right
+type InsertEdgePointingRight = (Maybe InsertElementPatternFiller)
+
+_InsertEdgePointingRight = Core.Name "openGql.grammar.InsertEdgePointingRight"
+
+-- | An optional GQL insert edge undirected
+type InsertEdgeUndirected = (Maybe InsertElementPatternFiller)
+
+_InsertEdgeUndirected = Core.Name "openGql.grammar.InsertEdgeUndirected"
+
+-- | A GQL insert element pattern filler
+data InsertElementPatternFiller =
+  InsertElementPatternFiller {
+    insertElementPatternFillerVariableDeclaration :: (Maybe ElementVariableDeclaration),
+    insertElementPatternFillerLabelAndProperties :: (Maybe LabelAndPropertySetSpecification)}
+  deriving (Eq, Ord, Read, Show)
+
+_InsertElementPatternFiller = Core.Name "openGql.grammar.InsertElementPatternFiller"
+
+_InsertElementPatternFiller_variableDeclaration = Core.Name "variableDeclaration"
+
+_InsertElementPatternFiller_labelAndProperties = Core.Name "labelAndProperties"
+
+-- | A GQL insert graph pattern, equivalent to a insert path pattern list
+type InsertGraphPattern = InsertPathPatternList
+
+_InsertGraphPattern = Core.Name "openGql.grammar.InsertGraphPattern"
+
+-- | An optional GQL insert node pattern
+type InsertNodePattern = (Maybe InsertElementPatternFiller)
+
+_InsertNodePattern = Core.Name "openGql.grammar.InsertNodePattern"
+
+-- | A GQL insert path pattern
+data InsertPathPattern =
+  InsertPathPattern {
+    insertPathPatternStartNode :: InsertNodePattern,
+    insertPathPatternEdgesAndNodes :: [InsertEdgeAndNode]}
+  deriving (Eq, Ord, Read, Show)
+
+_InsertPathPattern = Core.Name "openGql.grammar.InsertPathPattern"
+
+_InsertPathPattern_startNode = Core.Name "startNode"
+
+_InsertPathPattern_edgesAndNodes = Core.Name "edgesAndNodes"
+
+-- | A list of GQL insert path pattern list elements
+type InsertPathPatternList = [InsertPathPattern]
+
+_InsertPathPatternList = Core.Name "openGql.grammar.InsertPathPatternList"
+
+-- | A GQL insert statement, equivalent to a insert graph pattern
+type InsertStatement = InsertGraphPattern
+
+_InsertStatement = Core.Name "openGql.grammar.InsertStatement"
+
+-- | A GQL int128 type
+data Int128Type =
+  Int128Type {
+    int128TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Int128Type = Core.Name "openGql.grammar.Int128Type"
+
+_Int128Type_notNull = Core.Name "notNull"
+
+-- | A GQL int16 type
+data Int16Type =
+  Int16Type {
+    int16TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Int16Type = Core.Name "openGql.grammar.Int16Type"
+
+_Int16Type_notNull = Core.Name "notNull"
+
+-- | A GQL int256 type
+data Int256Type =
+  Int256Type {
+    int256TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Int256Type = Core.Name "openGql.grammar.Int256Type"
+
+_Int256Type_notNull = Core.Name "notNull"
+
+-- | A GQL int32 type
+data Int32Type =
+  Int32Type {
+    int32TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Int32Type = Core.Name "openGql.grammar.Int32Type"
+
+_Int32Type_notNull = Core.Name "notNull"
+
+-- | A GQL int64 type
+data Int64Type =
+  Int64Type {
+    int64TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Int64Type = Core.Name "openGql.grammar.Int64Type"
+
+_Int64Type_notNull = Core.Name "notNull"
+
+-- | A GQL int8 type
+data Int8Type =
+  Int8Type {
+    int8TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Int8Type = Core.Name "openGql.grammar.Int8Type"
+
+_Int8Type_notNull = Core.Name "notNull"
+
+-- | A GQL int with precision
+data IntWithPrecision =
+  IntWithPrecision {
+    intWithPrecisionPrecision :: (Maybe Precision),
+    intWithPrecisionNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_IntWithPrecision = Core.Name "openGql.grammar.IntWithPrecision"
+
+_IntWithPrecision_precision = Core.Name "precision"
+
+_IntWithPrecision_notNull = Core.Name "notNull"
+
+-- | A GQL integer128 type
+data Integer128Type =
+  Integer128Type {
+    integer128TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Integer128Type = Core.Name "openGql.grammar.Integer128Type"
+
+_Integer128Type_notNull = Core.Name "notNull"
+
+-- | A GQL integer16 type
+data Integer16Type =
+  Integer16Type {
+    integer16TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Integer16Type = Core.Name "openGql.grammar.Integer16Type"
+
+_Integer16Type_notNull = Core.Name "notNull"
+
+-- | A GQL integer256 type
+data Integer256Type =
+  Integer256Type {
+    integer256TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Integer256Type = Core.Name "openGql.grammar.Integer256Type"
+
+_Integer256Type_notNull = Core.Name "notNull"
+
+-- | A GQL integer32 type
+data Integer32Type =
+  Integer32Type {
+    integer32TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Integer32Type = Core.Name "openGql.grammar.Integer32Type"
+
+_Integer32Type_notNull = Core.Name "notNull"
+
+-- | A GQL integer64 type
+data Integer64Type =
+  Integer64Type {
+    integer64TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Integer64Type = Core.Name "openGql.grammar.Integer64Type"
+
+_Integer64Type_notNull = Core.Name "notNull"
+
+-- | A GQL integer8 type
+data Integer8Type =
+  Integer8Type {
+    integer8TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Integer8Type = Core.Name "openGql.grammar.Integer8Type"
+
+_Integer8Type_notNull = Core.Name "notNull"
+
+-- | A GQL integer with precision
+data IntegerWithPrecision =
+  IntegerWithPrecision {
+    integerWithPrecisionPrecision :: (Maybe Precision),
+    integerWithPrecisionNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_IntegerWithPrecision = Core.Name "openGql.grammar.IntegerWithPrecision"
+
+_IntegerWithPrecision_precision = Core.Name "precision"
+
+_IntegerWithPrecision_notNull = Core.Name "notNull"
+
+-- | A GQL is label expression
+data IsLabelExpression =
+  IsLabelExpression {
+    isLabelExpressionIsOrColon :: IsOrColon,
+    isLabelExpressionLabel :: LabelExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_IsLabelExpression = Core.Name "openGql.grammar.IsLabelExpression"
+
+_IsLabelExpression_isOrColon = Core.Name "isOrColon"
+
+_IsLabelExpression_label = Core.Name "label"
+
+-- | A GQL is labeled or colon: one of several alternative forms
+data IsLabeledOrColon =
+  IsLabeledOrColonNot Bool |
+  IsLabeledOrColonColon
+  deriving (Eq, Ord, Read, Show)
+
+_IsLabeledOrColon = Core.Name "openGql.grammar.IsLabeledOrColon"
+
+_IsLabeledOrColon_not = Core.Name "not"
+
+_IsLabeledOrColon_colon = Core.Name "colon"
+
+-- | A GQL is not expression
+data IsNotExpr =
+  IsNotExpr {
+    isNotExprValueExpression :: ValueExpression,
+    isNotExprNot :: Bool,
+    isNotExprTruthValue :: TruthValue}
+  deriving (Eq, Ord, Read, Show)
+
+_IsNotExpr = Core.Name "openGql.grammar.IsNotExpr"
+
+_IsNotExpr_valueExpression = Core.Name "valueExpression"
+
+_IsNotExpr_not = Core.Name "not"
+
+_IsNotExpr_truthValue = Core.Name "truthValue"
+
+-- | A GQL is or colon: one of a fixed set of alternatives
+data IsOrColon =
+  IsOrColonIs |
+  IsOrColonColon
+  deriving (Eq, Ord, Read, Show)
+
+_IsOrColon = Core.Name "openGql.grammar.IsOrColon"
+
+_IsOrColon_is = Core.Name "is"
+
+_IsOrColon_colon = Core.Name "colon"
+
+-- | A GQL is or colon with labels
+data IsOrColonWithLabels =
+  IsOrColonWithLabels {
+    isOrColonWithLabelsIsOrColon :: IsOrColon,
+    isOrColonWithLabelsLabels :: LabelSetSpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_IsOrColonWithLabels = Core.Name "openGql.grammar.IsOrColonWithLabels"
+
+_IsOrColonWithLabels_isOrColon = Core.Name "isOrColon"
+
+_IsOrColonWithLabels_labels = Core.Name "labels"
+
+-- | A GQL keep clause, equivalent to a path pattern prefix
+type KeepClause = PathPatternPrefix
+
+_KeepClause = Core.Name "openGql.grammar.KeepClause"
+
+-- | A GQL label and property set specification
+data LabelAndPropertySetSpecification =
+  LabelAndPropertySetSpecification {
+    labelAndPropertySetSpecificationIsOrColon :: (Maybe IsOrColon),
+    labelAndPropertySetSpecificationLabelSet :: (Maybe LabelSetSpecification),
+    labelAndPropertySetSpecificationPropertySpecification :: (Maybe ElementPropertySpecification)}
+  deriving (Eq, Ord, Read, Show)
+
+_LabelAndPropertySetSpecification = Core.Name "openGql.grammar.LabelAndPropertySetSpecification"
+
+_LabelAndPropertySetSpecification_isOrColon = Core.Name "isOrColon"
+
+_LabelAndPropertySetSpecification_labelSet = Core.Name "labelSet"
+
+_LabelAndPropertySetSpecification_propertySpecification = Core.Name "propertySpecification"
+
+-- | A GQL label expression: one of several alternative forms
+data LabelExpression =
+  LabelExpressionNegation LabelExpression |
+  LabelExpressionConjunction ConjunctionLabelExpression |
+  LabelExpressionDisjunction DisjunctionLabelExpression |
+  LabelExpressionName LabelName |
+  LabelExpressionWildcard |
+  LabelExpressionParenthesized LabelExpression
+  deriving (Eq, Ord, Read, Show)
+
+_LabelExpression = Core.Name "openGql.grammar.LabelExpression"
+
+_LabelExpression_negation = Core.Name "negation"
+
+_LabelExpression_conjunction = Core.Name "conjunction"
+
+_LabelExpression_disjunction = Core.Name "disjunction"
+
+_LabelExpression_name = Core.Name "name"
+
+_LabelExpression_wildcard = Core.Name "wildcard"
+
+_LabelExpression_parenthesized = Core.Name "parenthesized"
+
+-- | A GQL label name
+type LabelName = String
+
+_LabelName = Core.Name "openGql.grammar.LabelName"
+
+-- | A GQL label set phrase: one of several alternative forms
+data LabelSetPhrase =
+  LabelSetPhraseSingleLabel LabelName |
+  LabelSetPhraseMultipleLabels LabelSetSpecification |
+  LabelSetPhraseIsOrColonWithLabels IsOrColonWithLabels
+  deriving (Eq, Ord, Read, Show)
+
+_LabelSetPhrase = Core.Name "openGql.grammar.LabelSetPhrase"
+
+_LabelSetPhrase_singleLabel = Core.Name "singleLabel"
+
+_LabelSetPhrase_multipleLabels = Core.Name "multipleLabels"
+
+_LabelSetPhrase_isOrColonWithLabels = Core.Name "isOrColonWithLabels"
+
+-- | A list of GQL label set specification elements
+type LabelSetSpecification = [LabelName]
+
+_LabelSetSpecification = Core.Name "openGql.grammar.LabelSetSpecification"
+
+-- | A GQL labeled predicate
+data LabeledPredicate =
+  LabeledPredicate {
+    labeledPredicateElementVariableReference :: ElementVariableReference,
+    labeledPredicateLabeledPart :: LabeledPredicatePart2}
+  deriving (Eq, Ord, Read, Show)
+
+_LabeledPredicate = Core.Name "openGql.grammar.LabeledPredicate"
+
+_LabeledPredicate_elementVariableReference = Core.Name "elementVariableReference"
+
+_LabeledPredicate_labeledPart = Core.Name "labeledPart"
+
+-- | A GQL labeled predicate part2
+data LabeledPredicatePart2 =
+  LabeledPredicatePart2 {
+    labeledPredicatePart2IsLabeledOrColon :: IsLabeledOrColon,
+    labeledPredicatePart2LabelExpression :: LabelExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_LabeledPredicatePart2 = Core.Name "openGql.grammar.LabeledPredicatePart2"
+
+_LabeledPredicatePart2_isLabeledOrColon = Core.Name "isLabeledOrColon"
+
+_LabeledPredicatePart2_labelExpression = Core.Name "labelExpression"
+
+-- | A GQL length expression: one of several alternative forms
+data LengthExpression =
+  LengthExpressionChar CharLengthExpression |
+  LengthExpressionByte ByteLengthExpression |
+  LengthExpressionPath PathLengthExpression
+  deriving (Eq, Ord, Read, Show)
+
+_LengthExpression = Core.Name "openGql.grammar.LengthExpression"
+
+_LengthExpression_char = Core.Name "char"
+
+_LengthExpression_byte = Core.Name "byte"
+
+_LengthExpression_path = Core.Name "path"
+
+-- | A GQL let statement, equivalent to a let variable definition list
+type LetStatement = LetVariableDefinitionList
+
+_LetStatement = Core.Name "openGql.grammar.LetStatement"
+
+-- | A GQL let value expression
+data LetValueExpression =
+  LetValueExpression {
+    letValueExpressionLetVariables :: LetVariableDefinitionList,
+    letValueExpressionValueExpression :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_LetValueExpression = Core.Name "openGql.grammar.LetValueExpression"
+
+_LetValueExpression_letVariables = Core.Name "letVariables"
+
+_LetValueExpression_valueExpression = Core.Name "valueExpression"
+
+-- | A GQL let variable definition: one of several alternative forms
+data LetVariableDefinition =
+  LetVariableDefinitionValueVariable ValueVariableDefinition |
+  LetVariableDefinitionBindingEqualsValue BindingEqualsValue
+  deriving (Eq, Ord, Read, Show)
+
+_LetVariableDefinition = Core.Name "openGql.grammar.LetVariableDefinition"
+
+_LetVariableDefinition_valueVariable = Core.Name "valueVariable"
+
+_LetVariableDefinition_bindingEqualsValue = Core.Name "bindingEqualsValue"
+
+-- | A list of GQL let variable definition list elements
+type LetVariableDefinitionList = [LetVariableDefinition]
+
+_LetVariableDefinitionList = Core.Name "openGql.grammar.LetVariableDefinitionList"
+
+-- | A GQL limit clause, equivalent to a non negative integer specification
+type LimitClause = NonNegativeIntegerSpecification
+
+_LimitClause = Core.Name "openGql.grammar.LimitClause"
+
+-- | A list of GQL linear catalog modifying statement elements
+type LinearCatalogModifyingStatement = [SimpleCatalogModifyingStatement]
+
+_LinearCatalogModifyingStatement = Core.Name "openGql.grammar.LinearCatalogModifyingStatement"
+
+-- | A GQL linear data modifying statement: one of several alternative forms
+data LinearDataModifyingStatement =
+  LinearDataModifyingStatementFocused FocusedLinearDataModifyingStatement |
+  LinearDataModifyingStatementAmbient AmbientLinearDataModifyingStatement
+  deriving (Eq, Ord, Read, Show)
+
+_LinearDataModifyingStatement = Core.Name "openGql.grammar.LinearDataModifyingStatement"
+
+_LinearDataModifyingStatement_focused = Core.Name "focused"
+
+_LinearDataModifyingStatement_ambient = Core.Name "ambient"
+
+-- | A GQL linear query statement: one of several alternative forms
+data LinearQueryStatement =
+  LinearQueryStatementFocused FocusedLinearQueryStatement |
+  LinearQueryStatementAmbient AmbientLinearQueryStatement
+  deriving (Eq, Ord, Read, Show)
+
+_LinearQueryStatement = Core.Name "openGql.grammar.LinearQueryStatement"
+
+_LinearQueryStatement_focused = Core.Name "focused"
+
+_LinearQueryStatement_ambient = Core.Name "ambient"
+
+-- | A GQL list element, equivalent to a value expression
+type ListElement = ValueExpression
+
+_ListElement = Core.Name "openGql.grammar.ListElement"
+
+-- | A list of GQL list element list elements
+type ListElementList = [ListElement]
+
+_ListElementList = Core.Name "openGql.grammar.ListElementList"
+
+-- | A GQL list literal, equivalent to a list value constructor by enumeration
+type ListLiteral = ListValueConstructorByEnumeration
+
+_ListLiteral = Core.Name "openGql.grammar.ListLiteral"
+
+-- | A GQL list value constructor, equivalent to a list value constructor by enumeration
+type ListValueConstructor = ListValueConstructorByEnumeration
+
+_ListValueConstructor = Core.Name "openGql.grammar.ListValueConstructor"
+
+-- | A GQL list value constructor by enumeration
+data ListValueConstructorByEnumeration =
+  ListValueConstructorByEnumeration {
+    listValueConstructorByEnumerationListValueTypeName :: (Maybe ListValueTypeName),
+    listValueConstructorByEnumerationElements :: (Maybe ListElementList)}
+  deriving (Eq, Ord, Read, Show)
+
+_ListValueConstructorByEnumeration = Core.Name "openGql.grammar.ListValueConstructorByEnumeration"
+
+_ListValueConstructorByEnumeration_listValueTypeName = Core.Name "listValueTypeName"
+
+_ListValueConstructorByEnumeration_elements = Core.Name "elements"
+
+-- | A GQL list value expression, equivalent to a value expression
+type ListValueExpression = ValueExpression
+
+_ListValueExpression = Core.Name "openGql.grammar.ListValueExpression"
+
+-- | A GQL list value function: one of several alternative forms
+data ListValueFunction =
+  ListValueFunctionTrim TrimListFunction |
+  ListValueFunctionElements ElementsFunction
+  deriving (Eq, Ord, Read, Show)
+
+_ListValueFunction = Core.Name "openGql.grammar.ListValueFunction"
+
+_ListValueFunction_trim = Core.Name "trim"
+
+_ListValueFunction_elements = Core.Name "elements"
+
+-- | A GQL list value type alt1
+data ListValueTypeAlt1 =
+  ListValueTypeAlt1 {
+    listValueTypeAlt1TypeName :: ListValueTypeName,
+    listValueTypeAlt1ValueType :: ValueType,
+    listValueTypeAlt1MaxLength :: (Maybe MaxLength),
+    listValueTypeAlt1NotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ListValueTypeAlt1 = Core.Name "openGql.grammar.ListValueTypeAlt1"
+
+_ListValueTypeAlt1_typeName = Core.Name "typeName"
+
+_ListValueTypeAlt1_valueType = Core.Name "valueType"
+
+_ListValueTypeAlt1_maxLength = Core.Name "maxLength"
+
+_ListValueTypeAlt1_notNull = Core.Name "notNull"
+
+-- | A GQL list value type alt2
+data ListValueTypeAlt2 =
+  ListValueTypeAlt2 {
+    listValueTypeAlt2ValueType :: ValueType,
+    listValueTypeAlt2TypeName :: ListValueTypeName,
+    listValueTypeAlt2MaxLength :: (Maybe MaxLength),
+    listValueTypeAlt2NotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ListValueTypeAlt2 = Core.Name "openGql.grammar.ListValueTypeAlt2"
+
+_ListValueTypeAlt2_valueType = Core.Name "valueType"
+
+_ListValueTypeAlt2_typeName = Core.Name "typeName"
+
+_ListValueTypeAlt2_maxLength = Core.Name "maxLength"
+
+_ListValueTypeAlt2_notNull = Core.Name "notNull"
+
+-- | A GQL list value type alt3
+data ListValueTypeAlt3 =
+  ListValueTypeAlt3 {
+    listValueTypeAlt3TypeName :: ListValueTypeName,
+    listValueTypeAlt3MaxLength :: (Maybe MaxLength),
+    listValueTypeAlt3NotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ListValueTypeAlt3 = Core.Name "openGql.grammar.ListValueTypeAlt3"
+
+_ListValueTypeAlt3_typeName = Core.Name "typeName"
+
+_ListValueTypeAlt3_maxLength = Core.Name "maxLength"
+
+_ListValueTypeAlt3_notNull = Core.Name "notNull"
+
+-- | A GQL list value type name
+data ListValueTypeName =
+  ListValueTypeName {
+    listValueTypeNameGroup :: Bool,
+    listValueTypeNameSynonym :: ListValueTypeNameSynonym}
+  deriving (Eq, Ord, Read, Show)
+
+_ListValueTypeName = Core.Name "openGql.grammar.ListValueTypeName"
+
+_ListValueTypeName_group = Core.Name "group"
+
+_ListValueTypeName_synonym = Core.Name "synonym"
+
+-- | A GQL list value type name synonym: one of a fixed set of alternatives
+data ListValueTypeNameSynonym =
+  ListValueTypeNameSynonymList |
+  ListValueTypeNameSynonymArray
+  deriving (Eq, Ord, Read, Show)
+
+_ListValueTypeNameSynonym = Core.Name "openGql.grammar.ListValueTypeNameSynonym"
+
+_ListValueTypeNameSynonym_list = Core.Name "list"
+
+_ListValueTypeNameSynonym_array = Core.Name "array"
+
+-- | A GQL local datetime type
+data LocalDatetimeType =
+  LocalDatetimeType {
+    localDatetimeTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_LocalDatetimeType = Core.Name "openGql.grammar.LocalDatetimeType"
+
+_LocalDatetimeType_notNull = Core.Name "notNull"
+
+-- | A GQL local datetime type choice: one of several alternative forms
+data LocalDatetimeTypeChoice =
+  LocalDatetimeTypeChoiceLocalDatetime LocalDatetimeType |
+  LocalDatetimeTypeChoiceTimestampWithoutTimeZone TimestampWithoutTimeZoneType
+  deriving (Eq, Ord, Read, Show)
+
+_LocalDatetimeTypeChoice = Core.Name "openGql.grammar.LocalDatetimeTypeChoice"
+
+_LocalDatetimeTypeChoice_localDatetime = Core.Name "localDatetime"
+
+_LocalDatetimeTypeChoice_timestampWithoutTimeZone = Core.Name "timestampWithoutTimeZone"
+
+-- | A GQL local node type alias
+type LocalNodeTypeAlias = String
+
+_LocalNodeTypeAlias = Core.Name "openGql.grammar.LocalNodeTypeAlias"
+
+-- | A GQL local time type
+data LocalTimeType =
+  LocalTimeType {
+    localTimeTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_LocalTimeType = Core.Name "openGql.grammar.LocalTimeType"
+
+_LocalTimeType_notNull = Core.Name "notNull"
+
+-- | A GQL local time type choice: one of several alternative forms
+data LocalTimeTypeChoice =
+  LocalTimeTypeChoiceLocalTime LocalTimeType |
+  LocalTimeTypeChoiceTimeWithoutTimeZone TimeWithoutTimeZoneType
+  deriving (Eq, Ord, Read, Show)
+
+_LocalTimeTypeChoice = Core.Name "openGql.grammar.LocalTimeTypeChoice"
+
+_LocalTimeTypeChoice_localTime = Core.Name "localTime"
+
+_LocalTimeTypeChoice_timeWithoutTimeZone = Core.Name "timeWithoutTimeZone"
+
+-- | A GQL localdatetime function: one of several alternative forms
+data LocaldatetimeFunction =
+  LocaldatetimeFunctionLocalTimestamp |
+  LocaldatetimeFunctionLocalDatetimeWithParams (Maybe DatetimeFunctionParameters)
+  deriving (Eq, Ord, Read, Show)
+
+_LocaldatetimeFunction = Core.Name "openGql.grammar.LocaldatetimeFunction"
+
+_LocaldatetimeFunction_localTimestamp = Core.Name "localTimestamp"
+
+_LocaldatetimeFunction_localDatetimeWithParams = Core.Name "localDatetimeWithParams"
+
+-- | An optional GQL localtime function
+type LocaltimeFunction = (Maybe TimeFunctionParameters)
+
+_LocaltimeFunction = Core.Name "openGql.grammar.LocaltimeFunction"
+
+-- | A GQL lower bound, equivalent to a unsigned integer
+type LowerBound = UnsignedInteger
+
+_LowerBound = Core.Name "openGql.grammar.LowerBound"
+
+-- | A GQL match mode: one of several alternative forms
+data MatchMode =
+  MatchModeRepeatableElements RepeatableElementsMatchMode |
+  MatchModeDifferentEdges DifferentEdgesMatchMode
+  deriving (Eq, Ord, Read, Show)
+
+_MatchMode = Core.Name "openGql.grammar.MatchMode"
+
+_MatchMode_repeatableElements = Core.Name "repeatableElements"
+
+_MatchMode_differentEdges = Core.Name "differentEdges"
+
+-- | A GQL match statement: one of several alternative forms
+data MatchStatement =
+  MatchStatementSimple SimpleMatchStatement |
+  MatchStatementOptional OptionalMatchStatement
+  deriving (Eq, Ord, Read, Show)
+
+_MatchStatement = Core.Name "openGql.grammar.MatchStatement"
+
+_MatchStatement_simple = Core.Name "simple"
+
+_MatchStatement_optional = Core.Name "optional"
+
+-- | A list of GQL match statement block elements
+type MatchStatementBlock = [MatchStatement]
+
+_MatchStatementBlock = Core.Name "openGql.grammar.MatchStatementBlock"
+
+-- | A GQL max length, equivalent to a unsigned integer
+type MaxLength = UnsignedInteger
+
+_MaxLength = Core.Name "openGql.grammar.MaxLength"
+
+-- | A GQL min length, equivalent to a unsigned integer
+type MinLength = UnsignedInteger
+
+_MinLength = Core.Name "openGql.grammar.MinLength"
+
+-- | A GQL modulus expression
+data ModulusExpression =
+  ModulusExpression {
+    modulusExpressionDividend :: NumericValueExpressionDividend,
+    modulusExpressionDivisor :: NumericValueExpressionDivisor}
+  deriving (Eq, Ord, Read, Show)
+
+_ModulusExpression = Core.Name "openGql.grammar.ModulusExpression"
+
+_ModulusExpression_dividend = Core.Name "dividend"
+
+_ModulusExpression_divisor = Core.Name "divisor"
+
+-- | A GQL mul div numeric value expression
+data MulDivNumericValueExpression =
+  MulDivNumericValueExpression {
+    mulDivNumericValueExpressionLeft :: NumericValueExpression,
+    mulDivNumericValueExpressionOperator :: MultDivOperator,
+    mulDivNumericValueExpressionRight :: NumericValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_MulDivNumericValueExpression = Core.Name "openGql.grammar.MulDivNumericValueExpression"
+
+_MulDivNumericValueExpression_left = Core.Name "left"
+
+_MulDivNumericValueExpression_operator = Core.Name "operator"
+
+_MulDivNumericValueExpression_right = Core.Name "right"
+
+-- | A GQL mult div expression
+data MultDivExpr =
+  MultDivExpr {
+    multDivExprLeft :: ValueExpression,
+    multDivExprOperator :: MultDivOperator,
+    multDivExprRight :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_MultDivExpr = Core.Name "openGql.grammar.MultDivExpr"
+
+_MultDivExpr_left = Core.Name "left"
+
+_MultDivExpr_operator = Core.Name "operator"
+
+_MultDivExpr_right = Core.Name "right"
+
+-- | A GQL mult div operator: one of a fixed set of alternatives
+data MultDivOperator =
+  MultDivOperatorMultiply |
+  MultDivOperatorDivide
+  deriving (Eq, Ord, Read, Show)
+
+_MultDivOperator = Core.Name "openGql.grammar.MultDivOperator"
+
+_MultDivOperator_multiply = Core.Name "multiply"
+
+_MultDivOperator_divide = Core.Name "divide"
+
+-- | A GQL named procedure call
+data NamedProcedureCall =
+  NamedProcedureCall {
+    namedProcedureCallReference :: ProcedureReference,
+    namedProcedureCallArguments :: (Maybe ProcedureArgumentList),
+    namedProcedureCallYield :: (Maybe YieldClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_NamedProcedureCall = Core.Name "openGql.grammar.NamedProcedureCall"
+
+_NamedProcedureCall_reference = Core.Name "reference"
+
+_NamedProcedureCall_arguments = Core.Name "arguments"
+
+_NamedProcedureCall_yield = Core.Name "yield"
+
+-- | A GQL natural logarithm, equivalent to a numeric value expression
+type NaturalLogarithm = NumericValueExpression
+
+_NaturalLogarithm = Core.Name "openGql.grammar.NaturalLogarithm"
+
+-- | A GQL nested binding table query specification
+type NestedBindingTableQuerySpecification = ()
+
+_NestedBindingTableQuerySpecification = Core.Name "openGql.grammar.NestedBindingTableQuerySpecification"
+
+-- | A GQL nested data modifying procedure specification, equivalent to a procedure body
+type NestedDataModifyingProcedureSpecification = ProcedureBody
+
+_NestedDataModifyingProcedureSpecification = Core.Name "openGql.grammar.NestedDataModifyingProcedureSpecification"
+
+-- | A GQL nested graph type specification, equivalent to a graph type specification body
+type NestedGraphTypeSpecification = GraphTypeSpecificationBody
+
+_NestedGraphTypeSpecification = Core.Name "openGql.grammar.NestedGraphTypeSpecification"
+
+-- | A GQL nested procedure specification, equivalent to a procedure specification
+type NestedProcedureSpecification = ProcedureSpecification
+
+_NestedProcedureSpecification = Core.Name "openGql.grammar.NestedProcedureSpecification"
+
+-- | A GQL nested query specification, equivalent to a procedure body
+type NestedQuerySpecification = ProcedureBody
+
+_NestedQuerySpecification = Core.Name "openGql.grammar.NestedQuerySpecification"
+
+-- | A GQL next statement
+data NextStatement =
+  NextStatement {
+    nextStatementYieldClause :: (Maybe YieldClause),
+    nextStatementStatement :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_NextStatement = Core.Name "openGql.grammar.NextStatement"
+
+_NextStatement_yieldClause = Core.Name "yieldClause"
+
+_NextStatement_statement = Core.Name "statement"
+
+-- | A GQL node key label set with content
+data NodeKeyLabelSetWithContent =
+  NodeKeyLabelSetWithContent {
+    nodeKeyLabelSetWithContentKeyLabelSet :: NodeTypeKeyLabelSet,
+    nodeKeyLabelSetWithContentImpliedContent :: (Maybe NodeTypeImpliedContent)}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeKeyLabelSetWithContent = Core.Name "openGql.grammar.NodeKeyLabelSetWithContent"
+
+_NodeKeyLabelSetWithContent_keyLabelSet = Core.Name "keyLabelSet"
+
+_NodeKeyLabelSetWithContent_impliedContent = Core.Name "impliedContent"
+
+-- | A GQL node label set with properties
+data NodeLabelSetWithProperties =
+  NodeLabelSetWithProperties {
+    nodeLabelSetWithPropertiesLabelSet :: NodeTypeLabelSet,
+    nodeLabelSetWithPropertiesPropertyTypes :: NodeTypePropertyTypes}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeLabelSetWithProperties = Core.Name "openGql.grammar.NodeLabelSetWithProperties"
+
+_NodeLabelSetWithProperties_labelSet = Core.Name "labelSet"
+
+_NodeLabelSetWithProperties_propertyTypes = Core.Name "propertyTypes"
+
+-- | A GQL node pattern, equivalent to a element pattern filler
+type NodePattern = ElementPatternFiller
+
+_NodePattern = Core.Name "openGql.grammar.NodePattern"
+
+-- | A GQL node reference, equivalent to a element variable reference
+type NodeReference = ElementVariableReference
+
+_NodeReference = Core.Name "openGql.grammar.NodeReference"
+
+-- | A GQL node reference value expression, equivalent to a primary value expression
+type NodeReferenceValueExpression = PrimaryValueExpression
+
+_NodeReferenceValueExpression = Core.Name "openGql.grammar.NodeReferenceValueExpression"
+
+-- | A GQL node reference value type: one of several alternative forms
+data NodeReferenceValueType =
+  NodeReferenceValueTypeOpen OpenNodeReferenceValueType |
+  NodeReferenceValueTypeClosed ClosedNodeReferenceValueType
+  deriving (Eq, Ord, Read, Show)
+
+_NodeReferenceValueType = Core.Name "openGql.grammar.NodeReferenceValueType"
+
+_NodeReferenceValueType_open = Core.Name "open"
+
+_NodeReferenceValueType_closed = Core.Name "closed"
+
+-- | A GQL node synonym: one of a fixed set of alternatives
+data NodeSynonym =
+  NodeSynonymNode |
+  NodeSynonymVertex
+  deriving (Eq, Ord, Read, Show)
+
+_NodeSynonym = Core.Name "openGql.grammar.NodeSynonym"
+
+_NodeSynonym_node = Core.Name "node"
+
+_NodeSynonym_vertex = Core.Name "vertex"
+
+-- | A GQL node synonym and type name
+data NodeSynonymAndTypeName =
+  NodeSynonymAndTypeName {
+    nodeSynonymAndTypeNameNodeSynonym :: NodeSynonym,
+    nodeSynonymAndTypeNameTypeName :: (Maybe NodeTypeName)}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeSynonymAndTypeName = Core.Name "openGql.grammar.NodeSynonymAndTypeName"
+
+_NodeSynonymAndTypeName_nodeSynonym = Core.Name "nodeSynonym"
+
+_NodeSynonymAndTypeName_typeName = Core.Name "typeName"
+
+-- | A GQL node type filler: one of several alternative forms
+data NodeTypeFiller =
+  NodeTypeFillerKeyLabelSet NodeKeyLabelSetWithContent |
+  NodeTypeFillerImpliedContent NodeTypeImpliedContent
+  deriving (Eq, Ord, Read, Show)
+
+_NodeTypeFiller = Core.Name "openGql.grammar.NodeTypeFiller"
+
+_NodeTypeFiller_keyLabelSet = Core.Name "keyLabelSet"
+
+_NodeTypeFiller_impliedContent = Core.Name "impliedContent"
+
+-- | A GQL node type implied content: one of several alternative forms
+data NodeTypeImpliedContent =
+  NodeTypeImpliedContentLabelSet NodeTypeLabelSet |
+  NodeTypeImpliedContentPropertyTypes NodeTypePropertyTypes |
+  NodeTypeImpliedContentLabelSetWithProperties NodeLabelSetWithProperties
+  deriving (Eq, Ord, Read, Show)
+
+_NodeTypeImpliedContent = Core.Name "openGql.grammar.NodeTypeImpliedContent"
+
+_NodeTypeImpliedContent_labelSet = Core.Name "labelSet"
+
+_NodeTypeImpliedContent_propertyTypes = Core.Name "propertyTypes"
+
+_NodeTypeImpliedContent_labelSetWithProperties = Core.Name "labelSetWithProperties"
+
+-- | An optional GQL node type key label set
+type NodeTypeKeyLabelSet = (Maybe LabelSetPhrase)
+
+_NodeTypeKeyLabelSet = Core.Name "openGql.grammar.NodeTypeKeyLabelSet"
+
+-- | A GQL node type label set, equivalent to a label set phrase
+type NodeTypeLabelSet = LabelSetPhrase
+
+_NodeTypeLabelSet = Core.Name "openGql.grammar.NodeTypeLabelSet"
+
+-- | A GQL node type name
+type NodeTypeName = String
+
+_NodeTypeName = Core.Name "openGql.grammar.NodeTypeName"
+
+-- | A GQL node type name with filler
+data NodeTypeNameWithFiller =
+  NodeTypeNameWithFiller {
+    nodeTypeNameWithFillerTypeName :: NodeTypeName,
+    nodeTypeNameWithFillerFiller :: (Maybe NodeTypeFiller)}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeTypeNameWithFiller = Core.Name "openGql.grammar.NodeTypeNameWithFiller"
+
+_NodeTypeNameWithFiller_typeName = Core.Name "typeName"
+
+_NodeTypeNameWithFiller_filler = Core.Name "filler"
+
+-- | A GQL node type pattern
+data NodeTypePattern =
+  NodeTypePattern {
+    nodeTypePatternSynonymAndTypeName :: (Maybe NodeSynonymAndTypeName),
+    nodeTypePatternAlias :: (Maybe LocalNodeTypeAlias),
+    nodeTypePatternFiller :: (Maybe NodeTypeFiller)}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeTypePattern = Core.Name "openGql.grammar.NodeTypePattern"
+
+_NodeTypePattern_synonymAndTypeName = Core.Name "synonymAndTypeName"
+
+_NodeTypePattern_alias = Core.Name "alias"
+
+_NodeTypePattern_filler = Core.Name "filler"
+
+-- | A GQL node type phrase
+data NodeTypePhrase =
+  NodeTypePhrase {
+    nodeTypePhraseSynonym :: NodeSynonym,
+    nodeTypePhraseTypePhraseFiller :: NodeTypePhraseFiller,
+    nodeTypePhraseAlias :: (Maybe LocalNodeTypeAlias)}
+  deriving (Eq, Ord, Read, Show)
+
+_NodeTypePhrase = Core.Name "openGql.grammar.NodeTypePhrase"
+
+_NodeTypePhrase_synonym = Core.Name "synonym"
+
+_NodeTypePhrase_typePhraseFiller = Core.Name "typePhraseFiller"
+
+_NodeTypePhrase_alias = Core.Name "alias"
+
+-- | A GQL node type phrase filler: one of several alternative forms
+data NodeTypePhraseFiller =
+  NodeTypePhraseFillerTypeName NodeTypeNameWithFiller |
+  NodeTypePhraseFillerFillerOnly NodeTypeFiller
+  deriving (Eq, Ord, Read, Show)
+
+_NodeTypePhraseFiller = Core.Name "openGql.grammar.NodeTypePhraseFiller"
+
+_NodeTypePhraseFiller_typeName = Core.Name "typeName"
+
+_NodeTypePhraseFiller_fillerOnly = Core.Name "fillerOnly"
+
+-- | A GQL node type property types, equivalent to a property types specification
+type NodeTypePropertyTypes = PropertyTypesSpecification
+
+_NodeTypePropertyTypes = Core.Name "openGql.grammar.NodeTypePropertyTypes"
+
+-- | A GQL node type specification: one of several alternative forms
+data NodeTypeSpecification =
+  NodeTypeSpecificationPattern NodeTypePattern |
+  NodeTypeSpecificationPhrase NodeTypePhrase
+  deriving (Eq, Ord, Read, Show)
+
+_NodeTypeSpecification = Core.Name "openGql.grammar.NodeTypeSpecification"
+
+_NodeTypeSpecification_pattern = Core.Name "pattern"
+
+_NodeTypeSpecification_phrase = Core.Name "phrase"
+
+-- | A GQL non negative integer specification: one of several alternative forms
+data NonNegativeIntegerSpecification =
+  NonNegativeIntegerSpecificationUnsignedInteger UnsignedInteger |
+  NonNegativeIntegerSpecificationDynamicParameterSpecification DynamicParameterSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_NonNegativeIntegerSpecification = Core.Name "openGql.grammar.NonNegativeIntegerSpecification"
+
+_NonNegativeIntegerSpecification_unsignedInteger = Core.Name "unsignedInteger"
+
+_NonNegativeIntegerSpecification_dynamicParameterSpecification = Core.Name "dynamicParameterSpecification"
+
+-- | A GQL non parenthesized primary value expression: one of several alternative forms
+data NonParenthesizedPrimaryValueExpression =
+  NonParenthesizedPrimaryValueExpressionSpecial NonParenthesizedPrimaryValueExpressionSpecialCase |
+  NonParenthesizedPrimaryValueExpressionBindingVariable BindingVariableReference
+  deriving (Eq, Ord, Read, Show)
+
+_NonParenthesizedPrimaryValueExpression = Core.Name "openGql.grammar.NonParenthesizedPrimaryValueExpression"
+
+_NonParenthesizedPrimaryValueExpression_special = Core.Name "special"
+
+_NonParenthesizedPrimaryValueExpression_bindingVariable = Core.Name "bindingVariable"
+
+-- | A GQL non parenthesized primary value expression special case: one of several alternative forms
+data NonParenthesizedPrimaryValueExpressionSpecialCase =
+  NonParenthesizedPrimaryValueExpressionSpecialCaseAggregateFunction AggregateFunction |
+  NonParenthesizedPrimaryValueExpressionSpecialCaseUnsignedValueSpecification UnsignedValueSpecification |
+  NonParenthesizedPrimaryValueExpressionSpecialCasePathValueConstructor PathValueConstructor |
+  NonParenthesizedPrimaryValueExpressionSpecialCasePropertyReference PropertyReference |
+  NonParenthesizedPrimaryValueExpressionSpecialCaseValueQueryExpression ValueQueryExpression |
+  NonParenthesizedPrimaryValueExpressionSpecialCaseCaseExpression CaseExpression |
+  NonParenthesizedPrimaryValueExpressionSpecialCaseCastSpecification CastSpecification |
+  NonParenthesizedPrimaryValueExpressionSpecialCaseElementIdFunction ElementIdFunction |
+  NonParenthesizedPrimaryValueExpressionSpecialCaseLetValueExpression LetValueExpression
+  deriving (Eq, Ord, Read, Show)
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase =
+    Core.Name "openGql.grammar.NonParenthesizedPrimaryValueExpressionSpecialCase"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_aggregateFunction = Core.Name "aggregateFunction"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_unsignedValueSpecification = Core.Name "unsignedValueSpecification"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_pathValueConstructor = Core.Name "pathValueConstructor"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_propertyReference = Core.Name "propertyReference"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_valueQueryExpression = Core.Name "valueQueryExpression"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_caseExpression = Core.Name "caseExpression"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_castSpecification = Core.Name "castSpecification"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_elementIdFunction = Core.Name "elementIdFunction"
+
+_NonParenthesizedPrimaryValueExpressionSpecialCase_letValueExpression = Core.Name "letValueExpression"
+
+-- | A GQL normal form: one of a fixed set of alternatives
+data NormalForm =
+  NormalFormNfc |
+  NormalFormNfd |
+  NormalFormNfkc |
+  NormalFormNfkd
+  deriving (Eq, Ord, Read, Show)
+
+_NormalForm = Core.Name "openGql.grammar.NormalForm"
+
+_NormalForm_nfc = Core.Name "nfc"
+
+_NormalForm_nfd = Core.Name "nfd"
+
+_NormalForm_nfkc = Core.Name "nfkc"
+
+_NormalForm_nfkd = Core.Name "nfkd"
+
+-- | A GQL normalize character string
+data NormalizeCharacterString =
+  NormalizeCharacterString {
+    normalizeCharacterStringValueExpression :: ValueExpression,
+    normalizeCharacterStringNormalForm :: (Maybe NormalForm)}
+  deriving (Eq, Ord, Read, Show)
+
+_NormalizeCharacterString = Core.Name "openGql.grammar.NormalizeCharacterString"
+
+_NormalizeCharacterString_valueExpression = Core.Name "valueExpression"
+
+_NormalizeCharacterString_normalForm = Core.Name "normalForm"
+
+-- | A GQL normalized predicate expression
+data NormalizedPredicateExpr =
+  NormalizedPredicateExpr {
+    normalizedPredicateExprValueExpression :: ValueExpression,
+    normalizedPredicateExprNormalizedPredicate :: NormalizedPredicatePart2}
+  deriving (Eq, Ord, Read, Show)
+
+_NormalizedPredicateExpr = Core.Name "openGql.grammar.NormalizedPredicateExpr"
+
+_NormalizedPredicateExpr_valueExpression = Core.Name "valueExpression"
+
+_NormalizedPredicateExpr_normalizedPredicate = Core.Name "normalizedPredicate"
+
+-- | A GQL normalized predicate part2
+data NormalizedPredicatePart2 =
+  NormalizedPredicatePart2 {
+    normalizedPredicatePart2Not :: Bool,
+    normalizedPredicatePart2NormalForm :: (Maybe NormalForm)}
+  deriving (Eq, Ord, Read, Show)
+
+_NormalizedPredicatePart2 = Core.Name "openGql.grammar.NormalizedPredicatePart2"
+
+_NormalizedPredicatePart2_not = Core.Name "not"
+
+_NormalizedPredicatePart2_normalForm = Core.Name "normalForm"
+
+-- | A GQL not expression, equivalent to a value expression
+type NotExpr = ValueExpression
+
+_NotExpr = Core.Name "openGql.grammar.NotExpr"
+
+-- | A GQL not null
+type NotNull = ()
+
+_NotNull = Core.Name "openGql.grammar.NotNull"
+
+-- | A GQL null if abbreviation
+data NullIfAbbreviation =
+  NullIfAbbreviation {
+    nullIfAbbreviationFirst :: ValueExpression,
+    nullIfAbbreviationSecond :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_NullIfAbbreviation = Core.Name "openGql.grammar.NullIfAbbreviation"
+
+_NullIfAbbreviation_first = Core.Name "first"
+
+_NullIfAbbreviation_second = Core.Name "second"
+
+-- | A GQL null literal
+type NullLiteral = ()
+
+_NullLiteral = Core.Name "openGql.grammar.NullLiteral"
+
+-- | A GQL null ordering: one of a fixed set of alternatives
+data NullOrdering =
+  NullOrderingNullsFirst |
+  NullOrderingNullsLast
+  deriving (Eq, Ord, Read, Show)
+
+_NullOrdering = Core.Name "openGql.grammar.NullOrdering"
+
+_NullOrdering_nullsFirst = Core.Name "nullsFirst"
+
+_NullOrdering_nullsLast = Core.Name "nullsLast"
+
+-- | A GQL null predicate
+data NullPredicate =
+  NullPredicate {
+    nullPredicateValueExpression :: PrimaryValueExpression,
+    nullPredicateNullPart :: NullPredicatePart2}
+  deriving (Eq, Ord, Read, Show)
+
+_NullPredicate = Core.Name "openGql.grammar.NullPredicate"
+
+_NullPredicate_valueExpression = Core.Name "valueExpression"
+
+_NullPredicate_nullPart = Core.Name "nullPart"
+
+-- | A GQL null predicate part2
+data NullPredicatePart2 =
+  NullPredicatePart2 {
+    nullPredicatePart2Not :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_NullPredicatePart2 = Core.Name "openGql.grammar.NullPredicatePart2"
+
+_NullPredicatePart2_not = Core.Name "not"
+
+-- | A GQL null type
+type NullType = ()
+
+_NullType = Core.Name "openGql.grammar.NullType"
+
+-- | A GQL number of groups, equivalent to a non negative integer specification
+type NumberOfGroups = NonNegativeIntegerSpecification
+
+_NumberOfGroups = Core.Name "openGql.grammar.NumberOfGroups"
+
+-- | A GQL number of paths, equivalent to a non negative integer specification
+type NumberOfPaths = NonNegativeIntegerSpecification
+
+_NumberOfPaths = Core.Name "openGql.grammar.NumberOfPaths"
+
+-- | A GQL numeric type: one of several alternative forms
+data NumericType =
+  NumericTypeExact ExactNumericType |
+  NumericTypeApproximate ApproximateNumericType
+  deriving (Eq, Ord, Read, Show)
+
+_NumericType = Core.Name "openGql.grammar.NumericType"
+
+_NumericType_exact = Core.Name "exact"
+
+_NumericType_approximate = Core.Name "approximate"
+
+-- | A GQL numeric value expression: one of several alternative forms
+data NumericValueExpression =
+  NumericValueExpressionSigned SignedNumericValueExpression |
+  NumericValueExpressionMultiplicationOrDivision MulDivNumericValueExpression |
+  NumericValueExpressionAdditionOrSubtraction AddSubNumericValueExpression |
+  NumericValueExpressionPrimary PrimaryValueExpression |
+  NumericValueExpressionFunction NumericValueFunction
+  deriving (Eq, Ord, Read, Show)
+
+_NumericValueExpression = Core.Name "openGql.grammar.NumericValueExpression"
+
+_NumericValueExpression_signed = Core.Name "signed"
+
+_NumericValueExpression_multiplicationOrDivision = Core.Name "multiplicationOrDivision"
+
+_NumericValueExpression_additionOrSubtraction = Core.Name "additionOrSubtraction"
+
+_NumericValueExpression_primary = Core.Name "primary"
+
+_NumericValueExpression_function = Core.Name "function"
+
+-- | A GQL numeric value expression base, equivalent to a numeric value expression
+type NumericValueExpressionBase = NumericValueExpression
+
+_NumericValueExpressionBase = Core.Name "openGql.grammar.NumericValueExpressionBase"
+
+-- | A GQL numeric value expression dividend, equivalent to a numeric value expression
+type NumericValueExpressionDividend = NumericValueExpression
+
+_NumericValueExpressionDividend = Core.Name "openGql.grammar.NumericValueExpressionDividend"
+
+-- | A GQL numeric value expression divisor, equivalent to a numeric value expression
+type NumericValueExpressionDivisor = NumericValueExpression
+
+_NumericValueExpressionDivisor = Core.Name "openGql.grammar.NumericValueExpressionDivisor"
+
+-- | A GQL numeric value expression exponent, equivalent to a numeric value expression
+type NumericValueExpressionExponent = NumericValueExpression
+
+_NumericValueExpressionExponent = Core.Name "openGql.grammar.NumericValueExpressionExponent"
+
+-- | A GQL numeric value function: one of several alternative forms
+data NumericValueFunction =
+  NumericValueFunctionLength LengthExpression |
+  NumericValueFunctionCardinality CardinalityExpression |
+  NumericValueFunctionAbsoluteValue AbsoluteValueExpression |
+  NumericValueFunctionModulus ModulusExpression |
+  NumericValueFunctionTrigonometric TrigonometricFunction |
+  NumericValueFunctionLogarithm GeneralLogarithmFunction |
+  NumericValueFunctionCommonLogarithm CommonLogarithm |
+  NumericValueFunctionNaturalLogarithm NaturalLogarithm |
+  NumericValueFunctionExponential ExponentialFunction |
+  NumericValueFunctionPower PowerFunction |
+  NumericValueFunctionSquareRoot SquareRoot |
+  NumericValueFunctionFloor FloorFunction |
+  NumericValueFunctionCeiling CeilingFunction
+  deriving (Eq, Ord, Read, Show)
+
+_NumericValueFunction = Core.Name "openGql.grammar.NumericValueFunction"
+
+_NumericValueFunction_length = Core.Name "length"
+
+_NumericValueFunction_cardinality = Core.Name "cardinality"
+
+_NumericValueFunction_absoluteValue = Core.Name "absoluteValue"
+
+_NumericValueFunction_modulus = Core.Name "modulus"
+
+_NumericValueFunction_trigonometric = Core.Name "trigonometric"
+
+_NumericValueFunction_logarithm = Core.Name "logarithm"
+
+_NumericValueFunction_commonLogarithm = Core.Name "commonLogarithm"
+
+_NumericValueFunction_naturalLogarithm = Core.Name "naturalLogarithm"
+
+_NumericValueFunction_exponential = Core.Name "exponential"
+
+_NumericValueFunction_power = Core.Name "power"
+
+_NumericValueFunction_squareRoot = Core.Name "squareRoot"
+
+_NumericValueFunction_floor = Core.Name "floor"
+
+_NumericValueFunction_ceiling = Core.Name "ceiling"
+
+-- | A GQL object expression primary: one of several alternative forms
+data ObjectExpressionPrimary =
+  ObjectExpressionPrimaryVariable PrimaryValueExpression |
+  ObjectExpressionPrimaryParenthesized ParenthesizedValueExpression |
+  ObjectExpressionPrimaryNonParenthesized NonParenthesizedPrimaryValueExpressionSpecialCase
+  deriving (Eq, Ord, Read, Show)
+
+_ObjectExpressionPrimary = Core.Name "openGql.grammar.ObjectExpressionPrimary"
+
+_ObjectExpressionPrimary_variable = Core.Name "variable"
+
+_ObjectExpressionPrimary_parenthesized = Core.Name "parenthesized"
+
+_ObjectExpressionPrimary_nonParenthesized = Core.Name "nonParenthesized"
+
+-- | A GQL object name
+type ObjectName = String
+
+_ObjectName = Core.Name "openGql.grammar.ObjectName"
+
+-- | A GQL object name or binding variable
+type ObjectNameOrBindingVariable = String
+
+_ObjectNameOrBindingVariable = Core.Name "openGql.grammar.ObjectNameOrBindingVariable"
+
+-- | A GQL of graph type: one of several alternative forms
+data OfGraphType =
+  OfGraphTypeLikeGraph GraphTypeLikeGraph |
+  OfGraphTypeReference TypedGraphTypeReference |
+  OfGraphTypeNested TypedNestedGraphTypeSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_OfGraphType = Core.Name "openGql.grammar.OfGraphType"
+
+_OfGraphType_likeGraph = Core.Name "likeGraph"
+
+_OfGraphType_reference = Core.Name "reference"
+
+_OfGraphType_nested = Core.Name "nested"
+
+-- | A GQL offset and optional limit
+data OffsetAndOptionalLimit =
+  OffsetAndOptionalLimit {
+    offsetAndOptionalLimitOffset :: OffsetClause,
+    offsetAndOptionalLimitLimit :: (Maybe LimitClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_OffsetAndOptionalLimit = Core.Name "openGql.grammar.OffsetAndOptionalLimit"
+
+_OffsetAndOptionalLimit_offset = Core.Name "offset"
+
+_OffsetAndOptionalLimit_limit = Core.Name "limit"
+
+-- | A GQL offset clause
+data OffsetClause =
+  OffsetClause {
+    offsetClauseSynonym :: OffsetSynonym,
+    offsetClauseValue :: NonNegativeIntegerSpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_OffsetClause = Core.Name "openGql.grammar.OffsetClause"
+
+_OffsetClause_synonym = Core.Name "synonym"
+
+_OffsetClause_value = Core.Name "value"
+
+-- | A GQL offset synonym: one of a fixed set of alternatives
+data OffsetSynonym =
+  OffsetSynonymOffset |
+  OffsetSynonymSkipReservedWord
+  deriving (Eq, Ord, Read, Show)
+
+_OffsetSynonym = Core.Name "openGql.grammar.OffsetSynonym"
+
+_OffsetSynonym_offset = Core.Name "offset"
+
+_OffsetSynonym_skipReservedWord = Core.Name "skipReservedWord"
+
+-- | A GQL open dynamic union type
+data OpenDynamicUnionType =
+  OpenDynamicUnionType {
+    openDynamicUnionTypeValue :: Bool,
+    openDynamicUnionTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_OpenDynamicUnionType = Core.Name "openGql.grammar.OpenDynamicUnionType"
+
+_OpenDynamicUnionType_value = Core.Name "value"
+
+_OpenDynamicUnionType_notNull = Core.Name "notNull"
+
+-- | A GQL open edge reference value type
+data OpenEdgeReferenceValueType =
+  OpenEdgeReferenceValueType {
+    openEdgeReferenceValueTypeAny :: Bool,
+    openEdgeReferenceValueTypeEdgeSynonym :: EdgeSynonym,
+    openEdgeReferenceValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_OpenEdgeReferenceValueType = Core.Name "openGql.grammar.OpenEdgeReferenceValueType"
+
+_OpenEdgeReferenceValueType_any = Core.Name "any"
+
+_OpenEdgeReferenceValueType_edgeSynonym = Core.Name "edgeSynonym"
+
+_OpenEdgeReferenceValueType_notNull = Core.Name "notNull"
+
+-- | A GQL open graph reference value type
+data OpenGraphReferenceValueType =
+  OpenGraphReferenceValueType {
+    openGraphReferenceValueTypeAny :: (Maybe Bool),
+    openGraphReferenceValueTypeProperty :: Bool,
+    openGraphReferenceValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_OpenGraphReferenceValueType = Core.Name "openGql.grammar.OpenGraphReferenceValueType"
+
+_OpenGraphReferenceValueType_any = Core.Name "any"
+
+_OpenGraphReferenceValueType_property = Core.Name "property"
+
+_OpenGraphReferenceValueType_notNull = Core.Name "notNull"
+
+-- | A GQL open graph type
+data OpenGraphType =
+  OpenGraphType {
+    openGraphTypeTyped :: (Maybe Typed),
+    openGraphTypeGraph :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_OpenGraphType = Core.Name "openGql.grammar.OpenGraphType"
+
+_OpenGraphType_typed = Core.Name "typed"
+
+_OpenGraphType_graph = Core.Name "graph"
+
+-- | A GQL open node reference value type
+data OpenNodeReferenceValueType =
+  OpenNodeReferenceValueType {
+    openNodeReferenceValueTypeAny :: Bool,
+    openNodeReferenceValueTypeNodeSynonym :: NodeSynonym,
+    openNodeReferenceValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_OpenNodeReferenceValueType = Core.Name "openGql.grammar.OpenNodeReferenceValueType"
+
+_OpenNodeReferenceValueType_any = Core.Name "any"
+
+_OpenNodeReferenceValueType_nodeSynonym = Core.Name "nodeSynonym"
+
+_OpenNodeReferenceValueType_notNull = Core.Name "notNull"
+
+-- | A GQL opt typed binding table initializer
+data OptTypedBindingTableInitializer =
+  OptTypedBindingTableInitializer {
+    optTypedBindingTableInitializerType :: (Maybe TypedBindingTableReferenceValueType),
+    optTypedBindingTableInitializerInitializer :: BindingTableInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_OptTypedBindingTableInitializer = Core.Name "openGql.grammar.OptTypedBindingTableInitializer"
+
+_OptTypedBindingTableInitializer_type = Core.Name "type"
+
+_OptTypedBindingTableInitializer_initializer = Core.Name "initializer"
+
+-- | A GQL opt typed graph initializer
+data OptTypedGraphInitializer =
+  OptTypedGraphInitializer {
+    optTypedGraphInitializerType :: (Maybe TypedGraphReferenceValueType),
+    optTypedGraphInitializerInitializer :: GraphInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_OptTypedGraphInitializer = Core.Name "openGql.grammar.OptTypedGraphInitializer"
+
+_OptTypedGraphInitializer_type = Core.Name "type"
+
+_OptTypedGraphInitializer_initializer = Core.Name "initializer"
+
+-- | A GQL opt typed value initializer
+data OptTypedValueInitializer =
+  OptTypedValueInitializer {
+    optTypedValueInitializerType :: (Maybe TypedValueType),
+    optTypedValueInitializerInitializer :: ValueInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_OptTypedValueInitializer = Core.Name "openGql.grammar.OptTypedValueInitializer"
+
+_OptTypedValueInitializer_type = Core.Name "type"
+
+_OptTypedValueInitializer_initializer = Core.Name "initializer"
+
+-- | A GQL optional match statement, equivalent to a optional operand
+type OptionalMatchStatement = OptionalOperand
+
+_OptionalMatchStatement = Core.Name "openGql.grammar.OptionalMatchStatement"
+
+-- | A GQL optional operand: one of several alternative forms
+data OptionalOperand =
+  OptionalOperandSimple SimpleMatchStatement |
+  OptionalOperandBraceBlock MatchStatementBlock |
+  OptionalOperandParenBlock MatchStatementBlock
+  deriving (Eq, Ord, Read, Show)
+
+_OptionalOperand = Core.Name "openGql.grammar.OptionalOperand"
+
+_OptionalOperand_simple = Core.Name "simple"
+
+_OptionalOperand_braceBlock = Core.Name "braceBlock"
+
+_OptionalOperand_parenBlock = Core.Name "parenBlock"
+
+-- | A GQL order by and optional offset and limit
+data OrderByAndOptionalOffsetAndLimit =
+  OrderByAndOptionalOffsetAndLimit {
+    orderByAndOptionalOffsetAndLimitOrderBy :: OrderByClause,
+    orderByAndOptionalOffsetAndLimitOffset :: (Maybe OffsetClause),
+    orderByAndOptionalOffsetAndLimitLimit :: (Maybe LimitClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_OrderByAndOptionalOffsetAndLimit = Core.Name "openGql.grammar.OrderByAndOptionalOffsetAndLimit"
+
+_OrderByAndOptionalOffsetAndLimit_orderBy = Core.Name "orderBy"
+
+_OrderByAndOptionalOffsetAndLimit_offset = Core.Name "offset"
+
+_OrderByAndOptionalOffsetAndLimit_limit = Core.Name "limit"
+
+-- | A GQL order by and page statement: one of several alternative forms
+data OrderByAndPageStatement =
+  OrderByAndPageStatementOrderByAndOptionalOffsetAndLimit OrderByAndOptionalOffsetAndLimit |
+  OrderByAndPageStatementOffsetAndOptionalLimit OffsetAndOptionalLimit |
+  OrderByAndPageStatementLimitOnly LimitClause
+  deriving (Eq, Ord, Read, Show)
+
+_OrderByAndPageStatement = Core.Name "openGql.grammar.OrderByAndPageStatement"
+
+_OrderByAndPageStatement_orderByAndOptionalOffsetAndLimit = Core.Name "orderByAndOptionalOffsetAndLimit"
+
+_OrderByAndPageStatement_offsetAndOptionalLimit = Core.Name "offsetAndOptionalLimit"
+
+_OrderByAndPageStatement_limitOnly = Core.Name "limitOnly"
+
+-- | A GQL order by clause, equivalent to a sort specification list
+type OrderByClause = SortSpecificationList
+
+_OrderByClause = Core.Name "openGql.grammar.OrderByClause"
+
+-- | A GQL ordering specification: one of a fixed set of alternatives
+data OrderingSpecification =
+  OrderingSpecificationAscending |
+  OrderingSpecificationDescending
+  deriving (Eq, Ord, Read, Show)
+
+_OrderingSpecification = Core.Name "openGql.grammar.OrderingSpecification"
+
+_OrderingSpecification_ascending = Core.Name "ascending"
+
+_OrderingSpecification_descending = Core.Name "descending"
+
+-- | A GQL ordinality or offset type: one of a fixed set of alternatives
+data OrdinalityOrOffsetType =
+  OrdinalityOrOffsetTypeOrdinality |
+  OrdinalityOrOffsetTypeOffset
+  deriving (Eq, Ord, Read, Show)
+
+_OrdinalityOrOffsetType = Core.Name "openGql.grammar.OrdinalityOrOffsetType"
+
+_OrdinalityOrOffsetType_ordinality = Core.Name "ordinality"
+
+_OrdinalityOrOffsetType_offset = Core.Name "offset"
+
+-- | A GQL parameter name
+type ParameterName = String
+
+_ParameterName = Core.Name "openGql.grammar.ParameterName"
+
+-- | A GQL parameter session specification
+data ParameterSessionSpecification =
+  ParameterSessionSpecification {
+    parameterSessionSpecificationParameter :: Bool,
+    parameterSessionSpecificationSessionParameterSpecification :: SessionParameterSpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_ParameterSessionSpecification = Core.Name "openGql.grammar.ParameterSessionSpecification"
+
+_ParameterSessionSpecification_parameter = Core.Name "parameter"
+
+_ParameterSessionSpecification_sessionParameterSpecification = Core.Name "sessionParameterSpecification"
+
+-- | A GQL parameters or characteristics: one of a fixed set of alternatives
+data ParametersOrCharacteristics =
+  ParametersOrCharacteristicsParameters |
+  ParametersOrCharacteristicsCharacteristics
+  deriving (Eq, Ord, Read, Show)
+
+_ParametersOrCharacteristics = Core.Name "openGql.grammar.ParametersOrCharacteristics"
+
+_ParametersOrCharacteristics_parameters = Core.Name "parameters"
+
+_ParametersOrCharacteristics_characteristics = Core.Name "characteristics"
+
+-- | A GQL parent and graph name
+data ParentAndGraphName =
+  ParentAndGraphName {
+    parentAndGraphNameParentReference :: CatalogObjectParentReference,
+    parentAndGraphNameGraphName :: GraphName}
+  deriving (Eq, Ord, Read, Show)
+
+_ParentAndGraphName = Core.Name "openGql.grammar.ParentAndGraphName"
+
+_ParentAndGraphName_parentReference = Core.Name "parentReference"
+
+_ParentAndGraphName_graphName = Core.Name "graphName"
+
+-- | A GQL parent and table name
+data ParentAndTableName =
+  ParentAndTableName {
+    parentAndTableNameParentReference :: CatalogObjectParentReference,
+    parentAndTableNameTableName :: BindingTableName}
+  deriving (Eq, Ord, Read, Show)
+
+_ParentAndTableName = Core.Name "openGql.grammar.ParentAndTableName"
+
+_ParentAndTableName_parentReference = Core.Name "parentReference"
+
+_ParentAndTableName_tableName = Core.Name "tableName"
+
+-- | A GQL parenthesized path pattern expression
+data ParenthesizedPathPatternExpression =
+  ParenthesizedPathPatternExpression {
+    parenthesizedPathPatternExpressionSubpathDeclaration :: (Maybe SubpathVariableDeclaration),
+    parenthesizedPathPatternExpressionPathMode :: (Maybe PathModePrefix),
+    parenthesizedPathPatternExpressionExpression :: PathPatternExpression,
+    parenthesizedPathPatternExpressionWhereClause :: (Maybe ParenthesizedPathPatternWhereClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_ParenthesizedPathPatternExpression = Core.Name "openGql.grammar.ParenthesizedPathPatternExpression"
+
+_ParenthesizedPathPatternExpression_subpathDeclaration = Core.Name "subpathDeclaration"
+
+_ParenthesizedPathPatternExpression_pathMode = Core.Name "pathMode"
+
+_ParenthesizedPathPatternExpression_expression = Core.Name "expression"
+
+_ParenthesizedPathPatternExpression_whereClause = Core.Name "whereClause"
+
+-- | A GQL parenthesized path pattern where clause, equivalent to a search condition
+type ParenthesizedPathPatternWhereClause = SearchCondition
+
+_ParenthesizedPathPatternWhereClause = Core.Name "openGql.grammar.ParenthesizedPathPatternWhereClause"
+
+-- | A GQL parenthesized value expression, equivalent to a value expression
+type ParenthesizedValueExpression = ValueExpression
+
+_ParenthesizedValueExpression = Core.Name "openGql.grammar.ParenthesizedValueExpression"
+
+-- | A GQL path element list
+data PathElementList =
+  PathElementList {
+    pathElementListStart :: PathElementListStart,
+    pathElementListSteps :: [PathElementListStep]}
+  deriving (Eq, Ord, Read, Show)
+
+_PathElementList = Core.Name "openGql.grammar.PathElementList"
+
+_PathElementList_start = Core.Name "start"
+
+_PathElementList_steps = Core.Name "steps"
+
+-- | A GQL path element list start, equivalent to a node reference value expression
+type PathElementListStart = NodeReferenceValueExpression
+
+_PathElementListStart = Core.Name "openGql.grammar.PathElementListStart"
+
+-- | A GQL path element list step
+data PathElementListStep =
+  PathElementListStep {
+    pathElementListStepEdgeReference :: EdgeReferenceValueExpression,
+    pathElementListStepNodeReference :: NodeReferenceValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_PathElementListStep = Core.Name "openGql.grammar.PathElementListStep"
+
+_PathElementListStep_edgeReference = Core.Name "edgeReference"
+
+_PathElementListStep_nodeReference = Core.Name "nodeReference"
+
+-- | A GQL path factor: one of several alternative forms
+data PathFactor =
+  PathFactorPrimary PathPrimary |
+  PathFactorQuantifiedPrimary QuantifiedPathPrimary |
+  PathFactorQuestionedPrimary QuestionedPathPrimary
+  deriving (Eq, Ord, Read, Show)
+
+_PathFactor = Core.Name "openGql.grammar.PathFactor"
+
+_PathFactor_primary = Core.Name "primary"
+
+_PathFactor_quantifiedPrimary = Core.Name "quantifiedPrimary"
+
+_PathFactor_questionedPrimary = Core.Name "questionedPrimary"
+
+-- | A GQL path length expression, equivalent to a path value expression
+type PathLengthExpression = PathValueExpression
+
+_PathLengthExpression = Core.Name "openGql.grammar.PathLengthExpression"
+
+-- | A GQL path mode: one of a fixed set of alternatives
+data PathMode =
+  PathModeWalk |
+  PathModeTrail |
+  PathModeSimple |
+  PathModeAcyclic
+  deriving (Eq, Ord, Read, Show)
+
+_PathMode = Core.Name "openGql.grammar.PathMode"
+
+_PathMode_walk = Core.Name "walk"
+
+_PathMode_trail = Core.Name "trail"
+
+_PathMode_simple = Core.Name "simple"
+
+_PathMode_acyclic = Core.Name "acyclic"
+
+-- | A GQL path mode prefix
+data PathModePrefix =
+  PathModePrefix {
+    pathModePrefixMode :: PathMode,
+    pathModePrefixOrPaths :: (Maybe PathOrPaths)}
+  deriving (Eq, Ord, Read, Show)
+
+_PathModePrefix = Core.Name "openGql.grammar.PathModePrefix"
+
+_PathModePrefix_mode = Core.Name "mode"
+
+_PathModePrefix_orPaths = Core.Name "orPaths"
+
+-- | A GQL path or paths: one of a fixed set of alternatives
+data PathOrPaths =
+  PathOrPathsPath |
+  PathOrPathsPaths
+  deriving (Eq, Ord, Read, Show)
+
+_PathOrPaths = Core.Name "openGql.grammar.PathOrPaths"
+
+_PathOrPaths_path = Core.Name "path"
+
+_PathOrPaths_paths = Core.Name "paths"
+
+-- | A GQL path pattern
+data PathPattern =
+  PathPattern {
+    pathPatternVariableDeclaration :: (Maybe PathVariableDeclaration),
+    pathPatternPrefix :: (Maybe PathPatternPrefix),
+    pathPatternExpression :: PathPatternExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_PathPattern = Core.Name "openGql.grammar.PathPattern"
+
+_PathPattern_variableDeclaration = Core.Name "variableDeclaration"
+
+_PathPattern_prefix = Core.Name "prefix"
+
+_PathPattern_expression = Core.Name "expression"
+
+-- | A GQL path pattern expression: one of several alternative forms
+data PathPatternExpression =
+  PathPatternExpressionTerm PathTerm |
+  PathPatternExpressionMultisetAlternation [PathTerm] |
+  PathPatternExpressionPatternUnion [PathTerm]
+  deriving (Eq, Ord, Read, Show)
+
+_PathPatternExpression = Core.Name "openGql.grammar.PathPatternExpression"
+
+_PathPatternExpression_term = Core.Name "term"
+
+_PathPatternExpression_multisetAlternation = Core.Name "multisetAlternation"
+
+_PathPatternExpression_patternUnion = Core.Name "patternUnion"
+
+-- | A list of GQL path pattern list elements
+type PathPatternList = [PathPattern]
+
+_PathPatternList = Core.Name "openGql.grammar.PathPatternList"
+
+-- | A GQL path pattern prefix: one of several alternative forms
+data PathPatternPrefix =
+  PathPatternPrefixModePrefix PathModePrefix |
+  PathPatternPrefixSearchPrefix PathSearchPrefix
+  deriving (Eq, Ord, Read, Show)
+
+_PathPatternPrefix = Core.Name "openGql.grammar.PathPatternPrefix"
+
+_PathPatternPrefix_modePrefix = Core.Name "modePrefix"
+
+_PathPatternPrefix_searchPrefix = Core.Name "searchPrefix"
+
+-- | A GQL path primary: one of several alternative forms
+data PathPrimary =
+  PathPrimaryElementPattern ElementPattern |
+  PathPrimaryParenthesizedExpression ParenthesizedPathPatternExpression |
+  PathPrimarySimplifiedExpression SimplifiedPathPatternExpression
+  deriving (Eq, Ord, Read, Show)
+
+_PathPrimary = Core.Name "openGql.grammar.PathPrimary"
+
+_PathPrimary_elementPattern = Core.Name "elementPattern"
+
+_PathPrimary_parenthesizedExpression = Core.Name "parenthesizedExpression"
+
+_PathPrimary_simplifiedExpression = Core.Name "simplifiedExpression"
+
+-- | A GQL path search prefix: one of several alternative forms
+data PathSearchPrefix =
+  PathSearchPrefixAll AllPathSearch |
+  PathSearchPrefixAny AnyPathSearch |
+  PathSearchPrefixShortest ShortestPathSearch
+  deriving (Eq, Ord, Read, Show)
+
+_PathSearchPrefix = Core.Name "openGql.grammar.PathSearchPrefix"
+
+_PathSearchPrefix_all = Core.Name "all"
+
+_PathSearchPrefix_any = Core.Name "any"
+
+_PathSearchPrefix_shortest = Core.Name "shortest"
+
+-- | A list of GQL path term elements
+type PathTerm = [PathFactor]
+
+_PathTerm = Core.Name "openGql.grammar.PathTerm"
+
+-- | A GQL path value constructor, equivalent to a path value constructor by enumeration
+type PathValueConstructor = PathValueConstructorByEnumeration
+
+_PathValueConstructor = Core.Name "openGql.grammar.PathValueConstructor"
+
+-- | A GQL path value constructor by enumeration, equivalent to a path element list
+type PathValueConstructorByEnumeration = PathElementList
+
+_PathValueConstructorByEnumeration = Core.Name "openGql.grammar.PathValueConstructorByEnumeration"
+
+-- | A GQL path value expression, equivalent to a value expression
+type PathValueExpression = ValueExpression
+
+_PathValueExpression = Core.Name "openGql.grammar.PathValueExpression"
+
+-- | A GQL path value type
+data PathValueType =
+  PathValueType {
+    pathValueTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_PathValueType = Core.Name "openGql.grammar.PathValueType"
+
+_PathValueType_notNull = Core.Name "notNull"
+
+-- | A GQL path variable, equivalent to a binding variable
+type PathVariable = BindingVariable
+
+_PathVariable = Core.Name "openGql.grammar.PathVariable"
+
+-- | A GQL path variable declaration, equivalent to a path variable
+type PathVariableDeclaration = PathVariable
+
+_PathVariableDeclaration = Core.Name "openGql.grammar.PathVariableDeclaration"
+
+-- | A GQL path variable reference, equivalent to a binding variable reference
+type PathVariableReference = BindingVariableReference
+
+_PathVariableReference = Core.Name "openGql.grammar.PathVariableReference"
+
+-- | A GQL power function
+data PowerFunction =
+  PowerFunction {
+    powerFunctionBase :: NumericValueExpressionBase,
+    powerFunctionExponent :: NumericValueExpressionExponent}
+  deriving (Eq, Ord, Read, Show)
+
+_PowerFunction = Core.Name "openGql.grammar.PowerFunction"
+
+_PowerFunction_base = Core.Name "base"
+
+_PowerFunction_exponent = Core.Name "exponent"
+
+-- | A GQL precision, equivalent to a unsigned decimal integer
+type Precision = UnsignedDecimalInteger
+
+_Precision = Core.Name "openGql.grammar.Precision"
+
+-- | A GQL precision and scale
+data PrecisionAndScale =
+  PrecisionAndScale {
+    precisionAndScalePrecision :: Precision,
+    precisionAndScaleScale :: (Maybe Scale),
+    precisionAndScaleNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_PrecisionAndScale = Core.Name "openGql.grammar.PrecisionAndScale"
+
+_PrecisionAndScale_precision = Core.Name "precision"
+
+_PrecisionAndScale_scale = Core.Name "scale"
+
+_PrecisionAndScale_notNull = Core.Name "notNull"
+
+-- | A GQL predefined schema reference: one of a fixed set of alternatives
+data PredefinedSchemaReference =
+  PredefinedSchemaReferenceHomeSchema |
+  PredefinedSchemaReferenceCurrentSchema |
+  PredefinedSchemaReferencePeriod
+  deriving (Eq, Ord, Read, Show)
+
+_PredefinedSchemaReference = Core.Name "openGql.grammar.PredefinedSchemaReference"
+
+_PredefinedSchemaReference_homeSchema = Core.Name "homeSchema"
+
+_PredefinedSchemaReference_currentSchema = Core.Name "currentSchema"
+
+_PredefinedSchemaReference_period = Core.Name "period"
+
+-- | A GQL predefined type: one of several alternative forms
+data PredefinedType =
+  PredefinedTypeBooleanType BooleanType |
+  PredefinedTypeCharacterStringType CharacterStringType |
+  PredefinedTypeByteStringType ByteStringType |
+  PredefinedTypeNumericType NumericType |
+  PredefinedTypeTemporalType TemporalType |
+  PredefinedTypeReferenceValueType ReferenceValueType |
+  PredefinedTypeImmaterialValueType ImmaterialValueType
+  deriving (Eq, Ord, Read, Show)
+
+_PredefinedType = Core.Name "openGql.grammar.PredefinedType"
+
+_PredefinedType_booleanType = Core.Name "booleanType"
+
+_PredefinedType_characterStringType = Core.Name "characterStringType"
+
+_PredefinedType_byteStringType = Core.Name "byteStringType"
+
+_PredefinedType_numericType = Core.Name "numericType"
+
+_PredefinedType_temporalType = Core.Name "temporalType"
+
+_PredefinedType_referenceValueType = Core.Name "referenceValueType"
+
+_PredefinedType_immaterialValueType = Core.Name "immaterialValueType"
+
+-- | A GQL predicate: one of several alternative forms
+data Predicate =
+  PredicateExistsPredicate ExistsPredicate |
+  PredicateNullPredicate NullPredicate |
+  PredicateValueTypePredicate ValueTypePredicate |
+  PredicateDirectedPredicate DirectedPredicate |
+  PredicateLabeledPredicate LabeledPredicate |
+  PredicateSourceDestinationPredicate SourceDestinationPredicate |
+  PredicateAllDifferentPredicate AllDifferentPredicate |
+  PredicateSamePredicate SamePredicate |
+  PredicatePropertyExistsPredicate PropertyExistsPredicate
+  deriving (Eq, Ord, Read, Show)
+
+_Predicate = Core.Name "openGql.grammar.Predicate"
+
+_Predicate_existsPredicate = Core.Name "existsPredicate"
+
+_Predicate_nullPredicate = Core.Name "nullPredicate"
+
+_Predicate_valueTypePredicate = Core.Name "valueTypePredicate"
+
+_Predicate_directedPredicate = Core.Name "directedPredicate"
+
+_Predicate_labeledPredicate = Core.Name "labeledPredicate"
+
+_Predicate_sourceDestinationPredicate = Core.Name "sourceDestinationPredicate"
+
+_Predicate_allDifferentPredicate = Core.Name "allDifferentPredicate"
+
+_Predicate_samePredicate = Core.Name "samePredicate"
+
+_Predicate_propertyExistsPredicate = Core.Name "propertyExistsPredicate"
+
+-- | A GQL primary value expression: one of several alternative forms
+data PrimaryValueExpression =
+  PrimaryValueExpressionParenthesized ParenthesizedValueExpression |
+  PrimaryValueExpressionAggregateFunction AggregateFunction |
+  PrimaryValueExpressionUnsignedValueSpecification UnsignedValueSpecification |
+  PrimaryValueExpressionPathValueConstructor PathValueConstructor |
+  PrimaryValueExpressionPropertyReference PropertyReference |
+  PrimaryValueExpressionValueQueryExpression ValueQueryExpression |
+  PrimaryValueExpressionCaseExpression CaseExpression |
+  PrimaryValueExpressionCastSpecification CastSpecification |
+  PrimaryValueExpressionElementIdFunction ElementIdFunction |
+  PrimaryValueExpressionLetValueExpression LetValueExpression |
+  PrimaryValueExpressionBindingVariableReference BindingVariableReference
+  deriving (Eq, Ord, Read, Show)
+
+_PrimaryValueExpression = Core.Name "openGql.grammar.PrimaryValueExpression"
+
+_PrimaryValueExpression_parenthesized = Core.Name "parenthesized"
+
+_PrimaryValueExpression_aggregateFunction = Core.Name "aggregateFunction"
+
+_PrimaryValueExpression_unsignedValueSpecification = Core.Name "unsignedValueSpecification"
+
+_PrimaryValueExpression_pathValueConstructor = Core.Name "pathValueConstructor"
+
+_PrimaryValueExpression_propertyReference = Core.Name "propertyReference"
+
+_PrimaryValueExpression_valueQueryExpression = Core.Name "valueQueryExpression"
+
+_PrimaryValueExpression_caseExpression = Core.Name "caseExpression"
+
+_PrimaryValueExpression_castSpecification = Core.Name "castSpecification"
+
+_PrimaryValueExpression_elementIdFunction = Core.Name "elementIdFunction"
+
+_PrimaryValueExpression_letValueExpression = Core.Name "letValueExpression"
+
+_PrimaryValueExpression_bindingVariableReference = Core.Name "bindingVariableReference"
+
+-- | A GQL primitive catalog modifying statement: one of several alternative forms
+data PrimitiveCatalogModifyingStatement =
+  PrimitiveCatalogModifyingStatementCreateSchema CreateSchemaStatement |
+  PrimitiveCatalogModifyingStatementDropSchema DropSchemaStatement |
+  PrimitiveCatalogModifyingStatementCreateGraph CreateGraphStatement |
+  PrimitiveCatalogModifyingStatementDropGraph DropGraphStatement |
+  PrimitiveCatalogModifyingStatementCreateGraphType CreateGraphTypeStatement |
+  PrimitiveCatalogModifyingStatementDropGraphType DropGraphTypeStatement
+  deriving (Eq, Ord, Read, Show)
+
+_PrimitiveCatalogModifyingStatement = Core.Name "openGql.grammar.PrimitiveCatalogModifyingStatement"
+
+_PrimitiveCatalogModifyingStatement_createSchema = Core.Name "createSchema"
+
+_PrimitiveCatalogModifyingStatement_dropSchema = Core.Name "dropSchema"
+
+_PrimitiveCatalogModifyingStatement_createGraph = Core.Name "createGraph"
+
+_PrimitiveCatalogModifyingStatement_dropGraph = Core.Name "dropGraph"
+
+_PrimitiveCatalogModifyingStatement_createGraphType = Core.Name "createGraphType"
+
+_PrimitiveCatalogModifyingStatement_dropGraphType = Core.Name "dropGraphType"
+
+-- | A GQL primitive data modifying statement: one of several alternative forms
+data PrimitiveDataModifyingStatement =
+  PrimitiveDataModifyingStatementInsert InsertStatement |
+  PrimitiveDataModifyingStatementSet SetStatement |
+  PrimitiveDataModifyingStatementRemove RemoveStatement |
+  PrimitiveDataModifyingStatementDelete DeleteStatement
+  deriving (Eq, Ord, Read, Show)
+
+_PrimitiveDataModifyingStatement = Core.Name "openGql.grammar.PrimitiveDataModifyingStatement"
+
+_PrimitiveDataModifyingStatement_insert = Core.Name "insert"
+
+_PrimitiveDataModifyingStatement_set = Core.Name "set"
+
+_PrimitiveDataModifyingStatement_remove = Core.Name "remove"
+
+_PrimitiveDataModifyingStatement_delete = Core.Name "delete"
+
+-- | A GQL primitive query statement: one of several alternative forms
+data PrimitiveQueryStatement =
+  PrimitiveQueryStatementMatch MatchStatement |
+  PrimitiveQueryStatementLet LetStatement |
+  PrimitiveQueryStatementFor ForStatement |
+  PrimitiveQueryStatementFilter FilterStatement |
+  PrimitiveQueryStatementOrderByAndPage OrderByAndPageStatement
+  deriving (Eq, Ord, Read, Show)
+
+_PrimitiveQueryStatement = Core.Name "openGql.grammar.PrimitiveQueryStatement"
+
+_PrimitiveQueryStatement_match = Core.Name "match"
+
+_PrimitiveQueryStatement_let = Core.Name "let"
+
+_PrimitiveQueryStatement_for = Core.Name "for"
+
+_PrimitiveQueryStatement_filter = Core.Name "filter"
+
+_PrimitiveQueryStatement_orderByAndPage = Core.Name "orderByAndPage"
+
+-- | A GQL primitive result statement: one of several alternative forms
+data PrimitiveResultStatement =
+  PrimitiveResultStatementReturnAndOptionalOrderBy ReturnAndOptionalOrderByAndPage |
+  PrimitiveResultStatementFinish
+  deriving (Eq, Ord, Read, Show)
+
+_PrimitiveResultStatement = Core.Name "openGql.grammar.PrimitiveResultStatement"
+
+_PrimitiveResultStatement_returnAndOptionalOrderBy = Core.Name "returnAndOptionalOrderBy"
+
+_PrimitiveResultStatement_finish = Core.Name "finish"
+
+-- | A GQL procedure and maybe end
+data ProcedureAndMaybeEnd =
+  ProcedureAndMaybeEnd {
+    procedureAndMaybeEndProcedure :: ProcedureSpecification,
+    procedureAndMaybeEndEnd :: (Maybe EndTransactionCommand)}
+  deriving (Eq, Ord, Read, Show)
+
+_ProcedureAndMaybeEnd = Core.Name "openGql.grammar.ProcedureAndMaybeEnd"
+
+_ProcedureAndMaybeEnd_procedure = Core.Name "procedure"
+
+_ProcedureAndMaybeEnd_end = Core.Name "end"
+
+-- | A GQL procedure argument, equivalent to a value expression
+type ProcedureArgument = ValueExpression
+
+_ProcedureArgument = Core.Name "openGql.grammar.ProcedureArgument"
+
+-- | A list of GQL procedure argument list elements
+type ProcedureArgumentList = [ProcedureArgument]
+
+_ProcedureArgumentList = Core.Name "openGql.grammar.ProcedureArgumentList"
+
+-- | A GQL procedure body
+data ProcedureBody =
+  ProcedureBody {
+    procedureBodyAtSchema :: (Maybe AtSchemaClause),
+    procedureBodyBindings :: (Maybe BindingVariableDefinitionBlock),
+    procedureBodyStatements :: StatementBlock}
+  deriving (Eq, Ord, Read, Show)
+
+_ProcedureBody = Core.Name "openGql.grammar.ProcedureBody"
+
+_ProcedureBody_atSchema = Core.Name "atSchema"
+
+_ProcedureBody_bindings = Core.Name "bindings"
+
+_ProcedureBody_statements = Core.Name "statements"
+
+-- | A GQL procedure call: one of several alternative forms
+data ProcedureCall =
+  ProcedureCallInline InlineProcedureCall |
+  ProcedureCallNamed NamedProcedureCall
+  deriving (Eq, Ord, Read, Show)
+
+_ProcedureCall = Core.Name "openGql.grammar.ProcedureCall"
+
+_ProcedureCall_inline = Core.Name "inline"
+
+_ProcedureCall_named = Core.Name "named"
+
+-- | A GQL procedure name
+type ProcedureName = String
+
+_ProcedureName = Core.Name "openGql.grammar.ProcedureName"
+
+-- | A GQL procedure reference: one of several alternative forms
+data ProcedureReference =
+  ProcedureReferenceParentAndProcedureName CatalogProcedureParentAndName |
+  ProcedureReferenceParameterSpecification ReferenceParameterSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_ProcedureReference = Core.Name "openGql.grammar.ProcedureReference"
+
+_ProcedureReference_parentAndProcedureName = Core.Name "parentAndProcedureName"
+
+_ProcedureReference_parameterSpecification = Core.Name "parameterSpecification"
+
+-- | A GQL procedure specification, equivalent to a procedure body
+type ProcedureSpecification = ProcedureBody
+
+_ProcedureSpecification = Core.Name "openGql.grammar.ProcedureSpecification"
+
+-- | A GQL program activity: one of several alternative forms
+data ProgramActivity =
+  ProgramActivitySession SessionActivity |
+  ProgramActivityTransaction TransactionActivity
+  deriving (Eq, Ord, Read, Show)
+
+_ProgramActivity = Core.Name "openGql.grammar.ProgramActivity"
+
+_ProgramActivity_session = Core.Name "session"
+
+_ProgramActivity_transaction = Core.Name "transaction"
+
+-- | A GQL property exists predicate
+data PropertyExistsPredicate =
+  PropertyExistsPredicate {
+    propertyExistsPredicateElementVariableReference :: ElementVariableReference,
+    propertyExistsPredicatePropertyName :: PropertyName}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyExistsPredicate = Core.Name "openGql.grammar.PropertyExistsPredicate"
+
+_PropertyExistsPredicate_elementVariableReference = Core.Name "elementVariableReference"
+
+_PropertyExistsPredicate_propertyName = Core.Name "propertyName"
+
+-- | A GQL property key value pair
+data PropertyKeyValuePair =
+  PropertyKeyValuePair {
+    propertyKeyValuePairName :: PropertyName,
+    propertyKeyValuePairValue :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyKeyValuePair = Core.Name "openGql.grammar.PropertyKeyValuePair"
+
+_PropertyKeyValuePair_name = Core.Name "name"
+
+_PropertyKeyValuePair_value = Core.Name "value"
+
+-- | A list of GQL property key value pair list elements
+type PropertyKeyValuePairList = [PropertyKeyValuePair]
+
+_PropertyKeyValuePairList = Core.Name "openGql.grammar.PropertyKeyValuePairList"
+
+-- | A GQL property name
+type PropertyName = String
+
+_PropertyName = Core.Name "openGql.grammar.PropertyName"
+
+-- | A GQL property reference
+data PropertyReference =
+  PropertyReference {
+    propertyReferenceValueExpression :: PrimaryValueExpression,
+    propertyReferencePropertyName :: PropertyName}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyReference = Core.Name "openGql.grammar.PropertyReference"
+
+_PropertyReference_valueExpression = Core.Name "valueExpression"
+
+_PropertyReference_propertyName = Core.Name "propertyName"
+
+-- | A GQL property type
+data PropertyType =
+  PropertyType {
+    propertyTypeName :: PropertyName,
+    propertyTypeTyped :: (Maybe Typed),
+    propertyTypeValueType :: PropertyValueType}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyType = Core.Name "openGql.grammar.PropertyType"
+
+_PropertyType_name = Core.Name "name"
+
+_PropertyType_typed = Core.Name "typed"
+
+_PropertyType_valueType = Core.Name "valueType"
+
+-- | A list of GQL property type list elements
+type PropertyTypeList = [PropertyType]
+
+_PropertyTypeList = Core.Name "openGql.grammar.PropertyTypeList"
+
+-- | An optional GQL property types specification
+type PropertyTypesSpecification = (Maybe PropertyTypeList)
+
+_PropertyTypesSpecification = Core.Name "openGql.grammar.PropertyTypesSpecification"
+
+-- | A GQL property value type, equivalent to a value type
+type PropertyValueType = ValueType
+
+_PropertyValueType = Core.Name "openGql.grammar.PropertyValueType"
+
+-- | A GQL quantified path primary
+data QuantifiedPathPrimary =
+  QuantifiedPathPrimary {
+    quantifiedPathPrimaryPrimary :: PathPrimary,
+    quantifiedPathPrimaryQuantifier :: GraphPatternQuantifier}
+  deriving (Eq, Ord, Read, Show)
+
+_QuantifiedPathPrimary = Core.Name "openGql.grammar.QuantifiedPathPrimary"
+
+_QuantifiedPathPrimary_primary = Core.Name "primary"
+
+_QuantifiedPathPrimary_quantifier = Core.Name "quantifier"
+
+-- | A GQL query conjunction: one of several alternative forms
+data QueryConjunction =
+  QueryConjunctionSetOperator SetOperator |
+  QueryConjunctionOtherwise
+  deriving (Eq, Ord, Read, Show)
+
+_QueryConjunction = Core.Name "openGql.grammar.QueryConjunction"
+
+_QueryConjunction_setOperator = Core.Name "setOperator"
+
+_QueryConjunction_otherwise = Core.Name "otherwise"
+
+-- | A GQL questioned path primary, equivalent to a path primary
+type QuestionedPathPrimary = PathPrimary
+
+_QuestionedPathPrimary = Core.Name "openGql.grammar.QuestionedPathPrimary"
+
+-- | A GQL real type
+data RealType =
+  RealType {
+    realTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_RealType = Core.Name "openGql.grammar.RealType"
+
+_RealType_notNull = Core.Name "notNull"
+
+-- | A GQL record constructor, equivalent to a fields specification
+type RecordConstructor = FieldsSpecification
+
+_RecordConstructor = Core.Name "openGql.grammar.RecordConstructor"
+
+-- | A GQL record literal, equivalent to a record constructor
+type RecordLiteral = RecordConstructor
+
+_RecordLiteral = Core.Name "openGql.grammar.RecordLiteral"
+
+-- | A GQL record type: one of several alternative forms
+data RecordType =
+  RecordTypeAnyRecord AnyRecordType |
+  RecordTypeSpecifiedRecord SpecifiedRecordType
+  deriving (Eq, Ord, Read, Show)
+
+_RecordType = Core.Name "openGql.grammar.RecordType"
+
+_RecordType_anyRecord = Core.Name "anyRecord"
+
+_RecordType_specifiedRecord = Core.Name "specifiedRecord"
+
+-- | A GQL reference parameter specification
+type ReferenceParameterSpecification = ()
+
+_ReferenceParameterSpecification = Core.Name "openGql.grammar.ReferenceParameterSpecification"
+
+-- | A GQL reference value type: one of several alternative forms
+data ReferenceValueType =
+  ReferenceValueTypeGraph GraphReferenceValueType |
+  ReferenceValueTypeBindingTable BindingTableReferenceValueType |
+  ReferenceValueTypeNode NodeReferenceValueType |
+  ReferenceValueTypeEdge EdgeReferenceValueType
+  deriving (Eq, Ord, Read, Show)
+
+_ReferenceValueType = Core.Name "openGql.grammar.ReferenceValueType"
+
+_ReferenceValueType_graph = Core.Name "graph"
+
+_ReferenceValueType_bindingTable = Core.Name "bindingTable"
+
+_ReferenceValueType_node = Core.Name "node"
+
+_ReferenceValueType_edge = Core.Name "edge"
+
+-- | A GQL regular identifier
+type RegularIdentifier = String
+
+_RegularIdentifier = Core.Name "openGql.grammar.RegularIdentifier"
+
+-- | A GQL relative catalog schema reference: one of several alternative forms
+data RelativeCatalogSchemaReference =
+  RelativeCatalogSchemaReferencePredefinedReference PredefinedSchemaReference |
+  RelativeCatalogSchemaReferenceDirectoryAndSchema RelativeDirectoryAndSchema
+  deriving (Eq, Ord, Read, Show)
+
+_RelativeCatalogSchemaReference = Core.Name "openGql.grammar.RelativeCatalogSchemaReference"
+
+_RelativeCatalogSchemaReference_predefinedReference = Core.Name "predefinedReference"
+
+_RelativeCatalogSchemaReference_directoryAndSchema = Core.Name "directoryAndSchema"
+
+-- | A GQL relative directory and schema
+data RelativeDirectoryAndSchema =
+  RelativeDirectoryAndSchema {
+    relativeDirectoryAndSchemaDirectoryPath :: RelativeDirectoryPath,
+    relativeDirectoryAndSchemaSchemaName :: SchemaName}
+  deriving (Eq, Ord, Read, Show)
+
+_RelativeDirectoryAndSchema = Core.Name "openGql.grammar.RelativeDirectoryAndSchema"
+
+_RelativeDirectoryAndSchema_directoryPath = Core.Name "directoryPath"
+
+_RelativeDirectoryAndSchema_schemaName = Core.Name "schemaName"
+
+-- | A GQL relative directory path
+data RelativeDirectoryPath =
+  RelativeDirectoryPath {
+    relativeDirectoryPathParentDirectories :: Int,
+    relativeDirectoryPathSimplePath :: (Maybe SimpleDirectoryPath)}
+  deriving (Eq, Ord, Read, Show)
+
+_RelativeDirectoryPath = Core.Name "openGql.grammar.RelativeDirectoryPath"
+
+_RelativeDirectoryPath_parentDirectories = Core.Name "parentDirectories"
+
+_RelativeDirectoryPath_simplePath = Core.Name "simplePath"
+
+-- | A GQL remove item: one of several alternative forms
+data RemoveItem =
+  RemoveItemProperty RemovePropertyItem |
+  RemoveItemLabel RemoveLabelItem
+  deriving (Eq, Ord, Read, Show)
+
+_RemoveItem = Core.Name "openGql.grammar.RemoveItem"
+
+_RemoveItem_property = Core.Name "property"
+
+_RemoveItem_label = Core.Name "label"
+
+-- | A list of GQL remove item list elements
+type RemoveItemList = [RemoveItem]
+
+_RemoveItemList = Core.Name "openGql.grammar.RemoveItemList"
+
+-- | A GQL remove label item
+data RemoveLabelItem =
+  RemoveLabelItem {
+    removeLabelItemVariable :: BindingVariableReference,
+    removeLabelItemIsOrColon :: IsOrColon,
+    removeLabelItemLabel :: LabelName}
+  deriving (Eq, Ord, Read, Show)
+
+_RemoveLabelItem = Core.Name "openGql.grammar.RemoveLabelItem"
+
+_RemoveLabelItem_variable = Core.Name "variable"
+
+_RemoveLabelItem_isOrColon = Core.Name "isOrColon"
+
+_RemoveLabelItem_label = Core.Name "label"
+
+-- | A GQL remove property item
+data RemovePropertyItem =
+  RemovePropertyItem {
+    removePropertyItemVariable :: BindingVariableReference,
+    removePropertyItemPropertyName :: PropertyName}
+  deriving (Eq, Ord, Read, Show)
+
+_RemovePropertyItem = Core.Name "openGql.grammar.RemovePropertyItem"
+
+_RemovePropertyItem_variable = Core.Name "variable"
+
+_RemovePropertyItem_propertyName = Core.Name "propertyName"
+
+-- | A GQL remove statement, equivalent to a remove item list
+type RemoveStatement = RemoveItemList
+
+_RemoveStatement = Core.Name "openGql.grammar.RemoveStatement"
+
+-- | A GQL repeatable elements match mode, equivalent to a element bindings or elements
+type RepeatableElementsMatchMode = ElementBindingsOrElements
+
+_RepeatableElementsMatchMode = Core.Name "openGql.grammar.RepeatableElementsMatchMode"
+
+-- | A GQL result: one of several alternative forms
+data Result =
+  ResultSimple ResultExpression |
+  ResultNullLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_Result = Core.Name "openGql.grammar.Result"
+
+_Result_simple = Core.Name "simple"
+
+_Result_nullLiteral = Core.Name "nullLiteral"
+
+-- | A GQL result expression, equivalent to a value expression
+type ResultExpression = ValueExpression
+
+_ResultExpression = Core.Name "openGql.grammar.ResultExpression"
+
+-- | A GQL return and optional order by and page
+data ReturnAndOptionalOrderByAndPage =
+  ReturnAndOptionalOrderByAndPage {
+    returnAndOptionalOrderByAndPageReturn :: ReturnStatement,
+    returnAndOptionalOrderByAndPageOrderByAndPage :: (Maybe OrderByAndPageStatement)}
+  deriving (Eq, Ord, Read, Show)
+
+_ReturnAndOptionalOrderByAndPage = Core.Name "openGql.grammar.ReturnAndOptionalOrderByAndPage"
+
+_ReturnAndOptionalOrderByAndPage_return = Core.Name "return"
+
+_ReturnAndOptionalOrderByAndPage_orderByAndPage = Core.Name "orderByAndPage"
+
+-- | A GQL return item
+data ReturnItem =
+  ReturnItem {
+    returnItemExpression :: AggregatingValueExpression,
+    returnItemAlias :: (Maybe ReturnItemAlias)}
+  deriving (Eq, Ord, Read, Show)
+
+_ReturnItem = Core.Name "openGql.grammar.ReturnItem"
+
+_ReturnItem_expression = Core.Name "expression"
+
+_ReturnItem_alias = Core.Name "alias"
+
+-- | A GQL return item alias
+type ReturnItemAlias = String
+
+_ReturnItemAlias = Core.Name "openGql.grammar.ReturnItemAlias"
+
+-- | A list of GQL return item list elements
+type ReturnItemList = [ReturnItem]
+
+_ReturnItemList = Core.Name "openGql.grammar.ReturnItemList"
+
+-- | A GQL return items: one of several alternative forms
+data ReturnItems =
+  ReturnItemsAsterisk |
+  ReturnItemsItemList ReturnItemList
+  deriving (Eq, Ord, Read, Show)
+
+_ReturnItems = Core.Name "openGql.grammar.ReturnItems"
+
+_ReturnItems_asterisk = Core.Name "asterisk"
+
+_ReturnItems_itemList = Core.Name "itemList"
+
+-- | A GQL return items and group by
+data ReturnItemsAndGroupBy =
+  ReturnItemsAndGroupBy {
+    returnItemsAndGroupByQuantifier :: (Maybe SetQuantifier),
+    returnItemsAndGroupByItems :: ReturnItems,
+    returnItemsAndGroupByGroupBy :: (Maybe GroupByClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_ReturnItemsAndGroupBy = Core.Name "openGql.grammar.ReturnItemsAndGroupBy"
+
+_ReturnItemsAndGroupBy_quantifier = Core.Name "quantifier"
+
+_ReturnItemsAndGroupBy_items = Core.Name "items"
+
+_ReturnItemsAndGroupBy_groupBy = Core.Name "groupBy"
+
+-- | A GQL return statement, equivalent to a return statement body
+type ReturnStatement = ReturnStatementBody
+
+_ReturnStatement = Core.Name "openGql.grammar.ReturnStatement"
+
+-- | A GQL return statement body: one of several alternative forms
+data ReturnStatementBody =
+  ReturnStatementBodyItems ReturnItemsAndGroupBy |
+  ReturnStatementBodyNoBindings
+  deriving (Eq, Ord, Read, Show)
+
+_ReturnStatementBody = Core.Name "openGql.grammar.ReturnStatementBody"
+
+_ReturnStatementBody_items = Core.Name "items"
+
+_ReturnStatementBody_noBindings = Core.Name "noBindings"
+
+-- | A GQL rollback command
+type RollbackCommand = ()
+
+_RollbackCommand = Core.Name "openGql.grammar.RollbackCommand"
+
+-- | A GQL same predicate
+data SamePredicate =
+  SamePredicate {
+    samePredicateReferences :: [ElementVariableReference]}
+  deriving (Eq, Ord, Read, Show)
+
+_SamePredicate = Core.Name "openGql.grammar.SamePredicate"
+
+_SamePredicate_references = Core.Name "references"
+
+-- | A GQL scale, equivalent to a unsigned decimal integer
+type Scale = UnsignedDecimalInteger
+
+_Scale = Core.Name "openGql.grammar.Scale"
+
+-- | A GQL schema and objects
+data SchemaAndObjects =
+  SchemaAndObjects {
+    schemaAndObjectsSchemaReference :: SchemaReference,
+    schemaAndObjectsObjects :: [ObjectName]}
+  deriving (Eq, Ord, Read, Show)
+
+_SchemaAndObjects = Core.Name "openGql.grammar.SchemaAndObjects"
+
+_SchemaAndObjects_schemaReference = Core.Name "schemaReference"
+
+_SchemaAndObjects_objects = Core.Name "objects"
+
+-- | A GQL schema name
+type SchemaName = String
+
+_SchemaName = Core.Name "openGql.grammar.SchemaName"
+
+-- | A GQL schema reference: one of several alternative forms
+data SchemaReference =
+  SchemaReferenceAbsoluteReference AbsoluteCatalogSchemaReference |
+  SchemaReferenceRelativeReference RelativeCatalogSchemaReference |
+  SchemaReferenceParameterSpecification ReferenceParameterSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_SchemaReference = Core.Name "openGql.grammar.SchemaReference"
+
+_SchemaReference_absoluteReference = Core.Name "absoluteReference"
+
+_SchemaReference_relativeReference = Core.Name "relativeReference"
+
+_SchemaReference_parameterSpecification = Core.Name "parameterSpecification"
+
+-- | A GQL search condition, equivalent to a boolean value expression
+type SearchCondition = BooleanValueExpression
+
+_SearchCondition = Core.Name "openGql.grammar.SearchCondition"
+
+-- | A GQL searched case
+data SearchedCase =
+  SearchedCase {
+    searchedCaseWhenClauses :: [SearchedWhenClause],
+    searchedCaseElseClause :: (Maybe ElseClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_SearchedCase = Core.Name "openGql.grammar.SearchedCase"
+
+_SearchedCase_whenClauses = Core.Name "whenClauses"
+
+_SearchedCase_elseClause = Core.Name "elseClause"
+
+-- | A GQL searched when clause
+data SearchedWhenClause =
+  SearchedWhenClause {
+    searchedWhenClauseSearchCondition :: SearchCondition,
+    searchedWhenClauseResult :: Result}
+  deriving (Eq, Ord, Read, Show)
+
+_SearchedWhenClause = Core.Name "openGql.grammar.SearchedWhenClause"
+
+_SearchedWhenClause_searchCondition = Core.Name "searchCondition"
+
+_SearchedWhenClause_result = Core.Name "result"
+
+-- | A GQL select graph match
+data SelectGraphMatch =
+  SelectGraphMatch {
+    selectGraphMatchGraphExpression :: GraphExpression,
+    selectGraphMatchMatchStatement :: MatchStatement}
+  deriving (Eq, Ord, Read, Show)
+
+_SelectGraphMatch = Core.Name "openGql.grammar.SelectGraphMatch"
+
+_SelectGraphMatch_graphExpression = Core.Name "graphExpression"
+
+_SelectGraphMatch_matchStatement = Core.Name "matchStatement"
+
+-- | A list of GQL select graph match list elements
+type SelectGraphMatchList = [SelectGraphMatch]
+
+_SelectGraphMatchList = Core.Name "openGql.grammar.SelectGraphMatchList"
+
+-- | A GQL select item
+data SelectItem =
+  SelectItem {
+    selectItemExpression :: AggregatingValueExpression,
+    selectItemAlias :: (Maybe SelectItemAlias)}
+  deriving (Eq, Ord, Read, Show)
+
+_SelectItem = Core.Name "openGql.grammar.SelectItem"
+
+_SelectItem_expression = Core.Name "expression"
+
+_SelectItem_alias = Core.Name "alias"
+
+-- | A GQL select item alias
+type SelectItemAlias = String
+
+_SelectItemAlias = Core.Name "openGql.grammar.SelectItemAlias"
+
+-- | A list of GQL select item list elements
+type SelectItemList = [SelectItem]
+
+_SelectItemList = Core.Name "openGql.grammar.SelectItemList"
+
+-- | A GQL select items: one of several alternative forms
+data SelectItems =
+  SelectItemsAsterisk |
+  SelectItemsItemList SelectItemList
+  deriving (Eq, Ord, Read, Show)
+
+_SelectItems = Core.Name "openGql.grammar.SelectItems"
+
+_SelectItems_asterisk = Core.Name "asterisk"
+
+_SelectItems_itemList = Core.Name "itemList"
+
+-- | A GQL select query specification: one of several alternative forms
+data SelectQuerySpecification =
+  SelectQuerySpecificationNested NestedQuerySpecification |
+  SelectQuerySpecificationGraphAndNested GraphAndNestedQuerySpecification
+  deriving (Eq, Ord, Read, Show)
+
+_SelectQuerySpecification = Core.Name "openGql.grammar.SelectQuerySpecification"
+
+_SelectQuerySpecification_nested = Core.Name "nested"
+
+_SelectQuerySpecification_graphAndNested = Core.Name "graphAndNested"
+
+-- | A GQL select statement
+data SelectStatement =
+  SelectStatement {
+    selectStatementQuantifier :: (Maybe SetQuantifier),
+    selectStatementItems :: SelectItems,
+    selectStatementBody :: (Maybe SelectStatementBodyAndClauses)}
+  deriving (Eq, Ord, Read, Show)
+
+_SelectStatement = Core.Name "openGql.grammar.SelectStatement"
+
+_SelectStatement_quantifier = Core.Name "quantifier"
+
+_SelectStatement_items = Core.Name "items"
+
+_SelectStatement_body = Core.Name "body"
+
+-- | A GQL select statement body: one of several alternative forms
+data SelectStatementBody =
+  SelectStatementBodyGraphMatchList SelectGraphMatchList |
+  SelectStatementBodyQuerySpecification SelectQuerySpecification
+  deriving (Eq, Ord, Read, Show)
+
+_SelectStatementBody = Core.Name "openGql.grammar.SelectStatementBody"
+
+_SelectStatementBody_graphMatchList = Core.Name "graphMatchList"
+
+_SelectStatementBody_querySpecification = Core.Name "querySpecification"
+
+-- | A GQL select statement body and clauses
+data SelectStatementBodyAndClauses =
+  SelectStatementBodyAndClauses {
+    selectStatementBodyAndClausesBody :: SelectStatementBody,
+    selectStatementBodyAndClausesWhere :: (Maybe WhereClause),
+    selectStatementBodyAndClausesGroupBy :: (Maybe GroupByClause),
+    selectStatementBodyAndClausesHaving :: (Maybe HavingClause),
+    selectStatementBodyAndClausesOrderBy :: (Maybe OrderByClause),
+    selectStatementBodyAndClausesOffset :: (Maybe OffsetClause),
+    selectStatementBodyAndClausesLimit :: (Maybe LimitClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_SelectStatementBodyAndClauses = Core.Name "openGql.grammar.SelectStatementBodyAndClauses"
+
+_SelectStatementBodyAndClauses_body = Core.Name "body"
+
+_SelectStatementBodyAndClauses_where = Core.Name "where"
+
+_SelectStatementBodyAndClauses_groupBy = Core.Name "groupBy"
+
+_SelectStatementBodyAndClauses_having = Core.Name "having"
+
+_SelectStatementBodyAndClauses_orderBy = Core.Name "orderBy"
+
+_SelectStatementBodyAndClauses_offset = Core.Name "offset"
+
+_SelectStatementBodyAndClauses_limit = Core.Name "limit"
+
+-- | A GQL session activity: one of several alternative forms
+data SessionActivity =
+  SessionActivityReset [SessionResetCommand] |
+  SessionActivitySetAndResetCommands SessionSetAndResetCommands
+  deriving (Eq, Ord, Read, Show)
+
+_SessionActivity = Core.Name "openGql.grammar.SessionActivity"
+
+_SessionActivity_reset = Core.Name "reset"
+
+_SessionActivity_setAndResetCommands = Core.Name "setAndResetCommands"
+
+-- | A GQL session close command
+type SessionCloseCommand = ()
+
+_SessionCloseCommand = Core.Name "openGql.grammar.SessionCloseCommand"
+
+-- | A GQL session parameter specification, equivalent to a parameter name
+type SessionParameterSpecification = ParameterName
+
+_SessionParameterSpecification = Core.Name "openGql.grammar.SessionParameterSpecification"
+
+-- | A GQL session reset arguments: one of several alternative forms
+data SessionResetArguments =
+  SessionResetArgumentsParametersOrCharacteristics AllParametersOrCharacteristics |
+  SessionResetArgumentsSchema |
+  SessionResetArgumentsGraph |
+  SessionResetArgumentsTimeZone |
+  SessionResetArgumentsParameterSessionSpecification ParameterSessionSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_SessionResetArguments = Core.Name "openGql.grammar.SessionResetArguments"
+
+_SessionResetArguments_parametersOrCharacteristics = Core.Name "parametersOrCharacteristics"
+
+_SessionResetArguments_schema = Core.Name "schema"
+
+_SessionResetArguments_graph = Core.Name "graph"
+
+_SessionResetArguments_timeZone = Core.Name "timeZone"
+
+_SessionResetArguments_parameterSessionSpecification = Core.Name "parameterSessionSpecification"
+
+-- | An optional GQL session reset command
+type SessionResetCommand = (Maybe SessionResetArguments)
+
+_SessionResetCommand = Core.Name "openGql.grammar.SessionResetCommand"
+
+-- | A GQL session set and reset commands
+data SessionSetAndResetCommands =
+  SessionSetAndResetCommands {
+    sessionSetAndResetCommandsSet :: [SessionSetCommand],
+    sessionSetAndResetCommandsReset :: [SessionResetCommand]}
+  deriving (Eq, Ord, Read, Show)
+
+_SessionSetAndResetCommands = Core.Name "openGql.grammar.SessionSetAndResetCommands"
+
+_SessionSetAndResetCommands_set = Core.Name "set"
+
+_SessionSetAndResetCommands_reset = Core.Name "reset"
+
+-- | A GQL session set binding table parameter clause
+data SessionSetBindingTableParameterClause =
+  SessionSetBindingTableParameterClause {
+    sessionSetBindingTableParameterClauseBinding :: Bool,
+    sessionSetBindingTableParameterClauseParam :: SessionSetParameterName,
+    sessionSetBindingTableParameterClauseInit :: OptTypedBindingTableInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_SessionSetBindingTableParameterClause = Core.Name "openGql.grammar.SessionSetBindingTableParameterClause"
+
+_SessionSetBindingTableParameterClause_binding = Core.Name "binding"
+
+_SessionSetBindingTableParameterClause_param = Core.Name "param"
+
+_SessionSetBindingTableParameterClause_init = Core.Name "init"
+
+-- | A GQL session set command: one of several alternative forms
+data SessionSetCommand =
+  SessionSetCommandSchema SessionSetSchemaClause |
+  SessionSetCommandGraph SessionSetGraphClause |
+  SessionSetCommandTimeZone SessionSetTimeZoneClause |
+  SessionSetCommandParameter SessionSetParameterClause
+  deriving (Eq, Ord, Read, Show)
+
+_SessionSetCommand = Core.Name "openGql.grammar.SessionSetCommand"
+
+_SessionSetCommand_schema = Core.Name "schema"
+
+_SessionSetCommand_graph = Core.Name "graph"
+
+_SessionSetCommand_timeZone = Core.Name "timeZone"
+
+_SessionSetCommand_parameter = Core.Name "parameter"
+
+-- | A GQL session set graph clause, equivalent to a graph expression
+type SessionSetGraphClause = GraphExpression
+
+_SessionSetGraphClause = Core.Name "openGql.grammar.SessionSetGraphClause"
+
+-- | A GQL session set graph parameter clause
+data SessionSetGraphParameterClause =
+  SessionSetGraphParameterClause {
+    sessionSetGraphParameterClauseGraph :: SessionSetParameterName,
+    sessionSetGraphParameterClauseInitializer :: OptTypedGraphInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_SessionSetGraphParameterClause = Core.Name "openGql.grammar.SessionSetGraphParameterClause"
+
+_SessionSetGraphParameterClause_graph = Core.Name "graph"
+
+_SessionSetGraphParameterClause_initializer = Core.Name "initializer"
+
+-- | A GQL session set parameter clause: one of several alternative forms
+data SessionSetParameterClause =
+  SessionSetParameterClauseGraph SessionSetGraphParameterClause |
+  SessionSetParameterClauseBindings SessionSetBindingTableParameterClause |
+  SessionSetParameterClauseValue SessionSetValueParameterClause
+  deriving (Eq, Ord, Read, Show)
+
+_SessionSetParameterClause = Core.Name "openGql.grammar.SessionSetParameterClause"
+
+_SessionSetParameterClause_graph = Core.Name "graph"
+
+_SessionSetParameterClause_bindings = Core.Name "bindings"
+
+_SessionSetParameterClause_value = Core.Name "value"
+
+-- | A GQL session set parameter name
+data SessionSetParameterName =
+  SessionSetParameterName {
+    sessionSetParameterNameIfNotExists :: Bool,
+    sessionSetParameterNameParameter :: SessionParameterSpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_SessionSetParameterName = Core.Name "openGql.grammar.SessionSetParameterName"
+
+_SessionSetParameterName_ifNotExists = Core.Name "ifNotExists"
+
+_SessionSetParameterName_parameter = Core.Name "parameter"
+
+-- | A GQL session set schema clause, equivalent to a schema reference
+type SessionSetSchemaClause = SchemaReference
+
+_SessionSetSchemaClause = Core.Name "openGql.grammar.SessionSetSchemaClause"
+
+-- | A GQL session set time zone clause, equivalent to a set time zone value
+type SessionSetTimeZoneClause = SetTimeZoneValue
+
+_SessionSetTimeZoneClause = Core.Name "openGql.grammar.SessionSetTimeZoneClause"
+
+-- | A GQL session set value parameter clause
+data SessionSetValueParameterClause =
+  SessionSetValueParameterClause {
+    sessionSetValueParameterClauseValue :: SessionSetParameterName,
+    sessionSetValueParameterClauseInitializer :: OptTypedValueInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_SessionSetValueParameterClause = Core.Name "openGql.grammar.SessionSetValueParameterClause"
+
+_SessionSetValueParameterClause_value = Core.Name "value"
+
+_SessionSetValueParameterClause_initializer = Core.Name "initializer"
+
+-- | A GQL set all properties item
+data SetAllPropertiesItem =
+  SetAllPropertiesItem {
+    setAllPropertiesItemVariable :: BindingVariableReference,
+    setAllPropertiesItemProperties :: (Maybe PropertyKeyValuePairList)}
+  deriving (Eq, Ord, Read, Show)
+
+_SetAllPropertiesItem = Core.Name "openGql.grammar.SetAllPropertiesItem"
+
+_SetAllPropertiesItem_variable = Core.Name "variable"
+
+_SetAllPropertiesItem_properties = Core.Name "properties"
+
+-- | A GQL set item: one of several alternative forms
+data SetItem =
+  SetItemProperty SetPropertyItem |
+  SetItemAllProperties SetAllPropertiesItem |
+  SetItemLabel SetLabelItem
+  deriving (Eq, Ord, Read, Show)
+
+_SetItem = Core.Name "openGql.grammar.SetItem"
+
+_SetItem_property = Core.Name "property"
+
+_SetItem_allProperties = Core.Name "allProperties"
+
+_SetItem_label = Core.Name "label"
+
+-- | A list of GQL set item list elements
+type SetItemList = [SetItem]
+
+_SetItemList = Core.Name "openGql.grammar.SetItemList"
+
+-- | A GQL set label item
+data SetLabelItem =
+  SetLabelItem {
+    setLabelItemVariable :: BindingVariableReference,
+    setLabelItemIsOrColon :: IsOrColon,
+    setLabelItemLabel :: LabelName}
+  deriving (Eq, Ord, Read, Show)
+
+_SetLabelItem = Core.Name "openGql.grammar.SetLabelItem"
+
+_SetLabelItem_variable = Core.Name "variable"
+
+_SetLabelItem_isOrColon = Core.Name "isOrColon"
+
+_SetLabelItem_label = Core.Name "label"
+
+-- | A GQL set operator
+data SetOperator =
+  SetOperator {
+    setOperatorOperatorType :: SetOperatorType,
+    setOperatorQuantifier :: (Maybe SetQuantifier)}
+  deriving (Eq, Ord, Read, Show)
+
+_SetOperator = Core.Name "openGql.grammar.SetOperator"
+
+_SetOperator_operatorType = Core.Name "operatorType"
+
+_SetOperator_quantifier = Core.Name "quantifier"
+
+-- | A GQL set operator type: one of a fixed set of alternatives
+data SetOperatorType =
+  SetOperatorTypeUnion |
+  SetOperatorTypeExcept |
+  SetOperatorTypeIntersect
+  deriving (Eq, Ord, Read, Show)
+
+_SetOperatorType = Core.Name "openGql.grammar.SetOperatorType"
+
+_SetOperatorType_union = Core.Name "union"
+
+_SetOperatorType_except = Core.Name "except"
+
+_SetOperatorType_intersect = Core.Name "intersect"
+
+-- | A GQL set property item
+data SetPropertyItem =
+  SetPropertyItem {
+    setPropertyItemVariable :: BindingVariableReference,
+    setPropertyItemPropertyName :: PropertyName,
+    setPropertyItemValue :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_SetPropertyItem = Core.Name "openGql.grammar.SetPropertyItem"
+
+_SetPropertyItem_variable = Core.Name "variable"
+
+_SetPropertyItem_propertyName = Core.Name "propertyName"
+
+_SetPropertyItem_value = Core.Name "value"
+
+-- | A GQL set quantifier: one of a fixed set of alternatives
+data SetQuantifier =
+  SetQuantifierDistinct |
+  SetQuantifierAll
+  deriving (Eq, Ord, Read, Show)
+
+_SetQuantifier = Core.Name "openGql.grammar.SetQuantifier"
+
+_SetQuantifier_distinct = Core.Name "distinct"
+
+_SetQuantifier_all = Core.Name "all"
+
+-- | A GQL set statement, equivalent to a set item list
+type SetStatement = SetItemList
+
+_SetStatement = Core.Name "openGql.grammar.SetStatement"
+
+-- | A GQL set time zone value, equivalent to a time zone string
+type SetTimeZoneValue = TimeZoneString
+
+_SetTimeZoneValue = Core.Name "openGql.grammar.SetTimeZoneValue"
+
+-- | A GQL shortest path search: one of several alternative forms
+data ShortestPathSearch =
+  ShortestPathSearchAllShortest AllShortestPathSearch |
+  ShortestPathSearchAnyShortest AnyShortestPathSearch |
+  ShortestPathSearchCountedShortest CountedShortestPathSearch |
+  ShortestPathSearchCountedShortestGroup CountedShortestGroupSearch
+  deriving (Eq, Ord, Read, Show)
+
+_ShortestPathSearch = Core.Name "openGql.grammar.ShortestPathSearch"
+
+_ShortestPathSearch_allShortest = Core.Name "allShortest"
+
+_ShortestPathSearch_anyShortest = Core.Name "anyShortest"
+
+_ShortestPathSearch_countedShortest = Core.Name "countedShortest"
+
+_ShortestPathSearch_countedShortestGroup = Core.Name "countedShortestGroup"
+
+-- | A GQL side: one of a fixed set of alternatives
+data Side =
+  SideLeft |
+  SideRight
+  deriving (Eq, Ord, Read, Show)
+
+_Side = Core.Name "openGql.grammar.Side"
+
+_Side_left = Core.Name "left"
+
+_Side_right = Core.Name "right"
+
+-- | A GQL sign: one of a fixed set of alternatives
+data Sign =
+  SignPlus |
+  SignMinus
+  deriving (Eq, Ord, Read, Show)
+
+_Sign = Core.Name "openGql.grammar.Sign"
+
+_Sign_plus = Core.Name "plus"
+
+_Sign_minus = Core.Name "minus"
+
+-- | A GQL signed binary exact numeric type: one of several alternative forms
+data SignedBinaryExactNumericType =
+  SignedBinaryExactNumericTypeInt8 Int8Type |
+  SignedBinaryExactNumericTypeInt16 Int16Type |
+  SignedBinaryExactNumericTypeInt32 Int32Type |
+  SignedBinaryExactNumericTypeInt64 Int64Type |
+  SignedBinaryExactNumericTypeInt128 Int128Type |
+  SignedBinaryExactNumericTypeInt256 Int256Type |
+  SignedBinaryExactNumericTypeSmallInt SmallIntType |
+  SignedBinaryExactNumericTypeIntWithPrecision IntWithPrecision |
+  SignedBinaryExactNumericTypeBigInt BigIntType |
+  SignedBinaryExactNumericTypeSignedVerboseType SignedVerboseBinaryExactNumericType
+  deriving (Eq, Ord, Read, Show)
+
+_SignedBinaryExactNumericType = Core.Name "openGql.grammar.SignedBinaryExactNumericType"
+
+_SignedBinaryExactNumericType_int8 = Core.Name "int8"
+
+_SignedBinaryExactNumericType_int16 = Core.Name "int16"
+
+_SignedBinaryExactNumericType_int32 = Core.Name "int32"
+
+_SignedBinaryExactNumericType_int64 = Core.Name "int64"
+
+_SignedBinaryExactNumericType_int128 = Core.Name "int128"
+
+_SignedBinaryExactNumericType_int256 = Core.Name "int256"
+
+_SignedBinaryExactNumericType_smallInt = Core.Name "smallInt"
+
+_SignedBinaryExactNumericType_intWithPrecision = Core.Name "intWithPrecision"
+
+_SignedBinaryExactNumericType_bigInt = Core.Name "bigInt"
+
+_SignedBinaryExactNumericType_signedVerboseType = Core.Name "signedVerboseType"
+
+-- | A GQL signed expression
+data SignedExpr =
+  SignedExpr {
+    signedExprSign :: Sign,
+    signedExprValueExpression :: ValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_SignedExpr = Core.Name "openGql.grammar.SignedExpr"
+
+_SignedExpr_sign = Core.Name "sign"
+
+_SignedExpr_valueExpression = Core.Name "valueExpression"
+
+-- | A GQL signed numeric value expression
+data SignedNumericValueExpression =
+  SignedNumericValueExpression {
+    signedNumericValueExpressionSign :: Sign,
+    signedNumericValueExpressionExpression :: NumericValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_SignedNumericValueExpression = Core.Name "openGql.grammar.SignedNumericValueExpression"
+
+_SignedNumericValueExpression_sign = Core.Name "sign"
+
+_SignedNumericValueExpression_expression = Core.Name "expression"
+
+-- | A GQL signed verbose binary exact numeric type
+data SignedVerboseBinaryExactNumericType =
+  SignedVerboseBinaryExactNumericType {
+    signedVerboseBinaryExactNumericTypeSigned :: Bool,
+    signedVerboseBinaryExactNumericTypeVerboseType :: VerboseBinaryExactNumericType}
+  deriving (Eq, Ord, Read, Show)
+
+_SignedVerboseBinaryExactNumericType = Core.Name "openGql.grammar.SignedVerboseBinaryExactNumericType"
+
+_SignedVerboseBinaryExactNumericType_signed = Core.Name "signed"
+
+_SignedVerboseBinaryExactNumericType_verboseType = Core.Name "verboseType"
+
+-- | A GQL simple case
+data SimpleCase =
+  SimpleCase {
+    simpleCaseCaseOperand :: CaseOperand,
+    simpleCaseWhenClauses :: [SimpleWhenClause],
+    simpleCaseElseClause :: (Maybe ElseClause)}
+  deriving (Eq, Ord, Read, Show)
+
+_SimpleCase = Core.Name "openGql.grammar.SimpleCase"
+
+_SimpleCase_caseOperand = Core.Name "caseOperand"
+
+_SimpleCase_whenClauses = Core.Name "whenClauses"
+
+_SimpleCase_elseClause = Core.Name "elseClause"
+
+-- | A GQL simple catalog modifying statement: one of several alternative forms
+data SimpleCatalogModifyingStatement =
+  SimpleCatalogModifyingStatementPrimitive PrimitiveCatalogModifyingStatement |
+  SimpleCatalogModifyingStatementCallProcedure CallCatalogModifyingProcedureStatement
+  deriving (Eq, Ord, Read, Show)
+
+_SimpleCatalogModifyingStatement = Core.Name "openGql.grammar.SimpleCatalogModifyingStatement"
+
+_SimpleCatalogModifyingStatement_primitive = Core.Name "primitive"
+
+_SimpleCatalogModifyingStatement_callProcedure = Core.Name "callProcedure"
+
+-- | A GQL simple data accessing statement: one of several alternative forms
+data SimpleDataAccessingStatement =
+  SimpleDataAccessingStatementQuery SimpleQueryStatement |
+  SimpleDataAccessingStatementModifying SimpleDataModifyingStatement
+  deriving (Eq, Ord, Read, Show)
+
+_SimpleDataAccessingStatement = Core.Name "openGql.grammar.SimpleDataAccessingStatement"
+
+_SimpleDataAccessingStatement_query = Core.Name "query"
+
+_SimpleDataAccessingStatement_modifying = Core.Name "modifying"
+
+-- | A GQL simple data modifying statement: one of several alternative forms
+data SimpleDataModifyingStatement =
+  SimpleDataModifyingStatementPrimitive PrimitiveDataModifyingStatement |
+  SimpleDataModifyingStatementCallProcedure CallDataModifyingProcedureStatement
+  deriving (Eq, Ord, Read, Show)
+
+_SimpleDataModifyingStatement = Core.Name "openGql.grammar.SimpleDataModifyingStatement"
+
+_SimpleDataModifyingStatement_primitive = Core.Name "primitive"
+
+_SimpleDataModifyingStatement_callProcedure = Core.Name "callProcedure"
+
+-- | A list of GQL simple directory path elements
+type SimpleDirectoryPath = [DirectoryName]
+
+_SimpleDirectoryPath = Core.Name "openGql.grammar.SimpleDirectoryPath"
+
+-- | A list of GQL simple linear data accessing statement elements
+type SimpleLinearDataAccessingStatement = [SimpleDataAccessingStatement]
+
+_SimpleLinearDataAccessingStatement = Core.Name "openGql.grammar.SimpleLinearDataAccessingStatement"
+
+-- | A list of GQL simple linear query statement elements
+type SimpleLinearQueryStatement = [SimpleQueryStatement]
+
+_SimpleLinearQueryStatement = Core.Name "openGql.grammar.SimpleLinearQueryStatement"
+
+-- | A GQL simple match statement, equivalent to a graph pattern binding table
+type SimpleMatchStatement = GraphPatternBindingTable
+
+_SimpleMatchStatement = Core.Name "openGql.grammar.SimpleMatchStatement"
+
+-- | A GQL simple query statement: one of several alternative forms
+data SimpleQueryStatement =
+  SimpleQueryStatementPrimitive PrimitiveQueryStatement |
+  SimpleQueryStatementCall CallQueryStatement
+  deriving (Eq, Ord, Read, Show)
+
+_SimpleQueryStatement = Core.Name "openGql.grammar.SimpleQueryStatement"
+
+_SimpleQueryStatement_primitive = Core.Name "primitive"
+
+_SimpleQueryStatement_call = Core.Name "call"
+
+-- | A GQL simple when clause
+data SimpleWhenClause =
+  SimpleWhenClause {
+    simpleWhenClauseWhenOperands :: WhenOperandList,
+    simpleWhenClauseResult :: Result}
+  deriving (Eq, Ord, Read, Show)
+
+_SimpleWhenClause = Core.Name "openGql.grammar.SimpleWhenClause"
+
+_SimpleWhenClause_whenOperands = Core.Name "whenOperands"
+
+_SimpleWhenClause_result = Core.Name "result"
+
+-- | A GQL simplified concatenation
+data SimplifiedConcatenation =
+  SimplifiedConcatenation {
+    simplifiedConcatenationInitialTerm :: SimplifiedTerm,
+    simplifiedConcatenationNextFactor :: SimplifiedFactorLow}
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedConcatenation = Core.Name "openGql.grammar.SimplifiedConcatenation"
+
+_SimplifiedConcatenation_initialTerm = Core.Name "initialTerm"
+
+_SimplifiedConcatenation_nextFactor = Core.Name "nextFactor"
+
+-- | A GQL simplified conjunction
+data SimplifiedConjunction =
+  SimplifiedConjunction {
+    simplifiedConjunctionLeft :: SimplifiedFactorLow,
+    simplifiedConjunctionRight :: SimplifiedFactorHigh}
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedConjunction = Core.Name "openGql.grammar.SimplifiedConjunction"
+
+_SimplifiedConjunction_left = Core.Name "left"
+
+_SimplifiedConjunction_right = Core.Name "right"
+
+-- | A GQL simplified contents: one of several alternative forms
+data SimplifiedContents =
+  SimplifiedContentsTerm SimplifiedTerm |
+  SimplifiedContentsPathUnion SimplifiedPathUnion |
+  SimplifiedContentsMultisetAlternation SimplifiedMultisetAlternation
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedContents = Core.Name "openGql.grammar.SimplifiedContents"
+
+_SimplifiedContents_term = Core.Name "term"
+
+_SimplifiedContents_pathUnion = Core.Name "pathUnion"
+
+_SimplifiedContents_multisetAlternation = Core.Name "multisetAlternation"
+
+-- | A GQL simplified defaulting any direction, equivalent to a simplified contents
+type SimplifiedDefaultingAnyDirection = SimplifiedContents
+
+_SimplifiedDefaultingAnyDirection = Core.Name "openGql.grammar.SimplifiedDefaultingAnyDirection"
+
+-- | A GQL simplified defaulting left, equivalent to a simplified contents
+type SimplifiedDefaultingLeft = SimplifiedContents
+
+_SimplifiedDefaultingLeft = Core.Name "openGql.grammar.SimplifiedDefaultingLeft"
+
+-- | A GQL simplified defaulting left or right, equivalent to a simplified contents
+type SimplifiedDefaultingLeftOrRight = SimplifiedContents
+
+_SimplifiedDefaultingLeftOrRight = Core.Name "openGql.grammar.SimplifiedDefaultingLeftOrRight"
+
+-- | A GQL simplified defaulting left or undirected, equivalent to a simplified contents
+type SimplifiedDefaultingLeftOrUndirected = SimplifiedContents
+
+_SimplifiedDefaultingLeftOrUndirected = Core.Name "openGql.grammar.SimplifiedDefaultingLeftOrUndirected"
+
+-- | A GQL simplified defaulting right, equivalent to a simplified contents
+type SimplifiedDefaultingRight = SimplifiedContents
+
+_SimplifiedDefaultingRight = Core.Name "openGql.grammar.SimplifiedDefaultingRight"
+
+-- | A GQL simplified defaulting undirected, equivalent to a simplified contents
+type SimplifiedDefaultingUndirected = SimplifiedContents
+
+_SimplifiedDefaultingUndirected = Core.Name "openGql.grammar.SimplifiedDefaultingUndirected"
+
+-- | A GQL simplified defaulting undirected or right, equivalent to a simplified contents
+type SimplifiedDefaultingUndirectedOrRight = SimplifiedContents
+
+_SimplifiedDefaultingUndirectedOrRight = Core.Name "openGql.grammar.SimplifiedDefaultingUndirectedOrRight"
+
+-- | A GQL simplified direction override: one of several alternative forms
+data SimplifiedDirectionOverride =
+  SimplifiedDirectionOverrideOverrideLeft SimplifiedOverrideLeft |
+  SimplifiedDirectionOverrideOverrideUndirected SimplifiedOverrideUndirected |
+  SimplifiedDirectionOverrideOverrideRight SimplifiedOverrideRight |
+  SimplifiedDirectionOverrideOverrideLeftOrUndirected SimplifiedOverrideLeftOrUndirected |
+  SimplifiedDirectionOverrideOverrideUndirectedOrRight SimplifiedOverrideUndirectedOrRight |
+  SimplifiedDirectionOverrideOverrideLeftOrRight SimplifiedOverrideLeftOrRight |
+  SimplifiedDirectionOverrideOverrideAnyDirection SimplifiedOverrideAnyDirection
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedDirectionOverride = Core.Name "openGql.grammar.SimplifiedDirectionOverride"
+
+_SimplifiedDirectionOverride_overrideLeft = Core.Name "overrideLeft"
+
+_SimplifiedDirectionOverride_overrideUndirected = Core.Name "overrideUndirected"
+
+_SimplifiedDirectionOverride_overrideRight = Core.Name "overrideRight"
+
+_SimplifiedDirectionOverride_overrideLeftOrUndirected = Core.Name "overrideLeftOrUndirected"
+
+_SimplifiedDirectionOverride_overrideUndirectedOrRight = Core.Name "overrideUndirectedOrRight"
+
+_SimplifiedDirectionOverride_overrideLeftOrRight = Core.Name "overrideLeftOrRight"
+
+_SimplifiedDirectionOverride_overrideAnyDirection = Core.Name "overrideAnyDirection"
+
+-- | A GQL simplified factor high: one of several alternative forms
+data SimplifiedFactorHigh =
+  SimplifiedFactorHighTertiary SimplifiedTertiary |
+  SimplifiedFactorHighQuantified SimplifiedQuantified |
+  SimplifiedFactorHighQuestioned SimplifiedQuestioned
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedFactorHigh = Core.Name "openGql.grammar.SimplifiedFactorHigh"
+
+_SimplifiedFactorHigh_tertiary = Core.Name "tertiary"
+
+_SimplifiedFactorHigh_quantified = Core.Name "quantified"
+
+_SimplifiedFactorHigh_questioned = Core.Name "questioned"
+
+-- | A GQL simplified factor low: one of several alternative forms
+data SimplifiedFactorLow =
+  SimplifiedFactorLowFactorHigh SimplifiedFactorHigh |
+  SimplifiedFactorLowConjunction SimplifiedConjunction
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedFactorLow = Core.Name "openGql.grammar.SimplifiedFactorLow"
+
+_SimplifiedFactorLow_factorHigh = Core.Name "factorHigh"
+
+_SimplifiedFactorLow_conjunction = Core.Name "conjunction"
+
+-- | A list of GQL simplified multiset alternation elements
+type SimplifiedMultisetAlternation = [SimplifiedTerm]
+
+_SimplifiedMultisetAlternation = Core.Name "openGql.grammar.SimplifiedMultisetAlternation"
+
+-- | A GQL simplified negation, equivalent to a simplified primary
+type SimplifiedNegation = SimplifiedPrimary
+
+_SimplifiedNegation = Core.Name "openGql.grammar.SimplifiedNegation"
+
+-- | A GQL simplified override any direction, equivalent to a simplified secondary
+type SimplifiedOverrideAnyDirection = SimplifiedSecondary
+
+_SimplifiedOverrideAnyDirection = Core.Name "openGql.grammar.SimplifiedOverrideAnyDirection"
+
+-- | A GQL simplified override left, equivalent to a simplified secondary
+type SimplifiedOverrideLeft = SimplifiedSecondary
+
+_SimplifiedOverrideLeft = Core.Name "openGql.grammar.SimplifiedOverrideLeft"
+
+-- | A GQL simplified override left or right, equivalent to a simplified secondary
+type SimplifiedOverrideLeftOrRight = SimplifiedSecondary
+
+_SimplifiedOverrideLeftOrRight = Core.Name "openGql.grammar.SimplifiedOverrideLeftOrRight"
+
+-- | A GQL simplified override left or undirected, equivalent to a simplified secondary
+type SimplifiedOverrideLeftOrUndirected = SimplifiedSecondary
+
+_SimplifiedOverrideLeftOrUndirected = Core.Name "openGql.grammar.SimplifiedOverrideLeftOrUndirected"
+
+-- | A GQL simplified override right, equivalent to a simplified secondary
+type SimplifiedOverrideRight = SimplifiedSecondary
+
+_SimplifiedOverrideRight = Core.Name "openGql.grammar.SimplifiedOverrideRight"
+
+-- | A GQL simplified override undirected, equivalent to a simplified secondary
+type SimplifiedOverrideUndirected = SimplifiedSecondary
+
+_SimplifiedOverrideUndirected = Core.Name "openGql.grammar.SimplifiedOverrideUndirected"
+
+-- | A GQL simplified override undirected or right, equivalent to a simplified secondary
+type SimplifiedOverrideUndirectedOrRight = SimplifiedSecondary
+
+_SimplifiedOverrideUndirectedOrRight = Core.Name "openGql.grammar.SimplifiedOverrideUndirectedOrRight"
+
+-- | A GQL simplified path pattern expression: one of several alternative forms
+data SimplifiedPathPatternExpression =
+  SimplifiedPathPatternExpressionLeft SimplifiedDefaultingLeft |
+  SimplifiedPathPatternExpressionUndirected SimplifiedDefaultingUndirected |
+  SimplifiedPathPatternExpressionRight SimplifiedDefaultingRight |
+  SimplifiedPathPatternExpressionLeftOrUndirected SimplifiedDefaultingLeftOrUndirected |
+  SimplifiedPathPatternExpressionUndirectedOrRight SimplifiedDefaultingUndirectedOrRight |
+  SimplifiedPathPatternExpressionLeftOrRight SimplifiedDefaultingLeftOrRight |
+  SimplifiedPathPatternExpressionAnyDirection SimplifiedDefaultingAnyDirection
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedPathPatternExpression = Core.Name "openGql.grammar.SimplifiedPathPatternExpression"
+
+_SimplifiedPathPatternExpression_left = Core.Name "left"
+
+_SimplifiedPathPatternExpression_undirected = Core.Name "undirected"
+
+_SimplifiedPathPatternExpression_right = Core.Name "right"
+
+_SimplifiedPathPatternExpression_leftOrUndirected = Core.Name "leftOrUndirected"
+
+_SimplifiedPathPatternExpression_undirectedOrRight = Core.Name "undirectedOrRight"
+
+_SimplifiedPathPatternExpression_leftOrRight = Core.Name "leftOrRight"
+
+_SimplifiedPathPatternExpression_anyDirection = Core.Name "anyDirection"
+
+-- | A list of GQL simplified path union elements
+type SimplifiedPathUnion = [SimplifiedTerm]
+
+_SimplifiedPathUnion = Core.Name "openGql.grammar.SimplifiedPathUnion"
+
+-- | A GQL simplified primary: one of several alternative forms
+data SimplifiedPrimary =
+  SimplifiedPrimaryLabelName LabelName |
+  SimplifiedPrimaryParenthesizedContents SimplifiedContents
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedPrimary = Core.Name "openGql.grammar.SimplifiedPrimary"
+
+_SimplifiedPrimary_labelName = Core.Name "labelName"
+
+_SimplifiedPrimary_parenthesizedContents = Core.Name "parenthesizedContents"
+
+-- | A GQL simplified quantified
+data SimplifiedQuantified =
+  SimplifiedQuantified {
+    simplifiedQuantifiedTertiary :: SimplifiedTertiary,
+    simplifiedQuantifiedQuantifier :: GraphPatternQuantifier}
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedQuantified = Core.Name "openGql.grammar.SimplifiedQuantified"
+
+_SimplifiedQuantified_tertiary = Core.Name "tertiary"
+
+_SimplifiedQuantified_quantifier = Core.Name "quantifier"
+
+-- | A GQL simplified questioned, equivalent to a simplified tertiary
+type SimplifiedQuestioned = SimplifiedTertiary
+
+_SimplifiedQuestioned = Core.Name "openGql.grammar.SimplifiedQuestioned"
+
+-- | A GQL simplified secondary: one of several alternative forms
+data SimplifiedSecondary =
+  SimplifiedSecondaryPrimary SimplifiedPrimary |
+  SimplifiedSecondaryNegation SimplifiedNegation
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedSecondary = Core.Name "openGql.grammar.SimplifiedSecondary"
+
+_SimplifiedSecondary_primary = Core.Name "primary"
+
+_SimplifiedSecondary_negation = Core.Name "negation"
+
+-- | A GQL simplified term: one of several alternative forms
+data SimplifiedTerm =
+  SimplifiedTermFactorLow SimplifiedFactorLow |
+  SimplifiedTermConcatenation SimplifiedConcatenation
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedTerm = Core.Name "openGql.grammar.SimplifiedTerm"
+
+_SimplifiedTerm_factorLow = Core.Name "factorLow"
+
+_SimplifiedTerm_concatenation = Core.Name "concatenation"
+
+-- | A GQL simplified tertiary: one of several alternative forms
+data SimplifiedTertiary =
+  SimplifiedTertiaryDirectionOverride SimplifiedDirectionOverride |
+  SimplifiedTertiarySecondary SimplifiedSecondary
+  deriving (Eq, Ord, Read, Show)
+
+_SimplifiedTertiary = Core.Name "openGql.grammar.SimplifiedTertiary"
+
+_SimplifiedTertiary_directionOverride = Core.Name "directionOverride"
+
+_SimplifiedTertiary_secondary = Core.Name "secondary"
+
+-- | A GQL small int type
+data SmallIntType =
+  SmallIntType {
+    smallIntTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_SmallIntType = Core.Name "openGql.grammar.SmallIntType"
+
+_SmallIntType_notNull = Core.Name "notNull"
+
+-- | A GQL small integer type
+data SmallIntegerType =
+  SmallIntegerType {
+    smallIntegerTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_SmallIntegerType = Core.Name "openGql.grammar.SmallIntegerType"
+
+_SmallIntegerType_notNull = Core.Name "notNull"
+
+-- | A GQL sort key, equivalent to a aggregating value expression
+type SortKey = AggregatingValueExpression
+
+_SortKey = Core.Name "openGql.grammar.SortKey"
+
+-- | A GQL sort specification
+data SortSpecification =
+  SortSpecification {
+    sortSpecificationSortKey :: SortKey,
+    sortSpecificationOrdering :: (Maybe OrderingSpecification),
+    sortSpecificationNullOrdering :: (Maybe NullOrdering)}
+  deriving (Eq, Ord, Read, Show)
+
+_SortSpecification = Core.Name "openGql.grammar.SortSpecification"
+
+_SortSpecification_sortKey = Core.Name "sortKey"
+
+_SortSpecification_ordering = Core.Name "ordering"
+
+_SortSpecification_nullOrdering = Core.Name "nullOrdering"
+
+-- | A list of GQL sort specification list elements
+type SortSpecificationList = [SortSpecification]
+
+_SortSpecificationList = Core.Name "openGql.grammar.SortSpecificationList"
+
+-- | A GQL source destination predicate: one of several alternative forms
+data SourceDestinationPredicate =
+  SourceDestinationPredicateSourcePredicate SourcePredicate |
+  SourceDestinationPredicateDestinationPredicate DestinationPredicate
+  deriving (Eq, Ord, Read, Show)
+
+_SourceDestinationPredicate = Core.Name "openGql.grammar.SourceDestinationPredicate"
+
+_SourceDestinationPredicate_sourcePredicate = Core.Name "sourcePredicate"
+
+_SourceDestinationPredicate_destinationPredicate = Core.Name "destinationPredicate"
+
+-- | A GQL source node type alias
+type SourceNodeTypeAlias = String
+
+_SourceNodeTypeAlias = Core.Name "openGql.grammar.SourceNodeTypeAlias"
+
+-- | A GQL source node type reference: one of several alternative forms
+data SourceNodeTypeReference =
+  SourceNodeTypeReferenceAlias SourceNodeTypeAlias |
+  SourceNodeTypeReferenceFiller (Maybe NodeTypeFiller)
+  deriving (Eq, Ord, Read, Show)
+
+_SourceNodeTypeReference = Core.Name "openGql.grammar.SourceNodeTypeReference"
+
+_SourceNodeTypeReference_alias = Core.Name "alias"
+
+_SourceNodeTypeReference_filler = Core.Name "filler"
+
+-- | A GQL source predicate
+data SourcePredicate =
+  SourcePredicate {
+    sourcePredicateNot :: Bool,
+    sourcePredicateSourceOf :: EdgeReference}
+  deriving (Eq, Ord, Read, Show)
+
+_SourcePredicate = Core.Name "openGql.grammar.SourcePredicate"
+
+_SourcePredicate_not = Core.Name "not"
+
+_SourcePredicate_sourceOf = Core.Name "sourceOf"
+
+-- | A GQL specified record type
+data SpecifiedRecordType =
+  SpecifiedRecordType {
+    specifiedRecordTypeRecord :: Bool,
+    specifiedRecordTypeFieldTypes :: FieldTypesSpecification,
+    specifiedRecordTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_SpecifiedRecordType = Core.Name "openGql.grammar.SpecifiedRecordType"
+
+_SpecifiedRecordType_record = Core.Name "record"
+
+_SpecifiedRecordType_fieldTypes = Core.Name "fieldTypes"
+
+_SpecifiedRecordType_notNull = Core.Name "notNull"
+
+-- | A GQL square root, equivalent to a numeric value expression
+type SquareRoot = NumericValueExpression
+
+_SquareRoot = Core.Name "openGql.grammar.SquareRoot"
+
+-- | A GQL start and maybe procedure and maybe end
+data StartAndMaybeProcedureAndMaybeEnd =
+  StartAndMaybeProcedureAndMaybeEnd {
+    startAndMaybeProcedureAndMaybeEndStart :: StartTransactionCommand,
+    startAndMaybeProcedureAndMaybeEndProcedureAndEnd :: (Maybe ProcedureAndMaybeEnd)}
+  deriving (Eq, Ord, Read, Show)
+
+_StartAndMaybeProcedureAndMaybeEnd = Core.Name "openGql.grammar.StartAndMaybeProcedureAndMaybeEnd"
+
+_StartAndMaybeProcedureAndMaybeEnd_start = Core.Name "start"
+
+_StartAndMaybeProcedureAndMaybeEnd_procedureAndEnd = Core.Name "procedureAndEnd"
+
+-- | An optional GQL start transaction command
+type StartTransactionCommand = (Maybe TransactionCharacteristics)
+
+_StartTransactionCommand = Core.Name "openGql.grammar.StartTransactionCommand"
+
+-- | A GQL statement: one of several alternative forms
+data Statement =
+  StatementLinearCatalogModifying LinearCatalogModifyingStatement |
+  StatementLinearDataModifying LinearDataModifyingStatement |
+  StatementCompositeQuery CompositeQueryStatement
+  deriving (Eq, Ord, Read, Show)
+
+_Statement = Core.Name "openGql.grammar.Statement"
+
+_Statement_linearCatalogModifying = Core.Name "linearCatalogModifying"
+
+_Statement_linearDataModifying = Core.Name "linearDataModifying"
+
+_Statement_compositeQuery = Core.Name "compositeQuery"
+
+-- | A GQL statement block
+data StatementBlock =
+  StatementBlock {
+    statementBlockStatement :: Statement,
+    statementBlockNextStatements :: [NextStatement]}
+  deriving (Eq, Ord, Read, Show)
+
+_StatementBlock = Core.Name "openGql.grammar.StatementBlock"
+
+_StatementBlock_statement = Core.Name "statement"
+
+_StatementBlock_nextStatements = Core.Name "nextStatements"
+
+-- | A GQL string length, equivalent to a numeric value expression
+type StringLength = NumericValueExpression
+
+_StringLength = Core.Name "openGql.grammar.StringLength"
+
+-- | A GQL string type
+data StringType =
+  StringType {
+    stringTypeMinLength :: (Maybe MinLength),
+    stringTypeMaxLength :: (Maybe MaxLength),
+    stringTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_StringType = Core.Name "openGql.grammar.StringType"
+
+_StringType_minLength = Core.Name "minLength"
+
+_StringType_maxLength = Core.Name "maxLength"
+
+_StringType_notNull = Core.Name "notNull"
+
+-- | A GQL subtraction character or byte string
+data SubCharacterOrByteString =
+  SubCharacterOrByteString {
+    subCharacterOrByteStringSide :: Side,
+    subCharacterOrByteStringValueExpression :: ValueExpression,
+    subCharacterOrByteStringStringLength :: StringLength}
+  deriving (Eq, Ord, Read, Show)
+
+_SubCharacterOrByteString = Core.Name "openGql.grammar.SubCharacterOrByteString"
+
+_SubCharacterOrByteString_side = Core.Name "side"
+
+_SubCharacterOrByteString_valueExpression = Core.Name "valueExpression"
+
+_SubCharacterOrByteString_stringLength = Core.Name "stringLength"
+
+-- | A GQL subpath variable
+type SubpathVariable = String
+
+_SubpathVariable = Core.Name "openGql.grammar.SubpathVariable"
+
+-- | A GQL subpath variable declaration, equivalent to a subpath variable
+type SubpathVariableDeclaration = SubpathVariable
+
+_SubpathVariableDeclaration = Core.Name "openGql.grammar.SubpathVariableDeclaration"
+
+-- | A GQL temporal duration qualifier: one of a fixed set of alternatives
+data TemporalDurationQualifier =
+  TemporalDurationQualifierYearToMonth |
+  TemporalDurationQualifierDayToSecond
+  deriving (Eq, Ord, Read, Show)
+
+_TemporalDurationQualifier = Core.Name "openGql.grammar.TemporalDurationQualifier"
+
+_TemporalDurationQualifier_yearToMonth = Core.Name "yearToMonth"
+
+_TemporalDurationQualifier_dayToSecond = Core.Name "dayToSecond"
+
+-- | A GQL temporal duration type
+data TemporalDurationType =
+  TemporalDurationType {
+    temporalDurationTypeQualifier :: TemporalDurationQualifier,
+    temporalDurationTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TemporalDurationType = Core.Name "openGql.grammar.TemporalDurationType"
+
+_TemporalDurationType_qualifier = Core.Name "qualifier"
+
+_TemporalDurationType_notNull = Core.Name "notNull"
+
+-- | A GQL temporal instant type: one of several alternative forms
+data TemporalInstantType =
+  TemporalInstantTypeDatetimeType DatetimeType |
+  TemporalInstantTypeLocalDatetimeTypeChoice LocalDatetimeTypeChoice |
+  TemporalInstantTypeDateType DateType |
+  TemporalInstantTypeTimeType TimeType |
+  TemporalInstantTypeLocalTimeTypeChoice LocalTimeTypeChoice
+  deriving (Eq, Ord, Read, Show)
+
+_TemporalInstantType = Core.Name "openGql.grammar.TemporalInstantType"
+
+_TemporalInstantType_datetimeType = Core.Name "datetimeType"
+
+_TemporalInstantType_localDatetimeTypeChoice = Core.Name "localDatetimeTypeChoice"
+
+_TemporalInstantType_dateType = Core.Name "dateType"
+
+_TemporalInstantType_timeType = Core.Name "timeType"
+
+_TemporalInstantType_localTimeTypeChoice = Core.Name "localTimeTypeChoice"
+
+-- | A GQL temporal literal: one of several alternative forms
+data TemporalLiteral =
+  TemporalLiteralDate DateLiteral |
+  TemporalLiteralTime TimeLiteral |
+  TemporalLiteralDatetime DatetimeLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_TemporalLiteral = Core.Name "openGql.grammar.TemporalLiteral"
+
+_TemporalLiteral_date = Core.Name "date"
+
+_TemporalLiteral_time = Core.Name "time"
+
+_TemporalLiteral_datetime = Core.Name "datetime"
+
+-- | A GQL temporal type: one of several alternative forms
+data TemporalType =
+  TemporalTypeInstantType TemporalInstantType |
+  TemporalTypeDurationType TemporalDurationType
+  deriving (Eq, Ord, Read, Show)
+
+_TemporalType = Core.Name "openGql.grammar.TemporalType"
+
+_TemporalType_instantType = Core.Name "instantType"
+
+_TemporalType_durationType = Core.Name "durationType"
+
+-- | A GQL time function: one of several alternative forms
+data TimeFunction =
+  TimeFunctionCurrentTime |
+  TimeFunctionZonedTimeWithParams (Maybe TimeFunctionParameters)
+  deriving (Eq, Ord, Read, Show)
+
+_TimeFunction = Core.Name "openGql.grammar.TimeFunction"
+
+_TimeFunction_currentTime = Core.Name "currentTime"
+
+_TimeFunction_zonedTimeWithParams = Core.Name "zonedTimeWithParams"
+
+-- | A GQL time function parameters: one of several alternative forms
+data TimeFunctionParameters =
+  TimeFunctionParametersTimeString TimeString |
+  TimeFunctionParametersRecordConstructor RecordConstructor
+  deriving (Eq, Ord, Read, Show)
+
+_TimeFunctionParameters = Core.Name "openGql.grammar.TimeFunctionParameters"
+
+_TimeFunctionParameters_timeString = Core.Name "timeString"
+
+_TimeFunctionParameters_recordConstructor = Core.Name "recordConstructor"
+
+-- | A GQL time literal, equivalent to a time string
+type TimeLiteral = TimeString
+
+_TimeLiteral = Core.Name "openGql.grammar.TimeLiteral"
+
+-- | A GQL time string, equivalent to a character string literal
+type TimeString = CharacterStringLiteral
+
+_TimeString = Core.Name "openGql.grammar.TimeString"
+
+-- | A GQL time type: one of several alternative forms
+data TimeType =
+  TimeTypeZonedTime ZonedTimeType |
+  TimeTypeTimeWithTimeZone TimeWithTimeZoneType
+  deriving (Eq, Ord, Read, Show)
+
+_TimeType = Core.Name "openGql.grammar.TimeType"
+
+_TimeType_zonedTime = Core.Name "zonedTime"
+
+_TimeType_timeWithTimeZone = Core.Name "timeWithTimeZone"
+
+-- | A GQL time with time zone type
+data TimeWithTimeZoneType =
+  TimeWithTimeZoneType {
+    timeWithTimeZoneTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TimeWithTimeZoneType = Core.Name "openGql.grammar.TimeWithTimeZoneType"
+
+_TimeWithTimeZoneType_notNull = Core.Name "notNull"
+
+-- | A GQL time without time zone type
+data TimeWithoutTimeZoneType =
+  TimeWithoutTimeZoneType {
+    timeWithoutTimeZoneTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TimeWithoutTimeZoneType = Core.Name "openGql.grammar.TimeWithoutTimeZoneType"
+
+_TimeWithoutTimeZoneType_notNull = Core.Name "notNull"
+
+-- | A GQL time zone string, equivalent to a character string literal
+type TimeZoneString = CharacterStringLiteral
+
+_TimeZoneString = Core.Name "openGql.grammar.TimeZoneString"
+
+-- | A GQL timestamp with time zone type
+data TimestampWithTimeZoneType =
+  TimestampWithTimeZoneType {
+    timestampWithTimeZoneTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TimestampWithTimeZoneType = Core.Name "openGql.grammar.TimestampWithTimeZoneType"
+
+_TimestampWithTimeZoneType_notNull = Core.Name "notNull"
+
+-- | A GQL timestamp without time zone type
+data TimestampWithoutTimeZoneType =
+  TimestampWithoutTimeZoneType {
+    timestampWithoutTimeZoneTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TimestampWithoutTimeZoneType = Core.Name "openGql.grammar.TimestampWithoutTimeZoneType"
+
+_TimestampWithoutTimeZoneType_notNull = Core.Name "notNull"
+
+-- | A GQL transaction access mode: one of a fixed set of alternatives
+data TransactionAccessMode =
+  TransactionAccessModeReadOnly |
+  TransactionAccessModeReadWrite
+  deriving (Eq, Ord, Read, Show)
+
+_TransactionAccessMode = Core.Name "openGql.grammar.TransactionAccessMode"
+
+_TransactionAccessMode_readOnly = Core.Name "readOnly"
+
+_TransactionAccessMode_readWrite = Core.Name "readWrite"
+
+-- | A GQL transaction activity: one of several alternative forms
+data TransactionActivity =
+  TransactionActivityStart StartAndMaybeProcedureAndMaybeEnd |
+  TransactionActivityProcedure ProcedureAndMaybeEnd |
+  TransactionActivityEnd EndTransactionCommand
+  deriving (Eq, Ord, Read, Show)
+
+_TransactionActivity = Core.Name "openGql.grammar.TransactionActivity"
+
+_TransactionActivity_start = Core.Name "start"
+
+_TransactionActivity_procedure = Core.Name "procedure"
+
+_TransactionActivity_end = Core.Name "end"
+
+-- | A list of GQL transaction characteristics elements
+type TransactionCharacteristics = [TransactionMode]
+
+_TransactionCharacteristics = Core.Name "openGql.grammar.TransactionCharacteristics"
+
+-- | A GQL transaction mode, equivalent to a transaction access mode
+type TransactionMode = TransactionAccessMode
+
+_TransactionMode = Core.Name "openGql.grammar.TransactionMode"
+
+-- | A GQL trigonometric function
+data TrigonometricFunction =
+  TrigonometricFunction {
+    trigonometricFunctionName :: TrigonometricFunctionName,
+    trigonometricFunctionValue :: NumericValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_TrigonometricFunction = Core.Name "openGql.grammar.TrigonometricFunction"
+
+_TrigonometricFunction_name = Core.Name "name"
+
+_TrigonometricFunction_value = Core.Name "value"
+
+-- | A GQL trigonometric function name: one of a fixed set of alternatives
+data TrigonometricFunctionName =
+  TrigonometricFunctionNameSin |
+  TrigonometricFunctionNameCos |
+  TrigonometricFunctionNameTan |
+  TrigonometricFunctionNameCot |
+  TrigonometricFunctionNameSinh |
+  TrigonometricFunctionNameCosh |
+  TrigonometricFunctionNameTanh |
+  TrigonometricFunctionNameAsin |
+  TrigonometricFunctionNameAcos |
+  TrigonometricFunctionNameAtan |
+  TrigonometricFunctionNameDegrees |
+  TrigonometricFunctionNameRadians
+  deriving (Eq, Ord, Read, Show)
+
+_TrigonometricFunctionName = Core.Name "openGql.grammar.TrigonometricFunctionName"
+
+_TrigonometricFunctionName_sin = Core.Name "sin"
+
+_TrigonometricFunctionName_cos = Core.Name "cos"
+
+_TrigonometricFunctionName_tan = Core.Name "tan"
+
+_TrigonometricFunctionName_cot = Core.Name "cot"
+
+_TrigonometricFunctionName_sinh = Core.Name "sinh"
+
+_TrigonometricFunctionName_cosh = Core.Name "cosh"
+
+_TrigonometricFunctionName_tanh = Core.Name "tanh"
+
+_TrigonometricFunctionName_asin = Core.Name "asin"
+
+_TrigonometricFunctionName_acos = Core.Name "acos"
+
+_TrigonometricFunctionName_atan = Core.Name "atan"
+
+_TrigonometricFunctionName_degrees = Core.Name "degrees"
+
+_TrigonometricFunctionName_radians = Core.Name "radians"
+
+-- | A GQL trim character or byte string, equivalent to a value expression
+type TrimCharacterOrByteString = ValueExpression
+
+_TrimCharacterOrByteString = Core.Name "openGql.grammar.TrimCharacterOrByteString"
+
+-- | A GQL trim character or byte string source, equivalent to a value expression
+type TrimCharacterOrByteStringSource = ValueExpression
+
+_TrimCharacterOrByteStringSource = Core.Name "openGql.grammar.TrimCharacterOrByteStringSource"
+
+-- | A GQL trim list function
+data TrimListFunction =
+  TrimListFunction {
+    trimListFunctionListValue :: ListValueExpression,
+    trimListFunctionNumericValue :: NumericValueExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_TrimListFunction = Core.Name "openGql.grammar.TrimListFunction"
+
+_TrimListFunction_listValue = Core.Name "listValue"
+
+_TrimListFunction_numericValue = Core.Name "numericValue"
+
+-- | A GQL trim multi character character string
+data TrimMultiCharacterCharacterString =
+  TrimMultiCharacterCharacterString {
+    trimMultiCharacterCharacterStringTrimType :: TrimType,
+    trimMultiCharacterCharacterStringValueExpression :: ValueExpression,
+    trimMultiCharacterCharacterStringOptionalValueExpression :: (Maybe ValueExpression)}
+  deriving (Eq, Ord, Read, Show)
+
+_TrimMultiCharacterCharacterString = Core.Name "openGql.grammar.TrimMultiCharacterCharacterString"
+
+_TrimMultiCharacterCharacterString_trimType = Core.Name "trimType"
+
+_TrimMultiCharacterCharacterString_valueExpression = Core.Name "valueExpression"
+
+_TrimMultiCharacterCharacterString_optionalValueExpression = Core.Name "optionalValueExpression"
+
+-- | A GQL trim operands
+data TrimOperands =
+  TrimOperands {
+    trimOperandsSpecification :: (Maybe TrimSpecification),
+    trimOperandsCharacterOrByteString :: (Maybe TrimCharacterOrByteString),
+    trimOperandsSource :: TrimCharacterOrByteStringSource}
+  deriving (Eq, Ord, Read, Show)
+
+_TrimOperands = Core.Name "openGql.grammar.TrimOperands"
+
+_TrimOperands_specification = Core.Name "specification"
+
+_TrimOperands_characterOrByteString = Core.Name "characterOrByteString"
+
+_TrimOperands_source = Core.Name "source"
+
+-- | A GQL trim single character or byte string, equivalent to a trim operands
+type TrimSingleCharacterOrByteString = TrimOperands
+
+_TrimSingleCharacterOrByteString = Core.Name "openGql.grammar.TrimSingleCharacterOrByteString"
+
+-- | A GQL trim specification: one of a fixed set of alternatives
+data TrimSpecification =
+  TrimSpecificationLeading |
+  TrimSpecificationTrailing |
+  TrimSpecificationBoth
+  deriving (Eq, Ord, Read, Show)
+
+_TrimSpecification = Core.Name "openGql.grammar.TrimSpecification"
+
+_TrimSpecification_leading = Core.Name "leading"
+
+_TrimSpecification_trailing = Core.Name "trailing"
+
+_TrimSpecification_both = Core.Name "both"
+
+-- | A GQL trim type: one of a fixed set of alternatives
+data TrimType =
+  TrimTypeBtrim |
+  TrimTypeLtrim |
+  TrimTypeRtrim
+  deriving (Eq, Ord, Read, Show)
+
+_TrimType = Core.Name "openGql.grammar.TrimType"
+
+_TrimType_btrim = Core.Name "btrim"
+
+_TrimType_ltrim = Core.Name "ltrim"
+
+_TrimType_rtrim = Core.Name "rtrim"
+
+-- | A GQL truth value, equivalent to a boolean literal
+type TruthValue = BooleanLiteral
+
+_TruthValue = Core.Name "openGql.grammar.TruthValue"
+
+-- | A GQL typed
+type Typed = ()
+
+_Typed = Core.Name "openGql.grammar.Typed"
+
+-- | A GQL typed binding table reference value type
+data TypedBindingTableReferenceValueType =
+  TypedBindingTableReferenceValueType {
+    typedBindingTableReferenceValueTypeTyped :: (Maybe Typed),
+    typedBindingTableReferenceValueTypeValueType :: BindingTableReferenceValueType}
+  deriving (Eq, Ord, Read, Show)
+
+_TypedBindingTableReferenceValueType = Core.Name "openGql.grammar.TypedBindingTableReferenceValueType"
+
+_TypedBindingTableReferenceValueType_typed = Core.Name "typed"
+
+_TypedBindingTableReferenceValueType_valueType = Core.Name "valueType"
+
+-- | A GQL typed graph reference value type
+data TypedGraphReferenceValueType =
+  TypedGraphReferenceValueType {
+    typedGraphReferenceValueTypeTyped :: (Maybe Typed),
+    typedGraphReferenceValueTypeValueType :: GraphReferenceValueType}
+  deriving (Eq, Ord, Read, Show)
+
+_TypedGraphReferenceValueType = Core.Name "openGql.grammar.TypedGraphReferenceValueType"
+
+_TypedGraphReferenceValueType_typed = Core.Name "typed"
+
+_TypedGraphReferenceValueType_valueType = Core.Name "valueType"
+
+-- | A GQL typed graph type reference
+data TypedGraphTypeReference =
+  TypedGraphTypeReference {
+    typedGraphTypeReferenceTyped :: (Maybe Typed),
+    typedGraphTypeReferenceReference :: GraphTypeReference}
+  deriving (Eq, Ord, Read, Show)
+
+_TypedGraphTypeReference = Core.Name "openGql.grammar.TypedGraphTypeReference"
+
+_TypedGraphTypeReference_typed = Core.Name "typed"
+
+_TypedGraphTypeReference_reference = Core.Name "reference"
+
+-- | A GQL typed nested graph type specification
+data TypedNestedGraphTypeSpecification =
+  TypedNestedGraphTypeSpecification {
+    typedNestedGraphTypeSpecificationTyped :: (Maybe Typed),
+    typedNestedGraphTypeSpecificationGraph :: Bool,
+    typedNestedGraphTypeSpecificationSpecification :: NestedGraphTypeSpecification}
+  deriving (Eq, Ord, Read, Show)
+
+_TypedNestedGraphTypeSpecification = Core.Name "openGql.grammar.TypedNestedGraphTypeSpecification"
+
+_TypedNestedGraphTypeSpecification_typed = Core.Name "typed"
+
+_TypedNestedGraphTypeSpecification_graph = Core.Name "graph"
+
+_TypedNestedGraphTypeSpecification_specification = Core.Name "specification"
+
+-- | A GQL typed value type
+data TypedValueType =
+  TypedValueType {
+    typedValueTypeTyped :: (Maybe Typed),
+    typedValueTypeValueType :: ValueType}
+  deriving (Eq, Ord, Read, Show)
+
+_TypedValueType = Core.Name "openGql.grammar.TypedValueType"
+
+_TypedValueType_typed = Core.Name "typed"
+
+_TypedValueType_valueType = Core.Name "valueType"
+
+-- | A GQL u big int type
+data UBigIntType =
+  UBigIntType {
+    uBigIntTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_UBigIntType = Core.Name "openGql.grammar.UBigIntType"
+
+_UBigIntType_notNull = Core.Name "notNull"
+
+-- | A GQL u small int type
+data USmallIntType =
+  USmallIntType {
+    uSmallIntTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_USmallIntType = Core.Name "openGql.grammar.USmallIntType"
+
+_USmallIntType_notNull = Core.Name "notNull"
+
+-- | A GQL uint128 type
+data Uint128Type =
+  Uint128Type {
+    uint128TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Uint128Type = Core.Name "openGql.grammar.Uint128Type"
+
+_Uint128Type_notNull = Core.Name "notNull"
+
+-- | A GQL uint16 type
+data Uint16Type =
+  Uint16Type {
+    uint16TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Uint16Type = Core.Name "openGql.grammar.Uint16Type"
+
+_Uint16Type_notNull = Core.Name "notNull"
+
+-- | A GQL uint256 type
+data Uint256Type =
+  Uint256Type {
+    uint256TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Uint256Type = Core.Name "openGql.grammar.Uint256Type"
+
+_Uint256Type_notNull = Core.Name "notNull"
+
+-- | A GQL uint32 type
+data Uint32Type =
+  Uint32Type {
+    uint32TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Uint32Type = Core.Name "openGql.grammar.Uint32Type"
+
+_Uint32Type_notNull = Core.Name "notNull"
+
+-- | A GQL uint64 type
+data Uint64Type =
+  Uint64Type {
+    uint64TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Uint64Type = Core.Name "openGql.grammar.Uint64Type"
+
+_Uint64Type_notNull = Core.Name "notNull"
+
+-- | A GQL uint8 type
+data Uint8Type =
+  Uint8Type {
+    uint8TypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Uint8Type = Core.Name "openGql.grammar.Uint8Type"
+
+_Uint8Type_notNull = Core.Name "notNull"
+
+-- | A GQL uint with precision
+data UintWithPrecision =
+  UintWithPrecision {
+    uintWithPrecisionPrecision :: (Maybe Precision),
+    uintWithPrecisionNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_UintWithPrecision = Core.Name "openGql.grammar.UintWithPrecision"
+
+_UintWithPrecision_precision = Core.Name "precision"
+
+_UintWithPrecision_notNull = Core.Name "notNull"
+
+-- | A GQL unsigned binary exact numeric type: one of several alternative forms
+data UnsignedBinaryExactNumericType =
+  UnsignedBinaryExactNumericTypeUint8 Uint8Type |
+  UnsignedBinaryExactNumericTypeUint16 Uint16Type |
+  UnsignedBinaryExactNumericTypeUint32 Uint32Type |
+  UnsignedBinaryExactNumericTypeUint64 Uint64Type |
+  UnsignedBinaryExactNumericTypeUint128 Uint128Type |
+  UnsignedBinaryExactNumericTypeUint256 Uint256Type |
+  UnsignedBinaryExactNumericTypeUSmallInt USmallIntType |
+  UnsignedBinaryExactNumericTypeUintWithPrecision UintWithPrecision |
+  UnsignedBinaryExactNumericTypeUBigInt UBigIntType |
+  UnsignedBinaryExactNumericTypeUnsigned VerboseBinaryExactNumericType
+  deriving (Eq, Ord, Read, Show)
+
+_UnsignedBinaryExactNumericType = Core.Name "openGql.grammar.UnsignedBinaryExactNumericType"
+
+_UnsignedBinaryExactNumericType_uint8 = Core.Name "uint8"
+
+_UnsignedBinaryExactNumericType_uint16 = Core.Name "uint16"
+
+_UnsignedBinaryExactNumericType_uint32 = Core.Name "uint32"
+
+_UnsignedBinaryExactNumericType_uint64 = Core.Name "uint64"
+
+_UnsignedBinaryExactNumericType_uint128 = Core.Name "uint128"
+
+_UnsignedBinaryExactNumericType_uint256 = Core.Name "uint256"
+
+_UnsignedBinaryExactNumericType_uSmallInt = Core.Name "uSmallInt"
+
+_UnsignedBinaryExactNumericType_uintWithPrecision = Core.Name "uintWithPrecision"
+
+_UnsignedBinaryExactNumericType_uBigInt = Core.Name "uBigInt"
+
+_UnsignedBinaryExactNumericType_unsigned = Core.Name "unsigned"
+
+-- | A GQL unsigned decimal integer
+type UnsignedDecimalInteger = String
+
+_UnsignedDecimalInteger = Core.Name "openGql.grammar.UnsignedDecimalInteger"
+
+-- | A GQL unsigned integer: one of several alternative forms
+data UnsignedInteger =
+  UnsignedIntegerDecimal String |
+  UnsignedIntegerHexadecimal String |
+  UnsignedIntegerOctal String |
+  UnsignedIntegerBinary String
+  deriving (Eq, Ord, Read, Show)
+
+_UnsignedInteger = Core.Name "openGql.grammar.UnsignedInteger"
+
+_UnsignedInteger_decimal = Core.Name "decimal"
+
+_UnsignedInteger_hexadecimal = Core.Name "hexadecimal"
+
+_UnsignedInteger_octal = Core.Name "octal"
+
+_UnsignedInteger_binary = Core.Name "binary"
+
+-- | A GQL unsigned literal: one of several alternative forms
+data UnsignedLiteral =
+  UnsignedLiteralNumeric UnsignedNumericLiteral |
+  UnsignedLiteralGeneral GeneralLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_UnsignedLiteral = Core.Name "openGql.grammar.UnsignedLiteral"
+
+_UnsignedLiteral_numeric = Core.Name "numeric"
+
+_UnsignedLiteral_general = Core.Name "general"
+
+-- | A GQL unsigned numeric literal: one of several alternative forms
+data UnsignedNumericLiteral =
+  UnsignedNumericLiteralExact ExactNumericLiteral |
+  UnsignedNumericLiteralApproximate ApproximateNumericLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_UnsignedNumericLiteral = Core.Name "openGql.grammar.UnsignedNumericLiteral"
+
+_UnsignedNumericLiteral_exact = Core.Name "exact"
+
+_UnsignedNumericLiteral_approximate = Core.Name "approximate"
+
+-- | A GQL unsigned value specification: one of several alternative forms
+data UnsignedValueSpecification =
+  UnsignedValueSpecificationUnsignedLiteral UnsignedLiteral |
+  UnsignedValueSpecificationGeneralValueSpecification GeneralValueSpecification
+  deriving (Eq, Ord, Read, Show)
+
+_UnsignedValueSpecification = Core.Name "openGql.grammar.UnsignedValueSpecification"
+
+_UnsignedValueSpecification_unsignedLiteral = Core.Name "unsignedLiteral"
+
+_UnsignedValueSpecification_generalValueSpecification = Core.Name "generalValueSpecification"
+
+-- | A GQL upper bound, equivalent to a unsigned integer
+type UpperBound = UnsignedInteger
+
+_UpperBound = Core.Name "openGql.grammar.UpperBound"
+
+-- | A GQL use graph clause, equivalent to a graph expression
+type UseGraphClause = GraphExpression
+
+_UseGraphClause = Core.Name "openGql.grammar.UseGraphClause"
+
+-- | A GQL value expression: one of several alternative forms
+data ValueExpression =
+  ValueExpressionSigned SignedExpr |
+  ValueExpressionMultDiv MultDivExpr |
+  ValueExpressionAddSubtract AddSubtractExpr |
+  ValueExpressionConcatenation ConcatenationExpr |
+  ValueExpressionNot NotExpr |
+  ValueExpressionIsNot IsNotExpr |
+  ValueExpressionConjunctive ConjunctiveExpr |
+  ValueExpressionDisjunctive DisjunctiveExpr |
+  ValueExpressionComparison ComparisonExpr |
+  ValueExpressionPredicate Predicate |
+  ValueExpressionNormalizedPredicate NormalizedPredicateExpr |
+  ValueExpressionPropertyGraph GraphExpression |
+  ValueExpressionBindingTable BindingTableExpression |
+  ValueExpressionValueFunction ValueFunction |
+  ValueExpressionPrimary PrimaryValueExpression
+  deriving (Eq, Ord, Read, Show)
+
+_ValueExpression = Core.Name "openGql.grammar.ValueExpression"
+
+_ValueExpression_signed = Core.Name "signed"
+
+_ValueExpression_multDiv = Core.Name "multDiv"
+
+_ValueExpression_addSubtract = Core.Name "addSubtract"
+
+_ValueExpression_concatenation = Core.Name "concatenation"
+
+_ValueExpression_not = Core.Name "not"
+
+_ValueExpression_isNot = Core.Name "isNot"
+
+_ValueExpression_conjunctive = Core.Name "conjunctive"
+
+_ValueExpression_disjunctive = Core.Name "disjunctive"
+
+_ValueExpression_comparison = Core.Name "comparison"
+
+_ValueExpression_predicate = Core.Name "predicate"
+
+_ValueExpression_normalizedPredicate = Core.Name "normalizedPredicate"
+
+_ValueExpression_propertyGraph = Core.Name "propertyGraph"
+
+_ValueExpression_bindingTable = Core.Name "bindingTable"
+
+_ValueExpression_valueFunction = Core.Name "valueFunction"
+
+_ValueExpression_primary = Core.Name "primary"
+
+-- | A GQL value function: one of several alternative forms
+data ValueFunction =
+  ValueFunctionNumeric NumericValueFunction |
+  ValueFunctionDatetimeSubtraction DatetimeSubtraction |
+  ValueFunctionDatetime DatetimeValueFunction |
+  ValueFunctionDuration DurationValueFunction |
+  ValueFunctionCharacterOrByteString CharacterOrByteStringFunction |
+  ValueFunctionList ListValueFunction
+  deriving (Eq, Ord, Read, Show)
+
+_ValueFunction = Core.Name "openGql.grammar.ValueFunction"
+
+_ValueFunction_numeric = Core.Name "numeric"
+
+_ValueFunction_datetimeSubtraction = Core.Name "datetimeSubtraction"
+
+_ValueFunction_datetime = Core.Name "datetime"
+
+_ValueFunction_duration = Core.Name "duration"
+
+_ValueFunction_characterOrByteString = Core.Name "characterOrByteString"
+
+_ValueFunction_list = Core.Name "list"
+
+-- | A GQL value initializer
+type ValueInitializer = ()
+
+_ValueInitializer = Core.Name "openGql.grammar.ValueInitializer"
+
+-- | A GQL value query expression, equivalent to a nested query specification
+type ValueQueryExpression = NestedQuerySpecification
+
+_ValueQueryExpression = Core.Name "openGql.grammar.ValueQueryExpression"
+
+-- | A GQL value type: one of several alternative forms
+data ValueType =
+  ValueTypePredefinedType PredefinedType |
+  ValueTypePathValueType PathValueType |
+  ValueTypeListValueTypeAlt1 ListValueTypeAlt1 |
+  ValueTypeListValueTypeAlt2 ListValueTypeAlt2 |
+  ValueTypeListValueTypeAlt3 ListValueTypeAlt3 |
+  ValueTypeRecordType RecordType |
+  ValueTypeOpenDynamicUnionType OpenDynamicUnionType |
+  ValueTypeDynamicPropertyValueType DynamicPropertyValueType |
+  ValueTypeClosedDynamicUnionTypeAlt1 ClosedDynamicUnionTypeAlt1 |
+  ValueTypeClosedDynamicUnionTypeAlt2 ClosedDynamicUnionTypeAlt2
+  deriving (Eq, Ord, Read, Show)
+
+_ValueType = Core.Name "openGql.grammar.ValueType"
+
+_ValueType_predefinedType = Core.Name "predefinedType"
+
+_ValueType_pathValueType = Core.Name "pathValueType"
+
+_ValueType_listValueTypeAlt1 = Core.Name "listValueTypeAlt1"
+
+_ValueType_listValueTypeAlt2 = Core.Name "listValueTypeAlt2"
+
+_ValueType_listValueTypeAlt3 = Core.Name "listValueTypeAlt3"
+
+_ValueType_recordType = Core.Name "recordType"
+
+_ValueType_openDynamicUnionType = Core.Name "openDynamicUnionType"
+
+_ValueType_dynamicPropertyValueType = Core.Name "dynamicPropertyValueType"
+
+_ValueType_closedDynamicUnionTypeAlt1 = Core.Name "closedDynamicUnionTypeAlt1"
+
+_ValueType_closedDynamicUnionTypeAlt2 = Core.Name "closedDynamicUnionTypeAlt2"
+
+-- | A GQL value type predicate
+data ValueTypePredicate =
+  ValueTypePredicate {
+    valueTypePredicateValueExpression :: PrimaryValueExpression,
+    valueTypePredicateValueTypePart :: ValueTypePredicatePart2}
+  deriving (Eq, Ord, Read, Show)
+
+_ValueTypePredicate = Core.Name "openGql.grammar.ValueTypePredicate"
+
+_ValueTypePredicate_valueExpression = Core.Name "valueExpression"
+
+_ValueTypePredicate_valueTypePart = Core.Name "valueTypePart"
+
+-- | A GQL value type predicate part2
+data ValueTypePredicatePart2 =
+  ValueTypePredicatePart2 {
+    valueTypePredicatePart2Not :: Bool,
+    valueTypePredicatePart2Typed :: Typed,
+    valueTypePredicatePart2ValueType :: ValueType}
+  deriving (Eq, Ord, Read, Show)
+
+_ValueTypePredicatePart2 = Core.Name "openGql.grammar.ValueTypePredicatePart2"
+
+_ValueTypePredicatePart2_not = Core.Name "not"
+
+_ValueTypePredicatePart2_typed = Core.Name "typed"
+
+_ValueTypePredicatePart2_valueType = Core.Name "valueType"
+
+-- | A GQL value variable definition
+data ValueVariableDefinition =
+  ValueVariableDefinition {
+    valueVariableDefinitionVariable :: BindingVariable,
+    valueVariableDefinitionInitializer :: OptTypedValueInitializer}
+  deriving (Eq, Ord, Read, Show)
+
+_ValueVariableDefinition = Core.Name "openGql.grammar.ValueVariableDefinition"
+
+_ValueVariableDefinition_variable = Core.Name "variable"
+
+_ValueVariableDefinition_initializer = Core.Name "initializer"
+
+-- | A GQL varbinary type
+data VarbinaryType =
+  VarbinaryType {
+    varbinaryTypeMaxLength :: (Maybe MaxLength),
+    varbinaryTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_VarbinaryType = Core.Name "openGql.grammar.VarbinaryType"
+
+_VarbinaryType_maxLength = Core.Name "maxLength"
+
+_VarbinaryType_notNull = Core.Name "notNull"
+
+-- | A GQL varchar type
+data VarcharType =
+  VarcharType {
+    varcharTypeMaxLength :: (Maybe MaxLength),
+    varcharTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_VarcharType = Core.Name "openGql.grammar.VarcharType"
+
+_VarcharType_maxLength = Core.Name "maxLength"
+
+_VarcharType_notNull = Core.Name "notNull"
+
+-- | An optional GQL variable scope clause
+type VariableScopeClause = (Maybe BindingVariableReferenceList)
+
+_VariableScopeClause = Core.Name "openGql.grammar.VariableScopeClause"
+
+-- | A GQL verbose binary exact numeric type: one of several alternative forms
+data VerboseBinaryExactNumericType =
+  VerboseBinaryExactNumericTypeInteger8 Integer8Type |
+  VerboseBinaryExactNumericTypeInteger16 Integer16Type |
+  VerboseBinaryExactNumericTypeInteger32 Integer32Type |
+  VerboseBinaryExactNumericTypeInteger64 Integer64Type |
+  VerboseBinaryExactNumericTypeInteger128 Integer128Type |
+  VerboseBinaryExactNumericTypeInteger256 Integer256Type |
+  VerboseBinaryExactNumericTypeSmallInteger SmallIntegerType |
+  VerboseBinaryExactNumericTypeIntegerWithPrecision IntegerWithPrecision |
+  VerboseBinaryExactNumericTypeBigInteger BigIntegerType
+  deriving (Eq, Ord, Read, Show)
+
+_VerboseBinaryExactNumericType = Core.Name "openGql.grammar.VerboseBinaryExactNumericType"
+
+_VerboseBinaryExactNumericType_integer8 = Core.Name "integer8"
+
+_VerboseBinaryExactNumericType_integer16 = Core.Name "integer16"
+
+_VerboseBinaryExactNumericType_integer32 = Core.Name "integer32"
+
+_VerboseBinaryExactNumericType_integer64 = Core.Name "integer64"
+
+_VerboseBinaryExactNumericType_integer128 = Core.Name "integer128"
+
+_VerboseBinaryExactNumericType_integer256 = Core.Name "integer256"
+
+_VerboseBinaryExactNumericType_smallInteger = Core.Name "smallInteger"
+
+_VerboseBinaryExactNumericType_integerWithPrecision = Core.Name "integerWithPrecision"
+
+_VerboseBinaryExactNumericType_bigInteger = Core.Name "bigInteger"
+
+-- | A GQL when operand: one of several alternative forms
+data WhenOperand =
+  WhenOperandValueExpression NonParenthesizedPrimaryValueExpression |
+  WhenOperandComparison ComparisonPredicatePart2 |
+  WhenOperandNullPredicate NullPredicatePart2 |
+  WhenOperandValueTypePredicate ValueTypePredicatePart2 |
+  WhenOperandNormalizedPredicate NormalizedPredicatePart2 |
+  WhenOperandDirectedPredicate DirectedPredicatePart2 |
+  WhenOperandLabeledPredicate LabeledPredicatePart2 |
+  WhenOperandSourcePredicate SourcePredicate |
+  WhenOperandDestinationPredicate DestinationPredicate
+  deriving (Eq, Ord, Read, Show)
+
+_WhenOperand = Core.Name "openGql.grammar.WhenOperand"
+
+_WhenOperand_valueExpression = Core.Name "valueExpression"
+
+_WhenOperand_comparison = Core.Name "comparison"
+
+_WhenOperand_nullPredicate = Core.Name "nullPredicate"
+
+_WhenOperand_valueTypePredicate = Core.Name "valueTypePredicate"
+
+_WhenOperand_normalizedPredicate = Core.Name "normalizedPredicate"
+
+_WhenOperand_directedPredicate = Core.Name "directedPredicate"
+
+_WhenOperand_labeledPredicate = Core.Name "labeledPredicate"
+
+_WhenOperand_sourcePredicate = Core.Name "sourcePredicate"
+
+_WhenOperand_destinationPredicate = Core.Name "destinationPredicate"
+
+-- | A list of GQL when operand list elements
+type WhenOperandList = [WhenOperand]
+
+_WhenOperandList = Core.Name "openGql.grammar.WhenOperandList"
+
+-- | A GQL where clause, equivalent to a search condition
+type WhereClause = SearchCondition
+
+_WhereClause = Core.Name "openGql.grammar.WhereClause"
+
+-- | A GQL yield clause, equivalent to a yield item list
+type YieldClause = YieldItemList
+
+_YieldClause = Core.Name "openGql.grammar.YieldClause"
+
+-- | A GQL yield item
+data YieldItem =
+  YieldItem {
+    yieldItemName :: YieldItemName,
+    yieldItemAlias :: (Maybe YieldItemAlias)}
+  deriving (Eq, Ord, Read, Show)
+
+_YieldItem = Core.Name "openGql.grammar.YieldItem"
+
+_YieldItem_name = Core.Name "name"
+
+_YieldItem_alias = Core.Name "alias"
+
+-- | A GQL yield item alias, equivalent to a binding variable
+type YieldItemAlias = BindingVariable
+
+_YieldItemAlias = Core.Name "openGql.grammar.YieldItemAlias"
+
+-- | A list of GQL yield item list elements
+type YieldItemList = [YieldItem]
+
+_YieldItemList = Core.Name "openGql.grammar.YieldItemList"
+
+-- | A GQL yield item name, equivalent to a field name
+type YieldItemName = FieldName
+
+_YieldItemName = Core.Name "openGql.grammar.YieldItemName"
+
+-- | A GQL zoned datetime type
+data ZonedDatetimeType =
+  ZonedDatetimeType {
+    zonedDatetimeTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ZonedDatetimeType = Core.Name "openGql.grammar.ZonedDatetimeType"
+
+_ZonedDatetimeType_notNull = Core.Name "notNull"
+
+-- | A GQL zoned time type
+data ZonedTimeType =
+  ZonedTimeType {
+    zonedTimeTypeNotNull :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ZonedTimeType = Core.Name "openGql.grammar.ZonedTimeType"
+
+_ZonedTimeType_notNull = Core.Name "notNull"
