on master help sign in
Analyze API paths and import Ford union marks
commitbeada103eed0cf231210dd5c392f8faf7ac815a1 authoriko <mail@iko.soy> dateSat 31 Oct 2026, 03:15 (18 hours ago) parentad46655
42 files changed+4006−2962
README.md+1−1 docs/compiler.md+5−3 docs/development.md+5−1 docs/open-questions.md+5−1 docs/prelude-inventory.md+3−3 docs/status.md+10−7 jibb-dev/lib/jibb-import.hoon+111−23 jibb-dev/lib/jibb.hoon+214 jibb-dev/lib/jibb/prelude.jibb+40−37 tests/clay-fixtures/mark-update-import-expected.txt+1 tests/clay-fixtures/mark-update-import.txt+9 tests/golden/prelude-unit-list-transforms/source.jibb+40−37 tests/golden/prelude-unit-list-transforms/tokens.txt+1787−1753 tests/golden/prelude-unit-list-transforms/tree.txt+782−768 tests/golden/prelude-unit-list-transforms/types.txt+1−1 tests/golden/types-prelude-list-helpers/about.txt+4 tests/golden/types-prelude-list-helpers/modules.txt+1 tests/golden/types-prelude-list-helpers/source.jibb+15 tests/golden/types-prelude-list-helpers/tokens.txt+182 tests/golden/types-prelude-list-helpers/tree.txt+98 tests/golden/types-prelude-list-helpers/types.txt+34 tests/importer/about.txt+6 tests/importer/small.txt+5 tests/importer/tree.txt+10 tests/lib/jibb-api-paths.hoon+104 tests/lib/jibb.hoon+332−326 tests/type-api-paths/about.txt+3 tests/type-api-paths/api.txt+13 tests/type-api-paths/expected.txt+18 tests/type-api-paths/missing-decl.txt+12 tests/type-api-paths/poke-clash.txt+12 tests/type-api-paths/scry-bad.txt+13 tests/type-api-paths/scry.txt+13 tests/type-api-paths/todo-action.txt+6 tests/type-api-paths/todo-item.txt+6 tests/type-api-paths/todo-sur.txt+12 tests/type-api-paths/todo-update.txt+6 tests/type-api-paths/todos.txt+6 tests/type-api-paths/value-clash.txt+15 tools/clay-fixtures+13 tools/importer-test+1−1 tools/type-api-paths-test+52
README.md+1−1
@@ -42,7 +42,7 @@ tools/hoon '(golden /a/b/jibb (crip "++ main view"))'
4242tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
4343```
4444
45−`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-tlon-test`, `tools/type-mark-test` and `tools/type-poke-test` check importer/checker and prelude boundaries under eval; the ship suite runs the same fixtures.
45+`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-tlon-test`, `tools/type-mark-test`, `tools/type-poke-test` and `tools/type-api-paths-test` check importer/checker, prelude and partial API path analysis boundaries under eval; the ship suite runs the same fixtures.
4646
4747### The doc's examples
4848
docs/compiler.md+5−3
@@ -82,17 +82,19 @@ A known closed union with two or more arms can be matched when each arm provably
8282
8383A known closed union can also provide context to each arm of a complete loobean or unit-shaped branch in a cast or a call with a known union sample. Nested branches and transparent groups work; a mismatch reports the expected union and the offending arm. General patterns and context through bodies with local definitions remain unsupported, and unrelated unresolved tags stay pending.
8484
85−The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule, as @iko confirmed on 2026-10-30. For an explicit `$%` with distinct literal head tags, it can also prove restricted local named payload dependencies, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. It rejects recursive or computed dependencies, inherited same-name collisions, unsupported nested unions and proofs exceeding a shared 4,096-node budget. It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms, valid term singletons, Hoon's `%n` zero singleton as Jibb `~`, nested faced or unfaced cells, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts the same shapes for declared marks. The caller must pass unchanged results from the source-aware reader: the bridge validates the supplied graph but cannot detect source cases Hoon collapsed before that graph was built. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and most prelude collection operations remain unsupported. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/type-tlon-test` and its ship counterpart exercise four real Tlon presence unions and a field read through the source-aware reader and partial checker. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
85+The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. For a mark whose sample is exactly a named arm of its single Ford-imported `/sur` core, it can recover a source-proved nonrecursive union, including source-location wrappers around fields; recursive or unverified fallback results remain unsupported. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule, as @iko confirmed on 2026-10-30. For an explicit `$%` with distinct literal head tags, it can also prove restricted local named payload dependencies, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. It rejects recursive or computed dependencies, inherited same-name collisions, unsupported nested unions and proofs exceeding a shared 4,096-node budget. It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms, valid term singletons, Hoon's `%n` zero singleton as Jibb `~`, nested faced or unfaced cells, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts the same shapes for declared marks. The caller must pass unchanged results from the source-aware reader: the bridge validates the supplied graph but cannot detect source cases Hoon collapsed before that graph was built. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and most prelude collection operations remain unsupported. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/type-tlon-test` and its ship counterpart exercise four real Tlon presence unions and a field read through the source-aware reader and partial checker. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
8686
8787Self-recursive `/sur` molds can cross the bridge as opaque module-and-name identities when their supported source-aware graph passes validation. Aliases, foreign references, recursive marks, unfolding, construction and field access remain unsupported; the partial printer declines recursive names that are not in scope.
8888
8989Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The opt-in `+read-named-diagnostic` and `+read-mark-diagnostic` preserve successful graphs and distinguish definite `%invalid` aura and core evidence emitted directly by the reader from `%unsupported` failures. Other failures, including unverified union disjointness and vase recognition based only on a name, remain unsupported. These entry points revalidate and re-walk failed types; the opt-in `+golden-types-with-reader-diagnostics` accepts unchanged structured reader results and reports definite aura or core errors at their imported mold use sites, when the import and supplied input are unique. Ordered replay covers direct and nested cell samples, record and function casts, and non-generic same-module aliases; it stops at an unsupported prefix, cycle or shadowing failure. Union molds, generic applications, transitive modules and unsupported reader outcomes still report generic limitations. Replay repeats inference and may add work; this entry point remains partial. Existing checker entry points continue treating failed imports as unsupported. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
9090
91+The source-backed `+api-path-analysis-source` is a separate partial analysis, not an API check: it resolves reachable Jibb imports and declared mark graphs and returns path and scry segments, full and diff mark identities and their types. It also checks derived-name collisions. Full and diff payloads must be direct declared mark names; typed scry parameters must be a same-name, same-aura subset of the watch parameters, and unknown or duplicate segment binders fail closed. It creates no request gates. The caller must pass a trusted prepared prelude and unchanged source-aware reader results.
92+
9193`+golden-types-with-prelude` accepts case-local Jibb module sources alongside `/sur` and mark results and the vendored prelude source. It resolves reachable ordinary library modules in dependency order, caching completed interfaces per invocation and exporting supported closed value schemes, direct generic unions, and simple or nonrecursive generic mold aliases whose bodies the fragment supports. It detects missing sources and cycles and rejects a dependency if its interface cannot be inferred by the fragment.
9294
93−The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc` and `turn`; unsupported entries, such as most list helpers, remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. List-dependent prelude mold aliases remain unsupported because their templates are prepared before this injection. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. The partial checker resolves its supported source shape, preserves its public name, and rejects ordinary imports of the private internal path. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. Opaque payloads may contain gates, so the fragment treats them conservatively; full gate-free checks are unfinished. General widening to `*` and noun patterns must preserve sealing when they are implemented. The shared module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship.
95+The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc`, `turn`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join` and `snip`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. List-dependent prelude mold aliases remain unsupported because their templates are prepared before this injection. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. The partial checker resolves its supported source shape, preserves its public name, and rejects ordinary imports of the private internal path. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. A `*` payload may contain gates, so the fragment treats it conservatively; full gate-free checks are unfinished. The shared module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship.
9496
95−`+prepare-prelude` derives the interface and declared-name inventory from the trusted vendored source. Hosts can reuse its result with `+golden-types-with-prepared-prelude`; they must pass the unchanged result of preparation, not an independently constructed value. Empty, malformed, duplicate-name or import-bearing prelude sources fail closed. `+golden-types-with-prelude` remains the source-taking wrapper. API files, modules with `main`, unsupported definitions and many other features remain outside this subset. The older `+golden-types-with-modules` entry point fails closed for imports because it has no prelude scope. None of these partial reports claims the module has been checked.
97+`+prepare-prelude` derives the interface and declared-name inventory from the trusted vendored source. Hosts can reuse its result with `+golden-types-with-prepared-prelude`; they must pass the unchanged result of preparation, not an independently constructed value. Empty, malformed and duplicate-name prelude sources fail closed. The source-taking `+prepare-prelude` and `+golden-types-with-prelude` do not supply the internal module; their `-and-internal` or `-with-internal` variants accept its source for the supported private import. API files, modules with `main`, unsupported definitions and many other features remain outside this subset. The older `+golden-types-with-modules` entry point fails closed for imports because it has no prelude scope. None of these partial reports claims the module has been checked.
9698
9799And the design notes:
98100
docs/development.md+5−1
@@ -65,6 +65,8 @@ git clone https://github.com/urbit/tools /root/src/tools
6565| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
6666| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
6767| `tools/type-poke-test` | Checks source-backed prelude and poke-only API reports against `tests/type-poke/expected.txt` under eval |
68+| `tools/type-api-paths-test` | Checks partial API path analysis with real todo mark samples against `tests/type-api-paths/expected.txt` under eval |
69+| `tools/type-api-paths-test` | Compares partial API path analysis, including real todo marks, with its golden report under eval |
6870| `tools/type-module-scope-test` | Checks the partial module checker’s prelude boundary and duplicate-source rejection against `tests/type-module-scope/expected.txt` under eval |
6971| `tools/clay-fixtures` | Syncs `my-app`, builds its example `/sur` files and marks through Clay, checks selected mold and mark projections and the partial checker, and records Ford and mark subject shapes on the fake ship |
7072| `tools/hoon` | Evaluates Hoon with the library in scope, as `tools/hoon '(golden /a/b/jibb (crip "++ main view"))'`; `--cord name=file` binds a file's text, `-f` reads the expression from a file |
@@ -85,6 +87,8 @@ tools/type-tlon-test # real Tlon importer/checker report matches
8587tools/type-import-diagnostic-test # direct structured reader diagnostics match
8688tools/type-mark-test # mark/checker bridge golden report matches
8789tools/type-poke-test # source-backed poke/API bridge report matches
90+tools/type-api-paths-test # partial API path analysis report matches
91+tools/type-api-paths-test # partial API path analysis report matches
8892tools/type-module-scope-test # module/prelude scope golden report matches
8993tools/hoon check-spans-test # prints <<>>
9094tools/testdata/selftest # 22 checks, 0 failed
@@ -96,7 +100,7 @@ tools/ship check-commit # when the mark or the desks changed
96100tools/clay-fixtures # when the my-app Hoon fixtures or importer changed
97101```
98102
99−`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs, so commit the regenerated file. A run with `--stub`, `--lib`, or a custom `--golden` isolates its generated golden tests from the repository's other test programs; run the default command afterward to restore and test those programs. It also runs the independent `tests/lib/jibb-import.hoon` test against the same importer fixtures and expected diagnostic projection as `tools/importer-test`. The projection is an internal tree, not the Jibb type printer. `tests/lib/jibb-bridge.hoon` also runs the importer/checker bridge fixture on the ship; `tools/type-import-test` runs the same report under eval. `tests/lib/jibb-tlon-bridge.hoon` and `tools/type-tlon-test` run the real Tlon presence reader/checker fixture on both. The structured reader diagnostics have their own `tests/lib/jibb-import-diagnostic.hoon` ship test and `tools/type-import-diagnostic-test` eval test. The mark bridge has its own `tests/lib/jibb-mark-bridge.hoon` ship test and `tools/type-mark-test` eval test; both compare the same fixture report. `tests/lib/jibb-poke-bridge.hoon` and `tools/type-poke-test` share the source-backed prelude and poke-only API fixture. `tests/lib/jibb-module-scope.hoon` and `tools/type-module-scope-test` compare the prelude scope report on the ship and under eval.
103+`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs, so commit the regenerated file. A run with `--stub`, `--lib`, or a custom `--golden` isolates its generated golden tests from the repository's other test programs; run the default command afterward to restore and test those programs. It also runs the independent `tests/lib/jibb-import.hoon` test against the same importer fixtures and expected diagnostic projection as `tools/importer-test`. The projection is an internal tree, not the Jibb type printer. `tests/lib/jibb-bridge.hoon` also runs the importer/checker bridge fixture on the ship; `tools/type-import-test` runs the same report under eval. `tests/lib/jibb-tlon-bridge.hoon` and `tools/type-tlon-test` run the real Tlon presence reader/checker fixture on both. The structured reader diagnostics have their own `tests/lib/jibb-import-diagnostic.hoon` ship test and `tools/type-import-diagnostic-test` eval test. The mark bridge has its own `tests/lib/jibb-mark-bridge.hoon` ship test and `tools/type-mark-test` eval test; both compare the same fixture report. `tests/lib/jibb-poke-bridge.hoon` and `tools/type-poke-test` share the source-backed prelude and poke-only API fixture. `tests/lib/jibb-api-paths.hoon` and `tools/type-api-paths-test` share partial path analysis over the real todo marks; this does not generate request interfaces. `tests/lib/jibb-module-scope.hoon` and `tools/type-module-scope-test` compare the prelude scope report on the ship and under eval.
100104
101105## Golden cases
102106
docs/open-questions.md+5−1
@@ -18,7 +18,7 @@ On 2026-10-30, @iko adopted gate-free `eq` arguments and map and set keys, treat
1818
1919## Questions milestone 2 raises
2020
21−Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking it against the doc's examples, and building the checker. The numbering is retained so existing references stay valid. Questions 3 and 18 remain open; the other questions are settled.
21+Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking it against the doc's examples, and building the checker. The numbering is retained so existing references stay valid. Questions 3, 18, 25 and 26 remain open; the other questions are settled.
2222
23231. **Settled: how the prelude identifies jetted functions.** On 2026-10-30, @iko said the prelude functions have working Jibb implementations, and the compiler recognizes their shapes and uses the Hoon versions so jets can fire.
24242. **Settled: how the prelude keeps helpers private.** On 2026-10-30, @iko chose a separate internal prelude module imported by the prelude, without exposing the imported helpers.
@@ -46,6 +46,10 @@ Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking i
4646
474724. **Settled: how the internal prelude provides `poke`.** On 2026-10-31, @iko chose to define `poke` in the source-backed private internal prelude module and re-export it through the public prelude as an ordinary transparent type. Ordinary modules can construct and inspect its values. This settles `poke`; it does not decide the representation of `ask` or `qath`.
4848
49+25. **How the prelude provides `ask` and `qath`.** The spec calls both opaque, but Jibb has no syntax for a sealed type export. Following the decision for `poke`, @iko has been asked whether these should also be ordinary transparent types defined in the internal prelude, or whether they should retain opacity through a compiler mechanism. Their representations remain undecided.
50+
51+26. **The `step` example's `at` binder.** The Grammar's `describe` pattern `[t %sent at]` binds `at`, but the agreed prelude inventory includes Hoon's `at` from section 4b, and names may not shadow the prelude. The current incomplete prelude omits `at`, so its partial inference does not reveal this conflict. @iko has been asked whether to rename the binder, rename the prelude gate, or change the shadowing rule.
52+
4953## Grammar questions never put to the doc's author
5054
5155In milestone 1 the parser met about thirty places where the doc could be read more than one way. Twelve went to @iko on 2026-10-30 and are rows of the Decisions tab. These were not asked. For each, the parser follows the reading below, and some are marked "(doc question)" in the library's notes. None changes what a valid program means, except where a reading makes something an error.
docs/prelude-inventory.md+3−3
@@ -22,7 +22,7 @@ Hoon `+$` arms are marked **mold** below; `++` arms can be gates, doors or mold
2222
2323`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
2424
25−The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `both`, `clap`, `clef` and `flit`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation remains outstanding for all of them.
25+The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `both`, `clap`, `clef`, `drop` and `flit`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation remains outstanding for all of them.
2626
2727| Name | Hoon behavior | Jibb status |
2828| --- | --- | --- |
@@ -32,7 +32,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
3232| `both` | Returns a unit of both values when both units are present. | Written |
3333| `clap` | Returns the present unit if only one is present; combines both values with a gate if both are present. | Written with one shared type for both units and the combining gate, as @iko chose |
3434| `clef` | Applies a gate returning a unit when both inputs are present; otherwise returns an absent unit. | Written |
35−| `drop` | Converts an absent unit to an empty list and a present unit to a singleton. | Written |
35+| `drop` | Converts an absent unit to an empty list and a present unit to a singleton. | Written; inferred by the partial checker |
3636| `fall` | Returns the value of a present unit or the supplied fallback. | Written; inferred by the partial checker |
3737| `flit` | Returns a gate that wraps a value only if it satisfies the predicate. | Written |
3838| `hunt` | Returns the only present unit or chooses between two present values with an ordering gate. | Missing |
@@ -45,7 +45,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
4545
4646`snoc`, `lure`, `fand`, `find`, `flop`, `gulf`, `homo`, `join`, `bake`, `lent`, `levy`, `lien`, `limo`, `murn`, `oust`, `reap`, `rear`, `reel`, `roll`, `scag`, `skid`, `skim`, `skip`, `slag`, `snag`, `snip`, `sort`, `spin`, `spun`, `swag`, `turn`, `weld`, `snap`, `into`, `welp`, `zing`.
4747
48−The current prelude writes `snoc`, `lure`, `flop`, `join`, `levy`, `lien`, `murn`, `rear`, `reel`, `roll`, `skim`, `skip`, `snip`, `turn` and `weld`. `murn` keeps the present products of its gate in order; `join` inserts a separator between items; `snip` drops the last item, and `rear` returns it or crashes on an empty list. The folds take an explicit initial value as the Prelude table specifies. The partial checker infers `snoc`, `lure`, `weld` and `turn` using the validated prelude `list` mold; most other list helpers remain unsupported by that fragment. Backend validation remains outstanding for all of them.
48+The current prelude writes `snoc`, `lure`, `flop`, `join`, `levy`, `lien`, `murn`, `rear`, `reel`, `roll`, `skim`, `skip`, `snip`, `turn` and `weld`. `murn` keeps the present products of its gate in order; `join` inserts a separator between items; `snip` drops the last item, and `rear` returns it or crashes on an empty list. The folds take an explicit initial value as the Prelude table specifies. The partial checker infers `snoc`, `lure`, `weld`, `turn`, `flop`, `rear`, `skim`, `skip`, `murn`, `join` and `snip` using the validated prelude `list` mold; other list helpers remain limited by that fragment. The result casts on `drop`, `skim`, `skip`, `murn`, `join` and `snip` state their existing result types without changing their bodies. Backend validation remains outstanding for all of them.
4949
5050## 2c
5151
docs/status.md+10−7
@@ -19,7 +19,7 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
1919
2020## Milestone 2: in progress
2121
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass Hoon `*` in supported nonrecursive molds, selected Hoon atoms, term singletons, the null singleton, the two loobean singletons and their exact fork, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Tagged `$%` cases can additionally use restricted local named payload molds, with a bounded source proof; unsupported or ambiguous dependencies fail closed. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types. An opt-in partial checker entry point consumes unchanged reader results and reports definite aura or core errors at imported mold use sites when their inputs are unique. Ordered replay covers nested cell samples, record and function casts, and non-generic same-module aliases; unsupported prefixes, cycles and shadowing stop it. Union molds, generic applications, transitive modules and unsupported reader outcomes remain generic. Replay repeats inference and may add work. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. The source-backed internal prelude defines `poke` and the public prelude re-exports it as a transparent type. The partial checker resolves its supported source shape and rejects ordinary imports of the private path. An imported API with one mark and a matching direct `+$ poke` declaration can export a constructor and retain agent/mark metadata when the representation has the supported agent case. Complete private module checking, other API shapes, API paths, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API with `+$ poke` reports unsupported kind or scope, while definite duplicates and unrelated shadowing still report conflicts. The prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. Mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Reporting repeats inference for a single recursive gate outside a group; grouped reports use the stored schemes. Its performance cost remains unmeasured. A single-arm cell pattern accepts two or more binders, the last capturing the remaining tail; duplicate and shadowed binders are rejected. Intermediate union or collection tails, nested patterns, wildcards and faced records remain unsupported. String interpolation accepts known atom auras, unrestricted `@`, tapes and isolated decimal literals; a known cell asks for a printer, and an explicitly generic atom asks for an aura. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported. A known closed union with two or more arms supports patterns that provably cover or exclude each remaining case, including payload binders, imported and generic cases, and binder-free catch-alls. Partial boolean patterns can split known `?` positions into their two noun values, up to 64 alternatives across the union; binders retain their original case type. Missing alternatives and covered arms are reported. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. A cast or known call sample can supply result context through whole-case arms and supported finite loobean refinements for a known union accessed by a wing, including nested cell and list positions; other partial-pattern context and non-wing subjects remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked. A bare tag proved absent from a known union reports the union and tag sites in casts, single-argument calls, unit payloads, list items and supported branch arms; imported unnamed unions print their cases. Ordered fit replay can identify a missing tag nested in a syntactic tuple, stopping at an earlier mismatch or uncertainty. Known faced records support uniquely named field changes, including nested wings, with field context passed to replacements and the original record type retained. Missing fields, empty changes and definite mismatches report sites; the expected-type site is the edit because the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A known record cast supplies field context to its tuple or record initializer, including nested list and union fields; mismatch diagnostics use the cast mold because the original field declaration location is not retained. Isolated cart-style `init` and `update` expressions infer, while the complete cart-store fails closed because its kind and declaration scope remain unchecked. Uncontextualized list literals infer a fresh element type, including empty and nested lists, with independently generalized uses. Unresolved item tags and uncertain widening remain unsupported. Backtick unit construction uses the validated standard prelude unit template, infers its payload without losing pending constraints, and makes the prelude’s `some` available. Ordinary result annotations also let its `bind`, `biff`, `both`, `clap`, `clef` and `flit` infer. A known unit in a cast, call, list item or record field supplies context to its payload, including nested units and lists; mismatches identify the payload and context. Unrelated union identities, some variable-dependent fits, and missing or altered prelude unit templates remain unsupported. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. A known gate sample also supplies context to matching positions in a single tuple or record argument, including nested cells; zero literals can fit list positions. A bound zero constant remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
22+The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass Hoon `*` in supported nonrecursive molds, selected Hoon atoms, term singletons, the null singleton, the two loobean singletons and their exact fork, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, including a source-proved nonrecursive union from a single Ford-imported `/sur` core, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Tagged `$%` cases can additionally use restricted local named payload molds, with a bounded source proof; unsupported or ambiguous dependencies fail closed. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types. An opt-in partial checker entry point consumes unchanged reader results and reports definite aura or core errors at imported mold use sites when their inputs are unique. Ordered replay covers nested cell samples, record and function casts, and non-generic same-module aliases; unsupported prefixes, cycles and shadowing stop it. Union molds, generic applications, transitive modules and unsupported reader outcomes remain generic. Replay repeats inference and may add work. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. The source-backed internal prelude defines `poke` and the public prelude re-exports it as a transparent type. The partial checker resolves its supported source shape and rejects ordinary imports of the private path. An imported API with one mark and a matching direct `+$ poke` declaration can export a constructor and retain agent/mark metadata when the representation has the supported agent case. A separate partial analysis resolves supported API path declarations and their full and diff mark types, including the todo paths; it does not create requests or check an API module. Complete private module checking, other API shapes, request gates, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API with `+$ poke` reports unsupported kind or scope, while definite duplicates and unrelated shadowing still report conflicts. The prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. Mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Reporting repeats inference for a single recursive gate outside a group; grouped reports use the stored schemes. Its performance cost remains unmeasured. A single-arm cell pattern accepts two or more binders, the last capturing the remaining tail; duplicate and shadowed binders are rejected. Intermediate union or collection tails, nested patterns, wildcards and faced records remain unsupported. String interpolation accepts known atom auras, unrestricted `@`, tapes and isolated decimal literals; a known cell asks for a printer, and an explicitly generic atom asks for an aura. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported. A known closed union with two or more arms supports patterns that provably cover or exclude each remaining case, including payload binders, imported and generic cases, and binder-free catch-alls. Partial boolean patterns can split known `?` positions into their two noun values, up to 64 alternatives across the union; binders retain their original case type. Missing alternatives and covered arms are reported. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. A cast or known call sample can supply result context through whole-case arms and supported finite loobean refinements for a known union accessed by a wing, including nested cell and list positions; other partial-pattern context and non-wing subjects remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked. A bare tag proved absent from a known union reports the union and tag sites in casts, single-argument calls, unit payloads, list items and supported branch arms; imported unnamed unions print their cases. Ordered fit replay can identify a missing tag nested in a syntactic tuple, stopping at an earlier mismatch or uncertainty. Known faced records support uniquely named field changes, including nested wings, with field context passed to replacements and the original record type retained. Missing fields, empty changes and definite mismatches report sites; the expected-type site is the edit because the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A known record cast supplies field context to its tuple or record initializer, including nested list and union fields; mismatch diagnostics use the cast mold because the original field declaration location is not retained. Isolated cart-style `init` and `update` expressions infer, while the complete cart-store fails closed because its kind and declaration scope remain unchecked. Uncontextualized list literals infer a fresh element type, including empty and nested lists, with independently generalized uses. Unresolved item tags and uncertain widening remain unsupported. Backtick unit construction uses the validated standard prelude unit template, infers its payload without losing pending constraints, and makes the prelude’s `some` available. Ordinary result annotations also let its `bind`, `biff`, `both`, `clap`, `clef` and `flit` infer. A known unit in a cast, call, list item or record field supplies context to its payload, including nested units and lists; mismatches identify the payload and context. Unrelated union identities, some variable-dependent fits, and missing or altered prelude unit templates remain unsupported. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. A known gate sample also supplies context to matching positions in a single tuple or record argument, including nested cells; zero literals can fit list positions. A bound zero constant remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
2323
2424The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc` and `turn`. The validated standard `list` mold is injected when the prelude’s own gates are inferred; `weld` and `turn` have ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through direct or transitive mold aliases. List-dependent prelude mold aliases remain unsupported because their templates are prepared before injection. Unsupported entries such as most list helpers remain reserved but unavailable; backend validation of the helpers remains outstanding. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
2525
@@ -39,8 +39,8 @@ What the plan asks for, and where it is:
3939
4040Besides the plan's list:
4141
42−- 556 golden cases: 340 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
43−- The 556-case corpus passed under `urbit eval` in 67.8 s. The fake ship passed all 564 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 41.5 s for sync and 48.1 s for tests. The importer golden compares 169 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
42+- 557 golden cases: 341 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
43+- The 557-case corpus passed under `urbit eval` in 68.6 s. The fake ship passed all 566 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 38.1 s for sync and 69.1 s for tests. The importer golden compares 179 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
4444- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
4545- Two independent audits before 7c739b7, one of which compared the library with a reference parser written in Python from the doc over about 19,000 generated programs. Before ab797a9, a second Python parser, written from the decisions, agreed with the library on 8,000 generated programs and 900 hand-written probes.
4646- Speed: starting `urbit eval` and building the library takes about 8 s. After that, a 2,000-line module of 400 definitions parses in about a second. Loops over definitions, arms, lines and items grow no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (library section 3).
@@ -102,31 +102,34 @@ Besides the plan's list:
102102| a140383 | 2026-10-31 | Report missing union tags and infer prelude unit helpers |
103103| d69cc52 | 2026-10-31 | Infer longer cell binder patterns and prelude unit helpers |
104104| ae35005 | 2026-10-31 | Import source-verified tagged Hoon unions |
105−| ef2ea71 | 2026-10-31 | Report nested missing tags and contextualize union branch results |
105+| c8f894a | 2026-10-31 | Report nested missing tags and contextualize union branch results |
106+| ef2ea71 | 2026-10-31 | Import Hoon null singleton cases |
106107| 67f900e | 2026-10-31 | Infer local mutual gates and uncontextualized lists |
107108| 7ff15f1 | 2026-10-31 | Contextualize finite union patterns and record the initial poke decision |
108109| c790a9f | 2026-10-31 | Expose transparent `poke` from the internal prelude |
109110| ef4772a | 2026-10-31 | Bridge imported loobeans and loobean singletons |
110−| This change | 2026-10-31 | Bridge selected imported any-noun molds |
111+| ad46655 | 2026-10-31 | Bridge selected imported any-noun molds |
112+| This change | 2026-10-31 | Import source-proved Ford mark unions, analyze API paths and infer list helpers |
111113
112114## Checking it
113115
114116On a machine set up as [development.md](development.md) says:
115117
116118```
117−tools/golden # 556 cases under urbit eval
119+tools/golden # 557 cases under urbit eval
118120tools/importer-test # the Hoon importer fixture projection
119121tools/type-import-test # the importer/checker bridge fixture
120122tools/type-tlon-test # the real Tlon reader/checker fixture
121123tools/type-mark-test # the mark/checker bridge fixture
122124tools/type-poke-test # the source-backed poke/API fixture
125+tools/type-api-paths-test # partial API path metadata fixture
123126tools/type-module-scope-test # module and prelude scope fixture
124127tools/hoon check-spans-test # prints <<>> when the span checker works
125128tools/testdata/selftest # the tools themselves
126129tools/doc-blocks docs/spec # the doc's examples are golden cases
127130tools/ship start
128131tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
129−tools/ship test # the same 556 cases as -test arms on the ship
132+tools/ship test # the same 557 cases as -test arms on the ship
130133tools/testdata/ship-selftest
131134tools/ship check-commit # |commit stores .jibb files
132135tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb-import.hoon+111−23
@@ -24,9 +24,10 @@
2424:: the other fields are fixed atoms or collections of static atoms;
2525:: other source shapes fail closed.
2626::
27−:: The checker has a small bridge for successful unfaced atom and cell
28−:: results; it rejects other importer shapes. Failures return %|; no
29−:: partial tree is returned as success.
27+:: The partial checker bridges supported nouns, atoms, cells, faces,
28+:: proven forks and collections, and keeps proven recursive roots nominal.
29+:: Unsupported shapes fail closed. Reader failures return %|; no partial
30+:: tree is returned as success.
3031::
3132|%
3233+$ imported
@@ -80,13 +81,22 @@
8081:: selected local arm. Restrict this fallback to distinct literal head tags
8182:: and proven-safe dependencies, then verify each projected branch again.
8283+$ tagged-case [tag=@ branch=spec]
83−:: Clay and eval expose different versions of the spec union. Inspect a
84−:: help wrapper as a noun before checking its contained spec.
84+:: Clay and eval expose different versions of the spec union. Inspect help
85+:: and source-location wrappers as nouns before checking their contained spec.
8586++ source-gist-tail
8687 |= raw=*
8788 ^- (unit *)
88− ?. ?=([%gist [%help *] *] raw) ~
89− `+.+.raw
89+ ?: ?=([%gist [%help *] *] raw) `+.+.raw
90+ ?: ?=([%dbug * *] raw) `+.+.raw
91+ ~
92+::
93+++ tagged-term
94+ |= leaf=spec
95+ ^- (unit @)
96+ =/ gist=(unit *) (source-gist-tail leaf)
97+ ?^ gist $(leaf ;;(spec u.gist))
98+ ?. ?=([%leaf %tas @] leaf) ~
99+ `q.leaf
90100::
91101++ tagged-head
92102 |= branch=spec
@@ -96,8 +106,7 @@
96106 ?+ branch ~
97107 [%bccl *]
98108 ?~ t.p.branch ~
99− ?. ?=([%leaf %tas @] i.p.branch) ~
100− `q.i.p.branch
109+ (tagged-term i.p.branch)
101110 ==
102111::
103112++ tagged-cases
@@ -125,17 +134,17 @@
125134++ tagged-source-code
126135 |= [code=hoon name=term]
127136 ^- (unit (list tagged-case))
128− =/ note=(unit *) (source-note-tail code)
129− ?^ note $(code ;;(hoon u.note))
130− ?+ code ~
131− [%ktcl *]
132− ?. ?=([%name * [%bccn *]] p.code) ~
133− ?. =(name p.p.code) ~
134− =/ cases=(list spec) p.q.p.code
135− ?~ cases ~
136− ?~ t.cases ~
137− (tagged-cases cases ~)
138− ==
137+ =/ found=(unit spec) (local-mold-spec code name)
138+ ?~ found ~
139+ =/ body=spec u.found
140+ |-
141+ =/ gist=(unit *) (source-gist-tail body)
142+ ?^ gist $(body ;;(spec u.gist))
143+ ?. ?=([%bccn *] body) ~
144+ =/ cases=(list spec) p.body
145+ ?~ cases ~
146+ ?~ t.cases ~
147+ (tagged-cases cases ~)
139148::
140149:: Source proof for dependencies of an explicitly tagged union. Only
141150:: simple local molds, standard collections and distinct term enums are
@@ -204,7 +213,7 @@
204213 =/ gist=(unit *) (source-gist-tail shape)
205214 ?^ gist $(shape ;;(spec u.gist))
206215 ?+ shape ~
207− [%base *] ?:(?=([%atom *] p.shape) `fuel ~)
216+ [%base *] ?:(|(?=([%atom *] p.shape) =(%flag p.shape)) `fuel ~)
208217 [%leaf *] `fuel
209218 [%bcts *] ?@ p.shape $(shape q.shape)
210219 ~
@@ -312,6 +321,40 @@
312321:: A mark door's payload is [sample build-subject]. Its outer sample
313322:: face names the door sample, not the imported mark type. Collection
314323:: lookup for the sample happened against the pre-door build subject.
324+:: Fallback for a mark whose sample is exactly one arm of its only
325+:: Ford-imported /sur core. Source validation remains in read-mold-in.
326+:: Recursive results need a separate mark-origin/interface design.
327+++ mark-has-ref
328+ |= node=imported
329+ ^- ?
330+ ?- node
331+ [%ref *] &
332+ [%face *] $(node body.node)
333+ [%cell *] |($(node head.node) $(node tail.node))
334+ [%fork *] (lien cases.node |=(child=imported (mark-has-ref child)))
335+ [%apply *] (lien args.node |=(child=imported (mark-has-ref child)))
336+ * |
337+ ==
338+::
339+++ mark-union-fallback
340+ |= [raw=type context=type]
341+ ^- (unit (each imported @t))
342+ ?. ?=([%cell [%face @ [%core *]] *] context) ~
343+ ?. =(q.context -:!>(..zuse)) ~
344+ =/ alias=term p.p.context
345+ =/ core=type q.p.context
346+ ?. ?=([%hold *] raw) ~
347+ =/ name=(unit term) (hold-name q.raw)
348+ ?~ name ~
349+ =/ selected=(each type tang)
350+ (mule |.((~(play ut core) (ream (cat 3 '*' u.name)))))
351+ ?. ?=([%& *] selected) ~
352+ ?. =(p.selected raw) ~
353+ =/ result=(each imported @t) (read-mold-in alias u.name raw core)
354+ ?. ?=([%& [%fork *]] result) ~
355+ ?: (mark-has-ref p.result) ~
356+ `result
357+::
315358++ read-mark
316359 |= [name=term cor=type]
317360 ^- (each imported @t)
@@ -322,8 +365,12 @@
322365 =/ sample=type p.p.cor
323366 =/ raw=type ?:(?=([%face *] sample) q.sample sample)
324367 =/ result (read-with name name raw [~ q.p.cor])
325− ?. ?=([%& *] result) result
326− result
368+ ?: ?=([%& *] result) result
369+ =/ fallback=(each (unit (each imported @t)) tang)
370+ (mule |.((mark-union-fallback raw q.p.cor)))
371+ ?: ?=(%| -.fallback) result
372+ ?~ p.fallback result
373+ u.p.fallback
327374::
328375++ read-named-diagnostic
329376 |= [module=term name=term cor=type]
@@ -1524,6 +1571,24 @@
15241571 =/ source=hoon original(q.p (decorate-union-source q.p.original))
15251572 (read-mold %small name typ(q source))
15261573::
1574+:: Test debug metadata at the spec boundary without assuming that the
1575+:: eval version of Hoon's spec mold itself includes Clay's %dbug tag.
1576+++ debug-spec-fixture
1577+ ^- tape
1578+ =/ location=* [/tests/importer/synthetic/hoon [[1 1] [1 2]]]
1579+ =/ wrapped=* [%dbug location [%leaf %tas %x]]
1580+ =/ got=(unit *) (source-gist-tail wrapped)
1581+ ?~ got "debug wrapper missing"
1582+ =/ leaf=(each spec tang) (mule |.(;;(spec u.got)))
1583+ ?. ?=([%& [%leaf %tas %x]] leaf) "debug leaf not recovered"
1584+ =/ branch=spec [%bccl ~[p.leaf [%base [%atom %t]]]]
1585+ ?^ (tagged-cases ~[branch branch] ~) "duplicate tags accepted"
1586+ =/ broken=(unit *) (source-gist-tail [%dbug location 42])
1587+ ?~ broken "debug wrapper missing"
1588+ =/ invalid=(each spec tang) (mule |.(;;(spec u.broken)))
1589+ ?: ?=(%& -.invalid) "malformed spec accepted"
1590+ "valid wrapper; duplicate and malformed rejected"
1591+::
15271592:: Synthetic nodes test each part of the direct collection-call proof.
15281593++ collection-wrapper-fixture
15291594 ^- tape
@@ -1569,6 +1634,19 @@
15691634 =/ mark-rec-core=type -:(ride fp mark-rec)
15701635 =/ mark-gate-core=type -:(ride -:!>(..zuse) mark-gate)
15711636 =/ mark-basic-core=type -:(ride -:!>(..zuse) mark-basic)
1637+ =/ make-mark
1638+ |= [field=@t scope=type]
1639+ ^- type
1640+ -:(ride scope (crip "|_ a={(trip field)}\0a++ grab |% ++ noun a --\0a++ grow |% ++ noun a --\0a++ grad %noun\0a--\0a"))
1641+ =/ mark-union-core=type (make-mark 'mark-flag-valid:small' fp)
1642+ =/ mark-overlap-core=type (make-mark 'mark-flag-overlap:small' fp)
1643+ =/ mark-hidden-core=type (make-mark 'mark-flag-hidden:small' fp)
1644+ =/ mark-signed-core=type (make-mark 'signed:small' fp)
1645+ =/ mark-callable-core=type (make-mark 'gate-test:small' fp)
1646+ =/ extra-subject=type [%cell [%face %other other] fp]
1647+ =/ mark-extra-core=type (make-mark 'mark-flag-valid:small' extra-subject)
1648+ =/ other-hold=type (~(play ut other) (ream '*chain'))
1649+ =/ recursive-hold=type (~(play ut sc) (ream '*chain'))
15721650 =/ fake-vase=type -:(ride -:!>(..zuse) '|%\0a+$ vase @ud\0a--\0a')
15731651 =/ spoof=(unit import-diagnostic)
15741652 (first-invalid [%bad 'signed and float auras cannot be imported'])
@@ -1627,6 +1705,15 @@
16271705 (crip "nested-static-mop: {(show-result (sample %nested-static-mop))}")
16281706 (crip "collection-siblings: {(show-result (sample %collection-siblings))}")
16291707 (crip "dynamic-sibling-mop: {(show-result (sample %dynamic-sibling-mop))}")
1708+ (crip "mark-flag-source: {(show-result (read-named %small %mark-flag-valid sc))}")
1709+ (crip "mark-flag-union: {(show-result (read-mark %flag-union mark-union-core))}")
1710+ (crip "mark-flag-overlap: {(show-result (read-mark %flag-overlap mark-overlap-core))}")
1711+ (crip "mark-flag-hidden: {(show-result (read-mark %flag-hidden mark-hidden-core))}")
1712+ (crip "mark-flag-signed: {(show-result (read-mark %flag-signed mark-signed-core))}")
1713+ (crip "mark-flag-callable: {(show-result (read-mark %flag-callable mark-callable-core))}")
1714+ (crip "mark-flag-extra: {(show-result (read-mark %flag-extra mark-extra-core))}")
1715+ (crip "mark-flag-other-hold: {?~((mark-union-fallback other-hold fp) "unsupported" "BAD")}")
1716+ (crip "mark-flag-recursive-fallback: {?~((mark-union-fallback recursive-hold fp) "unsupported" "BAD")}")
16301717 (crip "mark-record: {(show-result (read-mark %todo-item mark-core))}")
16311718 (crip "mark-recursive: {(show-result (read-mark %recursive mark-rec-core))}")
16321719 (crip "mark-gate: {(show-result (read-mark %bad mark-gate-core))}")
@@ -1656,6 +1743,7 @@
16561743 (crip "gate: {(show-result (sample %gate-test))}")
16571744 (crip "vase: {(show-result vase)}")
16581745 (crip "failed-branch: {(show-result (read-mold %external %bad bad-branch-fixture))}")
1746+ (crip "debug-spec: {debug-spec-fixture}")
16591747 (crip "debug-union: {(show-result (debug-union-fixture sc %action))}")
16601748 (crip "debug-union-overlap: {(show-result (debug-union-fixture sc %explicit-wut-overlap))}")
16611749 (crip "debug-nested-cell: {(show-result (debug-union-fixture sc %nested-valid-cell))}")
jibb-dev/lib/jibb.hoon+214
@@ -8807,6 +8807,220 @@
88078807 ?: ?=(%| -.rest) rest
88088808 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
88098809::
8810+:: Provisional declaration extraction only; this does not derive asks,
8811+:: validate imported types, or claim that an API module has checked.
8812++$ iapi-path [at=span name=term segments=(list pseg) full=term diffs=(list term) scry=(unit (list pseg))]
8813+++ api-path-mark
8814+ |= [sh=shape marks=(list term)]
8815+ ^- (unit term)
8816+ ?. ?=(%ref -.sh) ~
8817+ ?. ?=([@ ~] names.sh) ~
8818+ ?. (unique-value-name i.names.sh marks) ~
8819+ `i.names.sh
8820+::
8821+++ api-path-diffs
8822+ |= [shapes=(list shape) marks=(list term) used=(list term)]
8823+ ^- (unit (list term))
8824+ ?~ shapes `~
8825+ =/ n=(unit term) (api-path-mark i.shapes marks)
8826+ ?~ n ~
8827+ ?: (lien used |=(x=term =(x u.n))) ~
8828+ =/ rest=(unit (list term)) $(shapes t.shapes, used [u.n used])
8829+ ?~ rest ~
8830+ `[u.n u.rest]
8831+::
8832+++ api-path-payload
8833+ |= [sh=shape marks=(list term)]
8834+ ^- (unit [full=term diffs=(list term)])
8835+ =/ direct=(unit term) (api-path-mark sh marks)
8836+ ?^ direct `[u.direct ~]
8837+ ?. ?=(%apply -.sh) ~
8838+ ?. =(~[%facts] ref.sh) ~
8839+ ?~ args.sh ~
8840+ ?~ t.args.sh ~
8841+ =/ full=(unit term) (api-path-mark i.args.sh marks)
8842+ ?~ full ~
8843+ =/ diffs=(unit (list term)) (api-path-diffs t.args.sh marks ~[u.full])
8844+ ?~ diffs ~
8845+ `[u.full u.diffs]
8846+::
8847++$ iapi-parameter [name=term aura=@ta at=span]
8848+++ api-path-parameters
8849+ |= [segments=(list pseg) seen=(list term)]
8850+ ^- (unit (list iapi-parameter))
8851+ ?~ segments `~
8852+ ?: ?=(%knot -.i.segments) $(segments t.segments)
8853+ =/ seg=pseg i.segments
8854+ ?> ?=(%typed -.seg)
8855+ ?: =(0 aura.seg) ~
8856+ ?: (lien seen |=(n=term =(n name.seg))) ~
8857+ =/ rest=(unit (list iapi-parameter)) $(segments t.segments, seen [name.seg seen])
8858+ ?~ rest ~
8859+ `[[name.seg aura.seg at.seg] u.rest]
8860+::
8861+++ api-scry-parameters-compatible
8862+ |= [scry=(list iapi-parameter) watch=(list iapi-parameter)]
8863+ ^- ?
8864+ ?~ scry &
8865+ ?. (lien watch |=(p=iapi-parameter &(=(name.p name.i.scry) =(aura.p aura.i.scry)))) |
8866+ $(scry t.scry)
8867+::
8868+++ api-path-one
8869+ |= [sh=shape marks=(list term)]
8870+ ^- (unit iapi-path)
8871+ ?. ?=(%cell -.sh) ~
8872+ =/ fs=(list field) fields.sh
8873+ ?~ fs ~
8874+ ?~ t.fs ~
8875+ ?~ t.t.fs ~
8876+ ?: (gth (lent fs) 4) ~
8877+ ?. ?=(%bare -.i.fs) ~
8878+ =/ tag=shape shape.i.fs
8879+ ?. ?=(%const -.tag) ~
8880+ ?. =(%term form.lit.tag) ~
8881+ =/ name=term val.lit.tag
8882+ ?. (jibb-face-name name) ~
8883+ ?. ?=(%bare -.i.t.fs) ~
8884+ =/ path-shape=shape shape.i.t.fs
8885+ ?. ?=(%path -.path-shape) ~
8886+ ?. ?=(%bare -.i.t.t.fs) ~
8887+ =/ payload=(unit [full=term diffs=(list term)]) (api-path-payload shape.i.t.t.fs marks)
8888+ ?~ payload ~
8889+ =/ scry=(unit (unit (list pseg)))
8890+ ?~ t.t.t.fs `~
8891+ =/ entry=field i.t.t.t.fs
8892+ ?. ?=(%face -.entry) ~
8893+ ?. =(%scry name.entry) ~
8894+ ?. ?=(%path -.shape.entry) ~
8895+ ``segs.shape.entry
8896+ ?~ scry ~
8897+ =/ params=(unit (list iapi-parameter)) (api-path-parameters segs.path-shape ~)
8898+ ?~ params ~
8899+ ?^ u.scry
8900+ =/ scry-params=(unit (list iapi-parameter)) (api-path-parameters u.u.scry ~)
8901+ ?~ scry-params ~
8902+ ?. (api-scry-parameters-compatible u.scry-params u.params) ~
8903+ `[at.sh name segs.path-shape full.u.payload diffs.u.payload u.scry]
8904+ `[at.sh name segs.path-shape full.u.payload diffs.u.payload u.scry]
8905+::
8906+++ api-path-many
8907+ |= [shapes=(list shape) marks=(list term) seen=(list term)]
8908+ ^- (unit (list iapi-path))
8909+ ?~ shapes `~
8910+ =/ one=(unit iapi-path) (api-path-one i.shapes marks)
8911+ ?~ one ~
8912+ ?: (lien seen |=(n=term =(n name.u.one))) ~
8913+ =/ rest=(unit (list iapi-path)) $(shapes t.shapes, seen [name.u.one seen])
8914+ ?~ rest ~
8915+ `[u.one u.rest]
8916+::
8917+++ api-path-declaration
8918+ |= [sh=shape marks=(list term)]
8919+ ^- (unit (list iapi-path))
8920+ ?: ?=(%union -.sh) (api-path-many cases.sh marks ~)
8921+ (api-path-many ~[sh] marks ~)
8922+::
8923+:: Derived gates share the value namespace. /% marks name molds; /- and
8924+:: /= also introduce faces that cannot be shadowed by a derived value.
8925+++ api-import-faces
8926+ |= imports=(list import)
8927+ ^- (list term)
8928+ ?~ imports ~
8929+ ?- -.i.imports
8930+ %mark $(imports t.imports)
8931+ %sur [name.i.imports $(imports t.imports)]
8932+ %jibb [face.i.imports $(imports t.imports)]
8933+ ==
8934+::
8935+++ api-derived-names-valid
8936+ |= [paths=(list iapi-path) poke-names=(list term) mod=module prelude-values=(list term)]
8937+ ^- ?
8938+ =/ path-names=(list term) (turn paths |=(p=iapi-path name.p))
8939+ =/ derived=(list term) (weld path-names poke-names)
8940+ =/ outer=(list term) (weld prelude-values (weld (global-value-names defs.mod) (api-import-faces imports.mod)))
8941+ (levy derived |=(n=term &((unique-value-name n derived) !(lien outer |=(x=term =(n x))))))
8942+::
8943+:: Analysis only. Successful external entries must be unchanged results
8944+:: produced for the declared marks; no request interface is produced.
8945++$ iapi-mark-type [name=term typ=itype]
8946++$ iapi-path-typed [path=iapi-path full=itype diffs=(list iapi-mark-type)]
8947+++ api-diff-types
8948+ |= [names=(list term) externals=imark-externals declared=(list term)]
8949+ ^- (unit (list iapi-mark-type))
8950+ ?~ names `~
8951+ =/ typ=(unit itype) (find-imported-mark i.names externals declared)
8952+ ?~ typ ~
8953+ =/ tail=(unit (list iapi-mark-type)) $(names t.names)
8954+ ?~ tail ~
8955+ `[[i.names u.typ] u.tail]
8956+::
8957+++ api-path-types
8958+ |= [paths=(list iapi-path) externals=imark-externals declared=(list term)]
8959+ ^- (unit (list iapi-path-typed))
8960+ ?~ paths `~
8961+ =/ full=(unit itype) (find-imported-mark full.i.paths externals declared)
8962+ ?~ full ~
8963+ =/ diffs=(unit (list iapi-mark-type)) (api-diff-types diffs.i.paths externals declared)
8964+ ?~ diffs ~
8965+ =/ tail=(unit (list iapi-path-typed)) $(paths t.paths)
8966+ ?~ tail ~
8967+ `[[i.paths u.full u.diffs] u.tail]
8968+::
8969+++ api-poke-mark-names
8970+ |= [pokes=(list def) declared=(list term)]
8971+ ^- (unit (list term))
8972+ ?~ pokes `~
8973+ ?^ t.pokes ~
8974+ =/ d=def i.pokes
8975+ ?. ?=(%mold -.d) ~
8976+ =/ sh=shape shape.d
8977+ ?: ?=(%union -.sh) (api-path-diffs cases.sh declared ~)
8978+ =/ name=(unit term) (api-path-mark sh declared)
8979+ ?~ name ~
8980+ `~[u.name]
8981+::
8982+++ api-path-analysis
8983+ |= [mod=module externals=imark-externals prelude-values=(list term) prelude-molds=(list term)]
8984+ ^- (unit (list iapi-path-typed))
8985+ =/ ds=(list def) defs.mod
8986+ =/ declarations=(list def)
8987+ (skim ds |=(d=def &(?=(%mold -.d) =(%paths name.d))))
8988+ ?. ?=([* ~] declarations) ~
8989+ =/ pokes=(list def)
8990+ (skim ds |=(d=def &(?=(%mold -.d) =(%poke name.d))))
8991+ ?: (gth (lent pokes) 1) ~
8992+ =/ ordinary=(list def)
8993+ (skim ds |=(d=def !&(?=(%mold -.d) |(=(%paths name.d) =(%poke name.d)))))
8994+ ?. (module-scope-valid mod(defs ordinary) prelude-values prelude-molds) ~
8995+ =/ declared=(list term) (collect-mark-imports imports.mod)
8996+ =/ poke-names=(unit (list term)) (api-poke-mark-names pokes declared)
8997+ ?~ poke-names ~
8998+ =/ decl=def i.declarations
8999+ ?> ?=(%mold -.decl)
9000+ =/ paths=(unit (list iapi-path)) (api-path-declaration shape.decl declared)
9001+ ?~ paths ~
9002+ ?. (api-derived-names-valid u.paths u.poke-names mod prelude-values) ~
9003+ (api-path-types u.paths externals declared)
9004+::
9005+:: Source/graph entry for path analysis only. The returned paths retain
9006+:: reader-derived mark types and import resolution has checked reachable
9007+:: Jibb dependencies. This is not an API interface or a module check.
9008+++ api-path-analysis-source
9009+ |= [file=path src=@t externals=iexternals marks=imark-externals modules=jbundle prepared=(unit iprelude)]
9010+ ^- (each (list iapi-path-typed) @t)
9011+ ?. ?=([%ui %api @ %jibb ~] file) [%| 'API path analysis requires /ui/api/<agent>.jibb']
9012+ ?~ prepared [%| 'API path analysis needs the prepared prelude']
9013+ =/ parsed (parse file src)
9014+ ?: ?=(%| -.parsed) [%| 'API path source does not parse']
9015+ =/ prelude=(unit ifile) `iface.u.prepared
9016+ =/ deps=jimports-result
9017+ (resolve-jibb-imports imports.p.parsed externals marks modules ~[file] values.u.prepared molds.u.prepared ~ prelude)
9018+ ?: ?=(%| -.deps) [%| p.deps]
9019+ =/ paths=(unit (list iapi-path-typed))
9020+ (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared)
9021+ ?~ paths [%| 'API path declaration needs unsupported analysis']
9022+ [%& u.paths]
9023+::
88109024++ api-mark-exports
88119025 |= [marks=(list term) all=(list term) externals=imark-externals]
88129026 ^- imold-types
jibb-dev/lib/jibb/prelude.jibb+40−37
@@ -2,6 +2,7 @@
22+$ poke poke.internal
33
44:: Initial prelude functions. The rest of the inventory is still to come.
5+
56++ same |= x=A x
67
78++ head |= p=[A B]
@@ -143,9 +144,10 @@
143144 (reverse-into xs ~)
144145
145146++ drop |= maybe=(unit A)
146− ?- maybe
147− ~ ~
148− [~ value] [value ~]
147+ ^- (list A)
148+ ?- maybe
149+ ~ ~
150+ [~ value] [value ~]
149151
150152++ bind |= args=[(unit A) $-(A B)]
151153 ?- args
@@ -193,23 +195,23 @@
193195
194196++ skim |= args=[(list A) $-(A ?)]
195197 ?- args
196− [xs predicate]
197− ?- xs
198− ~ ~
199− [item rest]
200− ?- (predicate item)
201− %.y [item (skim rest predicate)]
202− %.n (skim rest predicate)
198+ [xs predicate] ^- (list A)
199+ ?- xs
200+ ~ ~
201+ [item rest]
202+ ?- (predicate item)
203+ %.y [item (skim rest predicate)]
204+ %.n (skim rest predicate)
203205
204206++ skip |= args=[(list A) $-(A ?)]
205207 ?- args
206− [xs predicate]
207− ?- xs
208− ~ ~
209− [item rest]
210− ?- (predicate item)
211− %.y (skip rest predicate)
212− %.n [item (skip rest predicate)]
208+ [xs predicate] ^- (list A)
209+ ?- xs
210+ ~ ~
211+ [item rest]
212+ ?- (predicate item)
213+ %.y (skip rest predicate)
214+ %.n [item (skip rest predicate)]
213215
214216++ levy |= args=[(list A) $-(A ?)]
215217 ?- args
@@ -254,31 +256,32 @@
254256
255257++ murn |= args=[(list A) $-(A (unit B))]
256258 ?- args
257− [xs f]
258− ?- xs
259− ~ ~
260− [item rest]
261− ?- (f item)
262− ~ (murn rest f)
263− [~ value] [value (murn rest f)]
259+ [xs f] ^- (list B)
260+ ?- xs
261+ ~ ~
262+ [item rest]
263+ ?- (f item)
264+ ~ (murn rest f)
265+ [~ value] [value (murn rest f)]
264266
265267++ join |= args=[A (list A)]
266268 ?- args
267− [separator xs]
268− ?- xs
269− ~ ~
270− [item rest]
271− ?- rest
272− ~ [item ~]
273− [next more] [item [separator (join separator rest)]]
269+ [separator xs] ^- (list A)
270+ ?- xs
271+ ~ ~
272+ [item rest]
273+ ?- rest
274+ ~ [item ~]
275+ [next more] [item [separator (join separator rest)]]
274276
275277++ snip |= xs=(list A)
276− ?- xs
277− ~ ~
278− [item rest]
279− ?- rest
280− ~ ~
281− [next more] [item (snip rest)]
278+ ^- (list A)
279+ ?- xs
280+ ~ ~
281+ [item rest]
282+ ?- rest
283+ ~ ~
284+ [next more] [item (snip rest)]
282285
283286++ rear |= xs=(list A)
284287 ?- xs
tests/clay-fixtures/mark-update-import-expected.txtnew file+1
@@ -0,0 +1 @@
1+"(union [added item=[id=@ud [done=(union @f:0 @f:1) text=@t]]] [toggled id=@ud])"
tests/clay-fixtures/mark-update-import.txtnew file+9
@@ -0,0 +1,9 @@
1+=/ m (strand ,vase)
2+;< =bowl:spider bind:m get-bowl
3+=/ now=@da now.bowl
4+=/ mark=vase .^(vase %ca /[(scot %p our.bowl)]/my-app/[(scot %da now)]/mar/todo-update/hoon)
5+=/ reader=vase .^(vase %ca /[(scot %p our.bowl)]/my-app/[(scot %da now)]/lib/jibb-import/hoon)
6+=/ read-gate=vase (slap reader (ream 'read-mark'))
7+=/ got=vase (slym read-gate [%todo-update -.mark])
8+=/ show-gate=vase (slap reader (ream 'show-result'))
9+(pure:m (slym show-gate +.got))
tests/golden/prelude-unit-list-transforms/source.jibb+40−37
@@ -2,6 +2,7 @@
22+$ poke poke.internal
33
44:: Initial prelude functions. The rest of the inventory is still to come.
5+
56++ same |= x=A x
67
78++ head |= p=[A B]
@@ -143,9 +144,10 @@
143144 (reverse-into xs ~)
144145
145146++ drop |= maybe=(unit A)
146− ?- maybe
147− ~ ~
148− [~ value] [value ~]
147+ ^- (list A)
148+ ?- maybe
149+ ~ ~
150+ [~ value] [value ~]
149151
150152++ bind |= args=[(unit A) $-(A B)]
151153 ?- args
@@ -193,23 +195,23 @@
193195
194196++ skim |= args=[(list A) $-(A ?)]
195197 ?- args
196− [xs predicate]
197− ?- xs
198− ~ ~
199− [item rest]
200− ?- (predicate item)
201− %.y [item (skim rest predicate)]
202− %.n (skim rest predicate)
198+ [xs predicate] ^- (list A)
199+ ?- xs
200+ ~ ~
201+ [item rest]
202+ ?- (predicate item)
203+ %.y [item (skim rest predicate)]
204+ %.n (skim rest predicate)
203205
204206++ skip |= args=[(list A) $-(A ?)]
205207 ?- args
206− [xs predicate]
207− ?- xs
208− ~ ~
209− [item rest]
210− ?- (predicate item)
211− %.y (skip rest predicate)
212− %.n [item (skip rest predicate)]
208+ [xs predicate] ^- (list A)
209+ ?- xs
210+ ~ ~
211+ [item rest]
212+ ?- (predicate item)
213+ %.y (skip rest predicate)
214+ %.n [item (skip rest predicate)]
213215
214216++ levy |= args=[(list A) $-(A ?)]
215217 ?- args
@@ -254,31 +256,32 @@
254256
255257++ murn |= args=[(list A) $-(A (unit B))]
256258 ?- args
257− [xs f]
258− ?- xs
259− ~ ~
260− [item rest]
261− ?- (f item)
262− ~ (murn rest f)
263− [~ value] [value (murn rest f)]
259+ [xs f] ^- (list B)
260+ ?- xs
261+ ~ ~
262+ [item rest]
263+ ?- (f item)
264+ ~ (murn rest f)
265+ [~ value] [value (murn rest f)]
264266
265267++ join |= args=[A (list A)]
266268 ?- args
267− [separator xs]
268− ?- xs
269− ~ ~
270− [item rest]
271− ?- rest
272− ~ [item ~]
273− [next more] [item [separator (join separator rest)]]
269+ [separator xs] ^- (list A)
270+ ?- xs
271+ ~ ~
272+ [item rest]
273+ ?- rest
274+ ~ [item ~]
275+ [next more] [item [separator (join separator rest)]]
274276
275277++ snip |= xs=(list A)
276− ?- xs
277− ~ ~
278− [item rest]
279− ?- rest
280− ~ ~
281− [next more] [item (snip rest)]
278+ ^- (list A)
279+ ?- xs
280+ ~ ~
281+ [item rest]
282+ ?- rest
283+ ~ ~
284+ [next more] [item (snip rest)]
282285
283286++ rear |= xs=(list A)
284287 ?- xs
tests/golden/prelude-unit-list-transforms/tokens.txt+1787−1753
@@ -10,1797 +10,1831 @@
10102:1 glyph +$
11112:4 name poke
12122:9 wing poke.internal
13−5:1 NEWLINE
14−5:1 glyph ++
15−5:4 name same
16−5:9 glyph |=
17−5:12 name x
18−5:13 tight glyph =
19−5:14 tight tvar A
20−5:16 name x
21−7:1 NEWLINE
22−7:1 glyph ++
23−7:4 name head
24−7:9 glyph |=
25−7:12 name p
26−7:13 tight glyph =
27−7:14 tight glyph [
28−7:15 tight tvar A
29−7:17 tvar B
30−7:18 tight glyph ]
31−8:3 INDENT
32−8:3 glyph ?-
33−8:6 name p
34−9:5 INDENT
35−9:5 glyph [
36−9:6 tight name a
37−9:8 name b
38−9:9 tight glyph ]
39−9:11 name a
40−11:1 DEDENT
41−11:1 DEDENT
42−11:1 NEWLINE
43−11:1 glyph ++
44−11:4 name tail
45−11:9 glyph |=
46−11:12 name p
47−11:13 tight glyph =
48−11:14 tight glyph [
49−11:15 tight tvar A
50−11:17 tvar B
51−11:18 tight glyph ]
52−12:3 INDENT
53−12:3 glyph ?-
54−12:6 name p
55−13:5 INDENT
56−13:5 glyph [
57−13:6 tight name a
58−13:8 name b
59−13:9 tight glyph ]
60−13:11 name b
61−15:1 DEDENT
62−15:1 DEDENT
63−15:1 NEWLINE
64−15:1 glyph ++
65−15:4 name not
66−15:8 glyph |=
67−15:11 name b
68−15:12 tight glyph =
69−15:13 tight glyph ?
70−16:3 INDENT
71−16:3 glyph ?-
72−16:6 name b
73−17:5 INDENT
74−17:5 lit %.y
75−17:9 lit %.n
76−18:5 NEWLINE
77−18:5 lit %.n
78−18:9 lit %.y
79−20:1 DEDENT
80−20:1 DEDENT
81−20:1 NEWLINE
82−20:1 glyph +$
83−20:4 name list
84−20:9 glyph |$
85−20:12 glyph [
86−20:13 tight tvar A
87−20:14 tight glyph ]
88−21:3 INDENT
89−21:3 lit ~
90−22:3 NEWLINE
91−22:3 glyph [
92−22:4 tight name i
93−22:5 tight glyph =
94−22:6 tight tvar A
95−22:8 name t
96−22:9 tight glyph =
97−22:10 tight glyph (
98−22:11 tight name list
99−22:16 tvar A
100−22:17 tight glyph )
101−22:18 tight glyph ]
102−24:1 DEDENT
103−24:1 NEWLINE
104−24:1 glyph +$
105−24:4 name unit
106−24:9 glyph |$
107−24:12 glyph [
108−24:13 tight tvar A
109−24:14 tight glyph ]
110−25:3 INDENT
111−25:3 lit ~
112−26:3 NEWLINE
113−26:3 glyph [
114−26:4 tight lit ~
115−26:6 name u
116−26:7 tight glyph =
117−26:8 tight tvar A
118−26:9 tight glyph ]
119−28:1 DEDENT
120−28:1 NEWLINE
121−28:1 glyph ++
122−28:4 name fall
123−28:9 glyph |=
124−28:12 name args
125−28:16 tight glyph =
126−28:17 tight glyph [
127−28:18 tight glyph (
128−28:19 tight name unit
129−28:24 tvar A
130−28:25 tight glyph )
131−28:27 tvar A
132−28:28 tight glyph ]
133−29:3 INDENT
134−29:3 glyph ?-
135−29:6 name args
136−30:5 INDENT
137−30:5 glyph [
138−30:6 tight name maybe
139−30:12 name fallback
140−30:20 tight glyph ]
141−31:7 INDENT
142−31:7 glyph ?-
143−31:10 name maybe
144−32:9 INDENT
145−32:9 lit ~
146−32:11 name fallback
147−33:9 NEWLINE
148−33:9 glyph [
149−33:10 tight lit ~
150−33:12 name value
151−33:17 tight glyph ]
152−33:19 name value
153−35:1 DEDENT
154−35:1 DEDENT
155−35:1 DEDENT
156−35:1 DEDENT
157−35:1 NEWLINE
158−35:1 glyph ++
159−35:4 name need
160−35:9 glyph |=
161−35:12 name maybe
162−35:17 tight glyph =
163−35:18 tight glyph (
164−35:19 tight name unit
165−35:24 tvar A
166−35:25 tight glyph )
167−36:3 INDENT
168−36:3 glyph ?-
169−36:6 name maybe
170−37:5 INDENT
171−37:5 lit ~
172−37:7 glyph !!
173−38:5 NEWLINE
174−38:5 glyph [
175−38:6 tight lit ~
176−38:8 name value
177−38:13 tight glyph ]
178−38:15 name value
179−40:1 DEDENT
180−40:1 DEDENT
181−40:1 NEWLINE
182−40:1 glyph ++
183−40:4 name weld
184−40:9 glyph |=
185−40:12 name args
186−40:16 tight glyph =
187−40:17 tight glyph [
188−40:18 tight glyph (
189−40:19 tight name list
190−40:24 tvar A
191−40:25 tight glyph )
192−40:27 glyph (
193−40:28 tight name list
194−40:33 tvar A
195−40:34 tight glyph )
196−40:35 tight glyph ]
197−41:3 INDENT
198−41:3 glyph ?-
199−41:6 name args
200−42:5 INDENT
201−42:5 glyph [
202−42:6 tight name xs
203−42:9 name ys
204−42:11 tight glyph ]
205−43:7 INDENT
206−43:7 glyph ^-
207−43:10 glyph (
208−43:11 tight name list
209−43:16 tvar A
210−43:17 tight glyph )
211−44:9 INDENT
212−44:9 glyph ?-
213−44:12 name xs
214−45:11 INDENT
215−45:11 lit ~
216−45:13 name ys
217−46:11 NEWLINE
218−46:11 glyph [
219−46:12 tight name item
220−46:17 name rest
221−46:21 tight glyph ]
222−46:23 glyph [
223−46:24 tight name item
224−46:29 glyph (
225−46:30 tight name weld
226−46:35 name rest
227−46:40 name ys
228−46:42 tight glyph )
229−46:43 tight glyph ]
230−48:1 DEDENT
231−48:1 DEDENT
232−48:1 DEDENT
233−48:1 DEDENT
234−48:1 DEDENT
235−48:1 NEWLINE
236−48:1 glyph ++
237−48:4 name turn
238−48:9 glyph |=
239−48:12 name args
240−48:16 tight glyph =
241−48:17 tight glyph [
242−48:18 tight glyph (
243−48:19 tight name list
244−48:24 tvar A
245−48:25 tight glyph )
246−48:27 glyph $-(
247−48:30 tight tvar A
248−48:32 tvar B
249−48:33 tight glyph )
250−48:34 tight glyph ]
251−49:3 INDENT
252−49:3 glyph ?-
253−49:6 name args
254−50:5 INDENT
255−50:5 glyph [
256−50:6 tight name xs
257−50:9 name f
258−50:10 tight glyph ]
259−51:7 INDENT
260−51:7 glyph ^-
261−51:10 glyph (
262−51:11 tight name list
263−51:16 tvar B
264−51:17 tight glyph )
265−52:9 INDENT
266−52:9 glyph ?-
267−52:12 name xs
268−53:11 INDENT
269−53:11 lit ~
270−53:13 lit ~
271−54:11 NEWLINE
272−54:11 glyph [
273−54:12 tight name item
274−54:17 name rest
275−54:21 tight glyph ]
276−54:23 glyph [
277−54:24 tight glyph (
278−54:25 tight name f
279−54:27 name item
280−54:31 tight glyph )
281−54:33 glyph (
282−54:34 tight name turn
283−54:39 name rest
284−54:44 name f
285−54:45 tight glyph )
286−54:46 tight glyph ]
287−56:1 DEDENT
288−56:1 DEDENT
289−56:1 DEDENT
290−56:1 DEDENT
291−56:1 DEDENT
292−56:1 NEWLINE
293−56:1 glyph +$
294−56:4 name dime
295−56:9 glyph [
296−56:10 tight name p
297−56:11 tight glyph =
298−56:12 tight aura @ta
299−56:16 name q
300−56:17 tight glyph =
301−56:18 tight aura @
302−56:19 tight glyph ]
303−58:1 NEWLINE
304−58:1 glyph +$
305−58:4 name hair
306−58:9 glyph [
307−58:10 tight name p
308−58:11 tight glyph =
309−58:12 tight aura @ud
310−58:16 name q
311−58:17 tight glyph =
312−58:18 tight aura @ud
313−58:21 tight glyph ]
314−60:1 NEWLINE
315−60:1 glyph +$
316−60:4 name pint
317−60:9 glyph [
318−60:10 tight name p
319−60:11 tight glyph =
320−60:12 tight glyph [
321−60:13 tight name p
322−60:14 tight glyph =
323−60:15 tight aura @
324−60:17 name q
325−60:18 tight glyph =
326−60:19 tight aura @
327−60:20 tight glyph ]
328−60:22 name q
329−60:23 tight glyph =
330−60:24 tight glyph [
331−60:25 tight name p
332−60:26 tight glyph =
333−60:27 tight aura @
334−60:29 name q
335−60:30 tight glyph =
336−60:31 tight aura @
337−60:32 tight glyph ]
338−60:33 tight glyph ]
339−62:1 NEWLINE
340−62:1 glyph +$
341−62:4 name coin
342−63:3 INDENT
343−63:3 glyph [
344−63:4 tight lit %$
345−63:7 name p
346−63:8 tight glyph =
347−63:9 tight name dime
348−63:13 tight glyph ]
349−64:3 NEWLINE
13+6:1 NEWLINE
14+6:1 glyph ++
15+6:4 name same
16+6:9 glyph |=
17+6:12 name x
18+6:13 tight glyph =
19+6:14 tight tvar A
20+6:16 name x
21+8:1 NEWLINE
22+8:1 glyph ++
23+8:4 name head
24+8:9 glyph |=
25+8:12 name p
26+8:13 tight glyph =
27+8:14 tight glyph [
28+8:15 tight tvar A
29+8:17 tvar B
30+8:18 tight glyph ]
31+9:3 INDENT
32+9:3 glyph ?-
33+9:6 name p
34+10:5 INDENT
35+10:5 glyph [
36+10:6 tight name a
37+10:8 name b
38+10:9 tight glyph ]
39+10:11 name a
40+12:1 DEDENT
41+12:1 DEDENT
42+12:1 NEWLINE
43+12:1 glyph ++
44+12:4 name tail
45+12:9 glyph |=
46+12:12 name p
47+12:13 tight glyph =
48+12:14 tight glyph [
49+12:15 tight tvar A
50+12:17 tvar B
51+12:18 tight glyph ]
52+13:3 INDENT
53+13:3 glyph ?-
54+13:6 name p
55+14:5 INDENT
56+14:5 glyph [
57+14:6 tight name a
58+14:8 name b
59+14:9 tight glyph ]
60+14:11 name b
61+16:1 DEDENT
62+16:1 DEDENT
63+16:1 NEWLINE
64+16:1 glyph ++
65+16:4 name not
66+16:8 glyph |=
67+16:11 name b
68+16:12 tight glyph =
69+16:13 tight glyph ?
70+17:3 INDENT
71+17:3 glyph ?-
72+17:6 name b
73+18:5 INDENT
74+18:5 lit %.y
75+18:9 lit %.n
76+19:5 NEWLINE
77+19:5 lit %.n
78+19:9 lit %.y
79+21:1 DEDENT
80+21:1 DEDENT
81+21:1 NEWLINE
82+21:1 glyph +$
83+21:4 name list
84+21:9 glyph |$
85+21:12 glyph [
86+21:13 tight tvar A
87+21:14 tight glyph ]
88+22:3 INDENT
89+22:3 lit ~
90+23:3 NEWLINE
91+23:3 glyph [
92+23:4 tight name i
93+23:5 tight glyph =
94+23:6 tight tvar A
95+23:8 name t
96+23:9 tight glyph =
97+23:10 tight glyph (
98+23:11 tight name list
99+23:16 tvar A
100+23:17 tight glyph )
101+23:18 tight glyph ]
102+25:1 DEDENT
103+25:1 NEWLINE
104+25:1 glyph +$
105+25:4 name unit
106+25:9 glyph |$
107+25:12 glyph [
108+25:13 tight tvar A
109+25:14 tight glyph ]
110+26:3 INDENT
111+26:3 lit ~
112+27:3 NEWLINE
113+27:3 glyph [
114+27:4 tight lit ~
115+27:6 name u
116+27:7 tight glyph =
117+27:8 tight tvar A
118+27:9 tight glyph ]
119+29:1 DEDENT
120+29:1 NEWLINE
121+29:1 glyph ++
122+29:4 name fall
123+29:9 glyph |=
124+29:12 name args
125+29:16 tight glyph =
126+29:17 tight glyph [
127+29:18 tight glyph (
128+29:19 tight name unit
129+29:24 tvar A
130+29:25 tight glyph )
131+29:27 tvar A
132+29:28 tight glyph ]
133+30:3 INDENT
134+30:3 glyph ?-
135+30:6 name args
136+31:5 INDENT
137+31:5 glyph [
138+31:6 tight name maybe
139+31:12 name fallback
140+31:20 tight glyph ]
141+32:7 INDENT
142+32:7 glyph ?-
143+32:10 name maybe
144+33:9 INDENT
145+33:9 lit ~
146+33:11 name fallback
147+34:9 NEWLINE
148+34:9 glyph [
149+34:10 tight lit ~
150+34:12 name value
151+34:17 tight glyph ]
152+34:19 name value
153+36:1 DEDENT
154+36:1 DEDENT
155+36:1 DEDENT
156+36:1 DEDENT
157+36:1 NEWLINE
158+36:1 glyph ++
159+36:4 name need
160+36:9 glyph |=
161+36:12 name maybe
162+36:17 tight glyph =
163+36:18 tight glyph (
164+36:19 tight name unit
165+36:24 tvar A
166+36:25 tight glyph )
167+37:3 INDENT
168+37:3 glyph ?-
169+37:6 name maybe
170+38:5 INDENT
171+38:5 lit ~
172+38:7 glyph !!
173+39:5 NEWLINE
174+39:5 glyph [
175+39:6 tight lit ~
176+39:8 name value
177+39:13 tight glyph ]
178+39:15 name value
179+41:1 DEDENT
180+41:1 DEDENT
181+41:1 NEWLINE
182+41:1 glyph ++
183+41:4 name weld
184+41:9 glyph |=
185+41:12 name args
186+41:16 tight glyph =
187+41:17 tight glyph [
188+41:18 tight glyph (
189+41:19 tight name list
190+41:24 tvar A
191+41:25 tight glyph )
192+41:27 glyph (
193+41:28 tight name list
194+41:33 tvar A
195+41:34 tight glyph )
196+41:35 tight glyph ]
197+42:3 INDENT
198+42:3 glyph ?-
199+42:6 name args
200+43:5 INDENT
201+43:5 glyph [
202+43:6 tight name xs
203+43:9 name ys
204+43:11 tight glyph ]
205+44:7 INDENT
206+44:7 glyph ^-
207+44:10 glyph (
208+44:11 tight name list
209+44:16 tvar A
210+44:17 tight glyph )
211+45:9 INDENT
212+45:9 glyph ?-
213+45:12 name xs
214+46:11 INDENT
215+46:11 lit ~
216+46:13 name ys
217+47:11 NEWLINE
218+47:11 glyph [
219+47:12 tight name item
220+47:17 name rest
221+47:21 tight glyph ]
222+47:23 glyph [
223+47:24 tight name item
224+47:29 glyph (
225+47:30 tight name weld
226+47:35 name rest
227+47:40 name ys
228+47:42 tight glyph )
229+47:43 tight glyph ]
230+49:1 DEDENT
231+49:1 DEDENT
232+49:1 DEDENT
233+49:1 DEDENT
234+49:1 DEDENT
235+49:1 NEWLINE
236+49:1 glyph ++
237+49:4 name turn
238+49:9 glyph |=
239+49:12 name args
240+49:16 tight glyph =
241+49:17 tight glyph [
242+49:18 tight glyph (
243+49:19 tight name list
244+49:24 tvar A
245+49:25 tight glyph )
246+49:27 glyph $-(
247+49:30 tight tvar A
248+49:32 tvar B
249+49:33 tight glyph )
250+49:34 tight glyph ]
251+50:3 INDENT
252+50:3 glyph ?-
253+50:6 name args
254+51:5 INDENT
255+51:5 glyph [
256+51:6 tight name xs
257+51:9 name f
258+51:10 tight glyph ]
259+52:7 INDENT
260+52:7 glyph ^-
261+52:10 glyph (
262+52:11 tight name list
263+52:16 tvar B
264+52:17 tight glyph )
265+53:9 INDENT
266+53:9 glyph ?-
267+53:12 name xs
268+54:11 INDENT
269+54:11 lit ~
270+54:13 lit ~
271+55:11 NEWLINE
272+55:11 glyph [
273+55:12 tight name item
274+55:17 name rest
275+55:21 tight glyph ]
276+55:23 glyph [
277+55:24 tight glyph (
278+55:25 tight name f
279+55:27 name item
280+55:31 tight glyph )
281+55:33 glyph (
282+55:34 tight name turn
283+55:39 name rest
284+55:44 name f
285+55:45 tight glyph )
286+55:46 tight glyph ]
287+57:1 DEDENT
288+57:1 DEDENT
289+57:1 DEDENT
290+57:1 DEDENT
291+57:1 DEDENT
292+57:1 NEWLINE
293+57:1 glyph +$
294+57:4 name dime
295+57:9 glyph [
296+57:10 tight name p
297+57:11 tight glyph =
298+57:12 tight aura @ta
299+57:16 name q
300+57:17 tight glyph =
301+57:18 tight aura @
302+57:19 tight glyph ]
303+59:1 NEWLINE
304+59:1 glyph +$
305+59:4 name hair
306+59:9 glyph [
307+59:10 tight name p
308+59:11 tight glyph =
309+59:12 tight aura @ud
310+59:16 name q
311+59:17 tight glyph =
312+59:18 tight aura @ud
313+59:21 tight glyph ]
314+61:1 NEWLINE
315+61:1 glyph +$
316+61:4 name pint
317+61:9 glyph [
318+61:10 tight name p
319+61:11 tight glyph =
320+61:12 tight glyph [
321+61:13 tight name p
322+61:14 tight glyph =
323+61:15 tight aura @
324+61:17 name q
325+61:18 tight glyph =
326+61:19 tight aura @
327+61:20 tight glyph ]
328+61:22 name q
329+61:23 tight glyph =
330+61:24 tight glyph [
331+61:25 tight name p
332+61:26 tight glyph =
333+61:27 tight aura @
334+61:29 name q
335+61:30 tight glyph =
336+61:31 tight aura @
337+61:32 tight glyph ]
338+61:33 tight glyph ]
339+63:1 NEWLINE
340+63:1 glyph +$
341+63:4 name coin
342+64:3 INDENT
35034364:3 glyph [
351−64:4 tight lit %blob
352−64:10 name p
353−64:11 tight glyph =
354−64:12 tight glyph *
344+64:4 tight lit %$
345+64:7 name p
346+64:8 tight glyph =
347+64:9 tight name dime
35534864:13 tight glyph ]
35634965:3 NEWLINE
35735065:3 glyph [
358−65:4 tight lit %many
351+65:4 tight lit %blob
35935265:10 name p
36035365:11 tight glyph =
361−65:12 tight glyph (
362−65:13 tight name list
363−65:18 name coin
364−65:22 tight glyph )
365−65:23 tight glyph ]
366−67:1 DEDENT
367−67:1 NEWLINE
368−67:1 glyph +$
369−67:4 name pair
370−67:9 glyph |$
371−67:12 glyph [
372−67:13 tight tvar A
373−67:15 tvar B
374−67:16 tight glyph ]
375−67:18 glyph [
376−67:19 tight name p
377−67:20 tight glyph =
378−67:21 tight tvar A
379−67:23 name q
380−67:24 tight glyph =
381−67:25 tight tvar B
382−67:26 tight glyph ]
383−69:1 NEWLINE
384−69:1 glyph +$
385−69:4 name trel
386−69:9 glyph |$
387−69:12 glyph [
388−69:13 tight tvar A
389−69:15 tvar B
390−69:17 tvar C
391−69:18 tight glyph ]
392−69:20 glyph [
393−69:21 tight name p
394−69:22 tight glyph =
395−69:23 tight tvar A
396−69:25 name q
397−69:26 tight glyph =
398−69:27 tight tvar B
399−69:29 name r
400−69:30 tight glyph =
401−69:31 tight tvar C
402−69:32 tight glyph ]
403−71:1 NEWLINE
404−71:1 glyph +$
405−71:4 name qual
406−71:9 glyph |$
407−71:12 glyph [
408−71:13 tight tvar A
409−71:15 tvar B
410−71:17 tvar C
411−71:19 tvar D
412−71:20 tight glyph ]
413−71:22 glyph [
414−71:23 tight name p
415−71:24 tight glyph =
416−71:25 tight tvar A
417−71:27 name q
418−71:28 tight glyph =
419−71:29 tight tvar B
420−71:31 name r
421−71:32 tight glyph =
422−71:33 tight tvar C
423−71:35 name s
424−71:36 tight glyph =
425−71:37 tight tvar D
426−71:38 tight glyph ]
427−73:1 NEWLINE
428−73:1 glyph +$
429−73:4 name cord
430−73:9 aura @t
431−75:1 NEWLINE
432−75:1 glyph +$
433−75:4 name knot
434−75:9 aura @ta
435−77:1 NEWLINE
436−77:1 glyph +$
437−77:4 name tape
438−77:9 glyph (
439−77:10 tight name list
440−77:15 aura @tD
441−77:18 tight glyph )
442−79:1 NEWLINE
443−79:1 glyph +$
444−79:4 name path
445−79:9 glyph (
446−79:10 tight name list
447−79:15 name knot
448−79:19 tight glyph )
449−81:1 NEWLINE
450−81:1 glyph +$
451−81:4 name tank
452−82:3 INDENT
453−82:3 name cord
454−83:3 NEWLINE
455−83:3 glyph [
456−83:4 tight lit %leaf
457−83:10 name p
458−83:11 tight glyph =
459−83:12 tight name tape
460−83:16 tight glyph ]
354+65:12 tight glyph *
355+65:13 tight glyph ]
356+66:3 NEWLINE
357+66:3 glyph [
358+66:4 tight lit %many
359+66:10 name p
360+66:11 tight glyph =
361+66:12 tight glyph (
362+66:13 tight name list
363+66:18 name coin
364+66:22 tight glyph )
365+66:23 tight glyph ]
366+68:1 DEDENT
367+68:1 NEWLINE
368+68:1 glyph +$
369+68:4 name pair
370+68:9 glyph |$
371+68:12 glyph [
372+68:13 tight tvar A
373+68:15 tvar B
374+68:16 tight glyph ]
375+68:18 glyph [
376+68:19 tight name p
377+68:20 tight glyph =
378+68:21 tight tvar A
379+68:23 name q
380+68:24 tight glyph =
381+68:25 tight tvar B
382+68:26 tight glyph ]
383+70:1 NEWLINE
384+70:1 glyph +$
385+70:4 name trel
386+70:9 glyph |$
387+70:12 glyph [
388+70:13 tight tvar A
389+70:15 tvar B
390+70:17 tvar C
391+70:18 tight glyph ]
392+70:20 glyph [
393+70:21 tight name p
394+70:22 tight glyph =
395+70:23 tight tvar A
396+70:25 name q
397+70:26 tight glyph =
398+70:27 tight tvar B
399+70:29 name r
400+70:30 tight glyph =
401+70:31 tight tvar C
402+70:32 tight glyph ]
403+72:1 NEWLINE
404+72:1 glyph +$
405+72:4 name qual
406+72:9 glyph |$
407+72:12 glyph [
408+72:13 tight tvar A
409+72:15 tvar B
410+72:17 tvar C
411+72:19 tvar D
412+72:20 tight glyph ]
413+72:22 glyph [
414+72:23 tight name p
415+72:24 tight glyph =
416+72:25 tight tvar A
417+72:27 name q
418+72:28 tight glyph =
419+72:29 tight tvar B
420+72:31 name r
421+72:32 tight glyph =
422+72:33 tight tvar C
423+72:35 name s
424+72:36 tight glyph =
425+72:37 tight tvar D
426+72:38 tight glyph ]
427+74:1 NEWLINE
428+74:1 glyph +$
429+74:4 name cord
430+74:9 aura @t
431+76:1 NEWLINE
432+76:1 glyph +$
433+76:4 name knot
434+76:9 aura @ta
435+78:1 NEWLINE
436+78:1 glyph +$
437+78:4 name tape
438+78:9 glyph (
439+78:10 tight name list
440+78:15 aura @tD
441+78:18 tight glyph )
442+80:1 NEWLINE
443+80:1 glyph +$
444+80:4 name path
445+80:9 glyph (
446+80:10 tight name list
447+80:15 name knot
448+80:19 tight glyph )
449+82:1 NEWLINE
450+82:1 glyph +$
451+82:4 name tank
452+83:3 INDENT
453+83:3 name cord
46145484:3 NEWLINE
46245584:3 glyph [
463−84:4 tight lit %palm
456+84:4 tight lit %leaf
46445784:10 name p
46545884:11 tight glyph =
466−84:12 tight glyph (
467−84:13 tight name qual
468−84:18 name tape
469−84:23 name tape
470−84:28 name tape
471−84:33 name tape
472−84:37 tight glyph )
473−84:39 name q
474−84:40 tight glyph =
475−84:41 tight glyph (
476−84:42 tight name list
477−84:47 name tank
478−84:51 tight glyph )
479−84:52 tight glyph ]
459+84:12 tight name tape
460+84:16 tight glyph ]
48046185:3 NEWLINE
48146285:3 glyph [
482−85:4 tight lit %rose
463+85:4 tight lit %palm
48346485:10 name p
48446585:11 tight glyph =
48546685:12 tight glyph (
486−85:13 tight name trel
467+85:13 tight name qual
48746885:18 name tape
48846985:23 name tape
48947085:28 name tape
490−85:32 tight glyph )
491−85:34 name q
492−85:35 tight glyph =
493−85:36 tight glyph (
494−85:37 tight name list
495−85:42 name tank
496−85:46 tight glyph )
497−85:47 tight glyph ]
498−87:1 DEDENT
499−87:1 NEWLINE
500−87:1 glyph +$
501−87:4 name nail
502−87:9 glyph [
503−87:10 tight name p
504−87:11 tight glyph =
505−87:12 tight name hair
506−87:17 name q
507−87:18 tight glyph =
508−87:19 tight name tape
509−87:23 tight glyph ]
510−89:1 NEWLINE
511−89:1 glyph +$
512−89:4 name edge
513−89:9 glyph [
514−89:10 tight name p
515−89:11 tight glyph =
516−89:12 tight name hair
517−89:17 name q
518−89:18 tight glyph =
519−89:19 tight glyph (
520−89:20 tight name unit
521−89:25 glyph [
522−89:26 tight name p
523−89:27 tight glyph =
524−89:28 tight glyph *
525−89:30 name q
526−89:31 tight glyph =
527−89:32 tight name nail
528−89:36 tight glyph ]
529−89:37 tight glyph )
530−89:38 tight glyph ]
531−91:1 NEWLINE
532−91:1 glyph +$
533−91:4 name rule
534−91:9 glyph $-(
535−91:12 tight name nail
536−91:17 name edge
537−91:21 tight glyph )
538−93:1 NEWLINE
539−93:1 glyph +$
540−93:4 name spot
541−93:9 glyph [
542−93:10 tight name p
543−93:11 tight glyph =
544−93:12 tight name path
545−93:17 name q
546−93:18 tight glyph =
547−93:19 tight name pint
548−93:23 tight glyph ]
549−95:1 NEWLINE
550−95:1 glyph +$
551−95:4 name toon
552−96:3 INDENT
553−96:3 glyph [
554−96:4 tight lit %0
555−96:7 name p
556−96:8 tight glyph =
557−96:9 tight glyph *
558−96:10 tight glyph ]
559−97:3 NEWLINE
471+85:33 name tape
472+85:37 tight glyph )
473+85:39 name q
474+85:40 tight glyph =
475+85:41 tight glyph (
476+85:42 tight name list
477+85:47 name tank
478+85:51 tight glyph )
479+85:52 tight glyph ]
480+86:3 NEWLINE
481+86:3 glyph [
482+86:4 tight lit %rose
483+86:10 name p
484+86:11 tight glyph =
485+86:12 tight glyph (
486+86:13 tight name trel
487+86:18 name tape
488+86:23 name tape
489+86:28 name tape
490+86:32 tight glyph )
491+86:34 name q
492+86:35 tight glyph =
493+86:36 tight glyph (
494+86:37 tight name list
495+86:42 name tank
496+86:46 tight glyph )
497+86:47 tight glyph ]
498+88:1 DEDENT
499+88:1 NEWLINE
500+88:1 glyph +$
501+88:4 name nail
502+88:9 glyph [
503+88:10 tight name p
504+88:11 tight glyph =
505+88:12 tight name hair
506+88:17 name q
507+88:18 tight glyph =
508+88:19 tight name tape
509+88:23 tight glyph ]
510+90:1 NEWLINE
511+90:1 glyph +$
512+90:4 name edge
513+90:9 glyph [
514+90:10 tight name p
515+90:11 tight glyph =
516+90:12 tight name hair
517+90:17 name q
518+90:18 tight glyph =
519+90:19 tight glyph (
520+90:20 tight name unit
521+90:25 glyph [
522+90:26 tight name p
523+90:27 tight glyph =
524+90:28 tight glyph *
525+90:30 name q
526+90:31 tight glyph =
527+90:32 tight name nail
528+90:36 tight glyph ]
529+90:37 tight glyph )
530+90:38 tight glyph ]
531+92:1 NEWLINE
532+92:1 glyph +$
533+92:4 name rule
534+92:9 glyph $-(
535+92:12 tight name nail
536+92:17 name edge
537+92:21 tight glyph )
538+94:1 NEWLINE
539+94:1 glyph +$
540+94:4 name spot
541+94:9 glyph [
542+94:10 tight name p
543+94:11 tight glyph =
544+94:12 tight name path
545+94:17 name q
546+94:18 tight glyph =
547+94:19 tight name pint
548+94:23 tight glyph ]
549+96:1 NEWLINE
550+96:1 glyph +$
551+96:4 name toon
552+97:3 INDENT
56055397:3 glyph [
561−97:4 tight lit %1
554+97:4 tight lit %0
56255597:7 name p
56355697:8 tight glyph =
56455797:9 tight glyph *
56555897:10 tight glyph ]
56655998:3 NEWLINE
56756098:3 glyph [
568−98:4 tight lit %2
561+98:4 tight lit %1
56956298:7 name p
57056398:8 tight glyph =
571−98:9 tight glyph (
572−98:10 tight name list
573−98:15 name tank
574−98:19 tight glyph )
575−98:20 tight glyph ]
576−100:1 DEDENT
577−100:1 NEWLINE
578−100:1 glyph +$
579−100:4 name like
580−100:9 glyph |$
581−100:12 glyph [
582−100:13 tight tvar A
583−100:14 tight glyph ]
584−100:16 glyph [
585−100:17 tight name p
586−100:18 tight glyph =
587−100:19 tight name hair
588−100:24 name q
589−100:25 tight glyph =
590−100:26 tight glyph (
591−100:27 tight name unit
592−100:32 glyph [
593−100:33 tight name p
594−100:34 tight glyph =
595−100:35 tight tvar A
596−100:37 name q
597−100:38 tight glyph =
598−100:39 tight name nail
599−100:43 tight glyph ]
600−100:44 tight glyph )
601−100:45 tight glyph ]
602−102:1 NEWLINE
603−102:1 glyph ++
604−102:4 name wonk
605−102:9 glyph |=
606−102:12 name veq
607−102:15 tight glyph =
608−102:16 tight glyph (
609−102:17 tight name like
610−102:22 tvar A
611−102:23 tight glyph )
612−103:3 INDENT
613−103:3 glyph ?-
614−103:6 wing q.veq
615−104:5 INDENT
616−104:5 lit ~
617−104:7 glyph !!
618−105:5 NEWLINE
619−105:5 glyph [
620−105:6 tight lit ~
621−105:8 name product
622−105:15 tight glyph ]
623−105:17 wing p.product
624−107:1 DEDENT
625−107:1 DEDENT
626−107:1 NEWLINE
627−107:1 glyph +$
628−107:4 name lone
629−107:9 glyph |$
630−107:12 glyph [
631−107:13 tight tvar A
632−107:14 tight glyph ]
633−107:16 glyph [
634−107:17 tight name p
635−107:18 tight glyph =
636−107:19 tight tvar A
637−107:20 tight glyph ]
638−109:1 NEWLINE
639−109:1 glyph +$
640−109:4 name lest
641−109:9 glyph |$
642−109:12 glyph [
643−109:13 tight tvar A
644−109:14 tight glyph ]
645−109:16 glyph [
646−109:17 tight name i
647−109:18 tight glyph =
648−109:19 tight tvar A
649−109:21 name t
650−109:22 tight glyph =
651−109:23 tight glyph (
652−109:24 tight name list
653−109:29 tvar A
654−109:30 tight glyph )
655−109:31 tight glyph ]
656−111:1 NEWLINE
657−111:1 glyph +$
658−111:4 name pole
659−111:9 glyph |$
660−111:12 glyph [
661−111:13 tight tvar A
662−111:14 tight glyph ]
663−112:3 INDENT
664−112:3 lit ~
665−113:3 NEWLINE
666−113:3 glyph [
667−113:4 tight tvar A
668−113:6 glyph (
669−113:7 tight name pole
670−113:12 tvar A
671−113:13 tight glyph )
672−113:14 tight glyph ]
673−115:1 DEDENT
674−115:1 NEWLINE
675−115:1 glyph +$
676−115:4 name quip
677−115:9 glyph |$
678−115:12 glyph [
679−115:13 tight tvar A
680−115:15 tvar B
681−115:16 tight glyph ]
682−115:18 glyph [
683−115:19 tight glyph (
684−115:20 tight name list
685−115:25 tvar A
686−115:26 tight glyph )
687−115:28 tvar B
688−115:29 tight glyph ]
689−117:1 NEWLINE
690−117:1 glyph +$
691−117:4 name tree
692−117:9 glyph |$
693−117:12 glyph [
694−117:13 tight tvar A
695−117:14 tight glyph ]
696−118:3 INDENT
697−118:3 lit ~
698−119:3 NEWLINE
699−119:3 glyph [
700−119:4 tight name n
701−119:5 tight glyph =
702−119:6 tight tvar A
703−119:8 name l
704−119:9 tight glyph =
705−119:10 tight glyph (
706−119:11 tight name tree
707−119:16 tvar A
708−119:17 tight glyph )
709−119:19 name r
710−119:20 tight glyph =
711−119:21 tight glyph (
712−119:22 tight name tree
713−119:27 tvar A
714−119:28 tight glyph )
715−119:29 tight glyph ]
716−121:1 DEDENT
717−121:1 NEWLINE
718−121:1 glyph +$
719−121:4 name each
720−121:9 glyph |$
721−121:12 glyph [
722−121:13 tight tvar A
723−121:15 tvar B
724−121:16 tight glyph ]
725−122:3 INDENT
726−122:3 glyph [
727−122:4 tight lit %|
728−122:7 name p
729−122:8 tight glyph =
730−122:9 tight tvar B
731−122:10 tight glyph ]
732−123:3 NEWLINE
564+98:9 tight glyph *
565+98:10 tight glyph ]
566+99:3 NEWLINE
567+99:3 glyph [
568+99:4 tight lit %2
569+99:7 name p
570+99:8 tight glyph =
571+99:9 tight glyph (
572+99:10 tight name list
573+99:15 name tank
574+99:19 tight glyph )
575+99:20 tight glyph ]
576+101:1 DEDENT
577+101:1 NEWLINE
578+101:1 glyph +$
579+101:4 name like
580+101:9 glyph |$
581+101:12 glyph [
582+101:13 tight tvar A
583+101:14 tight glyph ]
584+101:16 glyph [
585+101:17 tight name p
586+101:18 tight glyph =
587+101:19 tight name hair
588+101:24 name q
589+101:25 tight glyph =
590+101:26 tight glyph (
591+101:27 tight name unit
592+101:32 glyph [
593+101:33 tight name p
594+101:34 tight glyph =
595+101:35 tight tvar A
596+101:37 name q
597+101:38 tight glyph =
598+101:39 tight name nail
599+101:43 tight glyph ]
600+101:44 tight glyph )
601+101:45 tight glyph ]
602+103:1 NEWLINE
603+103:1 glyph ++
604+103:4 name wonk
605+103:9 glyph |=
606+103:12 name veq
607+103:15 tight glyph =
608+103:16 tight glyph (
609+103:17 tight name like
610+103:22 tvar A
611+103:23 tight glyph )
612+104:3 INDENT
613+104:3 glyph ?-
614+104:6 wing q.veq
615+105:5 INDENT
616+105:5 lit ~
617+105:7 glyph !!
618+106:5 NEWLINE
619+106:5 glyph [
620+106:6 tight lit ~
621+106:8 name product
622+106:15 tight glyph ]
623+106:17 wing p.product
624+108:1 DEDENT
625+108:1 DEDENT
626+108:1 NEWLINE
627+108:1 glyph +$
628+108:4 name lone
629+108:9 glyph |$
630+108:12 glyph [
631+108:13 tight tvar A
632+108:14 tight glyph ]
633+108:16 glyph [
634+108:17 tight name p
635+108:18 tight glyph =
636+108:19 tight tvar A
637+108:20 tight glyph ]
638+110:1 NEWLINE
639+110:1 glyph +$
640+110:4 name lest
641+110:9 glyph |$
642+110:12 glyph [
643+110:13 tight tvar A
644+110:14 tight glyph ]
645+110:16 glyph [
646+110:17 tight name i
647+110:18 tight glyph =
648+110:19 tight tvar A
649+110:21 name t
650+110:22 tight glyph =
651+110:23 tight glyph (
652+110:24 tight name list
653+110:29 tvar A
654+110:30 tight glyph )
655+110:31 tight glyph ]
656+112:1 NEWLINE
657+112:1 glyph +$
658+112:4 name pole
659+112:9 glyph |$
660+112:12 glyph [
661+112:13 tight tvar A
662+112:14 tight glyph ]
663+113:3 INDENT
664+113:3 lit ~
665+114:3 NEWLINE
666+114:3 glyph [
667+114:4 tight tvar A
668+114:6 glyph (
669+114:7 tight name pole
670+114:12 tvar A
671+114:13 tight glyph )
672+114:14 tight glyph ]
673+116:1 DEDENT
674+116:1 NEWLINE
675+116:1 glyph +$
676+116:4 name quip
677+116:9 glyph |$
678+116:12 glyph [
679+116:13 tight tvar A
680+116:15 tvar B
681+116:16 tight glyph ]
682+116:18 glyph [
683+116:19 tight glyph (
684+116:20 tight name list
685+116:25 tvar A
686+116:26 tight glyph )
687+116:28 tvar B
688+116:29 tight glyph ]
689+118:1 NEWLINE
690+118:1 glyph +$
691+118:4 name tree
692+118:9 glyph |$
693+118:12 glyph [
694+118:13 tight tvar A
695+118:14 tight glyph ]
696+119:3 INDENT
697+119:3 lit ~
698+120:3 NEWLINE
699+120:3 glyph [
700+120:4 tight name n
701+120:5 tight glyph =
702+120:6 tight tvar A
703+120:8 name l
704+120:9 tight glyph =
705+120:10 tight glyph (
706+120:11 tight name tree
707+120:16 tvar A
708+120:17 tight glyph )
709+120:19 name r
710+120:20 tight glyph =
711+120:21 tight glyph (
712+120:22 tight name tree
713+120:27 tvar A
714+120:28 tight glyph )
715+120:29 tight glyph ]
716+122:1 DEDENT
717+122:1 NEWLINE
718+122:1 glyph +$
719+122:4 name each
720+122:9 glyph |$
721+122:12 glyph [
722+122:13 tight tvar A
723+122:15 tvar B
724+122:16 tight glyph ]
725+123:3 INDENT
733726123:3 glyph [
734−123:4 tight lit %&
727+123:4 tight lit %|
735728123:7 name p
736729123:8 tight glyph =
737−123:9 tight tvar A
730+123:9 tight tvar B
738731123:10 tight glyph ]
739−125:1 DEDENT
740−125:1 NEWLINE
741−125:1 glyph +$
742−125:4 name bloq
743−125:9 aura @
744−127:1 NEWLINE
745−127:1 glyph ++
746−127:4 name some
747−127:9 glyph |=
748−127:12 name item
749−127:16 tight glyph =
750−127:17 tight tvar A
751−127:19 glyph `
752−127:20 tight name item
753−129:1 NEWLINE
754−129:1 glyph ++
755−129:4 name lure
756−129:9 glyph |=
757−129:12 name item
758−129:16 tight glyph =
759−129:17 tight tvar A
760−130:3 INDENT
761−130:3 glyph ^-
762−130:6 glyph (
763−130:7 tight name list
764−130:12 tvar A
765−130:13 tight glyph )
766−130:15 glyph [
767−130:16 tight name item
768−130:21 lit ~
769−130:22 tight glyph ]
770−132:1 DEDENT
771−132:1 NEWLINE
772−132:1 glyph ++
773−132:4 name snoc
774−132:9 glyph |=
775−132:12 name args
776−132:16 tight glyph =
777−132:17 tight glyph [
778−132:18 tight glyph (
779−132:19 tight name list
780−132:24 tvar A
781−132:25 tight glyph )
782−132:27 tvar A
783−132:28 tight glyph ]
784−133:3 INDENT
785−133:3 glyph ?-
786−133:6 name args
787−134:5 INDENT
788−134:5 glyph [
789−134:6 tight name xs
790−134:9 name item
791−134:13 tight glyph ]
792−134:15 glyph (
793−134:16 tight name weld
794−134:21 name xs
795−134:24 glyph [
796−134:25 tight name item
797−134:30 lit ~
798−134:31 tight glyph ]
799−134:32 tight glyph )
800−136:1 DEDENT
801−136:1 DEDENT
802−136:1 NEWLINE
803−136:1 glyph ++
804−136:4 name flop
805−136:9 glyph |=
806−136:12 name xs
807−136:14 tight glyph =
808−136:15 tight glyph (
809−136:16 tight name list
810−136:21 tvar A
811−136:22 tight glyph )
812−137:3 INDENT
813−137:3 glyph ++
814−137:6 name reverse-into
815−137:19 glyph |=
816−137:22 name args
817−137:26 tight glyph =
818−137:27 tight glyph [
819−137:28 tight glyph (
820−137:29 tight name list
821−137:34 tvar A
822−137:35 tight glyph )
823−137:37 glyph (
824−137:38 tight name list
825−137:43 tvar A
826−137:44 tight glyph )
827−137:45 tight glyph ]
828−138:5 INDENT
829−138:5 glyph ?-
830−138:8 name args
831−139:7 INDENT
832−139:7 glyph [
833−139:8 tight name rest
834−139:13 name acc
835−139:16 tight glyph ]
836−140:9 INDENT
837−140:9 glyph ?-
838−140:12 name rest
839−141:11 INDENT
840−141:11 lit ~
841−141:13 name acc
842−142:11 NEWLINE
843−142:11 glyph [
844−142:12 tight name item
845−142:17 name more
846−142:21 tight glyph ]
847−142:23 glyph (
848−142:24 tight name reverse-into
849−142:37 name more
850−142:42 glyph [
851−142:43 tight name item
852−142:48 name acc
853−142:51 tight glyph ]
854−142:52 tight glyph )
855−143:3 DEDENT
856−143:3 DEDENT
857−143:3 DEDENT
858−143:3 DEDENT
859−143:3 NEWLINE
860−143:3 glyph (
861−143:4 tight name reverse-into
862−143:17 name xs
863−143:20 lit ~
864−143:21 tight glyph )
865−145:1 DEDENT
866−145:1 NEWLINE
867−145:1 glyph ++
868−145:4 name drop
869−145:9 glyph |=
870−145:12 name maybe
871−145:17 tight glyph =
872−145:18 tight glyph (
873−145:19 tight name unit
874−145:24 tvar A
875−145:25 tight glyph )
876−146:3 INDENT
877−146:3 glyph ?-
878−146:6 name maybe
879−147:5 INDENT
880−147:5 lit ~
881−147:7 lit ~
882−148:5 NEWLINE
883−148:5 glyph [
884−148:6 tight lit ~
885−148:8 name value
886−148:13 tight glyph ]
887−148:15 glyph [
888−148:16 tight name value
889−148:22 lit ~
890−148:23 tight glyph ]
891−150:1 DEDENT
892−150:1 DEDENT
893−150:1 NEWLINE
894−150:1 glyph ++
895−150:4 name bind
896−150:9 glyph |=
897−150:12 name args
898−150:16 tight glyph =
899−150:17 tight glyph [
900−150:18 tight glyph (
901−150:19 tight name unit
902−150:24 tvar A
903−150:25 tight glyph )
904−150:27 glyph $-(
905−150:30 tight tvar A
906−150:32 tvar B
907−150:33 tight glyph )
908−150:34 tight glyph ]
909−151:3 INDENT
910−151:3 glyph ?-
911−151:6 name args
912−152:5 INDENT
913−152:5 glyph [
914−152:6 tight name maybe
915−152:12 name f
916−152:13 tight glyph ]
917−152:15 glyph ^-
918−152:18 glyph (
732+124:3 NEWLINE
733+124:3 glyph [
734+124:4 tight lit %&
735+124:7 name p
736+124:8 tight glyph =
737+124:9 tight tvar A
738+124:10 tight glyph ]
739+126:1 DEDENT
740+126:1 NEWLINE
741+126:1 glyph +$
742+126:4 name bloq
743+126:9 aura @
744+128:1 NEWLINE
745+128:1 glyph ++
746+128:4 name some
747+128:9 glyph |=
748+128:12 name item
749+128:16 tight glyph =
750+128:17 tight tvar A
751+128:19 glyph `
752+128:20 tight name item
753+130:1 NEWLINE
754+130:1 glyph ++
755+130:4 name lure
756+130:9 glyph |=
757+130:12 name item
758+130:16 tight glyph =
759+130:17 tight tvar A
760+131:3 INDENT
761+131:3 glyph ^-
762+131:6 glyph (
763+131:7 tight name list
764+131:12 tvar A
765+131:13 tight glyph )
766+131:15 glyph [
767+131:16 tight name item
768+131:21 lit ~
769+131:22 tight glyph ]
770+133:1 DEDENT
771+133:1 NEWLINE
772+133:1 glyph ++
773+133:4 name snoc
774+133:9 glyph |=
775+133:12 name args
776+133:16 tight glyph =
777+133:17 tight glyph [
778+133:18 tight glyph (
779+133:19 tight name list
780+133:24 tvar A
781+133:25 tight glyph )
782+133:27 tvar A
783+133:28 tight glyph ]
784+134:3 INDENT
785+134:3 glyph ?-
786+134:6 name args
787+135:5 INDENT
788+135:5 glyph [
789+135:6 tight name xs
790+135:9 name item
791+135:13 tight glyph ]
792+135:15 glyph (
793+135:16 tight name weld
794+135:21 name xs
795+135:24 glyph [
796+135:25 tight name item
797+135:30 lit ~
798+135:31 tight glyph ]
799+135:32 tight glyph )
800+137:1 DEDENT
801+137:1 DEDENT
802+137:1 NEWLINE
803+137:1 glyph ++
804+137:4 name flop
805+137:9 glyph |=
806+137:12 name xs
807+137:14 tight glyph =
808+137:15 tight glyph (
809+137:16 tight name list
810+137:21 tvar A
811+137:22 tight glyph )
812+138:3 INDENT
813+138:3 glyph ++
814+138:6 name reverse-into
815+138:19 glyph |=
816+138:22 name args
817+138:26 tight glyph =
818+138:27 tight glyph [
819+138:28 tight glyph (
820+138:29 tight name list
821+138:34 tvar A
822+138:35 tight glyph )
823+138:37 glyph (
824+138:38 tight name list
825+138:43 tvar A
826+138:44 tight glyph )
827+138:45 tight glyph ]
828+139:5 INDENT
829+139:5 glyph ?-
830+139:8 name args
831+140:7 INDENT
832+140:7 glyph [
833+140:8 tight name rest
834+140:13 name acc
835+140:16 tight glyph ]
836+141:9 INDENT
837+141:9 glyph ?-
838+141:12 name rest
839+142:11 INDENT
840+142:11 lit ~
841+142:13 name acc
842+143:11 NEWLINE
843+143:11 glyph [
844+143:12 tight name item
845+143:17 name more
846+143:21 tight glyph ]
847+143:23 glyph (
848+143:24 tight name reverse-into
849+143:37 name more
850+143:42 glyph [
851+143:43 tight name item
852+143:48 name acc
853+143:51 tight glyph ]
854+143:52 tight glyph )
855+144:3 DEDENT
856+144:3 DEDENT
857+144:3 DEDENT
858+144:3 DEDENT
859+144:3 NEWLINE
860+144:3 glyph (
861+144:4 tight name reverse-into
862+144:17 name xs
863+144:20 lit ~
864+144:21 tight glyph )
865+146:1 DEDENT
866+146:1 NEWLINE
867+146:1 glyph ++
868+146:4 name drop
869+146:9 glyph |=
870+146:12 name maybe
871+146:17 tight glyph =
872+146:18 tight glyph (
873+146:19 tight name unit
874+146:24 tvar A
875+146:25 tight glyph )
876+147:3 INDENT
877+147:3 glyph ^-
878+147:6 glyph (
879+147:7 tight name list
880+147:12 tvar A
881+147:13 tight glyph )
882+148:5 INDENT
883+148:5 glyph ?-
884+148:8 name maybe
885+149:7 INDENT
886+149:7 lit ~
887+149:9 lit ~
888+150:7 NEWLINE
889+150:7 glyph [
890+150:8 tight lit ~
891+150:10 name value
892+150:15 tight glyph ]
893+150:17 glyph [
894+150:18 tight name value
895+150:24 lit ~
896+150:25 tight glyph ]
897+152:1 DEDENT
898+152:1 DEDENT
899+152:1 DEDENT
900+152:1 NEWLINE
901+152:1 glyph ++
902+152:4 name bind
903+152:9 glyph |=
904+152:12 name args
905+152:16 tight glyph =
906+152:17 tight glyph [
907+152:18 tight glyph (
919908152:19 tight name unit
920−152:24 tvar B
909+152:24 tvar A
921910152:25 tight glyph )
922−153:7 INDENT
923−153:7 glyph ?-
924−153:10 name maybe
925−154:9 INDENT
926−154:9 lit ~
927−154:11 lit ~
928−155:9 NEWLINE
929−155:9 glyph [
930−155:10 tight lit ~
931−155:12 name value
932−155:17 tight glyph ]
933−155:19 glyph `
934−155:20 tight glyph (
935−155:21 tight name f
936−155:23 name value
937−155:28 tight glyph )
938−157:1 DEDENT
939−157:1 DEDENT
940−157:1 DEDENT
941−157:1 DEDENT
942−157:1 NEWLINE
943−157:1 glyph ++
944−157:4 name biff
945−157:9 glyph |=
946−157:12 name args
947−157:16 tight glyph =
948−157:17 tight glyph [
949−157:18 tight glyph (
950−157:19 tight name unit
951−157:24 tvar A
952−157:25 tight glyph )
953−157:27 glyph $-(
954−157:30 tight tvar A
955−157:32 glyph (
956−157:33 tight name unit
957−157:38 tvar B
958−157:39 tight glyph )
959−157:40 tight glyph )
960−157:41 tight glyph ]
961−158:3 INDENT
962−158:3 glyph ?-
963−158:6 name args
964−159:5 INDENT
965−159:5 glyph [
966−159:6 tight name maybe
967−159:12 name f
968−159:13 tight glyph ]
969−159:15 glyph ^-
970−159:18 glyph (
911+152:27 glyph $-(
912+152:30 tight tvar A
913+152:32 tvar B
914+152:33 tight glyph )
915+152:34 tight glyph ]
916+153:3 INDENT
917+153:3 glyph ?-
918+153:6 name args
919+154:5 INDENT
920+154:5 glyph [
921+154:6 tight name maybe
922+154:12 name f
923+154:13 tight glyph ]
924+154:15 glyph ^-
925+154:18 glyph (
926+154:19 tight name unit
927+154:24 tvar B
928+154:25 tight glyph )
929+155:7 INDENT
930+155:7 glyph ?-
931+155:10 name maybe
932+156:9 INDENT
933+156:9 lit ~
934+156:11 lit ~
935+157:9 NEWLINE
936+157:9 glyph [
937+157:10 tight lit ~
938+157:12 name value
939+157:17 tight glyph ]
940+157:19 glyph `
941+157:20 tight glyph (
942+157:21 tight name f
943+157:23 name value
944+157:28 tight glyph )
945+159:1 DEDENT
946+159:1 DEDENT
947+159:1 DEDENT
948+159:1 DEDENT
949+159:1 NEWLINE
950+159:1 glyph ++
951+159:4 name biff
952+159:9 glyph |=
953+159:12 name args
954+159:16 tight glyph =
955+159:17 tight glyph [
956+159:18 tight glyph (
971957159:19 tight name unit
972−159:24 tvar B
958+159:24 tvar A
973959159:25 tight glyph )
974−160:7 INDENT
975−160:7 glyph ?-
976−160:10 name maybe
977−161:9 INDENT
978−161:9 lit ~
979−161:11 lit ~
980−162:9 NEWLINE
981−162:9 glyph [
982−162:10 tight lit ~
983−162:12 name value
984−162:17 tight glyph ]
985−162:19 glyph (
986−162:20 tight name f
987−162:22 name value
988−162:27 tight glyph )
989−164:1 DEDENT
990−164:1 DEDENT
991−164:1 DEDENT
992−164:1 DEDENT
993−164:1 NEWLINE
994−164:1 glyph ++
995−164:4 name both
996−164:9 glyph |=
997−164:12 name args
998−164:16 tight glyph =
999−164:17 tight glyph [
1000−164:18 tight glyph (
1001−164:19 tight name unit
1002−164:24 tvar A
1003−164:25 tight glyph )
1004−164:27 glyph (
1005−164:28 tight name unit
1006−164:33 tvar B
1007−164:34 tight glyph )
1008−164:35 tight glyph ]
1009−165:3 INDENT
1010−165:3 glyph ?-
1011−165:6 name args
1012−166:5 INDENT
1013−166:5 glyph [
1014−166:6 tight name first
1015−166:12 name second
1016−166:18 tight glyph ]
1017−166:20 glyph ^-
1018−166:23 glyph (
1019−166:24 tight name unit
1020−166:29 glyph [
1021−166:30 tight tvar A
1022−166:32 tvar B
1023−166:33 tight glyph ]
960+159:27 glyph $-(
961+159:30 tight tvar A
962+159:32 glyph (
963+159:33 tight name unit
964+159:38 tvar B
965+159:39 tight glyph )
966+159:40 tight glyph )
967+159:41 tight glyph ]
968+160:3 INDENT
969+160:3 glyph ?-
970+160:6 name args
971+161:5 INDENT
972+161:5 glyph [
973+161:6 tight name maybe
974+161:12 name f
975+161:13 tight glyph ]
976+161:15 glyph ^-
977+161:18 glyph (
978+161:19 tight name unit
979+161:24 tvar B
980+161:25 tight glyph )
981+162:7 INDENT
982+162:7 glyph ?-
983+162:10 name maybe
984+163:9 INDENT
985+163:9 lit ~
986+163:11 lit ~
987+164:9 NEWLINE
988+164:9 glyph [
989+164:10 tight lit ~
990+164:12 name value
991+164:17 tight glyph ]
992+164:19 glyph (
993+164:20 tight name f
994+164:22 name value
995+164:27 tight glyph )
996+166:1 DEDENT
997+166:1 DEDENT
998+166:1 DEDENT
999+166:1 DEDENT
1000+166:1 NEWLINE
1001+166:1 glyph ++
1002+166:4 name both
1003+166:9 glyph |=
1004+166:12 name args
1005+166:16 tight glyph =
1006+166:17 tight glyph [
1007+166:18 tight glyph (
1008+166:19 tight name unit
1009+166:24 tvar A
1010+166:25 tight glyph )
1011+166:27 glyph (
1012+166:28 tight name unit
1013+166:33 tvar B
10241014166:34 tight glyph )
1025−167:7 INDENT
1026−167:7 glyph ?-
1027−167:10 name first
1028−168:9 INDENT
1029−168:9 lit ~
1030−168:11 lit ~
1031−169:9 NEWLINE
1032−169:9 glyph [
1033−169:10 tight lit ~
1034−169:12 name a
1035−169:13 tight glyph ]
1036−170:11 INDENT
1037−170:11 glyph ?-
1038−170:14 name second
1039−171:13 INDENT
1040−171:13 lit ~
1041−171:15 lit ~
1042−172:13 NEWLINE
1043−172:13 glyph [
1044−172:14 tight lit ~
1045−172:16 name b
1046−172:17 tight glyph ]
1047−172:19 glyph `
1048−172:20 tight glyph [
1049−172:21 tight name a
1050−172:23 name b
1051−172:24 tight glyph ]
1052−174:1 DEDENT
1053−174:1 DEDENT
1054−174:1 DEDENT
1055−174:1 DEDENT
1056−174:1 DEDENT
1057−174:1 DEDENT
1058−174:1 NEWLINE
1059−174:1 glyph ++
1060−174:4 name clap
1061−174:9 glyph |=
1062−174:12 name args
1063−174:16 tight glyph =
1064−174:17 tight glyph [
1065−174:18 tight glyph (
1066−174:19 tight name unit
1067−174:24 tvar A
1068−174:25 tight glyph )
1069−174:27 glyph (
1070−174:28 tight name unit
1071−174:33 tvar A
1072−174:34 tight glyph )
1073−174:36 glyph $-(
1074−174:39 tight glyph [
1075−174:40 tight tvar A
1076−174:42 tvar A
1077−174:43 tight glyph ]
1078−174:45 tvar A
1079−174:46 tight glyph )
1080−174:47 tight glyph ]
1081−175:3 INDENT
1082−175:3 glyph ?-
1083−175:6 name args
1084−176:5 INDENT
1085−176:5 glyph [
1086−176:6 tight name first
1087−176:12 name second
1088−176:19 name combine
1089−176:26 tight glyph ]
1090−176:28 glyph ^-
1091−176:31 glyph (
1092−176:32 tight name unit
1093−176:37 tvar A
1094−176:38 tight glyph )
1095−177:7 INDENT
1096−177:7 glyph ?-
1097−177:10 name first
1098−178:9 INDENT
1099−178:9 lit ~
1100−178:11 name second
1101−179:9 NEWLINE
1102−179:9 glyph [
1103−179:10 tight lit ~
1104−179:12 name a
1105−179:13 tight glyph ]
1106−180:11 INDENT
1107−180:11 glyph ?-
1108−180:14 name second
1109−181:13 INDENT
1110−181:13 lit ~
1111−181:15 name first
1112−182:13 NEWLINE
1113−182:13 glyph [
1114−182:14 tight lit ~
1115−182:16 name b
1116−182:17 tight glyph ]
1117−182:19 glyph `
1118−182:20 tight glyph (
1119−182:21 tight name combine
1120−182:29 name a
1121−182:31 name b
1122−182:32 tight glyph )
1123−184:1 DEDENT
1124−184:1 DEDENT
1125−184:1 DEDENT
1126−184:1 DEDENT
1127−184:1 DEDENT
1128−184:1 DEDENT
1129−184:1 NEWLINE
1130−184:1 glyph ++
1131−184:4 name clef
1132−184:9 glyph |=
1133−184:12 name args
1134−184:16 tight glyph =
1135−184:17 tight glyph [
1136−184:18 tight glyph (
1137−184:19 tight name unit
1138−184:24 tvar A
1139−184:25 tight glyph )
1140−184:27 glyph (
1141−184:28 tight name unit
1142−184:33 tvar B
1143−184:34 tight glyph )
1144−184:36 glyph $-(
1145−184:39 tight glyph [
1146−184:40 tight tvar A
1147−184:42 tvar B
1148−184:43 tight glyph ]
1149−184:45 glyph (
1150−184:46 tight name unit
1151−184:51 tvar C
1152−184:52 tight glyph )
1153−184:53 tight glyph )
1154−184:54 tight glyph ]
1155−185:3 INDENT
1156−185:3 glyph ?-
1157−185:6 name args
1158−186:5 INDENT
1159−186:5 glyph [
1160−186:6 tight name first
1161−186:12 name second
1162−186:19 name combine
1163−186:26 tight glyph ]
1164−186:28 glyph ^-
1165−186:31 glyph (
1166−186:32 tight name unit
1167−186:37 tvar C
1168−186:38 tight glyph )
1169−187:7 INDENT
1170−187:7 glyph ?-
1171−187:10 name first
1172−188:9 INDENT
1173−188:9 lit ~
1174−188:11 lit ~
1175−189:9 NEWLINE
1176−189:9 glyph [
1177−189:10 tight lit ~
1178−189:12 name a
1179−189:13 tight glyph ]
1180−190:11 INDENT
1181−190:11 glyph ?-
1182−190:14 name second
1183−191:13 INDENT
1184−191:13 lit ~
1185−191:15 lit ~
1186−192:13 NEWLINE
1187−192:13 glyph [
1188−192:14 tight lit ~
1189−192:16 name b
1190−192:17 tight glyph ]
1191−192:19 glyph (
1192−192:20 tight name combine
1193−192:28 name a
1194−192:30 name b
1195−192:31 tight glyph )
1196−194:1 DEDENT
1197−194:1 DEDENT
1198−194:1 DEDENT
1199−194:1 DEDENT
1200−194:1 DEDENT
1201−194:1 DEDENT
1202−194:1 NEWLINE
1203−194:1 glyph ++
1204−194:4 name skim
1205−194:9 glyph |=
1206−194:12 name args
1207−194:16 tight glyph =
1208−194:17 tight glyph [
1209−194:18 tight glyph (
1210−194:19 tight name list
1211−194:24 tvar A
1212−194:25 tight glyph )
1213−194:27 glyph $-(
1214−194:30 tight tvar A
1215−194:32 glyph ?
1216−194:33 tight glyph )
1217−194:34 tight glyph ]
1218−195:3 INDENT
1219−195:3 glyph ?-
1220−195:6 name args
1221−196:5 INDENT
1222−196:5 glyph [
1223−196:6 tight name xs
1224−196:9 name predicate
1225−196:18 tight glyph ]
1226−197:7 INDENT
1227−197:7 glyph ?-
1228−197:10 name xs
1229−198:9 INDENT
1230−198:9 lit ~
1231−198:11 lit ~
1232−199:9 NEWLINE
1233−199:9 glyph [
1234−199:10 tight name item
1235−199:15 name rest
1236−199:19 tight glyph ]
1015+166:35 tight glyph ]
1016+167:3 INDENT
1017+167:3 glyph ?-
1018+167:6 name args
1019+168:5 INDENT
1020+168:5 glyph [
1021+168:6 tight name first
1022+168:12 name second
1023+168:18 tight glyph ]
1024+168:20 glyph ^-
1025+168:23 glyph (
1026+168:24 tight name unit
1027+168:29 glyph [
1028+168:30 tight tvar A
1029+168:32 tvar B
1030+168:33 tight glyph ]
1031+168:34 tight glyph )
1032+169:7 INDENT
1033+169:7 glyph ?-
1034+169:10 name first
1035+170:9 INDENT
1036+170:9 lit ~
1037+170:11 lit ~
1038+171:9 NEWLINE
1039+171:9 glyph [
1040+171:10 tight lit ~
1041+171:12 name a
1042+171:13 tight glyph ]
1043+172:11 INDENT
1044+172:11 glyph ?-
1045+172:14 name second
1046+173:13 INDENT
1047+173:13 lit ~
1048+173:15 lit ~
1049+174:13 NEWLINE
1050+174:13 glyph [
1051+174:14 tight lit ~
1052+174:16 name b
1053+174:17 tight glyph ]
1054+174:19 glyph `
1055+174:20 tight glyph [
1056+174:21 tight name a
1057+174:23 name b
1058+174:24 tight glyph ]
1059+176:1 DEDENT
1060+176:1 DEDENT
1061+176:1 DEDENT
1062+176:1 DEDENT
1063+176:1 DEDENT
1064+176:1 DEDENT
1065+176:1 NEWLINE
1066+176:1 glyph ++
1067+176:4 name clap
1068+176:9 glyph |=
1069+176:12 name args
1070+176:16 tight glyph =
1071+176:17 tight glyph [
1072+176:18 tight glyph (
1073+176:19 tight name unit
1074+176:24 tvar A
1075+176:25 tight glyph )
1076+176:27 glyph (
1077+176:28 tight name unit
1078+176:33 tvar A
1079+176:34 tight glyph )
1080+176:36 glyph $-(
1081+176:39 tight glyph [
1082+176:40 tight tvar A
1083+176:42 tvar A
1084+176:43 tight glyph ]
1085+176:45 tvar A
1086+176:46 tight glyph )
1087+176:47 tight glyph ]
1088+177:3 INDENT
1089+177:3 glyph ?-
1090+177:6 name args
1091+178:5 INDENT
1092+178:5 glyph [
1093+178:6 tight name first
1094+178:12 name second
1095+178:19 name combine
1096+178:26 tight glyph ]
1097+178:28 glyph ^-
1098+178:31 glyph (
1099+178:32 tight name unit
1100+178:37 tvar A
1101+178:38 tight glyph )
1102+179:7 INDENT
1103+179:7 glyph ?-
1104+179:10 name first
1105+180:9 INDENT
1106+180:9 lit ~
1107+180:11 name second
1108+181:9 NEWLINE
1109+181:9 glyph [
1110+181:10 tight lit ~
1111+181:12 name a
1112+181:13 tight glyph ]
1113+182:11 INDENT
1114+182:11 glyph ?-
1115+182:14 name second
1116+183:13 INDENT
1117+183:13 lit ~
1118+183:15 name first
1119+184:13 NEWLINE
1120+184:13 glyph [
1121+184:14 tight lit ~
1122+184:16 name b
1123+184:17 tight glyph ]
1124+184:19 glyph `
1125+184:20 tight glyph (
1126+184:21 tight name combine
1127+184:29 name a
1128+184:31 name b
1129+184:32 tight glyph )
1130+186:1 DEDENT
1131+186:1 DEDENT
1132+186:1 DEDENT
1133+186:1 DEDENT
1134+186:1 DEDENT
1135+186:1 DEDENT
1136+186:1 NEWLINE
1137+186:1 glyph ++
1138+186:4 name clef
1139+186:9 glyph |=
1140+186:12 name args
1141+186:16 tight glyph =
1142+186:17 tight glyph [
1143+186:18 tight glyph (
1144+186:19 tight name unit
1145+186:24 tvar A
1146+186:25 tight glyph )
1147+186:27 glyph (
1148+186:28 tight name unit
1149+186:33 tvar B
1150+186:34 tight glyph )
1151+186:36 glyph $-(
1152+186:39 tight glyph [
1153+186:40 tight tvar A
1154+186:42 tvar B
1155+186:43 tight glyph ]
1156+186:45 glyph (
1157+186:46 tight name unit
1158+186:51 tvar C
1159+186:52 tight glyph )
1160+186:53 tight glyph )
1161+186:54 tight glyph ]
1162+187:3 INDENT
1163+187:3 glyph ?-
1164+187:6 name args
1165+188:5 INDENT
1166+188:5 glyph [
1167+188:6 tight name first
1168+188:12 name second
1169+188:19 name combine
1170+188:26 tight glyph ]
1171+188:28 glyph ^-
1172+188:31 glyph (
1173+188:32 tight name unit
1174+188:37 tvar C
1175+188:38 tight glyph )
1176+189:7 INDENT
1177+189:7 glyph ?-
1178+189:10 name first
1179+190:9 INDENT
1180+190:9 lit ~
1181+190:11 lit ~
1182+191:9 NEWLINE
1183+191:9 glyph [
1184+191:10 tight lit ~
1185+191:12 name a
1186+191:13 tight glyph ]
1187+192:11 INDENT
1188+192:11 glyph ?-
1189+192:14 name second
1190+193:13 INDENT
1191+193:13 lit ~
1192+193:15 lit ~
1193+194:13 NEWLINE
1194+194:13 glyph [
1195+194:14 tight lit ~
1196+194:16 name b
1197+194:17 tight glyph ]
1198+194:19 glyph (
1199+194:20 tight name combine
1200+194:28 name a
1201+194:30 name b
1202+194:31 tight glyph )
1203+196:1 DEDENT
1204+196:1 DEDENT
1205+196:1 DEDENT
1206+196:1 DEDENT
1207+196:1 DEDENT
1208+196:1 DEDENT
1209+196:1 NEWLINE
1210+196:1 glyph ++
1211+196:4 name skim
1212+196:9 glyph |=
1213+196:12 name args
1214+196:16 tight glyph =
1215+196:17 tight glyph [
1216+196:18 tight glyph (
1217+196:19 tight name list
1218+196:24 tvar A
1219+196:25 tight glyph )
1220+196:27 glyph $-(
1221+196:30 tight tvar A
1222+196:32 glyph ?
1223+196:33 tight glyph )
1224+196:34 tight glyph ]
1225+197:3 INDENT
1226+197:3 glyph ?-
1227+197:6 name args
1228+198:5 INDENT
1229+198:5 glyph [
1230+198:6 tight name xs
1231+198:9 name predicate
1232+198:18 tight glyph ]
1233+198:20 glyph ^-
1234+198:23 glyph (
1235+198:24 tight name list
1236+198:29 tvar A
1237+198:30 tight glyph )
1238+199:9 INDENT
1239+199:9 glyph ?-
1240+199:12 name xs
12371241200:11 INDENT
1238−200:11 glyph ?-
1239−200:14 glyph (
1240−200:15 tight name predicate
1241−200:25 name item
1242−200:29 tight glyph )
1243−201:13 INDENT
1244−201:13 lit %.y
1245−201:17 glyph [
1246−201:18 tight name item
1247−201:23 glyph (
1248−201:24 tight name skim
1249−201:29 name rest
1250−201:34 name predicate
1251−201:43 tight glyph )
1252−201:44 tight glyph ]
1253−202:13 NEWLINE
1254−202:13 lit %.n
1255−202:17 glyph (
1256−202:18 tight name skim
1257−202:23 name rest
1258−202:28 name predicate
1259−202:37 tight glyph )
1260−204:1 DEDENT
1261−204:1 DEDENT
1262−204:1 DEDENT
1263−204:1 DEDENT
1264−204:1 DEDENT
1265−204:1 DEDENT
1266−204:1 NEWLINE
1267−204:1 glyph ++
1268−204:4 name skip
1269−204:9 glyph |=
1270−204:12 name args
1271−204:16 tight glyph =
1272−204:17 tight glyph [
1273−204:18 tight glyph (
1274−204:19 tight name list
1275−204:24 tvar A
1276−204:25 tight glyph )
1277−204:27 glyph $-(
1278−204:30 tight tvar A
1279−204:32 glyph ?
1280−204:33 tight glyph )
1281−204:34 tight glyph ]
1282−205:3 INDENT
1283−205:3 glyph ?-
1284−205:6 name args
1285−206:5 INDENT
1286−206:5 glyph [
1287−206:6 tight name xs
1288−206:9 name predicate
1289−206:18 tight glyph ]
1290−207:7 INDENT
1291−207:7 glyph ?-
1292−207:10 name xs
1293−208:9 INDENT
1294−208:9 lit ~
1295−208:11 lit ~
1296−209:9 NEWLINE
1297−209:9 glyph [
1298−209:10 tight name item
1299−209:15 name rest
1300−209:19 tight glyph ]
1242+200:11 lit ~
1243+200:13 lit ~
1244+201:11 NEWLINE
1245+201:11 glyph [
1246+201:12 tight name item
1247+201:17 name rest
1248+201:21 tight glyph ]
1249+202:13 INDENT
1250+202:13 glyph ?-
1251+202:16 glyph (
1252+202:17 tight name predicate
1253+202:27 name item
1254+202:31 tight glyph )
1255+203:15 INDENT
1256+203:15 lit %.y
1257+203:19 glyph [
1258+203:20 tight name item
1259+203:25 glyph (
1260+203:26 tight name skim
1261+203:31 name rest
1262+203:36 name predicate
1263+203:45 tight glyph )
1264+203:46 tight glyph ]
1265+204:15 NEWLINE
1266+204:15 lit %.n
1267+204:19 glyph (
1268+204:20 tight name skim
1269+204:25 name rest
1270+204:30 name predicate
1271+204:39 tight glyph )
1272+206:1 DEDENT
1273+206:1 DEDENT
1274+206:1 DEDENT
1275+206:1 DEDENT
1276+206:1 DEDENT
1277+206:1 DEDENT
1278+206:1 NEWLINE
1279+206:1 glyph ++
1280+206:4 name skip
1281+206:9 glyph |=
1282+206:12 name args
1283+206:16 tight glyph =
1284+206:17 tight glyph [
1285+206:18 tight glyph (
1286+206:19 tight name list
1287+206:24 tvar A
1288+206:25 tight glyph )
1289+206:27 glyph $-(
1290+206:30 tight tvar A
1291+206:32 glyph ?
1292+206:33 tight glyph )
1293+206:34 tight glyph ]
1294+207:3 INDENT
1295+207:3 glyph ?-
1296+207:6 name args
1297+208:5 INDENT
1298+208:5 glyph [
1299+208:6 tight name xs
1300+208:9 name predicate
1301+208:18 tight glyph ]
1302+208:20 glyph ^-
1303+208:23 glyph (
1304+208:24 tight name list
1305+208:29 tvar A
1306+208:30 tight glyph )
1307+209:9 INDENT
1308+209:9 glyph ?-
1309+209:12 name xs
13011310210:11 INDENT
1302−210:11 glyph ?-
1303−210:14 glyph (
1304−210:15 tight name predicate
1305−210:25 name item
1306−210:29 tight glyph )
1307−211:13 INDENT
1308−211:13 lit %.y
1309−211:17 glyph (
1310−211:18 tight name skip
1311−211:23 name rest
1312−211:28 name predicate
1313−211:37 tight glyph )
1314−212:13 NEWLINE
1315−212:13 lit %.n
1316−212:17 glyph [
1317−212:18 tight name item
1318−212:23 glyph (
1319−212:24 tight name skip
1320−212:29 name rest
1321−212:34 name predicate
1322−212:43 tight glyph )
1323−212:44 tight glyph ]
1324−214:1 DEDENT
1325−214:1 DEDENT
1326−214:1 DEDENT
1327−214:1 DEDENT
1328−214:1 DEDENT
1329−214:1 DEDENT
1330−214:1 NEWLINE
1331−214:1 glyph ++
1332−214:4 name levy
1333−214:9 glyph |=
1334−214:12 name args
1335−214:16 tight glyph =
1336−214:17 tight glyph [
1337−214:18 tight glyph (
1338−214:19 tight name list
1339−214:24 tvar A
1340−214:25 tight glyph )
1341−214:27 glyph $-(
1342−214:30 tight tvar A
1343−214:32 glyph ?
1344−214:33 tight glyph )
1345−214:34 tight glyph ]
1346−215:3 INDENT
1347−215:3 glyph ?-
1348−215:6 name args
1349−216:5 INDENT
1350−216:5 glyph [
1351−216:6 tight name xs
1352−216:9 name predicate
1353−216:18 tight glyph ]
1354−217:7 INDENT
1355−217:7 glyph ?-
1356−217:10 name xs
1357−218:9 INDENT
1358−218:9 lit ~
1359−218:11 lit %.y
1360−219:9 NEWLINE
1361−219:9 glyph [
1362−219:10 tight name item
1363−219:15 name rest
1364−219:19 tight glyph ]
1365−220:11 INDENT
1366−220:11 glyph ?-
1367−220:14 glyph (
1368−220:15 tight name predicate
1369−220:25 name item
1370−220:29 tight glyph )
1371−221:13 INDENT
1372−221:13 lit %.y
1373−221:17 glyph (
1374−221:18 tight name levy
1375−221:23 name rest
1376−221:28 name predicate
1377−221:37 tight glyph )
1378−222:13 NEWLINE
1379−222:13 lit %.n
1380−222:17 lit %.n
1381−224:1 DEDENT
1382−224:1 DEDENT
1383−224:1 DEDENT
1384−224:1 DEDENT
1385−224:1 DEDENT
1386−224:1 DEDENT
1387−224:1 NEWLINE
1388−224:1 glyph ++
1389−224:4 name lien
1390−224:9 glyph |=
1391−224:12 name args
1392−224:16 tight glyph =
1393−224:17 tight glyph [
1394−224:18 tight glyph (
1395−224:19 tight name list
1396−224:24 tvar A
1397−224:25 tight glyph )
1398−224:27 glyph $-(
1399−224:30 tight tvar A
1400−224:32 glyph ?
1401−224:33 tight glyph )
1402−224:34 tight glyph ]
1403−225:3 INDENT
1404−225:3 glyph ?-
1405−225:6 name args
1406−226:5 INDENT
1407−226:5 glyph [
1408−226:6 tight name xs
1409−226:9 name predicate
1410−226:18 tight glyph ]
1411−227:7 INDENT
1412−227:7 glyph ?-
1413−227:10 name xs
1414−228:9 INDENT
1415−228:9 lit ~
1416−228:11 lit %.n
1417−229:9 NEWLINE
1418−229:9 glyph [
1419−229:10 tight name item
1420−229:15 name rest
1421−229:19 tight glyph ]
1422−230:11 INDENT
1423−230:11 glyph ?-
1424−230:14 glyph (
1425−230:15 tight name predicate
1426−230:25 name item
1427−230:29 tight glyph )
1428−231:13 INDENT
1429−231:13 lit %.y
1430−231:17 lit %.y
1431−232:13 NEWLINE
1432−232:13 lit %.n
1433−232:17 glyph (
1434−232:18 tight name lien
1435−232:23 name rest
1436−232:28 name predicate
1437−232:37 tight glyph )
1438−234:1 DEDENT
1439−234:1 DEDENT
1440−234:1 DEDENT
1441−234:1 DEDENT
1442−234:1 DEDENT
1443−234:1 DEDENT
1444−234:1 NEWLINE
1445−234:1 glyph ++
1446−234:4 name roll
1447−234:9 glyph |=
1448−234:12 name args
1449−234:16 tight glyph =
1450−234:17 tight glyph [
1451−234:18 tight glyph (
1452−234:19 tight name list
1453−234:24 tvar A
1454−234:25 tight glyph )
1455−234:27 tvar B
1456−234:29 glyph $-(
1457−234:32 tight glyph [
1458−234:33 tight tvar A
1459−234:35 tvar B
1460−234:36 tight glyph ]
1461−234:38 tvar B
1462−234:39 tight glyph )
1463−234:40 tight glyph ]
1464−235:3 INDENT
1465−235:3 glyph ?-
1466−235:6 name args
1467−236:5 INDENT
1468−236:5 glyph [
1469−236:6 tight name xs
1470−236:9 name start
1471−236:15 name combine
1472−236:22 tight glyph ]
1473−237:7 INDENT
1474−237:7 glyph ?-
1475−237:10 name xs
1476−238:9 INDENT
1477−238:9 lit ~
1478−238:11 name start
1479−239:9 NEWLINE
1480−239:9 glyph [
1481−239:10 tight name item
1482−239:15 name rest
1483−239:19 tight glyph ]
1484−239:21 glyph (
1485−239:22 tight name roll
1486−239:27 name rest
1487−239:32 glyph (
1488−239:33 tight name combine
1489−239:41 name item
1490−239:46 name start
1491−239:51 tight glyph )
1492−239:53 name combine
1493−239:60 tight glyph )
1494−241:1 DEDENT
1495−241:1 DEDENT
1496−241:1 DEDENT
1497−241:1 DEDENT
1498−241:1 NEWLINE
1499−241:1 glyph ++
1500−241:4 name reel
1501−241:9 glyph |=
1502−241:12 name args
1503−241:16 tight glyph =
1504−241:17 tight glyph [
1505−241:18 tight glyph (
1506−241:19 tight name list
1507−241:24 tvar A
1508−241:25 tight glyph )
1509−241:27 tvar B
1510−241:29 glyph $-(
1511−241:32 tight glyph [
1512−241:33 tight tvar A
1513−241:35 tvar B
1514−241:36 tight glyph ]
1515−241:38 tvar B
1516−241:39 tight glyph )
1517−241:40 tight glyph ]
1518−242:3 INDENT
1519−242:3 glyph ?-
1520−242:6 name args
1521−243:5 INDENT
1522−243:5 glyph [
1523−243:6 tight name xs
1524−243:9 name start
1525−243:15 name combine
1526−243:22 tight glyph ]
1527−244:7 INDENT
1528−244:7 glyph ?-
1529−244:10 name xs
1530−245:9 INDENT
1531−245:9 lit ~
1532−245:11 name start
1533−246:9 NEWLINE
1534−246:9 glyph [
1535−246:10 tight name item
1536−246:15 name rest
1537−246:19 tight glyph ]
1538−246:21 glyph (
1539−246:22 tight name combine
1540−246:30 name item
1541−246:35 glyph (
1542−246:36 tight name reel
1543−246:41 name rest
1544−246:46 name start
1545−246:52 name combine
1546−246:59 tight glyph )
1547−246:60 tight glyph )
1548−248:1 DEDENT
1549−248:1 DEDENT
1550−248:1 DEDENT
1551−248:1 DEDENT
1552−248:1 NEWLINE
1553−248:1 glyph ++
1554−248:4 name flit
1555−248:9 glyph |=
1556−248:12 name predicate
1557−248:21 tight glyph =
1558−248:22 tight glyph $-(
1559−248:25 tight tvar A
1560−248:27 glyph ?
1561−248:28 tight glyph )
1562−249:3 INDENT
1563−249:3 glyph |=
1564−249:6 name value
1565−249:11 tight glyph =
1566−249:12 tight tvar A
1567−250:5 INDENT
1568−250:5 glyph ^-
1569−250:8 glyph (
1570−250:9 tight name unit
1571−250:14 tvar A
1572−250:15 tight glyph )
1573−251:7 INDENT
1574−251:7 glyph ?-
1575−251:10 glyph (
1576−251:11 tight name predicate
1577−251:21 name value
1578−251:26 tight glyph )
1579−252:9 INDENT
1580−252:9 lit %.y
1581−252:13 glyph `
1582−252:14 tight name value
1583−253:9 NEWLINE
1584−253:9 lit %.n
1585−253:13 lit ~
1586−255:1 DEDENT
1587−255:1 DEDENT
1588−255:1 DEDENT
1589−255:1 DEDENT
1590−255:1 NEWLINE
1591−255:1 glyph ++
1592−255:4 name murn
1593−255:9 glyph |=
1594−255:12 name args
1595−255:16 tight glyph =
1596−255:17 tight glyph [
1597−255:18 tight glyph (
1598−255:19 tight name list
1599−255:24 tvar A
1600−255:25 tight glyph )
1601−255:27 glyph $-(
1602−255:30 tight tvar A
1603−255:32 glyph (
1604−255:33 tight name unit
1605−255:38 tvar B
1606−255:39 tight glyph )
1607−255:40 tight glyph )
1608−255:41 tight glyph ]
1609−256:3 INDENT
1610−256:3 glyph ?-
1611−256:6 name args
1612−257:5 INDENT
1613−257:5 glyph [
1614−257:6 tight name xs
1615−257:9 name f
1616−257:10 tight glyph ]
1617−258:7 INDENT
1618−258:7 glyph ?-
1619−258:10 name xs
1620−259:9 INDENT
1621−259:9 lit ~
1622−259:11 lit ~
1623−260:9 NEWLINE
1624−260:9 glyph [
1625−260:10 tight name item
1626−260:15 name rest
1627−260:19 tight glyph ]
1311+210:11 lit ~
1312+210:13 lit ~
1313+211:11 NEWLINE
1314+211:11 glyph [
1315+211:12 tight name item
1316+211:17 name rest
1317+211:21 tight glyph ]
1318+212:13 INDENT
1319+212:13 glyph ?-
1320+212:16 glyph (
1321+212:17 tight name predicate
1322+212:27 name item
1323+212:31 tight glyph )
1324+213:15 INDENT
1325+213:15 lit %.y
1326+213:19 glyph (
1327+213:20 tight name skip
1328+213:25 name rest
1329+213:30 name predicate
1330+213:39 tight glyph )
1331+214:15 NEWLINE
1332+214:15 lit %.n
1333+214:19 glyph [
1334+214:20 tight name item
1335+214:25 glyph (
1336+214:26 tight name skip
1337+214:31 name rest
1338+214:36 name predicate
1339+214:45 tight glyph )
1340+214:46 tight glyph ]
1341+216:1 DEDENT
1342+216:1 DEDENT
1343+216:1 DEDENT
1344+216:1 DEDENT
1345+216:1 DEDENT
1346+216:1 DEDENT
1347+216:1 NEWLINE
1348+216:1 glyph ++
1349+216:4 name levy
1350+216:9 glyph |=
1351+216:12 name args
1352+216:16 tight glyph =
1353+216:17 tight glyph [
1354+216:18 tight glyph (
1355+216:19 tight name list
1356+216:24 tvar A
1357+216:25 tight glyph )
1358+216:27 glyph $-(
1359+216:30 tight tvar A
1360+216:32 glyph ?
1361+216:33 tight glyph )
1362+216:34 tight glyph ]
1363+217:3 INDENT
1364+217:3 glyph ?-
1365+217:6 name args
1366+218:5 INDENT
1367+218:5 glyph [
1368+218:6 tight name xs
1369+218:9 name predicate
1370+218:18 tight glyph ]
1371+219:7 INDENT
1372+219:7 glyph ?-
1373+219:10 name xs
1374+220:9 INDENT
1375+220:9 lit ~
1376+220:11 lit %.y
1377+221:9 NEWLINE
1378+221:9 glyph [
1379+221:10 tight name item
1380+221:15 name rest
1381+221:19 tight glyph ]
1382+222:11 INDENT
1383+222:11 glyph ?-
1384+222:14 glyph (
1385+222:15 tight name predicate
1386+222:25 name item
1387+222:29 tight glyph )
1388+223:13 INDENT
1389+223:13 lit %.y
1390+223:17 glyph (
1391+223:18 tight name levy
1392+223:23 name rest
1393+223:28 name predicate
1394+223:37 tight glyph )
1395+224:13 NEWLINE
1396+224:13 lit %.n
1397+224:17 lit %.n
1398+226:1 DEDENT
1399+226:1 DEDENT
1400+226:1 DEDENT
1401+226:1 DEDENT
1402+226:1 DEDENT
1403+226:1 DEDENT
1404+226:1 NEWLINE
1405+226:1 glyph ++
1406+226:4 name lien
1407+226:9 glyph |=
1408+226:12 name args
1409+226:16 tight glyph =
1410+226:17 tight glyph [
1411+226:18 tight glyph (
1412+226:19 tight name list
1413+226:24 tvar A
1414+226:25 tight glyph )
1415+226:27 glyph $-(
1416+226:30 tight tvar A
1417+226:32 glyph ?
1418+226:33 tight glyph )
1419+226:34 tight glyph ]
1420+227:3 INDENT
1421+227:3 glyph ?-
1422+227:6 name args
1423+228:5 INDENT
1424+228:5 glyph [
1425+228:6 tight name xs
1426+228:9 name predicate
1427+228:18 tight glyph ]
1428+229:7 INDENT
1429+229:7 glyph ?-
1430+229:10 name xs
1431+230:9 INDENT
1432+230:9 lit ~
1433+230:11 lit %.n
1434+231:9 NEWLINE
1435+231:9 glyph [
1436+231:10 tight name item
1437+231:15 name rest
1438+231:19 tight glyph ]
1439+232:11 INDENT
1440+232:11 glyph ?-
1441+232:14 glyph (
1442+232:15 tight name predicate
1443+232:25 name item
1444+232:29 tight glyph )
1445+233:13 INDENT
1446+233:13 lit %.y
1447+233:17 lit %.y
1448+234:13 NEWLINE
1449+234:13 lit %.n
1450+234:17 glyph (
1451+234:18 tight name lien
1452+234:23 name rest
1453+234:28 name predicate
1454+234:37 tight glyph )
1455+236:1 DEDENT
1456+236:1 DEDENT
1457+236:1 DEDENT
1458+236:1 DEDENT
1459+236:1 DEDENT
1460+236:1 DEDENT
1461+236:1 NEWLINE
1462+236:1 glyph ++
1463+236:4 name roll
1464+236:9 glyph |=
1465+236:12 name args
1466+236:16 tight glyph =
1467+236:17 tight glyph [
1468+236:18 tight glyph (
1469+236:19 tight name list
1470+236:24 tvar A
1471+236:25 tight glyph )
1472+236:27 tvar B
1473+236:29 glyph $-(
1474+236:32 tight glyph [
1475+236:33 tight tvar A
1476+236:35 tvar B
1477+236:36 tight glyph ]
1478+236:38 tvar B
1479+236:39 tight glyph )
1480+236:40 tight glyph ]
1481+237:3 INDENT
1482+237:3 glyph ?-
1483+237:6 name args
1484+238:5 INDENT
1485+238:5 glyph [
1486+238:6 tight name xs
1487+238:9 name start
1488+238:15 name combine
1489+238:22 tight glyph ]
1490+239:7 INDENT
1491+239:7 glyph ?-
1492+239:10 name xs
1493+240:9 INDENT
1494+240:9 lit ~
1495+240:11 name start
1496+241:9 NEWLINE
1497+241:9 glyph [
1498+241:10 tight name item
1499+241:15 name rest
1500+241:19 tight glyph ]
1501+241:21 glyph (
1502+241:22 tight name roll
1503+241:27 name rest
1504+241:32 glyph (
1505+241:33 tight name combine
1506+241:41 name item
1507+241:46 name start
1508+241:51 tight glyph )
1509+241:53 name combine
1510+241:60 tight glyph )
1511+243:1 DEDENT
1512+243:1 DEDENT
1513+243:1 DEDENT
1514+243:1 DEDENT
1515+243:1 NEWLINE
1516+243:1 glyph ++
1517+243:4 name reel
1518+243:9 glyph |=
1519+243:12 name args
1520+243:16 tight glyph =
1521+243:17 tight glyph [
1522+243:18 tight glyph (
1523+243:19 tight name list
1524+243:24 tvar A
1525+243:25 tight glyph )
1526+243:27 tvar B
1527+243:29 glyph $-(
1528+243:32 tight glyph [
1529+243:33 tight tvar A
1530+243:35 tvar B
1531+243:36 tight glyph ]
1532+243:38 tvar B
1533+243:39 tight glyph )
1534+243:40 tight glyph ]
1535+244:3 INDENT
1536+244:3 glyph ?-
1537+244:6 name args
1538+245:5 INDENT
1539+245:5 glyph [
1540+245:6 tight name xs
1541+245:9 name start
1542+245:15 name combine
1543+245:22 tight glyph ]
1544+246:7 INDENT
1545+246:7 glyph ?-
1546+246:10 name xs
1547+247:9 INDENT
1548+247:9 lit ~
1549+247:11 name start
1550+248:9 NEWLINE
1551+248:9 glyph [
1552+248:10 tight name item
1553+248:15 name rest
1554+248:19 tight glyph ]
1555+248:21 glyph (
1556+248:22 tight name combine
1557+248:30 name item
1558+248:35 glyph (
1559+248:36 tight name reel
1560+248:41 name rest
1561+248:46 name start
1562+248:52 name combine
1563+248:59 tight glyph )
1564+248:60 tight glyph )
1565+250:1 DEDENT
1566+250:1 DEDENT
1567+250:1 DEDENT
1568+250:1 DEDENT
1569+250:1 NEWLINE
1570+250:1 glyph ++
1571+250:4 name flit
1572+250:9 glyph |=
1573+250:12 name predicate
1574+250:21 tight glyph =
1575+250:22 tight glyph $-(
1576+250:25 tight tvar A
1577+250:27 glyph ?
1578+250:28 tight glyph )
1579+251:3 INDENT
1580+251:3 glyph |=
1581+251:6 name value
1582+251:11 tight glyph =
1583+251:12 tight tvar A
1584+252:5 INDENT
1585+252:5 glyph ^-
1586+252:8 glyph (
1587+252:9 tight name unit
1588+252:14 tvar A
1589+252:15 tight glyph )
1590+253:7 INDENT
1591+253:7 glyph ?-
1592+253:10 glyph (
1593+253:11 tight name predicate
1594+253:21 name value
1595+253:26 tight glyph )
1596+254:9 INDENT
1597+254:9 lit %.y
1598+254:13 glyph `
1599+254:14 tight name value
1600+255:9 NEWLINE
1601+255:9 lit %.n
1602+255:13 lit ~
1603+257:1 DEDENT
1604+257:1 DEDENT
1605+257:1 DEDENT
1606+257:1 DEDENT
1607+257:1 NEWLINE
1608+257:1 glyph ++
1609+257:4 name murn
1610+257:9 glyph |=
1611+257:12 name args
1612+257:16 tight glyph =
1613+257:17 tight glyph [
1614+257:18 tight glyph (
1615+257:19 tight name list
1616+257:24 tvar A
1617+257:25 tight glyph )
1618+257:27 glyph $-(
1619+257:30 tight tvar A
1620+257:32 glyph (
1621+257:33 tight name unit
1622+257:38 tvar B
1623+257:39 tight glyph )
1624+257:40 tight glyph )
1625+257:41 tight glyph ]
1626+258:3 INDENT
1627+258:3 glyph ?-
1628+258:6 name args
1629+259:5 INDENT
1630+259:5 glyph [
1631+259:6 tight name xs
1632+259:9 name f
1633+259:10 tight glyph ]
1634+259:12 glyph ^-
1635+259:15 glyph (
1636+259:16 tight name list
1637+259:21 tvar B
1638+259:22 tight glyph )
1639+260:9 INDENT
1640+260:9 glyph ?-
1641+260:12 name xs
16281642261:11 INDENT
1629−261:11 glyph ?-
1630−261:14 glyph (
1631−261:15 tight name f
1632−261:17 name item
1633−261:21 tight glyph )
1634−262:13 INDENT
1635−262:13 lit ~
1636−262:15 glyph (
1637−262:16 tight name murn
1638−262:21 name rest
1639−262:26 name f
1640−262:27 tight glyph )
1641−263:13 NEWLINE
1642−263:13 glyph [
1643−263:14 tight lit ~
1644−263:16 name value
1645−263:21 tight glyph ]
1646−263:23 glyph [
1647−263:24 tight name value
1648−263:30 glyph (
1649−263:31 tight name murn
1650−263:36 name rest
1651−263:41 name f
1652−263:42 tight glyph )
1653−263:43 tight glyph ]
1654−265:1 DEDENT
1655−265:1 DEDENT
1656−265:1 DEDENT
1657−265:1 DEDENT
1658−265:1 DEDENT
1659−265:1 DEDENT
1660−265:1 NEWLINE
1661−265:1 glyph ++
1662−265:4 name join
1663−265:9 glyph |=
1664−265:12 name args
1665−265:16 tight glyph =
1666−265:17 tight glyph [
1667−265:18 tight tvar A
1668−265:20 glyph (
1669−265:21 tight name list
1670−265:26 tvar A
1671−265:27 tight glyph )
1672−265:28 tight glyph ]
1673−266:3 INDENT
1674−266:3 glyph ?-
1675−266:6 name args
1676−267:5 INDENT
1677−267:5 glyph [
1678−267:6 tight name separator
1679−267:16 name xs
1680−267:18 tight glyph ]
1681−268:7 INDENT
1682−268:7 glyph ?-
1683−268:10 name xs
1684−269:9 INDENT
1685−269:9 lit ~
1686−269:11 lit ~
1687−270:9 NEWLINE
1688−270:9 glyph [
1689−270:10 tight name item
1690−270:15 name rest
1691−270:19 tight glyph ]
1643+261:11 lit ~
1644+261:13 lit ~
1645+262:11 NEWLINE
1646+262:11 glyph [
1647+262:12 tight name item
1648+262:17 name rest
1649+262:21 tight glyph ]
1650+263:13 INDENT
1651+263:13 glyph ?-
1652+263:16 glyph (
1653+263:17 tight name f
1654+263:19 name item
1655+263:23 tight glyph )
1656+264:15 INDENT
1657+264:15 lit ~
1658+264:17 glyph (
1659+264:18 tight name murn
1660+264:23 name rest
1661+264:28 name f
1662+264:29 tight glyph )
1663+265:15 NEWLINE
1664+265:15 glyph [
1665+265:16 tight lit ~
1666+265:18 name value
1667+265:23 tight glyph ]
1668+265:25 glyph [
1669+265:26 tight name value
1670+265:32 glyph (
1671+265:33 tight name murn
1672+265:38 name rest
1673+265:43 name f
1674+265:44 tight glyph )
1675+265:45 tight glyph ]
1676+267:1 DEDENT
1677+267:1 DEDENT
1678+267:1 DEDENT
1679+267:1 DEDENT
1680+267:1 DEDENT
1681+267:1 DEDENT
1682+267:1 NEWLINE
1683+267:1 glyph ++
1684+267:4 name join
1685+267:9 glyph |=
1686+267:12 name args
1687+267:16 tight glyph =
1688+267:17 tight glyph [
1689+267:18 tight tvar A
1690+267:20 glyph (
1691+267:21 tight name list
1692+267:26 tvar A
1693+267:27 tight glyph )
1694+267:28 tight glyph ]
1695+268:3 INDENT
1696+268:3 glyph ?-
1697+268:6 name args
1698+269:5 INDENT
1699+269:5 glyph [
1700+269:6 tight name separator
1701+269:16 name xs
1702+269:18 tight glyph ]
1703+269:20 glyph ^-
1704+269:23 glyph (
1705+269:24 tight name list
1706+269:29 tvar A
1707+269:30 tight glyph )
1708+270:9 INDENT
1709+270:9 glyph ?-
1710+270:12 name xs
16921711271:11 INDENT
1693−271:11 glyph ?-
1694−271:14 name rest
1695−272:13 INDENT
1696−272:13 lit ~
1697−272:15 glyph [
1698−272:16 tight name item
1699−272:21 lit ~
1700−272:22 tight glyph ]
1701−273:13 NEWLINE
1702−273:13 glyph [
1703−273:14 tight name next
1704−273:19 name more
1705−273:23 tight glyph ]
1706−273:25 glyph [
1707−273:26 tight name item
1708−273:31 glyph [
1709−273:32 tight name separator
1710−273:42 glyph (
1711−273:43 tight name join
1712−273:48 name separator
1713−273:58 name rest
1714−273:62 tight glyph )
1715−273:63 tight glyph ]
1716−273:64 tight glyph ]
1717−275:1 DEDENT
1718−275:1 DEDENT
1719−275:1 DEDENT
1720−275:1 DEDENT
1721−275:1 DEDENT
1722−275:1 DEDENT
1723−275:1 NEWLINE
1724−275:1 glyph ++
1725−275:4 name snip
1726−275:9 glyph |=
1727−275:12 name xs
1728−275:14 tight glyph =
1729−275:15 tight glyph (
1730−275:16 tight name list
1731−275:21 tvar A
1732−275:22 tight glyph )
1733−276:3 INDENT
1734−276:3 glyph ?-
1735−276:6 name xs
1736−277:5 INDENT
1737−277:5 lit ~
1738−277:7 lit ~
1739−278:5 NEWLINE
1740−278:5 glyph [
1741−278:6 tight name item
1742−278:11 name rest
1743−278:15 tight glyph ]
1744−279:7 INDENT
1745−279:7 glyph ?-
1746−279:10 name rest
1747−280:9 INDENT
1712+271:11 lit ~
1713+271:13 lit ~
1714+272:11 NEWLINE
1715+272:11 glyph [
1716+272:12 tight name item
1717+272:17 name rest
1718+272:21 tight glyph ]
1719+273:13 INDENT
1720+273:13 glyph ?-
1721+273:16 name rest
1722+274:15 INDENT
1723+274:15 lit ~
1724+274:17 glyph [
1725+274:18 tight name item
1726+274:23 lit ~
1727+274:24 tight glyph ]
1728+275:15 NEWLINE
1729+275:15 glyph [
1730+275:16 tight name next
1731+275:21 name more
1732+275:25 tight glyph ]
1733+275:27 glyph [
1734+275:28 tight name item
1735+275:33 glyph [
1736+275:34 tight name separator
1737+275:44 glyph (
1738+275:45 tight name join
1739+275:50 name separator
1740+275:60 name rest
1741+275:64 tight glyph )
1742+275:65 tight glyph ]
1743+275:66 tight glyph ]
1744+277:1 DEDENT
1745+277:1 DEDENT
1746+277:1 DEDENT
1747+277:1 DEDENT
1748+277:1 DEDENT
1749+277:1 DEDENT
1750+277:1 NEWLINE
1751+277:1 glyph ++
1752+277:4 name snip
1753+277:9 glyph |=
1754+277:12 name xs
1755+277:14 tight glyph =
1756+277:15 tight glyph (
1757+277:16 tight name list
1758+277:21 tvar A
1759+277:22 tight glyph )
1760+278:3 INDENT
1761+278:3 glyph ^-
1762+278:6 glyph (
1763+278:7 tight name list
1764+278:12 tvar A
1765+278:13 tight glyph )
1766+279:5 INDENT
1767+279:5 glyph ?-
1768+279:8 name xs
1769+280:7 INDENT
1770+280:7 lit ~
17481771280:9 lit ~
1749−280:11 lit ~
1750−281:9 NEWLINE
1751−281:9 glyph [
1752−281:10 tight name next
1753−281:15 name more
1754−281:19 tight glyph ]
1755−281:21 glyph [
1756−281:22 tight name item
1757−281:27 glyph (
1758−281:28 tight name snip
1759−281:33 name rest
1760−281:37 tight glyph )
1761−281:38 tight glyph ]
1762−283:1 DEDENT
1763−283:1 DEDENT
1764−283:1 DEDENT
1765−283:1 DEDENT
1766−283:1 NEWLINE
1767−283:1 glyph ++
1768−283:4 name rear
1769−283:9 glyph |=
1770−283:12 name xs
1771−283:14 tight glyph =
1772−283:15 tight glyph (
1773−283:16 tight name list
1774−283:21 tvar A
1775−283:22 tight glyph )
1776−284:3 INDENT
1777−284:3 glyph ?-
1778−284:6 name xs
1779−285:5 INDENT
1780−285:5 lit ~
1781−285:7 glyph !!
1782−286:5 NEWLINE
1783−286:5 glyph [
1784−286:6 tight name item
1785−286:11 name rest
1786−286:15 tight glyph ]
1787−287:7 INDENT
1788−287:7 glyph ?-
1789−287:10 name rest
1790−288:9 INDENT
1791−288:9 lit ~
1792−288:11 name item
1793−289:9 NEWLINE
1794−289:9 glyph [
1795−289:10 tight name next
1796−289:15 name more
1797−289:19 tight glyph ]
1798−289:21 glyph (
1799−289:22 tight name rear
1800−289:27 name rest
1801−289:31 tight glyph )
1802−289:32 DEDENT
1803−289:32 DEDENT
1804−289:32 DEDENT
1805−289:32 DEDENT
1806−289:32 NEWLINE
1772+281:7 NEWLINE
1773+281:7 glyph [
1774+281:8 tight name item
1775+281:13 name rest
1776+281:17 tight glyph ]
1777+282:9 INDENT
1778+282:9 glyph ?-
1779+282:12 name rest
1780+283:11 INDENT
1781+283:11 lit ~
1782+283:13 lit ~
1783+284:11 NEWLINE
1784+284:11 glyph [
1785+284:12 tight name next
1786+284:17 name more
1787+284:21 tight glyph ]
1788+284:23 glyph [
1789+284:24 tight name item
1790+284:29 glyph (
1791+284:30 tight name snip
1792+284:35 name rest
1793+284:39 tight glyph )
1794+284:40 tight glyph ]
1795+286:1 DEDENT
1796+286:1 DEDENT
1797+286:1 DEDENT
1798+286:1 DEDENT
1799+286:1 DEDENT
1800+286:1 NEWLINE
1801+286:1 glyph ++
1802+286:4 name rear
1803+286:9 glyph |=
1804+286:12 name xs
1805+286:14 tight glyph =
1806+286:15 tight glyph (
1807+286:16 tight name list
1808+286:21 tvar A
1809+286:22 tight glyph )
1810+287:3 INDENT
1811+287:3 glyph ?-
1812+287:6 name xs
1813+288:5 INDENT
1814+288:5 lit ~
1815+288:7 glyph !!
1816+289:5 NEWLINE
1817+289:5 glyph [
1818+289:6 tight name item
1819+289:11 name rest
1820+289:15 tight glyph ]
1821+290:7 INDENT
1822+290:7 glyph ?-
1823+290:10 name rest
1824+291:9 INDENT
1825+291:9 lit ~
1826+291:11 name item
1827+292:9 NEWLINE
1828+292:9 glyph [
1829+292:10 tight name next
1830+292:15 name more
1831+292:19 tight glyph ]
1832+292:21 glyph (
1833+292:22 tight name rear
1834+292:27 name rest
1835+292:31 tight glyph )
1836+292:32 DEDENT
1837+292:32 DEDENT
1838+292:32 DEDENT
1839+292:32 DEDENT
1840+292:32 NEWLINE
tests/golden/prelude-unit-list-transforms/tree.txt+782−768
@@ -1,780 +1,794 @@
11(module
22 (jibb 1:1 internal /lib/jibb/internal)
33 (mold 2:1 poke (ref 2:9 poke.internal))
4− (value 5:1 same
5− (gate 5:9
6− (face 5:12 x (tvar 5:14 A))
7− (wing 5:16 x)))
8− (value 7:1 head
9− (gate 7:9
10− (face 7:12 p
11− (cell 7:14 (tvar 7:15 A) (tvar 7:17 B)))
12− (body 8:3
13− (branch 8:3
14− (wing 8:6 p)
15− (arm 9:5
16− (cell 9:5 (bind 9:6 a) (bind 9:8 b))
17− (wing 9:11 a))))))
18− (value 11:1 tail
19− (gate 11:9
20− (face 11:12 p
21− (cell 11:14 (tvar 11:15 A) (tvar 11:17 B)))
22− (body 12:3
23− (branch 12:3
24− (wing 12:6 p)
25− (arm 13:5
26− (cell 13:5 (bind 13:6 a) (bind 13:8 b))
27− (wing 13:11 b))))))
28− (value 15:1 not
29− (gate 15:8
30− (face 15:11 b (flag 15:13))
31− (body 16:3
32− (branch 16:3
33− (wing 16:6 b)
34− (arm 17:5 (lit 17:5 %.y) (lit 17:9 %.n))
35− (arm 18:5 (lit 18:5 %.n) (lit 18:9 %.y))))))
36− (mold 20:1 list
37− (generic 20:9 A
38− (union 21:3
39− (const 21:3 ~)
40− (cell 22:3
41− (face 22:4 i (tvar 22:6 A))
42− (face 22:8 t
43− (apply 22:10 list (tvar 22:16 A)))))))
44− (mold 24:1 unit
45− (generic 24:9 A
46− (union 25:3
47− (const 25:3 ~)
48− (cell 26:3
49− (const 26:4 ~)
50− (face 26:6 u (tvar 26:8 A))))))
51− (value 28:1 fall
52− (gate 28:9
53− (face 28:12 args
54− (cell 28:17
55− (apply 28:18 unit (tvar 28:24 A))
56− (tvar 28:27 A)))
57− (body 29:3
58− (branch 29:3
59− (wing 29:6 args)
60− (arm 30:5
61− (cell 30:5 (bind 30:6 maybe) (bind 30:12 fallback))
62− (body 31:7
63− (branch 31:7
64− (wing 31:10 maybe)
65− (arm 32:9 (lit 32:9 ~) (wing 32:11 fallback))
66− (arm 33:9
67− (cell 33:9 (lit 33:10 ~) (bind 33:12 value))
68− (wing 33:19 value)))))))))
69− (value 35:1 need
70− (gate 35:9
71− (face 35:12 maybe
72− (apply 35:18 unit (tvar 35:24 A)))
73− (body 36:3
74− (branch 36:3
75− (wing 36:6 maybe)
76− (arm 37:5 (lit 37:5 ~) (crash 37:7))
77− (arm 38:5
78− (cell 38:5 (lit 38:6 ~) (bind 38:8 value))
79− (wing 38:15 value))))))
80− (value 40:1 weld
81− (gate 40:9
82− (face 40:12 args
83− (cell 40:17
84− (apply 40:18 list (tvar 40:24 A))
85− (apply 40:27 list (tvar 40:33 A))))
86− (body 41:3
87− (branch 41:3
88− (wing 41:6 args)
89− (arm 42:5
90− (cell 42:5 (bind 42:6 xs) (bind 42:9 ys))
91− (body 43:7
92− (cast 43:7
93− (apply 43:10 list (tvar 43:16 A))
94− (body 44:9
95− (branch 44:9
96− (wing 44:12 xs)
97− (arm 45:11 (lit 45:11 ~) (wing 45:13 ys))
98− (arm 46:11
99− (cell 46:11 (bind 46:12 item) (bind 46:17 rest))
100− (tuple 46:23
101− (wing 46:24 item)
102− (group 46:29
103− (call 46:30 (wing 46:30 weld) (wing 46:35 rest) (wing 46:40 ys))))))))))))))
104− (value 48:1 turn
105− (gate 48:9
106− (face 48:12 args
107− (cell 48:17
108− (apply 48:18 list (tvar 48:24 A))
109− (fn 48:27 (tvar 48:30 A) (tvar 48:32 B))))
110− (body 49:3
111− (branch 49:3
112− (wing 49:6 args)
113− (arm 50:5
114− (cell 50:5 (bind 50:6 xs) (bind 50:9 f))
115− (body 51:7
116− (cast 51:7
117− (apply 51:10 list (tvar 51:16 B))
118− (body 52:9
119− (branch 52:9
120− (wing 52:12 xs)
121− (arm 53:11 (lit 53:11 ~) (lit 53:13 ~))
122− (arm 54:11
123− (cell 54:11 (bind 54:12 item) (bind 54:17 rest))
124− (tuple 54:23
125− (group 54:24
126− (call 54:25 (wing 54:25 f) (wing 54:27 item)))
127− (group 54:33
128− (call 54:34 (wing 54:34 turn) (wing 54:39 rest) (wing 54:44 f))))))))))))))
129− (mold 56:1 dime
130− (cell 56:9
131− (face 56:10 p (aura 56:12 @ta))
132− (face 56:16 q (aura 56:18 @))))
133− (mold 58:1 hair
134− (cell 58:9
135− (face 58:10 p (aura 58:12 @ud))
136− (face 58:16 q (aura 58:18 @ud))))
137− (mold 60:1 pint
138− (cell 60:9
139− (face 60:10 p
140− (cell 60:12
141− (face 60:13 p (aura 60:15 @))
142− (face 60:17 q (aura 60:19 @))))
143− (face 60:22 q
144− (cell 60:24
145− (face 60:25 p (aura 60:27 @))
146− (face 60:29 q (aura 60:31 @))))))
147− (mold 62:1 coin
148− (union 63:3
149− (cell 63:3
150− (const 63:4 %$)
151− (face 63:7 p (ref 63:9 dime)))
4+ (value 6:1 same
5+ (gate 6:9
6+ (face 6:12 x (tvar 6:14 A))
7+ (wing 6:16 x)))
8+ (value 8:1 head
9+ (gate 8:9
10+ (face 8:12 p
11+ (cell 8:14 (tvar 8:15 A) (tvar 8:17 B)))
12+ (body 9:3
13+ (branch 9:3
14+ (wing 9:6 p)
15+ (arm 10:5
16+ (cell 10:5 (bind 10:6 a) (bind 10:8 b))
17+ (wing 10:11 a))))))
18+ (value 12:1 tail
19+ (gate 12:9
20+ (face 12:12 p
21+ (cell 12:14 (tvar 12:15 A) (tvar 12:17 B)))
22+ (body 13:3
23+ (branch 13:3
24+ (wing 13:6 p)
25+ (arm 14:5
26+ (cell 14:5 (bind 14:6 a) (bind 14:8 b))
27+ (wing 14:11 b))))))
28+ (value 16:1 not
29+ (gate 16:8
30+ (face 16:11 b (flag 16:13))
31+ (body 17:3
32+ (branch 17:3
33+ (wing 17:6 b)
34+ (arm 18:5 (lit 18:5 %.y) (lit 18:9 %.n))
35+ (arm 19:5 (lit 19:5 %.n) (lit 19:9 %.y))))))
36+ (mold 21:1 list
37+ (generic 21:9 A
38+ (union 22:3
39+ (const 22:3 ~)
40+ (cell 23:3
41+ (face 23:4 i (tvar 23:6 A))
42+ (face 23:8 t
43+ (apply 23:10 list (tvar 23:16 A)))))))
44+ (mold 25:1 unit
45+ (generic 25:9 A
46+ (union 26:3
47+ (const 26:3 ~)
48+ (cell 27:3
49+ (const 27:4 ~)
50+ (face 27:6 u (tvar 27:8 A))))))
51+ (value 29:1 fall
52+ (gate 29:9
53+ (face 29:12 args
54+ (cell 29:17
55+ (apply 29:18 unit (tvar 29:24 A))
56+ (tvar 29:27 A)))
57+ (body 30:3
58+ (branch 30:3
59+ (wing 30:6 args)
60+ (arm 31:5
61+ (cell 31:5 (bind 31:6 maybe) (bind 31:12 fallback))
62+ (body 32:7
63+ (branch 32:7
64+ (wing 32:10 maybe)
65+ (arm 33:9 (lit 33:9 ~) (wing 33:11 fallback))
66+ (arm 34:9
67+ (cell 34:9 (lit 34:10 ~) (bind 34:12 value))
68+ (wing 34:19 value)))))))))
69+ (value 36:1 need
70+ (gate 36:9
71+ (face 36:12 maybe
72+ (apply 36:18 unit (tvar 36:24 A)))
73+ (body 37:3
74+ (branch 37:3
75+ (wing 37:6 maybe)
76+ (arm 38:5 (lit 38:5 ~) (crash 38:7))
77+ (arm 39:5
78+ (cell 39:5 (lit 39:6 ~) (bind 39:8 value))
79+ (wing 39:15 value))))))
80+ (value 41:1 weld
81+ (gate 41:9
82+ (face 41:12 args
83+ (cell 41:17
84+ (apply 41:18 list (tvar 41:24 A))
85+ (apply 41:27 list (tvar 41:33 A))))
86+ (body 42:3
87+ (branch 42:3
88+ (wing 42:6 args)
89+ (arm 43:5
90+ (cell 43:5 (bind 43:6 xs) (bind 43:9 ys))
91+ (body 44:7
92+ (cast 44:7
93+ (apply 44:10 list (tvar 44:16 A))
94+ (body 45:9
95+ (branch 45:9
96+ (wing 45:12 xs)
97+ (arm 46:11 (lit 46:11 ~) (wing 46:13 ys))
98+ (arm 47:11
99+ (cell 47:11 (bind 47:12 item) (bind 47:17 rest))
100+ (tuple 47:23
101+ (wing 47:24 item)
102+ (group 47:29
103+ (call 47:30 (wing 47:30 weld) (wing 47:35 rest) (wing 47:40 ys))))))))))))))
104+ (value 49:1 turn
105+ (gate 49:9
106+ (face 49:12 args
107+ (cell 49:17
108+ (apply 49:18 list (tvar 49:24 A))
109+ (fn 49:27 (tvar 49:30 A) (tvar 49:32 B))))
110+ (body 50:3
111+ (branch 50:3
112+ (wing 50:6 args)
113+ (arm 51:5
114+ (cell 51:5 (bind 51:6 xs) (bind 51:9 f))
115+ (body 52:7
116+ (cast 52:7
117+ (apply 52:10 list (tvar 52:16 B))
118+ (body 53:9
119+ (branch 53:9
120+ (wing 53:12 xs)
121+ (arm 54:11 (lit 54:11 ~) (lit 54:13 ~))
122+ (arm 55:11
123+ (cell 55:11 (bind 55:12 item) (bind 55:17 rest))
124+ (tuple 55:23
125+ (group 55:24
126+ (call 55:25 (wing 55:25 f) (wing 55:27 item)))
127+ (group 55:33
128+ (call 55:34 (wing 55:34 turn) (wing 55:39 rest) (wing 55:44 f))))))))))))))
129+ (mold 57:1 dime
130+ (cell 57:9
131+ (face 57:10 p (aura 57:12 @ta))
132+ (face 57:16 q (aura 57:18 @))))
133+ (mold 59:1 hair
134+ (cell 59:9
135+ (face 59:10 p (aura 59:12 @ud))
136+ (face 59:16 q (aura 59:18 @ud))))
137+ (mold 61:1 pint
138+ (cell 61:9
139+ (face 61:10 p
140+ (cell 61:12
141+ (face 61:13 p (aura 61:15 @))
142+ (face 61:17 q (aura 61:19 @))))
143+ (face 61:22 q
144+ (cell 61:24
145+ (face 61:25 p (aura 61:27 @))
146+ (face 61:29 q (aura 61:31 @))))))
147+ (mold 63:1 coin
148+ (union 64:3
152149 (cell 64:3
153− (const 64:4 %blob)
154− (face 64:10 p (noun 64:12)))
150+ (const 64:4 %$)
151+ (face 64:7 p (ref 64:9 dime)))
155152 (cell 65:3
156− (const 65:4 %many)
157− (face 65:10 p
158− (apply 65:12 list (ref 65:18 coin))))))
159− (mold 67:1 pair
160− (generic 67:9 A B
161− (cell 67:18
162− (face 67:19 p (tvar 67:21 A))
163− (face 67:23 q (tvar 67:25 B)))))
164− (mold 69:1 trel
165− (generic 69:9 A B C
166− (cell 69:20
167− (face 69:21 p (tvar 69:23 A))
168− (face 69:25 q (tvar 69:27 B))
169− (face 69:29 r (tvar 69:31 C)))))
170− (mold 71:1 qual
171− (generic 71:9 A B C D
172− (cell 71:22
173− (face 71:23 p (tvar 71:25 A))
174− (face 71:27 q (tvar 71:29 B))
175− (face 71:31 r (tvar 71:33 C))
176− (face 71:35 s (tvar 71:37 D)))))
177− (mold 73:1 cord (aura 73:9 @t))
178− (mold 75:1 knot (aura 75:9 @ta))
179− (mold 77:1 tape
180− (apply 77:9 list (aura 77:15 @tD)))
181− (mold 79:1 path
182− (apply 79:9 list (ref 79:15 knot)))
183− (mold 81:1 tank
184− (union 82:3
185− (ref 82:3 cord)
186− (cell 83:3
187− (const 83:4 %leaf)
188− (face 83:10 p (ref 83:12 tape)))
153+ (const 65:4 %blob)
154+ (face 65:10 p (noun 65:12)))
155+ (cell 66:3
156+ (const 66:4 %many)
157+ (face 66:10 p
158+ (apply 66:12 list (ref 66:18 coin))))))
159+ (mold 68:1 pair
160+ (generic 68:9 A B
161+ (cell 68:18
162+ (face 68:19 p (tvar 68:21 A))
163+ (face 68:23 q (tvar 68:25 B)))))
164+ (mold 70:1 trel
165+ (generic 70:9 A B C
166+ (cell 70:20
167+ (face 70:21 p (tvar 70:23 A))
168+ (face 70:25 q (tvar 70:27 B))
169+ (face 70:29 r (tvar 70:31 C)))))
170+ (mold 72:1 qual
171+ (generic 72:9 A B C D
172+ (cell 72:22
173+ (face 72:23 p (tvar 72:25 A))
174+ (face 72:27 q (tvar 72:29 B))
175+ (face 72:31 r (tvar 72:33 C))
176+ (face 72:35 s (tvar 72:37 D)))))
177+ (mold 74:1 cord (aura 74:9 @t))
178+ (mold 76:1 knot (aura 76:9 @ta))
179+ (mold 78:1 tape
180+ (apply 78:9 list (aura 78:15 @tD)))
181+ (mold 80:1 path
182+ (apply 80:9 list (ref 80:15 knot)))
183+ (mold 82:1 tank
184+ (union 83:3
185+ (ref 83:3 cord)
189186 (cell 84:3
190− (const 84:4 %palm)
191− (face 84:10 p
192− (apply 84:12 qual (ref 84:18 tape) (ref 84:23 tape) (ref 84:28 tape) (ref 84:33 tape)))
193− (face 84:39 q
194− (apply 84:41 list (ref 84:47 tank))))
187+ (const 84:4 %leaf)
188+ (face 84:10 p (ref 84:12 tape)))
195189 (cell 85:3
196− (const 85:4 %rose)
190+ (const 85:4 %palm)
197191 (face 85:10 p
198− (apply 85:12 trel (ref 85:18 tape) (ref 85:23 tape) (ref 85:28 tape)))
199− (face 85:34 q
200− (apply 85:36 list (ref 85:42 tank))))))
201− (mold 87:1 nail
202− (cell 87:9
203− (face 87:10 p (ref 87:12 hair))
204− (face 87:17 q (ref 87:19 tape))))
205− (mold 89:1 edge
206− (cell 89:9
207− (face 89:10 p (ref 89:12 hair))
208− (face 89:17 q
209− (apply 89:19 unit
210− (cell 89:25
211− (face 89:26 p (noun 89:28))
212− (face 89:30 q (ref 89:32 nail)))))))
213− (mold 91:1 rule
214− (fn 91:9 (ref 91:12 nail) (ref 91:17 edge)))
215− (mold 93:1 spot
216− (cell 93:9
217− (face 93:10 p (ref 93:12 path))
218− (face 93:17 q (ref 93:19 pint))))
219− (mold 95:1 toon
220− (union 96:3
221− (cell 96:3
222− (const 96:4 %0)
223− (face 96:7 p (noun 96:9)))
192+ (apply 85:12 qual (ref 85:18 tape) (ref 85:23 tape) (ref 85:28 tape) (ref 85:33 tape)))
193+ (face 85:39 q
194+ (apply 85:41 list (ref 85:47 tank))))
195+ (cell 86:3
196+ (const 86:4 %rose)
197+ (face 86:10 p
198+ (apply 86:12 trel (ref 86:18 tape) (ref 86:23 tape) (ref 86:28 tape)))
199+ (face 86:34 q
200+ (apply 86:36 list (ref 86:42 tank))))))
201+ (mold 88:1 nail
202+ (cell 88:9
203+ (face 88:10 p (ref 88:12 hair))
204+ (face 88:17 q (ref 88:19 tape))))
205+ (mold 90:1 edge
206+ (cell 90:9
207+ (face 90:10 p (ref 90:12 hair))
208+ (face 90:17 q
209+ (apply 90:19 unit
210+ (cell 90:25
211+ (face 90:26 p (noun 90:28))
212+ (face 90:30 q (ref 90:32 nail)))))))
213+ (mold 92:1 rule
214+ (fn 92:9 (ref 92:12 nail) (ref 92:17 edge)))
215+ (mold 94:1 spot
216+ (cell 94:9
217+ (face 94:10 p (ref 94:12 path))
218+ (face 94:17 q (ref 94:19 pint))))
219+ (mold 96:1 toon
220+ (union 97:3
224221 (cell 97:3
225− (const 97:4 %1)
222+ (const 97:4 %0)
226223 (face 97:7 p (noun 97:9)))
227224 (cell 98:3
228− (const 98:4 %2)
229− (face 98:7 p
230− (apply 98:9 list (ref 98:15 tank))))))
231− (mold 100:1 like
232− (generic 100:9 A
233− (cell 100:16
234− (face 100:17 p (ref 100:19 hair))
235− (face 100:24 q
236− (apply 100:26 unit
237− (cell 100:32
238− (face 100:33 p (tvar 100:35 A))
239− (face 100:37 q (ref 100:39 nail))))))))
240− (value 102:1 wonk
241− (gate 102:9
242− (face 102:12 veq
243− (apply 102:16 like (tvar 102:22 A)))
244− (body 103:3
245− (branch 103:3
246− (wing 103:6 q.veq)
247− (arm 104:5 (lit 104:5 ~) (crash 104:7))
248− (arm 105:5
249− (cell 105:5 (lit 105:6 ~) (bind 105:8 product))
250− (wing 105:17 p.product))))))
251− (mold 107:1 lone
252− (generic 107:9 A
253− (cell 107:16
254− (face 107:17 p (tvar 107:19 A)))))
255− (mold 109:1 lest
256− (generic 109:9 A
257− (cell 109:16
258− (face 109:17 i (tvar 109:19 A))
259− (face 109:21 t
260− (apply 109:23 list (tvar 109:29 A))))))
261− (mold 111:1 pole
262− (generic 111:9 A
263− (union 112:3
264− (const 112:3 ~)
265− (cell 113:3
266− (tvar 113:4 A)
267− (apply 113:6 pole (tvar 113:12 A))))))
268− (mold 115:1 quip
269− (generic 115:9 A B
270− (cell 115:18
271− (apply 115:19 list (tvar 115:25 A))
272− (tvar 115:28 B))))
273− (mold 117:1 tree
274− (generic 117:9 A
275− (union 118:3
276− (const 118:3 ~)
277− (cell 119:3
278− (face 119:4 n (tvar 119:6 A))
279− (face 119:8 l
280− (apply 119:10 tree (tvar 119:16 A)))
281− (face 119:19 r
282− (apply 119:21 tree (tvar 119:27 A)))))))
283− (mold 121:1 each
284− (generic 121:9 A B
285− (union 122:3
286− (cell 122:3
287− (const 122:4 %|)
288− (face 122:7 p (tvar 122:9 B)))
225+ (const 98:4 %1)
226+ (face 98:7 p (noun 98:9)))
227+ (cell 99:3
228+ (const 99:4 %2)
229+ (face 99:7 p
230+ (apply 99:9 list (ref 99:15 tank))))))
231+ (mold 101:1 like
232+ (generic 101:9 A
233+ (cell 101:16
234+ (face 101:17 p (ref 101:19 hair))
235+ (face 101:24 q
236+ (apply 101:26 unit
237+ (cell 101:32
238+ (face 101:33 p (tvar 101:35 A))
239+ (face 101:37 q (ref 101:39 nail))))))))
240+ (value 103:1 wonk
241+ (gate 103:9
242+ (face 103:12 veq
243+ (apply 103:16 like (tvar 103:22 A)))
244+ (body 104:3
245+ (branch 104:3
246+ (wing 104:6 q.veq)
247+ (arm 105:5 (lit 105:5 ~) (crash 105:7))
248+ (arm 106:5
249+ (cell 106:5 (lit 106:6 ~) (bind 106:8 product))
250+ (wing 106:17 p.product))))))
251+ (mold 108:1 lone
252+ (generic 108:9 A
253+ (cell 108:16
254+ (face 108:17 p (tvar 108:19 A)))))
255+ (mold 110:1 lest
256+ (generic 110:9 A
257+ (cell 110:16
258+ (face 110:17 i (tvar 110:19 A))
259+ (face 110:21 t
260+ (apply 110:23 list (tvar 110:29 A))))))
261+ (mold 112:1 pole
262+ (generic 112:9 A
263+ (union 113:3
264+ (const 113:3 ~)
265+ (cell 114:3
266+ (tvar 114:4 A)
267+ (apply 114:6 pole (tvar 114:12 A))))))
268+ (mold 116:1 quip
269+ (generic 116:9 A B
270+ (cell 116:18
271+ (apply 116:19 list (tvar 116:25 A))
272+ (tvar 116:28 B))))
273+ (mold 118:1 tree
274+ (generic 118:9 A
275+ (union 119:3
276+ (const 119:3 ~)
277+ (cell 120:3
278+ (face 120:4 n (tvar 120:6 A))
279+ (face 120:8 l
280+ (apply 120:10 tree (tvar 120:16 A)))
281+ (face 120:19 r
282+ (apply 120:21 tree (tvar 120:27 A)))))))
283+ (mold 122:1 each
284+ (generic 122:9 A B
285+ (union 123:3
289286 (cell 123:3
290− (const 123:4 %&)
291− (face 123:7 p (tvar 123:9 A))))))
292− (mold 125:1 bloq (aura 125:9 @))
293− (value 127:1 some
294− (gate 127:9
295− (face 127:12 item (tvar 127:17 A))
296− (unit 127:19 (wing 127:20 item))))
297− (value 129:1 lure
298− (gate 129:9
299− (face 129:12 item (tvar 129:17 A))
300− (body 130:3
301− (cast 130:3
302− (apply 130:6 list (tvar 130:12 A))
303− (tuple 130:15 (wing 130:16 item) (lit 130:21 ~))))))
304− (value 132:1 snoc
305− (gate 132:9
306− (face 132:12 args
307− (cell 132:17
308− (apply 132:18 list (tvar 132:24 A))
309− (tvar 132:27 A)))
310− (body 133:3
311− (branch 133:3
312− (wing 133:6 args)
313− (arm 134:5
314− (cell 134:5 (bind 134:6 xs) (bind 134:9 item))
315− (group 134:15
316− (call 134:16
317− (wing 134:16 weld)
318− (wing 134:21 xs)
319− (tuple 134:24 (wing 134:25 item) (lit 134:30 ~)))))))))
320− (value 136:1 flop
321− (gate 136:9
322− (face 136:12 xs
323− (apply 136:15 list (tvar 136:21 A)))
324− (body 137:3
325− (value 137:3 reverse-into
326− (gate 137:19
327− (face 137:22 args
328− (cell 137:27
329− (apply 137:28 list (tvar 137:34 A))
330− (apply 137:37 list (tvar 137:43 A))))
331− (body 138:5
332− (branch 138:5
333− (wing 138:8 args)
334− (arm 139:7
335− (cell 139:7 (bind 139:8 rest) (bind 139:13 acc))
336− (body 140:9
337− (branch 140:9
338− (wing 140:12 rest)
339− (arm 141:11 (lit 141:11 ~) (wing 141:13 acc))
340− (arm 142:11
341− (cell 142:11 (bind 142:12 item) (bind 142:17 more))
342− (group 142:23
343− (call 142:24
344− (wing 142:24 reverse-into)
345− (wing 142:37 more)
346− (tuple 142:42 (wing 142:43 item) (wing 142:48 acc))))))))))))
347− (group 143:3
348− (call 143:4 (wing 143:4 reverse-into) (wing 143:17 xs) (lit 143:20 ~))))))
349− (value 145:1 drop
350− (gate 145:9
351− (face 145:12 maybe
352− (apply 145:18 unit (tvar 145:24 A)))
353− (body 146:3
354− (branch 146:3
355− (wing 146:6 maybe)
356− (arm 147:5 (lit 147:5 ~) (lit 147:7 ~))
357− (arm 148:5
358− (cell 148:5 (lit 148:6 ~) (bind 148:8 value))
359− (tuple 148:15 (wing 148:16 value) (lit 148:22 ~)))))))
360− (value 150:1 bind
361− (gate 150:9
362− (face 150:12 args
363− (cell 150:17
364− (apply 150:18 unit (tvar 150:24 A))
365− (fn 150:27 (tvar 150:30 A) (tvar 150:32 B))))
366− (body 151:3
367− (branch 151:3
368− (wing 151:6 args)
369− (arm 152:5
370− (cell 152:5 (bind 152:6 maybe) (bind 152:12 f))
371− (cast 152:15
372− (apply 152:18 unit (tvar 152:24 B))
373− (body 153:7
374− (branch 153:7
375− (wing 153:10 maybe)
376− (arm 154:9 (lit 154:9 ~) (lit 154:11 ~))
377− (arm 155:9
378− (cell 155:9 (lit 155:10 ~) (bind 155:12 value))
379− (unit 155:19
380− (group 155:20
381− (call 155:21 (wing 155:21 f) (wing 155:23 value)))))))))))))
382− (value 157:1 biff
383− (gate 157:9
384− (face 157:12 args
385− (cell 157:17
386− (apply 157:18 unit (tvar 157:24 A))
387− (fn 157:27
388− (tvar 157:30 A)
389− (apply 157:32 unit (tvar 157:38 B)))))
390− (body 158:3
391− (branch 158:3
392− (wing 158:6 args)
393− (arm 159:5
394− (cell 159:5 (bind 159:6 maybe) (bind 159:12 f))
395− (cast 159:15
396− (apply 159:18 unit (tvar 159:24 B))
397− (body 160:7
398− (branch 160:7
399− (wing 160:10 maybe)
400− (arm 161:9 (lit 161:9 ~) (lit 161:11 ~))
401− (arm 162:9
402− (cell 162:9 (lit 162:10 ~) (bind 162:12 value))
403− (group 162:19
404− (call 162:20 (wing 162:20 f) (wing 162:22 value))))))))))))
405− (value 164:1 both
406− (gate 164:9
407− (face 164:12 args
408− (cell 164:17
409− (apply 164:18 unit (tvar 164:24 A))
410− (apply 164:27 unit (tvar 164:33 B))))
411− (body 165:3
412− (branch 165:3
413− (wing 165:6 args)
414− (arm 166:5
415− (cell 166:5 (bind 166:6 first) (bind 166:12 second))
416− (cast 166:20
417− (apply 166:23 unit
418− (cell 166:29 (tvar 166:30 A) (tvar 166:32 B)))
419− (body 167:7
420− (branch 167:7
421− (wing 167:10 first)
422− (arm 168:9 (lit 168:9 ~) (lit 168:11 ~))
423− (arm 169:9
424− (cell 169:9 (lit 169:10 ~) (bind 169:12 a))
425− (body 170:11
426− (branch 170:11
427− (wing 170:14 second)
428− (arm 171:13 (lit 171:13 ~) (lit 171:15 ~))
429− (arm 172:13
430− (cell 172:13 (lit 172:14 ~) (bind 172:16 b))
431− (unit 172:19
432− (tuple 172:20 (wing 172:21 a) (wing 172:23 b)))))))))))))))
433− (value 174:1 clap
434− (gate 174:9
435− (face 174:12 args
436− (cell 174:17
437− (apply 174:18 unit (tvar 174:24 A))
438− (apply 174:27 unit (tvar 174:33 A))
439− (fn 174:36
440− (cell 174:39 (tvar 174:40 A) (tvar 174:42 A))
441− (tvar 174:45 A))))
442− (body 175:3
443− (branch 175:3
444− (wing 175:6 args)
445− (arm 176:5
446− (cell 176:5 (bind 176:6 first) (bind 176:12 second) (bind 176:19 combine))
447− (cast 176:28
448− (apply 176:31 unit (tvar 176:37 A))
449− (body 177:7
450− (branch 177:7
451− (wing 177:10 first)
452− (arm 178:9 (lit 178:9 ~) (wing 178:11 second))
453− (arm 179:9
454− (cell 179:9 (lit 179:10 ~) (bind 179:12 a))
455− (body 180:11
456− (branch 180:11
457− (wing 180:14 second)
458− (arm 181:13 (lit 181:13 ~) (wing 181:15 first))
459− (arm 182:13
460− (cell 182:13 (lit 182:14 ~) (bind 182:16 b))
461− (unit 182:19
462− (group 182:20
463− (call 182:21 (wing 182:21 combine) (wing 182:29 a) (wing 182:31 b))))))))))))))))
464− (value 184:1 clef
465− (gate 184:9
466− (face 184:12 args
467− (cell 184:17
468− (apply 184:18 unit (tvar 184:24 A))
469− (apply 184:27 unit (tvar 184:33 B))
470− (fn 184:36
471− (cell 184:39 (tvar 184:40 A) (tvar 184:42 B))
472− (apply 184:45 unit (tvar 184:51 C)))))
473− (body 185:3
474− (branch 185:3
475− (wing 185:6 args)
476− (arm 186:5
477− (cell 186:5 (bind 186:6 first) (bind 186:12 second) (bind 186:19 combine))
478− (cast 186:28
479− (apply 186:31 unit (tvar 186:37 C))
480− (body 187:7
481− (branch 187:7
482− (wing 187:10 first)
483− (arm 188:9 (lit 188:9 ~) (lit 188:11 ~))
484− (arm 189:9
485− (cell 189:9 (lit 189:10 ~) (bind 189:12 a))
486− (body 190:11
487− (branch 190:11
488− (wing 190:14 second)
489− (arm 191:13 (lit 191:13 ~) (lit 191:15 ~))
490− (arm 192:13
491− (cell 192:13 (lit 192:14 ~) (bind 192:16 b))
492− (group 192:19
493− (call 192:20 (wing 192:20 combine) (wing 192:28 a) (wing 192:30 b)))))))))))))))
494− (value 194:1 skim
495− (gate 194:9
496− (face 194:12 args
497− (cell 194:17
498− (apply 194:18 list (tvar 194:24 A))
499− (fn 194:27 (tvar 194:30 A) (flag 194:32))))
500− (body 195:3
501− (branch 195:3
502− (wing 195:6 args)
503− (arm 196:5
504− (cell 196:5 (bind 196:6 xs) (bind 196:9 predicate))
505− (body 197:7
506− (branch 197:7
507− (wing 197:10 xs)
508− (arm 198:9 (lit 198:9 ~) (lit 198:11 ~))
509− (arm 199:9
510− (cell 199:9 (bind 199:10 item) (bind 199:15 rest))
511− (body 200:11
512− (branch 200:11
513− (group 200:14
514− (call 200:15 (wing 200:15 predicate) (wing 200:25 item)))
515− (arm 201:13
516− (lit 201:13 %.y)
517− (tuple 201:17
518− (wing 201:18 item)
519− (group 201:23
520− (call 201:24 (wing 201:24 skim) (wing 201:29 rest) (wing 201:34 predicate)))))
521− (arm 202:13
522− (lit 202:13 %.n)
523− (group 202:17
524− (call 202:18 (wing 202:18 skim) (wing 202:23 rest) (wing 202:28 predicate))))))))))))))
525− (value 204:1 skip
526− (gate 204:9
527− (face 204:12 args
528− (cell 204:17
529− (apply 204:18 list (tvar 204:24 A))
530− (fn 204:27 (tvar 204:30 A) (flag 204:32))))
531− (body 205:3
532− (branch 205:3
533− (wing 205:6 args)
534− (arm 206:5
535− (cell 206:5 (bind 206:6 xs) (bind 206:9 predicate))
536− (body 207:7
537− (branch 207:7
538− (wing 207:10 xs)
539− (arm 208:9 (lit 208:9 ~) (lit 208:11 ~))
540− (arm 209:9
541− (cell 209:9 (bind 209:10 item) (bind 209:15 rest))
542− (body 210:11
543− (branch 210:11
544− (group 210:14
545− (call 210:15 (wing 210:15 predicate) (wing 210:25 item)))
546− (arm 211:13
547− (lit 211:13 %.y)
548− (group 211:17
549− (call 211:18 (wing 211:18 skip) (wing 211:23 rest) (wing 211:28 predicate))))
550− (arm 212:13
551− (lit 212:13 %.n)
552− (tuple 212:17
553− (wing 212:18 item)
554− (group 212:23
555− (call 212:24 (wing 212:24 skip) (wing 212:29 rest) (wing 212:34 predicate)))))))))))))))
556− (value 214:1 levy
557− (gate 214:9
558− (face 214:12 args
559− (cell 214:17
560− (apply 214:18 list (tvar 214:24 A))
561− (fn 214:27 (tvar 214:30 A) (flag 214:32))))
562− (body 215:3
563− (branch 215:3
564− (wing 215:6 args)
565− (arm 216:5
566− (cell 216:5 (bind 216:6 xs) (bind 216:9 predicate))
567− (body 217:7
568− (branch 217:7
569− (wing 217:10 xs)
570− (arm 218:9 (lit 218:9 ~) (lit 218:11 %.y))
571− (arm 219:9
572− (cell 219:9 (bind 219:10 item) (bind 219:15 rest))
573− (body 220:11
574− (branch 220:11
575− (group 220:14
576− (call 220:15 (wing 220:15 predicate) (wing 220:25 item)))
577− (arm 221:13
578− (lit 221:13 %.y)
579− (group 221:17
580− (call 221:18 (wing 221:18 levy) (wing 221:23 rest) (wing 221:28 predicate))))
581− (arm 222:13 (lit 222:13 %.n) (lit 222:17 %.n))))))))))))
582− (value 224:1 lien
583− (gate 224:9
584− (face 224:12 args
585− (cell 224:17
586− (apply 224:18 list (tvar 224:24 A))
587− (fn 224:27 (tvar 224:30 A) (flag 224:32))))
588− (body 225:3
589− (branch 225:3
590− (wing 225:6 args)
591− (arm 226:5
592− (cell 226:5 (bind 226:6 xs) (bind 226:9 predicate))
593− (body 227:7
594− (branch 227:7
595− (wing 227:10 xs)
596− (arm 228:9 (lit 228:9 ~) (lit 228:11 %.n))
597− (arm 229:9
598− (cell 229:9 (bind 229:10 item) (bind 229:15 rest))
599− (body 230:11
600− (branch 230:11
601− (group 230:14
602− (call 230:15 (wing 230:15 predicate) (wing 230:25 item)))
603− (arm 231:13 (lit 231:13 %.y) (lit 231:17 %.y))
604− (arm 232:13
605− (lit 232:13 %.n)
606− (group 232:17
607− (call 232:18 (wing 232:18 lien) (wing 232:23 rest) (wing 232:28 predicate))))))))))))))
608− (value 234:1 roll
609− (gate 234:9
610− (face 234:12 args
611− (cell 234:17
612− (apply 234:18 list (tvar 234:24 A))
613− (tvar 234:27 B)
614− (fn 234:29
615− (cell 234:32 (tvar 234:33 A) (tvar 234:35 B))
616− (tvar 234:38 B))))
617− (body 235:3
618− (branch 235:3
619− (wing 235:6 args)
620− (arm 236:5
621− (cell 236:5 (bind 236:6 xs) (bind 236:9 start) (bind 236:15 combine))
622− (body 237:7
623− (branch 237:7
624− (wing 237:10 xs)
625− (arm 238:9 (lit 238:9 ~) (wing 238:11 start))
626− (arm 239:9
627− (cell 239:9 (bind 239:10 item) (bind 239:15 rest))
628− (group 239:21
629− (call 239:22
630− (wing 239:22 roll)
631− (wing 239:27 rest)
632− (group 239:32
633− (call 239:33 (wing 239:33 combine) (wing 239:41 item) (wing 239:46 start)))
634− (wing 239:53 combine)))))))))))
635− (value 241:1 reel
636− (gate 241:9
637− (face 241:12 args
638− (cell 241:17
639− (apply 241:18 list (tvar 241:24 A))
640− (tvar 241:27 B)
641− (fn 241:29
642− (cell 241:32 (tvar 241:33 A) (tvar 241:35 B))
643− (tvar 241:38 B))))
644− (body 242:3
645− (branch 242:3
646− (wing 242:6 args)
647− (arm 243:5
648− (cell 243:5 (bind 243:6 xs) (bind 243:9 start) (bind 243:15 combine))
649− (body 244:7
650− (branch 244:7
651− (wing 244:10 xs)
652− (arm 245:9 (lit 245:9 ~) (wing 245:11 start))
653− (arm 246:9
654− (cell 246:9 (bind 246:10 item) (bind 246:15 rest))
655− (group 246:21
656− (call 246:22
657− (wing 246:22 combine)
658− (wing 246:30 item)
659− (group 246:35
660− (call 246:36 (wing 246:36 reel) (wing 246:41 rest) (wing 246:46 start) (wing 246:52 combine)))))))))))))
661− (value 248:1 flit
662− (gate 248:9
663− (face 248:12 predicate
664− (fn 248:22 (tvar 248:25 A) (flag 248:27)))
665− (body 249:3
666− (gate 249:3
667− (face 249:6 value (tvar 249:12 A))
668− (body 250:5
669− (cast 250:5
670− (apply 250:8 unit (tvar 250:14 A))
671− (body 251:7
672− (branch 251:7
673− (group 251:10
674− (call 251:11 (wing 251:11 predicate) (wing 251:21 value)))
675− (arm 252:9
676− (lit 252:9 %.y)
677− (unit 252:13 (wing 252:14 value)))
678− (arm 253:9 (lit 253:9 %.n) (lit 253:13 ~))))))))))
679− (value 255:1 murn
680− (gate 255:9
681− (face 255:12 args
682− (cell 255:17
683− (apply 255:18 list (tvar 255:24 A))
684− (fn 255:27
685− (tvar 255:30 A)
686− (apply 255:32 unit (tvar 255:38 B)))))
687− (body 256:3
688− (branch 256:3
689− (wing 256:6 args)
690− (arm 257:5
691− (cell 257:5 (bind 257:6 xs) (bind 257:9 f))
692− (body 258:7
693− (branch 258:7
694− (wing 258:10 xs)
695− (arm 259:9 (lit 259:9 ~) (lit 259:11 ~))
696− (arm 260:9
697− (cell 260:9 (bind 260:10 item) (bind 260:15 rest))
698− (body 261:11
699− (branch 261:11
700− (group 261:14
701− (call 261:15 (wing 261:15 f) (wing 261:17 item)))
702− (arm 262:13
703− (lit 262:13 ~)
704− (group 262:15
705− (call 262:16 (wing 262:16 murn) (wing 262:21 rest) (wing 262:26 f))))
706− (arm 263:13
707− (cell 263:13 (lit 263:14 ~) (bind 263:16 value))
708− (tuple 263:23
709− (wing 263:24 value)
710− (group 263:30
711− (call 263:31 (wing 263:31 murn) (wing 263:36 rest) (wing 263:41 f)))))))))))))))
712− (value 265:1 join
713− (gate 265:9
714− (face 265:12 args
715− (cell 265:17
716− (tvar 265:18 A)
717− (apply 265:20 list (tvar 265:26 A))))
718− (body 266:3
719− (branch 266:3
720− (wing 266:6 args)
721− (arm 267:5
722− (cell 267:5 (bind 267:6 separator) (bind 267:16 xs))
723− (body 268:7
724− (branch 268:7
725− (wing 268:10 xs)
726− (arm 269:9 (lit 269:9 ~) (lit 269:11 ~))
727− (arm 270:9
728− (cell 270:9 (bind 270:10 item) (bind 270:15 rest))
729− (body 271:11
730− (branch 271:11
731− (wing 271:14 rest)
732− (arm 272:13
733− (lit 272:13 ~)
734− (tuple 272:15 (wing 272:16 item) (lit 272:21 ~)))
735− (arm 273:13
736− (cell 273:13 (bind 273:14 next) (bind 273:19 more))
737− (tuple 273:25
738− (wing 273:26 item)
739− (tuple 273:31
740− (wing 273:32 separator)
741− (group 273:42
742− (call 273:43 (wing 273:43 join) (wing 273:48 separator) (wing 273:58 rest))))))))))))))))
743− (value 275:1 snip
744− (gate 275:9
745− (face 275:12 xs
746− (apply 275:15 list (tvar 275:21 A)))
747− (body 276:3
748− (branch 276:3
749− (wing 276:6 xs)
750− (arm 277:5 (lit 277:5 ~) (lit 277:7 ~))
751− (arm 278:5
752− (cell 278:5 (bind 278:6 item) (bind 278:11 rest))
753− (body 279:7
754− (branch 279:7
755− (wing 279:10 rest)
756− (arm 280:9 (lit 280:9 ~) (lit 280:11 ~))
757− (arm 281:9
758− (cell 281:9 (bind 281:10 next) (bind 281:15 more))
759− (tuple 281:21
760− (wing 281:22 item)
761− (group 281:27
762− (call 281:28 (wing 281:28 snip) (wing 281:33 rest))))))))))))
763− (value 283:1 rear
764− (gate 283:9
765− (face 283:12 xs
766− (apply 283:15 list (tvar 283:21 A)))
767− (body 284:3
768− (branch 284:3
769− (wing 284:6 xs)
770− (arm 285:5 (lit 285:5 ~) (crash 285:7))
771− (arm 286:5
772− (cell 286:5 (bind 286:6 item) (bind 286:11 rest))
773− (body 287:7
774− (branch 287:7
775− (wing 287:10 rest)
776− (arm 288:9 (lit 288:9 ~) (wing 288:11 item))
777− (arm 289:9
778− (cell 289:9 (bind 289:10 next) (bind 289:15 more))
779− (group 289:21
780− (call 289:22 (wing 289:22 rear) (wing 289:27 rest))))))))))))
287+ (const 123:4 %|)
288+ (face 123:7 p (tvar 123:9 B)))
289+ (cell 124:3
290+ (const 124:4 %&)
291+ (face 124:7 p (tvar 124:9 A))))))
292+ (mold 126:1 bloq (aura 126:9 @))
293+ (value 128:1 some
294+ (gate 128:9
295+ (face 128:12 item (tvar 128:17 A))
296+ (unit 128:19 (wing 128:20 item))))
297+ (value 130:1 lure
298+ (gate 130:9
299+ (face 130:12 item (tvar 130:17 A))
300+ (body 131:3
301+ (cast 131:3
302+ (apply 131:6 list (tvar 131:12 A))
303+ (tuple 131:15 (wing 131:16 item) (lit 131:21 ~))))))
304+ (value 133:1 snoc
305+ (gate 133:9
306+ (face 133:12 args
307+ (cell 133:17
308+ (apply 133:18 list (tvar 133:24 A))
309+ (tvar 133:27 A)))
310+ (body 134:3
311+ (branch 134:3
312+ (wing 134:6 args)
313+ (arm 135:5
314+ (cell 135:5 (bind 135:6 xs) (bind 135:9 item))
315+ (group 135:15
316+ (call 135:16
317+ (wing 135:16 weld)
318+ (wing 135:21 xs)
319+ (tuple 135:24 (wing 135:25 item) (lit 135:30 ~)))))))))
320+ (value 137:1 flop
321+ (gate 137:9
322+ (face 137:12 xs
323+ (apply 137:15 list (tvar 137:21 A)))
324+ (body 138:3
325+ (value 138:3 reverse-into
326+ (gate 138:19
327+ (face 138:22 args
328+ (cell 138:27
329+ (apply 138:28 list (tvar 138:34 A))
330+ (apply 138:37 list (tvar 138:43 A))))
331+ (body 139:5
332+ (branch 139:5
333+ (wing 139:8 args)
334+ (arm 140:7
335+ (cell 140:7 (bind 140:8 rest) (bind 140:13 acc))
336+ (body 141:9
337+ (branch 141:9
338+ (wing 141:12 rest)
339+ (arm 142:11 (lit 142:11 ~) (wing 142:13 acc))
340+ (arm 143:11
341+ (cell 143:11 (bind 143:12 item) (bind 143:17 more))
342+ (group 143:23
343+ (call 143:24
344+ (wing 143:24 reverse-into)
345+ (wing 143:37 more)
346+ (tuple 143:42 (wing 143:43 item) (wing 143:48 acc))))))))))))
347+ (group 144:3
348+ (call 144:4 (wing 144:4 reverse-into) (wing 144:17 xs) (lit 144:20 ~))))))
349+ (value 146:1 drop
350+ (gate 146:9
351+ (face 146:12 maybe
352+ (apply 146:18 unit (tvar 146:24 A)))
353+ (body 147:3
354+ (cast 147:3
355+ (apply 147:6 list (tvar 147:12 A))
356+ (body 148:5
357+ (branch 148:5
358+ (wing 148:8 maybe)
359+ (arm 149:7 (lit 149:7 ~) (lit 149:9 ~))
360+ (arm 150:7
361+ (cell 150:7 (lit 150:8 ~) (bind 150:10 value))
362+ (tuple 150:17 (wing 150:18 value) (lit 150:24 ~)))))))))
363+ (value 152:1 bind
364+ (gate 152:9
365+ (face 152:12 args
366+ (cell 152:17
367+ (apply 152:18 unit (tvar 152:24 A))
368+ (fn 152:27 (tvar 152:30 A) (tvar 152:32 B))))
369+ (body 153:3
370+ (branch 153:3
371+ (wing 153:6 args)
372+ (arm 154:5
373+ (cell 154:5 (bind 154:6 maybe) (bind 154:12 f))
374+ (cast 154:15
375+ (apply 154:18 unit (tvar 154:24 B))
376+ (body 155:7
377+ (branch 155:7
378+ (wing 155:10 maybe)
379+ (arm 156:9 (lit 156:9 ~) (lit 156:11 ~))
380+ (arm 157:9
381+ (cell 157:9 (lit 157:10 ~) (bind 157:12 value))
382+ (unit 157:19
383+ (group 157:20
384+ (call 157:21 (wing 157:21 f) (wing 157:23 value)))))))))))))
385+ (value 159:1 biff
386+ (gate 159:9
387+ (face 159:12 args
388+ (cell 159:17
389+ (apply 159:18 unit (tvar 159:24 A))
390+ (fn 159:27
391+ (tvar 159:30 A)
392+ (apply 159:32 unit (tvar 159:38 B)))))
393+ (body 160:3
394+ (branch 160:3
395+ (wing 160:6 args)
396+ (arm 161:5
397+ (cell 161:5 (bind 161:6 maybe) (bind 161:12 f))
398+ (cast 161:15
399+ (apply 161:18 unit (tvar 161:24 B))
400+ (body 162:7
401+ (branch 162:7
402+ (wing 162:10 maybe)
403+ (arm 163:9 (lit 163:9 ~) (lit 163:11 ~))
404+ (arm 164:9
405+ (cell 164:9 (lit 164:10 ~) (bind 164:12 value))
406+ (group 164:19
407+ (call 164:20 (wing 164:20 f) (wing 164:22 value))))))))))))
408+ (value 166:1 both
409+ (gate 166:9
410+ (face 166:12 args
411+ (cell 166:17
412+ (apply 166:18 unit (tvar 166:24 A))
413+ (apply 166:27 unit (tvar 166:33 B))))
414+ (body 167:3
415+ (branch 167:3
416+ (wing 167:6 args)
417+ (arm 168:5
418+ (cell 168:5 (bind 168:6 first) (bind 168:12 second))
419+ (cast 168:20
420+ (apply 168:23 unit
421+ (cell 168:29 (tvar 168:30 A) (tvar 168:32 B)))
422+ (body 169:7
423+ (branch 169:7
424+ (wing 169:10 first)
425+ (arm 170:9 (lit 170:9 ~) (lit 170:11 ~))
426+ (arm 171:9
427+ (cell 171:9 (lit 171:10 ~) (bind 171:12 a))
428+ (body 172:11
429+ (branch 172:11
430+ (wing 172:14 second)
431+ (arm 173:13 (lit 173:13 ~) (lit 173:15 ~))
432+ (arm 174:13
433+ (cell 174:13 (lit 174:14 ~) (bind 174:16 b))
434+ (unit 174:19
435+ (tuple 174:20 (wing 174:21 a) (wing 174:23 b)))))))))))))))
436+ (value 176:1 clap
437+ (gate 176:9
438+ (face 176:12 args
439+ (cell 176:17
440+ (apply 176:18 unit (tvar 176:24 A))
441+ (apply 176:27 unit (tvar 176:33 A))
442+ (fn 176:36
443+ (cell 176:39 (tvar 176:40 A) (tvar 176:42 A))
444+ (tvar 176:45 A))))
445+ (body 177:3
446+ (branch 177:3
447+ (wing 177:6 args)
448+ (arm 178:5
449+ (cell 178:5 (bind 178:6 first) (bind 178:12 second) (bind 178:19 combine))
450+ (cast 178:28
451+ (apply 178:31 unit (tvar 178:37 A))
452+ (body 179:7
453+ (branch 179:7
454+ (wing 179:10 first)
455+ (arm 180:9 (lit 180:9 ~) (wing 180:11 second))
456+ (arm 181:9
457+ (cell 181:9 (lit 181:10 ~) (bind 181:12 a))
458+ (body 182:11
459+ (branch 182:11
460+ (wing 182:14 second)
461+ (arm 183:13 (lit 183:13 ~) (wing 183:15 first))
462+ (arm 184:13
463+ (cell 184:13 (lit 184:14 ~) (bind 184:16 b))
464+ (unit 184:19
465+ (group 184:20
466+ (call 184:21 (wing 184:21 combine) (wing 184:29 a) (wing 184:31 b))))))))))))))))
467+ (value 186:1 clef
468+ (gate 186:9
469+ (face 186:12 args
470+ (cell 186:17
471+ (apply 186:18 unit (tvar 186:24 A))
472+ (apply 186:27 unit (tvar 186:33 B))
473+ (fn 186:36
474+ (cell 186:39 (tvar 186:40 A) (tvar 186:42 B))
475+ (apply 186:45 unit (tvar 186:51 C)))))
476+ (body 187:3
477+ (branch 187:3
478+ (wing 187:6 args)
479+ (arm 188:5
480+ (cell 188:5 (bind 188:6 first) (bind 188:12 second) (bind 188:19 combine))
481+ (cast 188:28
482+ (apply 188:31 unit (tvar 188:37 C))
483+ (body 189:7
484+ (branch 189:7
485+ (wing 189:10 first)
486+ (arm 190:9 (lit 190:9 ~) (lit 190:11 ~))
487+ (arm 191:9
488+ (cell 191:9 (lit 191:10 ~) (bind 191:12 a))
489+ (body 192:11
490+ (branch 192:11
491+ (wing 192:14 second)
492+ (arm 193:13 (lit 193:13 ~) (lit 193:15 ~))
493+ (arm 194:13
494+ (cell 194:13 (lit 194:14 ~) (bind 194:16 b))
495+ (group 194:19
496+ (call 194:20 (wing 194:20 combine) (wing 194:28 a) (wing 194:30 b)))))))))))))))
497+ (value 196:1 skim
498+ (gate 196:9
499+ (face 196:12 args
500+ (cell 196:17
501+ (apply 196:18 list (tvar 196:24 A))
502+ (fn 196:27 (tvar 196:30 A) (flag 196:32))))
503+ (body 197:3
504+ (branch 197:3
505+ (wing 197:6 args)
506+ (arm 198:5
507+ (cell 198:5 (bind 198:6 xs) (bind 198:9 predicate))
508+ (cast 198:20
509+ (apply 198:23 list (tvar 198:29 A))
510+ (body 199:9
511+ (branch 199:9
512+ (wing 199:12 xs)
513+ (arm 200:11 (lit 200:11 ~) (lit 200:13 ~))
514+ (arm 201:11
515+ (cell 201:11 (bind 201:12 item) (bind 201:17 rest))
516+ (body 202:13
517+ (branch 202:13
518+ (group 202:16
519+ (call 202:17 (wing 202:17 predicate) (wing 202:27 item)))
520+ (arm 203:15
521+ (lit 203:15 %.y)
522+ (tuple 203:19
523+ (wing 203:20 item)
524+ (group 203:25
525+ (call 203:26 (wing 203:26 skim) (wing 203:31 rest) (wing 203:36 predicate)))))
526+ (arm 204:15
527+ (lit 204:15 %.n)
528+ (group 204:19
529+ (call 204:20 (wing 204:20 skim) (wing 204:25 rest) (wing 204:30 predicate)))))))))))))))
530+ (value 206:1 skip
531+ (gate 206:9
532+ (face 206:12 args
533+ (cell 206:17
534+ (apply 206:18 list (tvar 206:24 A))
535+ (fn 206:27 (tvar 206:30 A) (flag 206:32))))
536+ (body 207:3
537+ (branch 207:3
538+ (wing 207:6 args)
539+ (arm 208:5
540+ (cell 208:5 (bind 208:6 xs) (bind 208:9 predicate))
541+ (cast 208:20
542+ (apply 208:23 list (tvar 208:29 A))
543+ (body 209:9
544+ (branch 209:9
545+ (wing 209:12 xs)
546+ (arm 210:11 (lit 210:11 ~) (lit 210:13 ~))
547+ (arm 211:11
548+ (cell 211:11 (bind 211:12 item) (bind 211:17 rest))
549+ (body 212:13
550+ (branch 212:13
551+ (group 212:16
552+ (call 212:17 (wing 212:17 predicate) (wing 212:27 item)))
553+ (arm 213:15
554+ (lit 213:15 %.y)
555+ (group 213:19
556+ (call 213:20 (wing 213:20 skip) (wing 213:25 rest) (wing 213:30 predicate))))
557+ (arm 214:15
558+ (lit 214:15 %.n)
559+ (tuple 214:19
560+ (wing 214:20 item)
561+ (group 214:25
562+ (call 214:26 (wing 214:26 skip) (wing 214:31 rest) (wing 214:36 predicate))))))))))))))))
563+ (value 216:1 levy
564+ (gate 216:9
565+ (face 216:12 args
566+ (cell 216:17
567+ (apply 216:18 list (tvar 216:24 A))
568+ (fn 216:27 (tvar 216:30 A) (flag 216:32))))
569+ (body 217:3
570+ (branch 217:3
571+ (wing 217:6 args)
572+ (arm 218:5
573+ (cell 218:5 (bind 218:6 xs) (bind 218:9 predicate))
574+ (body 219:7
575+ (branch 219:7
576+ (wing 219:10 xs)
577+ (arm 220:9 (lit 220:9 ~) (lit 220:11 %.y))
578+ (arm 221:9
579+ (cell 221:9 (bind 221:10 item) (bind 221:15 rest))
580+ (body 222:11
581+ (branch 222:11
582+ (group 222:14
583+ (call 222:15 (wing 222:15 predicate) (wing 222:25 item)))
584+ (arm 223:13
585+ (lit 223:13 %.y)
586+ (group 223:17
587+ (call 223:18 (wing 223:18 levy) (wing 223:23 rest) (wing 223:28 predicate))))
588+ (arm 224:13 (lit 224:13 %.n) (lit 224:17 %.n))))))))))))
589+ (value 226:1 lien
590+ (gate 226:9
591+ (face 226:12 args
592+ (cell 226:17
593+ (apply 226:18 list (tvar 226:24 A))
594+ (fn 226:27 (tvar 226:30 A) (flag 226:32))))
595+ (body 227:3
596+ (branch 227:3
597+ (wing 227:6 args)
598+ (arm 228:5
599+ (cell 228:5 (bind 228:6 xs) (bind 228:9 predicate))
600+ (body 229:7
601+ (branch 229:7
602+ (wing 229:10 xs)
603+ (arm 230:9 (lit 230:9 ~) (lit 230:11 %.n))
604+ (arm 231:9
605+ (cell 231:9 (bind 231:10 item) (bind 231:15 rest))
606+ (body 232:11
607+ (branch 232:11
608+ (group 232:14
609+ (call 232:15 (wing 232:15 predicate) (wing 232:25 item)))
610+ (arm 233:13 (lit 233:13 %.y) (lit 233:17 %.y))
611+ (arm 234:13
612+ (lit 234:13 %.n)
613+ (group 234:17
614+ (call 234:18 (wing 234:18 lien) (wing 234:23 rest) (wing 234:28 predicate))))))))))))))
615+ (value 236:1 roll
616+ (gate 236:9
617+ (face 236:12 args
618+ (cell 236:17
619+ (apply 236:18 list (tvar 236:24 A))
620+ (tvar 236:27 B)
621+ (fn 236:29
622+ (cell 236:32 (tvar 236:33 A) (tvar 236:35 B))
623+ (tvar 236:38 B))))
624+ (body 237:3
625+ (branch 237:3
626+ (wing 237:6 args)
627+ (arm 238:5
628+ (cell 238:5 (bind 238:6 xs) (bind 238:9 start) (bind 238:15 combine))
629+ (body 239:7
630+ (branch 239:7
631+ (wing 239:10 xs)
632+ (arm 240:9 (lit 240:9 ~) (wing 240:11 start))
633+ (arm 241:9
634+ (cell 241:9 (bind 241:10 item) (bind 241:15 rest))
635+ (group 241:21
636+ (call 241:22
637+ (wing 241:22 roll)
638+ (wing 241:27 rest)
639+ (group 241:32
640+ (call 241:33 (wing 241:33 combine) (wing 241:41 item) (wing 241:46 start)))
641+ (wing 241:53 combine)))))))))))
642+ (value 243:1 reel
643+ (gate 243:9
644+ (face 243:12 args
645+ (cell 243:17
646+ (apply 243:18 list (tvar 243:24 A))
647+ (tvar 243:27 B)
648+ (fn 243:29
649+ (cell 243:32 (tvar 243:33 A) (tvar 243:35 B))
650+ (tvar 243:38 B))))
651+ (body 244:3
652+ (branch 244:3
653+ (wing 244:6 args)
654+ (arm 245:5
655+ (cell 245:5 (bind 245:6 xs) (bind 245:9 start) (bind 245:15 combine))
656+ (body 246:7
657+ (branch 246:7
658+ (wing 246:10 xs)
659+ (arm 247:9 (lit 247:9 ~) (wing 247:11 start))
660+ (arm 248:9
661+ (cell 248:9 (bind 248:10 item) (bind 248:15 rest))
662+ (group 248:21
663+ (call 248:22
664+ (wing 248:22 combine)
665+ (wing 248:30 item)
666+ (group 248:35
667+ (call 248:36 (wing 248:36 reel) (wing 248:41 rest) (wing 248:46 start) (wing 248:52 combine)))))))))))))
668+ (value 250:1 flit
669+ (gate 250:9
670+ (face 250:12 predicate
671+ (fn 250:22 (tvar 250:25 A) (flag 250:27)))
672+ (body 251:3
673+ (gate 251:3
674+ (face 251:6 value (tvar 251:12 A))
675+ (body 252:5
676+ (cast 252:5
677+ (apply 252:8 unit (tvar 252:14 A))
678+ (body 253:7
679+ (branch 253:7
680+ (group 253:10
681+ (call 253:11 (wing 253:11 predicate) (wing 253:21 value)))
682+ (arm 254:9
683+ (lit 254:9 %.y)
684+ (unit 254:13 (wing 254:14 value)))
685+ (arm 255:9 (lit 255:9 %.n) (lit 255:13 ~))))))))))
686+ (value 257:1 murn
687+ (gate 257:9
688+ (face 257:12 args
689+ (cell 257:17
690+ (apply 257:18 list (tvar 257:24 A))
691+ (fn 257:27
692+ (tvar 257:30 A)
693+ (apply 257:32 unit (tvar 257:38 B)))))
694+ (body 258:3
695+ (branch 258:3
696+ (wing 258:6 args)
697+ (arm 259:5
698+ (cell 259:5 (bind 259:6 xs) (bind 259:9 f))
699+ (cast 259:12
700+ (apply 259:15 list (tvar 259:21 B))
701+ (body 260:9
702+ (branch 260:9
703+ (wing 260:12 xs)
704+ (arm 261:11 (lit 261:11 ~) (lit 261:13 ~))
705+ (arm 262:11
706+ (cell 262:11 (bind 262:12 item) (bind 262:17 rest))
707+ (body 263:13
708+ (branch 263:13
709+ (group 263:16
710+ (call 263:17 (wing 263:17 f) (wing 263:19 item)))
711+ (arm 264:15
712+ (lit 264:15 ~)
713+ (group 264:17
714+ (call 264:18 (wing 264:18 murn) (wing 264:23 rest) (wing 264:28 f))))
715+ (arm 265:15
716+ (cell 265:15 (lit 265:16 ~) (bind 265:18 value))
717+ (tuple 265:25
718+ (wing 265:26 value)
719+ (group 265:32
720+ (call 265:33 (wing 265:33 murn) (wing 265:38 rest) (wing 265:43 f))))))))))))))))
721+ (value 267:1 join
722+ (gate 267:9
723+ (face 267:12 args
724+ (cell 267:17
725+ (tvar 267:18 A)
726+ (apply 267:20 list (tvar 267:26 A))))
727+ (body 268:3
728+ (branch 268:3
729+ (wing 268:6 args)
730+ (arm 269:5
731+ (cell 269:5 (bind 269:6 separator) (bind 269:16 xs))
732+ (cast 269:20
733+ (apply 269:23 list (tvar 269:29 A))
734+ (body 270:9
735+ (branch 270:9
736+ (wing 270:12 xs)
737+ (arm 271:11 (lit 271:11 ~) (lit 271:13 ~))
738+ (arm 272:11
739+ (cell 272:11 (bind 272:12 item) (bind 272:17 rest))
740+ (body 273:13
741+ (branch 273:13
742+ (wing 273:16 rest)
743+ (arm 274:15
744+ (lit 274:15 ~)
745+ (tuple 274:17 (wing 274:18 item) (lit 274:23 ~)))
746+ (arm 275:15
747+ (cell 275:15 (bind 275:16 next) (bind 275:21 more))
748+ (tuple 275:27
749+ (wing 275:28 item)
750+ (tuple 275:33
751+ (wing 275:34 separator)
752+ (group 275:44
753+ (call 275:45 (wing 275:45 join) (wing 275:50 separator) (wing 275:60 rest)))))))))))))))))
754+ (value 277:1 snip
755+ (gate 277:9
756+ (face 277:12 xs
757+ (apply 277:15 list (tvar 277:21 A)))
758+ (body 278:3
759+ (cast 278:3
760+ (apply 278:6 list (tvar 278:12 A))
761+ (body 279:5
762+ (branch 279:5
763+ (wing 279:8 xs)
764+ (arm 280:7 (lit 280:7 ~) (lit 280:9 ~))
765+ (arm 281:7
766+ (cell 281:7 (bind 281:8 item) (bind 281:13 rest))
767+ (body 282:9
768+ (branch 282:9
769+ (wing 282:12 rest)
770+ (arm 283:11 (lit 283:11 ~) (lit 283:13 ~))
771+ (arm 284:11
772+ (cell 284:11 (bind 284:12 next) (bind 284:17 more))
773+ (tuple 284:23
774+ (wing 284:24 item)
775+ (group 284:29
776+ (call 284:30 (wing 284:30 snip) (wing 284:35 rest))))))))))))))
777+ (value 286:1 rear
778+ (gate 286:9
779+ (face 286:12 xs
780+ (apply 286:15 list (tvar 286:21 A)))
781+ (body 287:3
782+ (branch 287:3
783+ (wing 287:6 xs)
784+ (arm 288:5 (lit 288:5 ~) (crash 288:7))
785+ (arm 289:5
786+ (cell 289:5 (bind 289:6 item) (bind 289:11 rest))
787+ (body 290:7
788+ (branch 290:7
789+ (wing 290:10 rest)
790+ (arm 291:9 (lit 291:9 ~) (wing 291:11 item))
791+ (arm 292:9
792+ (cell 292:9 (bind 292:10 next) (bind 292:15 more))
793+ (group 292:21
794+ (call 292:22 (wing 292:22 rear) (wing 292:27 rest))))))))))))
tests/golden/prelude-unit-list-transforms/types.txt+1−1
@@ -40,7 +40,7 @@ partial inference; module not checked
4040++ lure: cast mold is not supported by partial inference
4141++ snoc: sample mold is not supported by partial inference
4242++ flop: sample mold is not supported by partial inference
43−++ drop: unit branch results need unsupported inference
43+++ drop: cast mold is not supported by partial inference
4444++ bind: unit construction needs the standard prelude in partial inference
4545++ biff: $-([(unit A) $-(A (unit B))] (unit B))
4646++ both: unit construction needs the standard prelude in partial inference
tests/golden/types-prelude-list-helpers/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Overview, Prelude, Units and Lists: the public prelude is written in Jibb and its functions are generalized gates.
2+tests: The actual source-backed `drop`, `skim`, `skip`, `murn`, `join` and `snip` infer independently for cords and ships; incorrect unit, predicate and separator arguments report mismatches. Return casts preserve their existing implementations. Runtime behavior awaits the backend.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-list-helpers/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the actual source-backed prelude.
tests/golden/types-prelude-list-helpers/source.jibbnew file+15
@@ -0,0 +1,15 @@
1+++ drop-text (drop `"hi")
2+++ drop-ship (drop `~zod)
3+++ skim-text (skim ~["hi"] |=(x=@t %.y))
4+++ skim-ship (skim ~[~zod] |=(x=@p %.n))
5+++ skip-text (skip ~["hi"] |=(x=@t %.n))
6+++ skip-ship (skip ~[~zod] |=(x=@p %.y))
7+++ murn-text (murn ~["hi"] |=(x=@t `x))
8+++ murn-ship (murn ~[~zod] |=(x=@p `x))
9+++ join-text (join "," ~["a" "b"])
10+++ join-ship (join ~zod ~[~nec ~bud])
11+++ snip-text (snip ~["a" "b"])
12+++ snip-ship (snip ~[~zod ~nec])
13+++ bad-drop (drop "hi")
14+++ bad-skim (skim ~["hi"] |=(x=@p %.y))
15+++ bad-join (join ~zod ~["hi"])
tests/golden/types-prelude-list-helpers/tokens.txtnew file+182
@@ -0,0 +1,182 @@
1+1:1 glyph ++
2+1:4 name drop-text
3+1:14 glyph (
4+1:15 tight name drop
5+1:20 glyph `
6+1:21 tight str "hi"
7+1:25 tight glyph )
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name drop-ship
11+2:14 glyph (
12+2:15 tight name drop
13+2:20 glyph `
14+2:21 tight lit ~zod
15+2:25 tight glyph )
16+3:1 NEWLINE
17+3:1 glyph ++
18+3:4 name skim-text
19+3:14 glyph (
20+3:15 tight name skim
21+3:20 glyph ~[
22+3:22 tight str "hi"
23+3:26 tight glyph ]
24+3:28 glyph |=(
25+3:31 tight name x
26+3:32 tight glyph =
27+3:33 tight aura @t
28+3:36 lit %.y
29+3:39 tight glyph )
30+3:40 tight glyph )
31+4:1 NEWLINE
32+4:1 glyph ++
33+4:4 name skim-ship
34+4:14 glyph (
35+4:15 tight name skim
36+4:20 glyph ~[
37+4:22 tight lit ~zod
38+4:26 tight glyph ]
39+4:28 glyph |=(
40+4:31 tight name x
41+4:32 tight glyph =
42+4:33 tight aura @p
43+4:36 lit %.n
44+4:39 tight glyph )
45+4:40 tight glyph )
46+5:1 NEWLINE
47+5:1 glyph ++
48+5:4 name skip-text
49+5:14 glyph (
50+5:15 tight name skip
51+5:20 glyph ~[
52+5:22 tight str "hi"
53+5:26 tight glyph ]
54+5:28 glyph |=(
55+5:31 tight name x
56+5:32 tight glyph =
57+5:33 tight aura @t
58+5:36 lit %.n
59+5:39 tight glyph )
60+5:40 tight glyph )
61+6:1 NEWLINE
62+6:1 glyph ++
63+6:4 name skip-ship
64+6:14 glyph (
65+6:15 tight name skip
66+6:20 glyph ~[
67+6:22 tight lit ~zod
68+6:26 tight glyph ]
69+6:28 glyph |=(
70+6:31 tight name x
71+6:32 tight glyph =
72+6:33 tight aura @p
73+6:36 lit %.y
74+6:39 tight glyph )
75+6:40 tight glyph )
76+7:1 NEWLINE
77+7:1 glyph ++
78+7:4 name murn-text
79+7:14 glyph (
80+7:15 tight name murn
81+7:20 glyph ~[
82+7:22 tight str "hi"
83+7:26 tight glyph ]
84+7:28 glyph |=(
85+7:31 tight name x
86+7:32 tight glyph =
87+7:33 tight aura @t
88+7:36 glyph `
89+7:37 tight name x
90+7:38 tight glyph )
91+7:39 tight glyph )
92+8:1 NEWLINE
93+8:1 glyph ++
94+8:4 name murn-ship
95+8:14 glyph (
96+8:15 tight name murn
97+8:20 glyph ~[
98+8:22 tight lit ~zod
99+8:26 tight glyph ]
100+8:28 glyph |=(
101+8:31 tight name x
102+8:32 tight glyph =
103+8:33 tight aura @p
104+8:36 glyph `
105+8:37 tight name x
106+8:38 tight glyph )
107+8:39 tight glyph )
108+9:1 NEWLINE
109+9:1 glyph ++
110+9:4 name join-text
111+9:14 glyph (
112+9:15 tight name join
113+9:20 str ","
114+9:24 glyph ~[
115+9:26 tight str "a"
116+9:30 str "b"
117+9:33 tight glyph ]
118+9:34 tight glyph )
119+10:1 NEWLINE
120+10:1 glyph ++
121+10:4 name join-ship
122+10:14 glyph (
123+10:15 tight name join
124+10:20 lit ~zod
125+10:25 glyph ~[
126+10:27 tight lit ~nec
127+10:32 lit ~bud
128+10:36 tight glyph ]
129+10:37 tight glyph )
130+11:1 NEWLINE
131+11:1 glyph ++
132+11:4 name snip-text
133+11:14 glyph (
134+11:15 tight name snip
135+11:20 glyph ~[
136+11:22 tight str "a"
137+11:26 str "b"
138+11:29 tight glyph ]
139+11:30 tight glyph )
140+12:1 NEWLINE
141+12:1 glyph ++
142+12:4 name snip-ship
143+12:14 glyph (
144+12:15 tight name snip
145+12:20 glyph ~[
146+12:22 tight lit ~zod
147+12:27 lit ~nec
148+12:31 tight glyph ]
149+12:32 tight glyph )
150+13:1 NEWLINE
151+13:1 glyph ++
152+13:4 name bad-drop
153+13:13 glyph (
154+13:14 tight name drop
155+13:19 str "hi"
156+13:23 tight glyph )
157+14:1 NEWLINE
158+14:1 glyph ++
159+14:4 name bad-skim
160+14:13 glyph (
161+14:14 tight name skim
162+14:19 glyph ~[
163+14:21 tight str "hi"
164+14:25 tight glyph ]
165+14:27 glyph |=(
166+14:30 tight name x
167+14:31 tight glyph =
168+14:32 tight aura @p
169+14:35 lit %.y
170+14:38 tight glyph )
171+14:39 tight glyph )
172+15:1 NEWLINE
173+15:1 glyph ++
174+15:4 name bad-join
175+15:13 glyph (
176+15:14 tight name join
177+15:19 lit ~zod
178+15:24 glyph ~[
179+15:26 tight str "hi"
180+15:30 tight glyph ]
181+15:31 tight glyph )
182+15:32 NEWLINE
tests/golden/types-prelude-list-helpers/tree.txtnew file+98
@@ -0,0 +1,98 @@
1+(module
2+ (value 1:1 drop-text
3+ (group 1:14
4+ (call 1:15
5+ (wing 1:15 drop)
6+ (unit 1:20 (str 1:21 "hi")))))
7+ (value 2:1 drop-ship
8+ (group 2:14
9+ (call 2:15
10+ (wing 2:15 drop)
11+ (unit 2:20 (lit 2:21 ~zod)))))
12+ (value 3:1 skim-text
13+ (group 3:14
14+ (call 3:15
15+ (wing 3:15 skim)
16+ (list 3:20 (str 3:22 "hi"))
17+ (gate-wide 3:28
18+ (face 3:31 x (aura 3:33 @t))
19+ (lit 3:36 %.y)))))
20+ (value 4:1 skim-ship
21+ (group 4:14
22+ (call 4:15
23+ (wing 4:15 skim)
24+ (list 4:20 (lit 4:22 ~zod))
25+ (gate-wide 4:28
26+ (face 4:31 x (aura 4:33 @p))
27+ (lit 4:36 %.n)))))
28+ (value 5:1 skip-text
29+ (group 5:14
30+ (call 5:15
31+ (wing 5:15 skip)
32+ (list 5:20 (str 5:22 "hi"))
33+ (gate-wide 5:28
34+ (face 5:31 x (aura 5:33 @t))
35+ (lit 5:36 %.n)))))
36+ (value 6:1 skip-ship
37+ (group 6:14
38+ (call 6:15
39+ (wing 6:15 skip)
40+ (list 6:20 (lit 6:22 ~zod))
41+ (gate-wide 6:28
42+ (face 6:31 x (aura 6:33 @p))
43+ (lit 6:36 %.y)))))
44+ (value 7:1 murn-text
45+ (group 7:14
46+ (call 7:15
47+ (wing 7:15 murn)
48+ (list 7:20 (str 7:22 "hi"))
49+ (gate-wide 7:28
50+ (face 7:31 x (aura 7:33 @t))
51+ (unit 7:36 (wing 7:37 x))))))
52+ (value 8:1 murn-ship
53+ (group 8:14
54+ (call 8:15
55+ (wing 8:15 murn)
56+ (list 8:20 (lit 8:22 ~zod))
57+ (gate-wide 8:28
58+ (face 8:31 x (aura 8:33 @p))
59+ (unit 8:36 (wing 8:37 x))))))
60+ (value 9:1 join-text
61+ (group 9:14
62+ (call 9:15
63+ (wing 9:15 join)
64+ (str 9:20 ",")
65+ (list 9:24 (str 9:26 "a") (str 9:30 "b")))))
66+ (value 10:1 join-ship
67+ (group 10:14
68+ (call 10:15
69+ (wing 10:15 join)
70+ (lit 10:20 ~zod)
71+ (list 10:25 (lit 10:27 ~nec) (lit 10:32 ~bud)))))
72+ (value 11:1 snip-text
73+ (group 11:14
74+ (call 11:15
75+ (wing 11:15 snip)
76+ (list 11:20 (str 11:22 "a") (str 11:26 "b")))))
77+ (value 12:1 snip-ship
78+ (group 12:14
79+ (call 12:15
80+ (wing 12:15 snip)
81+ (list 12:20 (lit 12:22 ~zod) (lit 12:27 ~nec)))))
82+ (value 13:1 bad-drop
83+ (group 13:13
84+ (call 13:14 (wing 13:14 drop) (str 13:19 "hi"))))
85+ (value 14:1 bad-skim
86+ (group 14:13
87+ (call 14:14
88+ (wing 14:14 skim)
89+ (list 14:19 (str 14:21 "hi"))
90+ (gate-wide 14:27
91+ (face 14:30 x (aura 14:32 @p))
92+ (lit 14:35 %.y)))))
93+ (value 15:1 bad-join
94+ (group 15:13
95+ (call 15:14
96+ (wing 15:14 join)
97+ (lit 15:19 ~zod)
98+ (list 15:24 (str 15:26 "hi"))))))
tests/golden/types-prelude-list-helpers/types.txtnew file+34
@@ -0,0 +1,34 @@
1+partial inference; module not checked
2+++ drop-text: (list @t)
3+++ drop-ship: (list @p)
4+++ skim-text: (list @t)
5+++ skim-ship: (list @p)
6+++ skip-text: (list @t)
7+++ skip-ship: (list @p)
8+++ murn-text: (list @t)
9+++ murn-ship: (list @p)
10+++ join-text: (list @t)
11+++ join-ship: (list @p)
12+++ snip-text: (list @t)
13+++ snip-ship: (list @p)
14+++ bad-drop: call's sample and argument types do not unify
15+/tests/golden/types-prelude-list-helpers/source.jibb:13:14: called gate
16+++ bad-drop (drop "hi")
17+ ^
18+/tests/golden/types-prelude-list-helpers/source.jibb:13:19: argument has type @t
19+++ bad-drop (drop "hi")
20+ ^
21+++ bad-skim: call's sample and argument types do not unify
22+/tests/golden/types-prelude-list-helpers/source.jibb:14:14: called gate has type $-([(list @t) $-(@t ?)] (list @t))
23+++ bad-skim (skim ~["hi"] |=(x=@p %.y))
24+ ^
25+/tests/golden/types-prelude-list-helpers/source.jibb:14:27: argument has type $-(@p ?)
26+++ bad-skim (skim ~["hi"] |=(x=@p %.y))
27+ ^
28+++ bad-join: call's sample and argument types do not unify
29+/tests/golden/types-prelude-list-helpers/source.jibb:15:14: called gate has type $-([@t (list @t)] (list @t))
30+++ bad-join (join ~zod ~["hi"])
31+ ^
32+/tests/golden/types-prelude-list-helpers/source.jibb:15:19: argument has type @p
33+++ bad-join (join ~zod ~["hi"])
34+ ^
tests/importer/about.txt+6
@@ -20,6 +20,12 @@ recursive holds, malformed
2020subjects and recursive references through local, imported and transitive
2121cores, including ambiguous and independently defined origins. Structured diagnostic cases distinguish proven invalid auras and cores from union disjointness, provenance and source checks the reader cannot verify; a locally shadowed vase and unstructured failure text that mimics an aura error must stay unsupported. The mark fixtures check door samples,
2222collection provenance, unsupported gates and recursive sample provenance.
23+A Ford mark can recover an exact, source-proved named union whose field is a
24+loobean; overlapping cases, hidden overlaps, extra Ford faces, wrong holds and
25+recursive fallback results stay unavailable. Signed and gate payload errors
26+remain unchanged. A synthetic source-location wrapper checks its leaf while
27+duplicate tags and malformed wrapped specs are rejected; the actual Clay mark
28+also exercises source-location wrappers throughout the union and its fields.
2329The synthetic hold in +bad-branch-fixture checks that a failed Hoon branch expansion returns
2430an error. `tlon-epic.txt`, `tlon-presence.txt` and `tlon-docs.txt` are the
2531unmodified `desk/sur/epic.hoon`, `desk/sur/presence.hoon` and
tests/importer/small.txt+5
@@ -101,4 +101,9 @@
101101+$ tag-fuel-9 [tag-fuel-8 tag-fuel-8]
102102+$ tag-fuel-10 [tag-fuel-9 tag-fuel-9]
103103+$ tag-fuel-11 [tag-fuel-10 tag-fuel-10]
104+:: Ford mark sample source-proof fixtures.
105++$ mark-flag-item [done=? text=@t]
106++$ mark-flag-valid $%([%added item=mark-flag-item] [%removed id=@ud])
107++$ mark-flag-overlap $%([%x item=mark-flag-item] [%x id=@ud])
108++$ mark-flag-hidden $%([%ok x=tag-invalid-chain] [%err item=mark-flag-item])
104109--
tests/importer/tree.txt+10
@@ -17,6 +17,15 @@ mixed-mop: [a=(mop @ud @t) b=(list @ud)]
1717nested-static-mop: [a=(mop @ud @t) b=(map @ud (jar @t @ud))]
1818collection-siblings: [a=(mop @ud @t) [b=(set @ud) [c=(qeu @t) [d=(unit @ud) e=(jug @ud @t)]]]]
1919dynamic-sibling-mop: error: a nested Hoon mop needs source-aware import
20+mark-flag-source: (union [added item=[done=(union @f:0 @f:1) text=@t]] [removed id=@ud])
21+mark-flag-union: (union [added item=[done=(union @f:0 @f:1) text=@t]] [removed id=@ud])
22+mark-flag-overlap: error: a Hoon union needs a source-level disjointness check
23+mark-flag-hidden: error: a Hoon union needs a source-level disjointness check
24+mark-flag-signed: error: signed and float auras cannot be imported
25+mark-flag-callable: error: cores and gates cannot be imported
26+mark-flag-extra: error: a Hoon union needs a source-level disjointness check
27+mark-flag-other-hold: unsupported
28+mark-flag-recursive-fallback: unsupported
2029mark-record: [id=@ud text=@t]
2130mark-recursive: (union [value=@ud next=chain.small] @n:0)
2231mark-gate: error: cores and gates cannot be imported
@@ -46,6 +55,7 @@ float: error: signed and float auras cannot be imported
4655gate: error: cores and gates cannot be imported
4756vase: error: vases cannot be imported
4857failed-branch: error: a Hoon $^ union needs a source-level disjointness check
58+debug-spec: valid wrapper; duplicate and malformed rejected
4959debug-union: (union [add text=@t] [remove id=@ud])
5060debug-union-overlap: error: Hoon union disjointness could not be verified
5161debug-nested-cell: [id=@ud value=(union [a=@ud b=@t] @ud)]
tests/lib/jibb-api-paths.hoonnew file+104
@@ -0,0 +1,104 @@
1+:: Partial API path analysis from real Ford-style todo marks.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* sur %txt /tests/type-api-paths/todo-sur/txt
6+/* action %txt /tests/type-api-paths/todo-action/txt
7+/* todos %txt /tests/type-api-paths/todos/txt
8+/* update %txt /tests/type-api-paths/todo-update/txt
9+/* item %txt /tests/type-api-paths/todo-item/txt
10+/* api %txt /tests/type-api-paths/api/txt
11+/* missing-decl %txt /tests/type-api-paths/missing-decl/txt
12+/* value-clash %txt /tests/type-api-paths/value-clash/txt
13+/* poke-clash %txt /tests/type-api-paths/poke-clash/txt
14+/* scry %txt /tests/type-api-paths/scry/txt
15+/* scry-bad %txt /tests/type-api-paths/scry-bad/txt
16+/* expected %txt /tests/type-api-paths/expected/txt
17+|%
18+++ text
19+ |= lines=wain
20+ ^- @t
21+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
22+++ test-api-path-analysis
23+ ^- tang
24+ ?~ sur ~[leaf+"API path fixture sur is missing"]
25+ ?~ action ~[leaf+"API path fixture action is missing"]
26+ ?~ todos ~[leaf+"API path fixture todos is missing"]
27+ ?~ update ~[leaf+"API path fixture update is missing"]
28+ ?~ item ~[leaf+"API path fixture item is missing"]
29+ ?~ api ~[leaf+"API path fixture api is missing"]
30+ ?~ missing-decl ~[leaf+"API path fixture missing-decl is missing"]
31+ ?~ value-clash ~[leaf+"API path fixture value-clash is missing"]
32+ ?~ poke-clash ~[leaf+"API path fixture poke-clash is missing"]
33+ ?~ scry ~[leaf+"API path fixture scry is missing"]
34+ ?~ scry-bad ~[leaf+"API path fixture scry-bad is missing"]
35+ ?~ expected ~[leaf+"API path expected output is missing"]
36+ =/ got (fixture-output prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text missing-decl) (text value-clash) (text poke-clash) (text scry) (text scry-bad))
37+ ?. =(got expected) ~[leaf+"API path analysis output differs from expected.txt"]
38+ ~
39+++ show-result
40+ |= [label=@t result=(each (list iapi-path-typed:jibb) @t)]
41+ ^- @t
42+ ?: ?=(%| -.result)
43+ (crip "{(trip label)}: {(trip p.result)}")
44+ (crip "{(trip label)}: accepted {<(lent p.result)>} path cases")
45+++ show-path
46+ |= item=iapi-path-typed:jibb
47+ ^- @t
48+ =/ info=iapi-path:jibb path.item
49+ =/ diff-text=tape
50+ (zing (turn diffs.item |=(d=iapi-mark-type:jibb " {(trip name.d)}={(show-itype:jibb typ.d ~)}")))
51+ =/ params=tape
52+ (zing (turn segments.info |=(s=pseg:jibb ?:(?=(%typed -.s) " {(trip name.s)}=@{(trip aura.s)}" ""))))
53+ (crip "{(trip name.info)}: full={(show-itype:jibb full.item ~)} diffs:{diff-text} parameters:{params}")
54+++ scry-detail
55+ |= result=(each (list iapi-path-typed:jibb) @t)
56+ ^- @t
57+ ?. ?=([%& [* * * ~]] result) 'scry metadata: missing path'
58+ =/ item=iapi-path-typed:jibb i.t.t.p.result
59+ =/ value=(unit (list pseg:jibb)) scry.path.item
60+ ?~ value 'scry metadata: missing'
61+ ?. ?=([[%knot *] [%typed *] ~] u.value) 'scry metadata: unexpected segments'
62+ =/ segment=pseg:jibb i.t.u.value
63+ ?> ?=(%typed -.segment)
64+ (crip "scry metadata: {(trip name.segment)}=@{(trip aura.segment)}")
65+++ fixture-output
66+ |= [prelude=@t internal=@t sur=@t action=@t todos=@t update=@t item=@t api=@t missing-decl=@t value-clash=@t poke-clash=@t scry-source=@t scry-bad-source=@t]
67+ ^- wain
68+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
69+ ?~ prepared ~['prelude preparation failed']
70+ =/ todo=type -:(ride -:!>(..zuse) sur)
71+ =/ subject=type [%cell [%face %todo todo] -:!>(..zuse)]
72+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride subject action))
73+ =/ mt=* (read-mark:jibb-import %todos -:(ride subject todos))
74+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride subject update))
75+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride subject item))
76+ =/ marks=(list [mark=term result=*]) ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi]]
77+ =/ missing=(list [mark=term result=*]) ~[[%todo-action ma] [%todos mt] [%todo-item mi]]
78+ =/ duplicate=(list [mark=term result=*]) [[%todos mt] marks]
79+ =/ file=path /ui/api/todo/jibb
80+ =/ ok (api-path-analysis-source:jibb file api ~ marks ~ prepared)
81+ =/ miss (api-path-analysis-source:jibb file api ~ missing ~ prepared)
82+ =/ dup (api-path-analysis-source:jibb file api ~ duplicate ~ prepared)
83+ =/ undeclared (api-path-analysis-source:jibb file missing-decl ~ marks ~ prepared)
84+ =/ clash (api-path-analysis-source:jibb file value-clash ~ marks ~ prepared)
85+ =/ poke (api-path-analysis-source:jibb file poke-clash ~ marks ~ prepared)
86+ =/ wrong (api-path-analysis-source:jibb /ui/todo/jibb api ~ marks ~ prepared)
87+ =/ unprepared (api-path-analysis-source:jibb file api ~ marks ~ ~)
88+ =/ scry-ok (api-path-analysis-source:jibb file scry-source ~ marks ~ prepared)
89+ =/ scry-bad (api-path-analysis-source:jibb file scry-bad-source ~ marks ~ prepared)
90+ =/ private-source=@t (cat 3 '/= secret /lib/jibb/internal\0a' api)
91+ =/ private (api-path-analysis-source:jibb file private-source ~ marks ~ prepared)
92+ =/ indirect-source=@t (cat 3 '/= local /ui/local\0a' api)
93+ =/ indirect-modules=jbundle:jibb ~[[/ui/local/jibb '/= secret /lib/jibb/internal\0a++ thing "x"\0a']]
94+ =/ indirect (api-path-analysis-source:jibb file indirect-source ~ marks indirect-modules prepared)
95+ =/ cycle-source=@t (cat 3 '/= aa /ui/aa\0a' api)
96+ =/ cycle-modules=jbundle:jibb ~[[/ui/aa/jibb '/= bb /ui/bb\0a++ first "x"\0a'] [/ui/bb/jibb '/= aa /ui/aa\0a++ second "x"\0a']]
97+ =/ cycle (api-path-analysis-source:jibb file cycle-source ~ marks cycle-modules prepared)
98+ =/ lines=wain
99+ :~ 'partial API path analysis only; no module check or request interface'
100+ (show-result 'todo' ok)
101+ ==
102+ =. lines ?:(?=(%& -.ok) (weld lines (turn p.ok show-path)) lines)
103+ (weld lines ~[(show-result 'missing mark' miss) (show-result 'duplicate mark' dup) (show-result 'undeclared mark' undeclared) (show-result 'value collision' clash) (show-result 'poke collision' poke) (show-result 'scry matching parameters' scry-ok) (scry-detail scry-ok) (show-result 'scry unknown parameter' scry-bad) (show-result 'wrong path' wrong) (show-result 'missing prelude' unprepared) (show-result 'private import' private) (show-result 'indirect private import' indirect) (show-result 'cycle' cycle)])
104+--
tests/lib/jibb.hoon+332−326
@@ -1743,271 +1743,275 @@
17431743/* mod-495-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
17441744/* typ-495 %txt /tests/golden/types-prelude-list-functions/types/txt
17451745/* mtre-495 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1746−/* src-496 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1747−/* tok-496 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1748−/* tre-496 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1749−/* typ-496 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1750−/* src-497 %jibb /tests/golden/types-record-bound-variable/source/jibb
1751−/* tok-497 %txt /tests/golden/types-record-bound-variable/tokens/txt
1752−/* tre-497 %txt /tests/golden/types-record-bound-variable/tree/txt
1753−/* typ-497 %txt /tests/golden/types-record-bound-variable/types/txt
1754−/* src-498 %jibb /tests/golden/types-record-cast-context/source/jibb
1755−/* tok-498 %txt /tests/golden/types-record-cast-context/tokens/txt
1756−/* tre-498 %txt /tests/golden/types-record-cast-context/tree/txt
1757−/* typ-498 %txt /tests/golden/types-record-cast-context/types/txt
1758−/* src-499 %jibb /tests/golden/types-record-change/source/jibb
1759−/* tok-499 %txt /tests/golden/types-record-change/tokens/txt
1760−/* tre-499 %txt /tests/golden/types-record-change/tree/txt
1761−/* typ-499 %txt /tests/golden/types-record-change/types/txt
1762−/* src-500 %jibb /tests/golden/types-record-change-generic/source/jibb
1763−/* tok-500 %txt /tests/golden/types-record-change-generic/tokens/txt
1764−/* tre-500 %txt /tests/golden/types-record-change-generic/tree/txt
1765−/* typ-500 %txt /tests/golden/types-record-change-generic/types/txt
1766−/* src-501 %jibb /tests/golden/types-record-faces/source/jibb
1767−/* tok-501 %txt /tests/golden/types-record-faces/tokens/txt
1768−/* tre-501 %txt /tests/golden/types-record-faces/tree/txt
1769−/* typ-501 %txt /tests/golden/types-record-faces/types/txt
1770−/* src-502 %jibb /tests/golden/types-record-import/source/jibb
1771−/* tok-502 %txt /tests/golden/types-record-import/tokens/txt
1772−/* tre-502 %txt /tests/golden/types-record-import/tree/txt
1773−/* mod-502-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1774−/* typ-502 %txt /tests/golden/types-record-import/types/txt
1775−/* mtre-502 %txt /tests/golden/types-record-import/module-trees/txt
1776−/* src-503 %jibb /tests/golden/types-record-local-scheme/source/jibb
1777−/* tok-503 %txt /tests/golden/types-record-local-scheme/tokens/txt
1778−/* tre-503 %txt /tests/golden/types-record-local-scheme/tree/txt
1779−/* typ-503 %txt /tests/golden/types-record-local-scheme/types/txt
1780−/* src-504 %jibb /tests/golden/types-record-nested/source/jibb
1781−/* tok-504 %txt /tests/golden/types-record-nested/tokens/txt
1782−/* tre-504 %txt /tests/golden/types-record-nested/tree/txt
1783−/* typ-504 %txt /tests/golden/types-record-nested/types/txt
1784−/* src-505 %jibb /tests/golden/types-record-to-tuple/source/jibb
1785−/* tok-505 %txt /tests/golden/types-record-to-tuple/tokens/txt
1786−/* tre-505 %txt /tests/golden/types-record-to-tuple/tree/txt
1787−/* typ-505 %txt /tests/golden/types-record-to-tuple/types/txt
1788−/* src-506 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1789−/* tok-506 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1790−/* tre-506 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1791−/* typ-506 %txt /tests/golden/types-recursion-scc-failures/types/txt
1792−/* src-507 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1793−/* tok-507 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1794−/* tre-507 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1795−/* typ-507 %txt /tests/golden/types-recursion-scc-groups/types/txt
1796−/* src-508 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1797−/* tok-508 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1798−/* tre-508 %txt /tests/golden/types-recursion-scc-import/tree/txt
1799−/* mod-508-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1800−/* typ-508 %txt /tests/golden/types-recursion-scc-import/types/txt
1801−/* mtre-508 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1802−/* src-509 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1803−/* tok-509 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1804−/* tre-509 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1805−/* mod-509-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1806−/* typ-509 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1807−/* mtre-509 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1808−/* src-510 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1809−/* tok-510 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1810−/* tre-510 %txt /tests/golden/types-recursion-scc-local/tree/txt
1811−/* typ-510 %txt /tests/golden/types-recursion-scc-local/types/txt
1812−/* src-511 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1813−/* tok-511 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1814−/* tre-511 %txt /tests/golden/types-recursion-scc-order/tree/txt
1815−/* typ-511 %txt /tests/golden/types-recursion-scc-order/types/txt
1816−/* src-512 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1817−/* tok-512 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1818−/* tre-512 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1819−/* typ-512 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1820−/* src-513 %jibb /tests/golden/types-recursive-branch/source/jibb
1821−/* tok-513 %txt /tests/golden/types-recursive-branch/tokens/txt
1822−/* tre-513 %txt /tests/golden/types-recursive-branch/tree/txt
1823−/* typ-513 %txt /tests/golden/types-recursive-branch/types/txt
1824−/* src-514 %jibb /tests/golden/types-recursive-gate/source/jibb
1825−/* tok-514 %txt /tests/golden/types-recursive-gate/tokens/txt
1826−/* tre-514 %txt /tests/golden/types-recursive-gate/tree/txt
1827−/* typ-514 %txt /tests/golden/types-recursive-gate/types/txt
1828−/* src-515 %jibb /tests/golden/types-recursive-sample/source/jibb
1829−/* tok-515 %txt /tests/golden/types-recursive-sample/tokens/txt
1830−/* tre-515 %txt /tests/golden/types-recursive-sample/tree/txt
1831−/* typ-515 %txt /tests/golden/types-recursive-sample/types/txt
1832−/* src-516 %jibb /tests/golden/types-scope-library-poke/source/jibb
1833−/* tok-516 %txt /tests/golden/types-scope-library-poke/tokens/txt
1834−/* tre-516 %txt /tests/golden/types-scope-library-poke/tree/txt
1835−/* typ-516 %txt /tests/golden/types-scope-library-poke/types/txt
1836−/* src-517 %jibb /tests/golden/types-scope-root-api/source/jibb
1837−/* tok-517 %txt /tests/golden/types-scope-root-api/tokens/txt
1838−/* tre-517 %txt /tests/golden/types-scope-root-api/tree/txt
1839−/* typ-517 %txt /tests/golden/types-scope-root-api/types/txt
1840−/* src-518 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
1841−/* tok-518 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
1842−/* tre-518 %txt /tests/golden/types-scope-store-duplicate/tree/txt
1843−/* typ-518 %txt /tests/golden/types-scope-store-duplicate/types/txt
1844−/* src-519 %jibb /tests/golden/types-scope-store-shadow/source/jibb
1845−/* tok-519 %txt /tests/golden/types-scope-store-shadow/tokens/txt
1846−/* tre-519 %txt /tests/golden/types-scope-store-shadow/tree/txt
1847−/* typ-519 %txt /tests/golden/types-scope-store-shadow/types/txt
1848−/* src-520 %jibb /tests/golden/types-string-interpolation/source/jibb
1849−/* tok-520 %txt /tests/golden/types-string-interpolation/tokens/txt
1850−/* tre-520 %txt /tests/golden/types-string-interpolation/tree/txt
1851−/* typ-520 %txt /tests/golden/types-string-interpolation/types/txt
1852−/* src-521 %jibb /tests/golden/types-tuple-context/source/jibb
1853−/* tok-521 %txt /tests/golden/types-tuple-context/tokens/txt
1854−/* tre-521 %txt /tests/golden/types-tuple-context/tree/txt
1855−/* typ-521 %txt /tests/golden/types-tuple-context/types/txt
1856−/* src-522 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1857−/* tok-522 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1858−/* tre-522 %txt /tests/golden/types-tuple-context-nested/tree/txt
1859−/* typ-522 %txt /tests/golden/types-tuple-context-nested/types/txt
1860−/* src-523 %jibb /tests/golden/types-union-alias/source/jibb
1861−/* tok-523 %txt /tests/golden/types-union-alias/tokens/txt
1862−/* tre-523 %txt /tests/golden/types-union-alias/tree/txt
1863−/* typ-523 %txt /tests/golden/types-union-alias/types/txt
1864−/* src-524 %jibb /tests/golden/types-union-branch-context/source/jibb
1865−/* tok-524 %txt /tests/golden/types-union-branch-context/tokens/txt
1866−/* tre-524 %txt /tests/golden/types-union-branch-context/tree/txt
1867−/* typ-524 %txt /tests/golden/types-union-branch-context/types/txt
1868−/* src-525 %jibb /tests/golden/types-union-branch-pending/source/jibb
1869−/* tok-525 %txt /tests/golden/types-union-branch-pending/tokens/txt
1870−/* tre-525 %txt /tests/golden/types-union-branch-pending/tree/txt
1871−/* typ-525 %txt /tests/golden/types-union-branch-pending/types/txt
1872−/* src-526 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1873−/* tok-526 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1874−/* tre-526 %txt /tests/golden/types-union-constructor-shape/tree/txt
1875−/* typ-526 %txt /tests/golden/types-union-constructor-shape/types/txt
1876−/* src-527 %jibb /tests/golden/types-union-context-flow/source/jibb
1877−/* tok-527 %txt /tests/golden/types-union-context-flow/tokens/txt
1878−/* tre-527 %txt /tests/golden/types-union-context-flow/tree/txt
1879−/* typ-527 %txt /tests/golden/types-union-context-flow/types/txt
1880−/* src-528 %jibb /tests/golden/types-union-finite/source/jibb
1881−/* tok-528 %txt /tests/golden/types-union-finite/tokens/txt
1882−/* tre-528 %txt /tests/golden/types-union-finite/tree/txt
1883−/* typ-528 %txt /tests/golden/types-union-finite/types/txt
1884−/* src-529 %jibb /tests/golden/types-union-finite-context/source/jibb
1885−/* tok-529 %txt /tests/golden/types-union-finite-context/tokens/txt
1886−/* tre-529 %txt /tests/golden/types-union-finite-context/tree/txt
1887−/* typ-529 %txt /tests/golden/types-union-finite-context/types/txt
1888−/* src-530 %jibb /tests/golden/types-union-finite-generic/source/jibb
1889−/* tok-530 %txt /tests/golden/types-union-finite-generic/tokens/txt
1890−/* tre-530 %txt /tests/golden/types-union-finite-generic/tree/txt
1891−/* typ-530 %txt /tests/golden/types-union-finite-generic/types/txt
1892−/* src-531 %jibb /tests/golden/types-union-finite-limit/source/jibb
1893−/* tok-531 %txt /tests/golden/types-union-finite-limit/tokens/txt
1894−/* tre-531 %txt /tests/golden/types-union-finite-limit/tree/txt
1895−/* typ-531 %txt /tests/golden/types-union-finite-limit/types/txt
1896−/* src-532 %jibb /tests/golden/types-union-import/source/jibb
1897−/* tok-532 %txt /tests/golden/types-union-import/tokens/txt
1898−/* tre-532 %txt /tests/golden/types-union-import/tree/txt
1899−/* mod-532-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1900−/* typ-532 %txt /tests/golden/types-union-import/types/txt
1901−/* mtre-532 %txt /tests/golden/types-union-import/module-trees/txt
1902−/* src-533 %jibb /tests/golden/types-union-local-pending/source/jibb
1903−/* tok-533 %txt /tests/golden/types-union-local-pending/tokens/txt
1904−/* tre-533 %txt /tests/golden/types-union-local-pending/tree/txt
1905−/* typ-533 %txt /tests/golden/types-union-local-pending/types/txt
1906−/* src-534 %jibb /tests/golden/types-union-overlap/source/jibb
1907−/* tok-534 %txt /tests/golden/types-union-overlap/tokens/txt
1908−/* tre-534 %txt /tests/golden/types-union-overlap/tree/txt
1909−/* typ-534 %txt /tests/golden/types-union-overlap/types/txt
1910−/* src-535 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1911−/* tok-535 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1912−/* tre-535 %txt /tests/golden/types-union-overlap-nested/tree/txt
1913−/* typ-535 %txt /tests/golden/types-union-overlap-nested/types/txt
1914−/* src-536 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1915−/* tok-536 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1916−/* tre-536 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1917−/* typ-536 %txt /tests/golden/types-union-pattern-result-context/types/txt
1918−/* src-537 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1919−/* tok-537 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1920−/* tre-537 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1921−/* typ-537 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1922−/* src-538 %jibb /tests/golden/types-union-patterns/source/jibb
1923−/* tok-538 %txt /tests/golden/types-union-patterns/tokens/txt
1924−/* tre-538 %txt /tests/golden/types-union-patterns/tree/txt
1925−/* typ-538 %txt /tests/golden/types-union-patterns/types/txt
1926−/* src-539 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1927−/* tok-539 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1928−/* tre-539 %txt /tests/golden/types-union-patterns-generic/tree/txt
1929−/* typ-539 %txt /tests/golden/types-union-patterns-generic/types/txt
1930−/* src-540 %jibb /tests/golden/types-union-patterns-import/source/jibb
1931−/* tok-540 %txt /tests/golden/types-union-patterns-import/tokens/txt
1932−/* tre-540 %txt /tests/golden/types-union-patterns-import/tree/txt
1933−/* mod-540-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1934−/* typ-540 %txt /tests/golden/types-union-patterns-import/types/txt
1935−/* mtre-540 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1936−/* src-541 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1937−/* tok-541 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1938−/* tre-541 %txt /tests/golden/types-union-phantom-generic/tree/txt
1939−/* typ-541 %txt /tests/golden/types-union-phantom-generic/types/txt
1940−/* src-542 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1941−/* tok-542 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1942−/* tre-542 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1943−/* mod-542-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1944−/* typ-542 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1945−/* mtre-542 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1946−/* src-543 %jibb /tests/golden/types-union-print-distinct/source/jibb
1947−/* tok-543 %txt /tests/golden/types-union-print-distinct/tokens/txt
1948−/* tre-543 %txt /tests/golden/types-union-print-distinct/tree/txt
1949−/* mod-543-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1950−/* mod-543-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1951−/* mod-543-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1952−/* typ-543 %txt /tests/golden/types-union-print-distinct/types/txt
1953−/* mtre-543 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1954−/* src-544 %jibb /tests/golden/types-union-print-escape/source/jibb
1955−/* tok-544 %txt /tests/golden/types-union-print-escape/tokens/txt
1956−/* tre-544 %txt /tests/golden/types-union-print-escape/tree/txt
1957−/* typ-544 %txt /tests/golden/types-union-print-escape/types/txt
1958−/* src-545 %jibb /tests/golden/types-union-print-local/source/jibb
1959−/* tok-545 %txt /tests/golden/types-union-print-local/tokens/txt
1960−/* tre-545 %txt /tests/golden/types-union-print-local/tree/txt
1961−/* typ-545 %txt /tests/golden/types-union-print-local/types/txt
1962−/* src-546 %jibb /tests/golden/types-union-print-nested/source/jibb
1963−/* tok-546 %txt /tests/golden/types-union-print-nested/tokens/txt
1964−/* tre-546 %txt /tests/golden/types-union-print-nested/tree/txt
1965−/* typ-546 %txt /tests/golden/types-union-print-nested/types/txt
1966−/* src-547 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1967−/* tok-547 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1968−/* tre-547 %txt /tests/golden/types-union-print-same-origin/tree/txt
1969−/* mod-547-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1970−/* typ-547 %txt /tests/golden/types-union-print-same-origin/types/txt
1971−/* mtre-547 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1972−/* src-548 %jibb /tests/golden/types-union-print-transitive/source/jibb
1973−/* tok-548 %txt /tests/golden/types-union-print-transitive/tokens/txt
1974−/* tre-548 %txt /tests/golden/types-union-print-transitive/tree/txt
1975−/* mod-548-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1976−/* mod-548-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1977−/* typ-548 %txt /tests/golden/types-union-print-transitive/types/txt
1978−/* mtre-548 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1979−/* src-549 %jibb /tests/golden/types-union-singleton/source/jibb
1980−/* tok-549 %txt /tests/golden/types-union-singleton/tokens/txt
1981−/* tre-549 %txt /tests/golden/types-union-singleton/tree/txt
1982−/* typ-549 %txt /tests/golden/types-union-singleton/types/txt
1983−/* src-550 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1984−/* tok-550 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1985−/* tre-550 %txt /tests/golden/types-union-tag-atoms/tree/txt
1986−/* typ-550 %txt /tests/golden/types-union-tag-atoms/types/txt
1987−/* src-551 %jibb /tests/golden/types-union-tags/source/jibb
1988−/* tok-551 %txt /tests/golden/types-union-tags/tokens/txt
1989−/* tre-551 %txt /tests/golden/types-union-tags/tree/txt
1990−/* typ-551 %txt /tests/golden/types-union-tags/types/txt
1991−/* src-552 %jibb /tests/golden/types-union-unresolved/source/jibb
1992−/* tok-552 %txt /tests/golden/types-union-unresolved/tokens/txt
1993−/* tre-552 %txt /tests/golden/types-union-unresolved/tree/txt
1994−/* typ-552 %txt /tests/golden/types-union-unresolved/types/txt
1995−/* src-553 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1996−/* tok-553 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1997−/* tre-553 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1998−/* typ-553 %txt /tests/golden/types-union-unresolved-flow/types/txt
1999−/* src-554 %jibb /tests/golden/types-unit-construction/source/jibb
2000−/* tok-554 %txt /tests/golden/types-unit-construction/tokens/txt
2001−/* tre-554 %txt /tests/golden/types-unit-construction/tree/txt
2002−/* typ-554 %txt /tests/golden/types-unit-construction/types/txt
2003−/* src-555 %jibb /tests/golden/types-unit-context/source/jibb
2004−/* tok-555 %txt /tests/golden/types-unit-context/tokens/txt
2005−/* tre-555 %txt /tests/golden/types-unit-context/tree/txt
2006−/* typ-555 %txt /tests/golden/types-unit-context/types/txt
2007−/* src-556 %jibb /tests/golden/types-unit-patterns/source/jibb
2008−/* tok-556 %txt /tests/golden/types-unit-patterns/tokens/txt
2009−/* tre-556 %txt /tests/golden/types-unit-patterns/tree/txt
2010−/* typ-556 %txt /tests/golden/types-unit-patterns/types/txt
1746+/* src-496 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1747+/* tok-496 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1748+/* tre-496 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1749+/* typ-496 %txt /tests/golden/types-prelude-list-helpers/types/txt
1750+/* src-497 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1751+/* tok-497 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1752+/* tre-497 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1753+/* typ-497 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1754+/* src-498 %jibb /tests/golden/types-record-bound-variable/source/jibb
1755+/* tok-498 %txt /tests/golden/types-record-bound-variable/tokens/txt
1756+/* tre-498 %txt /tests/golden/types-record-bound-variable/tree/txt
1757+/* typ-498 %txt /tests/golden/types-record-bound-variable/types/txt
1758+/* src-499 %jibb /tests/golden/types-record-cast-context/source/jibb
1759+/* tok-499 %txt /tests/golden/types-record-cast-context/tokens/txt
1760+/* tre-499 %txt /tests/golden/types-record-cast-context/tree/txt
1761+/* typ-499 %txt /tests/golden/types-record-cast-context/types/txt
1762+/* src-500 %jibb /tests/golden/types-record-change/source/jibb
1763+/* tok-500 %txt /tests/golden/types-record-change/tokens/txt
1764+/* tre-500 %txt /tests/golden/types-record-change/tree/txt
1765+/* typ-500 %txt /tests/golden/types-record-change/types/txt
1766+/* src-501 %jibb /tests/golden/types-record-change-generic/source/jibb
1767+/* tok-501 %txt /tests/golden/types-record-change-generic/tokens/txt
1768+/* tre-501 %txt /tests/golden/types-record-change-generic/tree/txt
1769+/* typ-501 %txt /tests/golden/types-record-change-generic/types/txt
1770+/* src-502 %jibb /tests/golden/types-record-faces/source/jibb
1771+/* tok-502 %txt /tests/golden/types-record-faces/tokens/txt
1772+/* tre-502 %txt /tests/golden/types-record-faces/tree/txt
1773+/* typ-502 %txt /tests/golden/types-record-faces/types/txt
1774+/* src-503 %jibb /tests/golden/types-record-import/source/jibb
1775+/* tok-503 %txt /tests/golden/types-record-import/tokens/txt
1776+/* tre-503 %txt /tests/golden/types-record-import/tree/txt
1777+/* mod-503-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1778+/* typ-503 %txt /tests/golden/types-record-import/types/txt
1779+/* mtre-503 %txt /tests/golden/types-record-import/module-trees/txt
1780+/* src-504 %jibb /tests/golden/types-record-local-scheme/source/jibb
1781+/* tok-504 %txt /tests/golden/types-record-local-scheme/tokens/txt
1782+/* tre-504 %txt /tests/golden/types-record-local-scheme/tree/txt
1783+/* typ-504 %txt /tests/golden/types-record-local-scheme/types/txt
1784+/* src-505 %jibb /tests/golden/types-record-nested/source/jibb
1785+/* tok-505 %txt /tests/golden/types-record-nested/tokens/txt
1786+/* tre-505 %txt /tests/golden/types-record-nested/tree/txt
1787+/* typ-505 %txt /tests/golden/types-record-nested/types/txt
1788+/* src-506 %jibb /tests/golden/types-record-to-tuple/source/jibb
1789+/* tok-506 %txt /tests/golden/types-record-to-tuple/tokens/txt
1790+/* tre-506 %txt /tests/golden/types-record-to-tuple/tree/txt
1791+/* typ-506 %txt /tests/golden/types-record-to-tuple/types/txt
1792+/* src-507 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1793+/* tok-507 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1794+/* tre-507 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1795+/* typ-507 %txt /tests/golden/types-recursion-scc-failures/types/txt
1796+/* src-508 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1797+/* tok-508 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1798+/* tre-508 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1799+/* typ-508 %txt /tests/golden/types-recursion-scc-groups/types/txt
1800+/* src-509 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1801+/* tok-509 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1802+/* tre-509 %txt /tests/golden/types-recursion-scc-import/tree/txt
1803+/* mod-509-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1804+/* typ-509 %txt /tests/golden/types-recursion-scc-import/types/txt
1805+/* mtre-509 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1806+/* src-510 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1807+/* tok-510 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1808+/* tre-510 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1809+/* mod-510-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1810+/* typ-510 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1811+/* mtre-510 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1812+/* src-511 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1813+/* tok-511 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1814+/* tre-511 %txt /tests/golden/types-recursion-scc-local/tree/txt
1815+/* typ-511 %txt /tests/golden/types-recursion-scc-local/types/txt
1816+/* src-512 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1817+/* tok-512 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1818+/* tre-512 %txt /tests/golden/types-recursion-scc-order/tree/txt
1819+/* typ-512 %txt /tests/golden/types-recursion-scc-order/types/txt
1820+/* src-513 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1821+/* tok-513 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1822+/* tre-513 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1823+/* typ-513 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1824+/* src-514 %jibb /tests/golden/types-recursive-branch/source/jibb
1825+/* tok-514 %txt /tests/golden/types-recursive-branch/tokens/txt
1826+/* tre-514 %txt /tests/golden/types-recursive-branch/tree/txt
1827+/* typ-514 %txt /tests/golden/types-recursive-branch/types/txt
1828+/* src-515 %jibb /tests/golden/types-recursive-gate/source/jibb
1829+/* tok-515 %txt /tests/golden/types-recursive-gate/tokens/txt
1830+/* tre-515 %txt /tests/golden/types-recursive-gate/tree/txt
1831+/* typ-515 %txt /tests/golden/types-recursive-gate/types/txt
1832+/* src-516 %jibb /tests/golden/types-recursive-sample/source/jibb
1833+/* tok-516 %txt /tests/golden/types-recursive-sample/tokens/txt
1834+/* tre-516 %txt /tests/golden/types-recursive-sample/tree/txt
1835+/* typ-516 %txt /tests/golden/types-recursive-sample/types/txt
1836+/* src-517 %jibb /tests/golden/types-scope-library-poke/source/jibb
1837+/* tok-517 %txt /tests/golden/types-scope-library-poke/tokens/txt
1838+/* tre-517 %txt /tests/golden/types-scope-library-poke/tree/txt
1839+/* typ-517 %txt /tests/golden/types-scope-library-poke/types/txt
1840+/* src-518 %jibb /tests/golden/types-scope-root-api/source/jibb
1841+/* tok-518 %txt /tests/golden/types-scope-root-api/tokens/txt
1842+/* tre-518 %txt /tests/golden/types-scope-root-api/tree/txt
1843+/* typ-518 %txt /tests/golden/types-scope-root-api/types/txt
1844+/* src-519 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
1845+/* tok-519 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
1846+/* tre-519 %txt /tests/golden/types-scope-store-duplicate/tree/txt
1847+/* typ-519 %txt /tests/golden/types-scope-store-duplicate/types/txt
1848+/* src-520 %jibb /tests/golden/types-scope-store-shadow/source/jibb
1849+/* tok-520 %txt /tests/golden/types-scope-store-shadow/tokens/txt
1850+/* tre-520 %txt /tests/golden/types-scope-store-shadow/tree/txt
1851+/* typ-520 %txt /tests/golden/types-scope-store-shadow/types/txt
1852+/* src-521 %jibb /tests/golden/types-string-interpolation/source/jibb
1853+/* tok-521 %txt /tests/golden/types-string-interpolation/tokens/txt
1854+/* tre-521 %txt /tests/golden/types-string-interpolation/tree/txt
1855+/* typ-521 %txt /tests/golden/types-string-interpolation/types/txt
1856+/* src-522 %jibb /tests/golden/types-tuple-context/source/jibb
1857+/* tok-522 %txt /tests/golden/types-tuple-context/tokens/txt
1858+/* tre-522 %txt /tests/golden/types-tuple-context/tree/txt
1859+/* typ-522 %txt /tests/golden/types-tuple-context/types/txt
1860+/* src-523 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1861+/* tok-523 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1862+/* tre-523 %txt /tests/golden/types-tuple-context-nested/tree/txt
1863+/* typ-523 %txt /tests/golden/types-tuple-context-nested/types/txt
1864+/* src-524 %jibb /tests/golden/types-union-alias/source/jibb
1865+/* tok-524 %txt /tests/golden/types-union-alias/tokens/txt
1866+/* tre-524 %txt /tests/golden/types-union-alias/tree/txt
1867+/* typ-524 %txt /tests/golden/types-union-alias/types/txt
1868+/* src-525 %jibb /tests/golden/types-union-branch-context/source/jibb
1869+/* tok-525 %txt /tests/golden/types-union-branch-context/tokens/txt
1870+/* tre-525 %txt /tests/golden/types-union-branch-context/tree/txt
1871+/* typ-525 %txt /tests/golden/types-union-branch-context/types/txt
1872+/* src-526 %jibb /tests/golden/types-union-branch-pending/source/jibb
1873+/* tok-526 %txt /tests/golden/types-union-branch-pending/tokens/txt
1874+/* tre-526 %txt /tests/golden/types-union-branch-pending/tree/txt
1875+/* typ-526 %txt /tests/golden/types-union-branch-pending/types/txt
1876+/* src-527 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1877+/* tok-527 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1878+/* tre-527 %txt /tests/golden/types-union-constructor-shape/tree/txt
1879+/* typ-527 %txt /tests/golden/types-union-constructor-shape/types/txt
1880+/* src-528 %jibb /tests/golden/types-union-context-flow/source/jibb
1881+/* tok-528 %txt /tests/golden/types-union-context-flow/tokens/txt
1882+/* tre-528 %txt /tests/golden/types-union-context-flow/tree/txt
1883+/* typ-528 %txt /tests/golden/types-union-context-flow/types/txt
1884+/* src-529 %jibb /tests/golden/types-union-finite/source/jibb
1885+/* tok-529 %txt /tests/golden/types-union-finite/tokens/txt
1886+/* tre-529 %txt /tests/golden/types-union-finite/tree/txt
1887+/* typ-529 %txt /tests/golden/types-union-finite/types/txt
1888+/* src-530 %jibb /tests/golden/types-union-finite-context/source/jibb
1889+/* tok-530 %txt /tests/golden/types-union-finite-context/tokens/txt
1890+/* tre-530 %txt /tests/golden/types-union-finite-context/tree/txt
1891+/* typ-530 %txt /tests/golden/types-union-finite-context/types/txt
1892+/* src-531 %jibb /tests/golden/types-union-finite-generic/source/jibb
1893+/* tok-531 %txt /tests/golden/types-union-finite-generic/tokens/txt
1894+/* tre-531 %txt /tests/golden/types-union-finite-generic/tree/txt
1895+/* typ-531 %txt /tests/golden/types-union-finite-generic/types/txt
1896+/* src-532 %jibb /tests/golden/types-union-finite-limit/source/jibb
1897+/* tok-532 %txt /tests/golden/types-union-finite-limit/tokens/txt
1898+/* tre-532 %txt /tests/golden/types-union-finite-limit/tree/txt
1899+/* typ-532 %txt /tests/golden/types-union-finite-limit/types/txt
1900+/* src-533 %jibb /tests/golden/types-union-import/source/jibb
1901+/* tok-533 %txt /tests/golden/types-union-import/tokens/txt
1902+/* tre-533 %txt /tests/golden/types-union-import/tree/txt
1903+/* mod-533-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1904+/* typ-533 %txt /tests/golden/types-union-import/types/txt
1905+/* mtre-533 %txt /tests/golden/types-union-import/module-trees/txt
1906+/* src-534 %jibb /tests/golden/types-union-local-pending/source/jibb
1907+/* tok-534 %txt /tests/golden/types-union-local-pending/tokens/txt
1908+/* tre-534 %txt /tests/golden/types-union-local-pending/tree/txt
1909+/* typ-534 %txt /tests/golden/types-union-local-pending/types/txt
1910+/* src-535 %jibb /tests/golden/types-union-overlap/source/jibb
1911+/* tok-535 %txt /tests/golden/types-union-overlap/tokens/txt
1912+/* tre-535 %txt /tests/golden/types-union-overlap/tree/txt
1913+/* typ-535 %txt /tests/golden/types-union-overlap/types/txt
1914+/* src-536 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1915+/* tok-536 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1916+/* tre-536 %txt /tests/golden/types-union-overlap-nested/tree/txt
1917+/* typ-536 %txt /tests/golden/types-union-overlap-nested/types/txt
1918+/* src-537 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1919+/* tok-537 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1920+/* tre-537 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1921+/* typ-537 %txt /tests/golden/types-union-pattern-result-context/types/txt
1922+/* src-538 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1923+/* tok-538 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1924+/* tre-538 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1925+/* typ-538 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1926+/* src-539 %jibb /tests/golden/types-union-patterns/source/jibb
1927+/* tok-539 %txt /tests/golden/types-union-patterns/tokens/txt
1928+/* tre-539 %txt /tests/golden/types-union-patterns/tree/txt
1929+/* typ-539 %txt /tests/golden/types-union-patterns/types/txt
1930+/* src-540 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1931+/* tok-540 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1932+/* tre-540 %txt /tests/golden/types-union-patterns-generic/tree/txt
1933+/* typ-540 %txt /tests/golden/types-union-patterns-generic/types/txt
1934+/* src-541 %jibb /tests/golden/types-union-patterns-import/source/jibb
1935+/* tok-541 %txt /tests/golden/types-union-patterns-import/tokens/txt
1936+/* tre-541 %txt /tests/golden/types-union-patterns-import/tree/txt
1937+/* mod-541-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1938+/* typ-541 %txt /tests/golden/types-union-patterns-import/types/txt
1939+/* mtre-541 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1940+/* src-542 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1941+/* tok-542 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1942+/* tre-542 %txt /tests/golden/types-union-phantom-generic/tree/txt
1943+/* typ-542 %txt /tests/golden/types-union-phantom-generic/types/txt
1944+/* src-543 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1945+/* tok-543 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1946+/* tre-543 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1947+/* mod-543-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1948+/* typ-543 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1949+/* mtre-543 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1950+/* src-544 %jibb /tests/golden/types-union-print-distinct/source/jibb
1951+/* tok-544 %txt /tests/golden/types-union-print-distinct/tokens/txt
1952+/* tre-544 %txt /tests/golden/types-union-print-distinct/tree/txt
1953+/* mod-544-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1954+/* mod-544-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1955+/* mod-544-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1956+/* typ-544 %txt /tests/golden/types-union-print-distinct/types/txt
1957+/* mtre-544 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1958+/* src-545 %jibb /tests/golden/types-union-print-escape/source/jibb
1959+/* tok-545 %txt /tests/golden/types-union-print-escape/tokens/txt
1960+/* tre-545 %txt /tests/golden/types-union-print-escape/tree/txt
1961+/* typ-545 %txt /tests/golden/types-union-print-escape/types/txt
1962+/* src-546 %jibb /tests/golden/types-union-print-local/source/jibb
1963+/* tok-546 %txt /tests/golden/types-union-print-local/tokens/txt
1964+/* tre-546 %txt /tests/golden/types-union-print-local/tree/txt
1965+/* typ-546 %txt /tests/golden/types-union-print-local/types/txt
1966+/* src-547 %jibb /tests/golden/types-union-print-nested/source/jibb
1967+/* tok-547 %txt /tests/golden/types-union-print-nested/tokens/txt
1968+/* tre-547 %txt /tests/golden/types-union-print-nested/tree/txt
1969+/* typ-547 %txt /tests/golden/types-union-print-nested/types/txt
1970+/* src-548 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1971+/* tok-548 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1972+/* tre-548 %txt /tests/golden/types-union-print-same-origin/tree/txt
1973+/* mod-548-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1974+/* typ-548 %txt /tests/golden/types-union-print-same-origin/types/txt
1975+/* mtre-548 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1976+/* src-549 %jibb /tests/golden/types-union-print-transitive/source/jibb
1977+/* tok-549 %txt /tests/golden/types-union-print-transitive/tokens/txt
1978+/* tre-549 %txt /tests/golden/types-union-print-transitive/tree/txt
1979+/* mod-549-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1980+/* mod-549-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1981+/* typ-549 %txt /tests/golden/types-union-print-transitive/types/txt
1982+/* mtre-549 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1983+/* src-550 %jibb /tests/golden/types-union-singleton/source/jibb
1984+/* tok-550 %txt /tests/golden/types-union-singleton/tokens/txt
1985+/* tre-550 %txt /tests/golden/types-union-singleton/tree/txt
1986+/* typ-550 %txt /tests/golden/types-union-singleton/types/txt
1987+/* src-551 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1988+/* tok-551 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1989+/* tre-551 %txt /tests/golden/types-union-tag-atoms/tree/txt
1990+/* typ-551 %txt /tests/golden/types-union-tag-atoms/types/txt
1991+/* src-552 %jibb /tests/golden/types-union-tags/source/jibb
1992+/* tok-552 %txt /tests/golden/types-union-tags/tokens/txt
1993+/* tre-552 %txt /tests/golden/types-union-tags/tree/txt
1994+/* typ-552 %txt /tests/golden/types-union-tags/types/txt
1995+/* src-553 %jibb /tests/golden/types-union-unresolved/source/jibb
1996+/* tok-553 %txt /tests/golden/types-union-unresolved/tokens/txt
1997+/* tre-553 %txt /tests/golden/types-union-unresolved/tree/txt
1998+/* typ-553 %txt /tests/golden/types-union-unresolved/types/txt
1999+/* src-554 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2000+/* tok-554 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2001+/* tre-554 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2002+/* typ-554 %txt /tests/golden/types-union-unresolved-flow/types/txt
2003+/* src-555 %jibb /tests/golden/types-unit-construction/source/jibb
2004+/* tok-555 %txt /tests/golden/types-unit-construction/tokens/txt
2005+/* tre-555 %txt /tests/golden/types-unit-construction/tree/txt
2006+/* typ-555 %txt /tests/golden/types-unit-construction/types/txt
2007+/* src-556 %jibb /tests/golden/types-unit-context/source/jibb
2008+/* tok-556 %txt /tests/golden/types-unit-context/tokens/txt
2009+/* tre-556 %txt /tests/golden/types-unit-context/tree/txt
2010+/* typ-556 %txt /tests/golden/types-unit-context/types/txt
2011+/* src-557 %jibb /tests/golden/types-unit-patterns/source/jibb
2012+/* tok-557 %txt /tests/golden/types-unit-patterns/tokens/txt
2013+/* tre-557 %txt /tests/golden/types-unit-patterns/tree/txt
2014+/* typ-557 %txt /tests/golden/types-unit-patterns/types/txt
20112015=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
20122016|%
20132017:: one arm per case
@@ -3002,128 +3006,130 @@
30023006 (weld (weld (check ~.types-prelude-interface src-494 `tok-494 `tre-494) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-494 `typ-494 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-494-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-494-2]])) (check-module-trees ~.types-prelude-interface `mtre-494 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-494-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-494-2]]))
30033007++ test-types-prelude-list-functions
30043008 (weld (weld (check ~.types-prelude-list-functions src-495 `tok-495 `tre-495) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-495 `typ-495 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-495-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-495 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-495-1]]))
3009+++ test-types-prelude-list-helpers
3010+ (weld (check ~.types-prelude-list-helpers src-496 `tok-496 `tre-496) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-496 `typ-496 ~ ~ ~))
30053011++ test-types-prelude-unit-helpers
3006− (weld (check ~.types-prelude-unit-helpers src-496 `tok-496 `tre-496) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-496 `typ-496 ~ ~ ~))
3012+ (weld (check ~.types-prelude-unit-helpers src-497 `tok-497 `tre-497) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-497 `typ-497 ~ ~ ~))
30073013++ test-types-record-bound-variable
3008− (weld (check ~.types-record-bound-variable src-497 `tok-497 `tre-497) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-497 `typ-497))
3014+ (weld (check ~.types-record-bound-variable src-498 `tok-498 `tre-498) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-498 `typ-498))
30093015++ test-types-record-cast-context
3010− (weld (check ~.types-record-cast-context src-498 `tok-498 `tre-498) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-498 `typ-498 ~ ~ ~))
3016+ (weld (check ~.types-record-cast-context src-499 `tok-499 `tre-499) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-499 `typ-499 ~ ~ ~))
30113017++ test-types-record-change
3012− (weld (check ~.types-record-change src-499 `tok-499 `tre-499) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-499 `typ-499 ~ ~ ~))
3018+ (weld (check ~.types-record-change src-500 `tok-500 `tre-500) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-500 `typ-500 ~ ~ ~))
30133019++ test-types-record-change-generic
3014− (weld (check ~.types-record-change-generic src-500 `tok-500 `tre-500) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-500 `typ-500 ~ ~ ~))
3020+ (weld (check ~.types-record-change-generic src-501 `tok-501 `tre-501) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-501 `typ-501 ~ ~ ~))
30153021++ test-types-record-faces
3016− (weld (check ~.types-record-faces src-501 `tok-501 `tre-501) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-501 `typ-501))
3022+ (weld (check ~.types-record-faces src-502 `tok-502 `tre-502) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-502 `typ-502))
30173023++ test-types-record-import
3018− (weld (weld (check ~.types-record-import src-502 `tok-502 `tre-502) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-502 `typ-502 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-502-1]])) (check-module-trees ~.types-record-import `mtre-502 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-502-1]]))
3024+ (weld (weld (check ~.types-record-import src-503 `tok-503 `tre-503) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-503 `typ-503 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-503-1]])) (check-module-trees ~.types-record-import `mtre-503 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-503-1]]))
30193025++ test-types-record-local-scheme
3020− (weld (check ~.types-record-local-scheme src-503 `tok-503 `tre-503) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-503 `typ-503))
3026+ (weld (check ~.types-record-local-scheme src-504 `tok-504 `tre-504) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-504 `typ-504))
30213027++ test-types-record-nested
3022− (weld (check ~.types-record-nested src-504 `tok-504 `tre-504) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-504 `typ-504))
3028+ (weld (check ~.types-record-nested src-505 `tok-505 `tre-505) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-505 `typ-505))
30233029++ test-types-record-to-tuple
3024− (weld (check ~.types-record-to-tuple src-505 `tok-505 `tre-505) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-505 `typ-505))
3030+ (weld (check ~.types-record-to-tuple src-506 `tok-506 `tre-506) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-506 `typ-506))
30253031++ test-types-recursion-scc-failures
3026− (weld (check ~.types-recursion-scc-failures src-506 `tok-506 `tre-506) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-506 `typ-506 ~ ~ ~))
3032+ (weld (check ~.types-recursion-scc-failures src-507 `tok-507 `tre-507) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-507 `typ-507 ~ ~ ~))
30273033++ test-types-recursion-scc-groups
3028− (weld (check ~.types-recursion-scc-groups src-507 `tok-507 `tre-507) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-507 `typ-507 ~ ~ ~))
3034+ (weld (check ~.types-recursion-scc-groups src-508 `tok-508 `tre-508) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-508 `typ-508 ~ ~ ~))
30293035++ test-types-recursion-scc-import
3030− (weld (weld (check ~.types-recursion-scc-import src-508 `tok-508 `tre-508) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-508 `typ-508 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-508-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-508 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-508-1]]))
3036+ (weld (weld (check ~.types-recursion-scc-import src-509 `tok-509 `tre-509) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-509 `typ-509 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-509-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-509 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-509-1]]))
30313037++ test-types-recursion-scc-import-bad
3032− (weld (weld (check ~.types-recursion-scc-import-bad src-509 `tok-509 `tre-509) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-509 `typ-509 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-509-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-509 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-509-1]]))
3038+ (weld (weld (check ~.types-recursion-scc-import-bad src-510 `tok-510 `tre-510) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-510 `typ-510 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-510-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-510 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-510-1]]))
30333039++ test-types-recursion-scc-local
3034− (weld (check ~.types-recursion-scc-local src-510 `tok-510 `tre-510) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-510 `typ-510 ~ ~ ~))
3040+ (weld (check ~.types-recursion-scc-local src-511 `tok-511 `tre-511) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-511 `typ-511 ~ ~ ~))
30353041++ test-types-recursion-scc-order
3036− (weld (check ~.types-recursion-scc-order src-511 `tok-511 `tre-511) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-511 `typ-511 ~ ~ ~))
3042+ (weld (check ~.types-recursion-scc-order src-512 `tok-512 `tre-512) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-512 `typ-512 ~ ~ ~))
30373043++ test-types-recursion-scc-shadow
3038− (weld (check ~.types-recursion-scc-shadow src-512 `tok-512 `tre-512) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-512 `typ-512 ~ ~ ~))
3044+ (weld (check ~.types-recursion-scc-shadow src-513 `tok-513 `tre-513) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-513 `typ-513 ~ ~ ~))
30393045++ test-types-recursive-branch
3040− (weld (check ~.types-recursive-branch src-513 `tok-513 `tre-513) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-513 `typ-513 ~ ~ ~))
3046+ (weld (check ~.types-recursive-branch src-514 `tok-514 `tre-514) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-514 `typ-514 ~ ~ ~))
30413047++ test-types-recursive-gate
3042− (weld (check ~.types-recursive-gate src-514 `tok-514 `tre-514) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-514 `typ-514))
3048+ (weld (check ~.types-recursive-gate src-515 `tok-515 `tre-515) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-515 `typ-515))
30433049++ test-types-recursive-sample
3044− (weld (check ~.types-recursive-sample src-515 `tok-515 `tre-515) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-515 `typ-515))
3050+ (weld (check ~.types-recursive-sample src-516 `tok-516 `tre-516) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-516 `typ-516))
30453051++ test-types-scope-library-poke
3046− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-516 `tok-516 `tre-516) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-516 `typ-516 ~ ~ ~))
3052+ (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-517 `tok-517 `tre-517) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-517 `typ-517 ~ ~ ~))
30473053++ test-types-scope-root-api
3048− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-517 `tok-517 `tre-517) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-517 `typ-517 ~ ~ ~))
3054+ (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-518 `tok-518 `tre-518) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-518 `typ-518 ~ ~ ~))
30493055++ test-types-scope-store-duplicate
3050− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-518 `tok-518 `tre-518) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-518 `typ-518 ~ ~ ~))
3056+ (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-519 `tok-519 `tre-519) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-519 `typ-519 ~ ~ ~))
30513057++ test-types-scope-store-shadow
3052− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-519 `tok-519 `tre-519) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-519 `typ-519 ~ ~ ~))
3058+ (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-520 `tok-520 `tre-520) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-520 `typ-520 ~ ~ ~))
30533059++ test-types-string-interpolation
3054− (weld (check ~.types-string-interpolation src-520 `tok-520 `tre-520) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-520 `typ-520 ~ ~ ~))
3060+ (weld (check ~.types-string-interpolation src-521 `tok-521 `tre-521) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-521 `typ-521 ~ ~ ~))
30553061++ test-types-tuple-context
3056− (weld (check ~.types-tuple-context src-521 `tok-521 `tre-521) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-521 `typ-521 ~ ~ ~))
3062+ (weld (check ~.types-tuple-context src-522 `tok-522 `tre-522) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-522 `typ-522 ~ ~ ~))
30573063++ test-types-tuple-context-nested
3058− (weld (check ~.types-tuple-context-nested src-522 `tok-522 `tre-522) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-522 `typ-522 ~ ~ ~))
3064+ (weld (check ~.types-tuple-context-nested src-523 `tok-523 `tre-523) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-523 `typ-523 ~ ~ ~))
30593065++ test-types-union-alias
3060− (weld (check ~.types-union-alias src-523 `tok-523 `tre-523) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-523 `typ-523))
3066+ (weld (check ~.types-union-alias src-524 `tok-524 `tre-524) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-524 `typ-524))
30613067++ test-types-union-branch-context
3062− (weld (check ~.types-union-branch-context src-524 `tok-524 `tre-524) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-524 `typ-524))
3068+ (weld (check ~.types-union-branch-context src-525 `tok-525 `tre-525) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-525 `typ-525))
30633069++ test-types-union-branch-pending
3064− (weld (check ~.types-union-branch-pending src-525 `tok-525 `tre-525) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-525 `typ-525))
3070+ (weld (check ~.types-union-branch-pending src-526 `tok-526 `tre-526) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-526 `typ-526))
30653071++ test-types-union-constructor-shape
3066− (weld (check ~.types-union-constructor-shape src-526 `tok-526 `tre-526) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-526 `typ-526))
3072+ (weld (check ~.types-union-constructor-shape src-527 `tok-527 `tre-527) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-527 `typ-527))
30673073++ test-types-union-context-flow
3068− (weld (check ~.types-union-context-flow src-527 `tok-527 `tre-527) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-527 `typ-527))
3074+ (weld (check ~.types-union-context-flow src-528 `tok-528 `tre-528) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-528 `typ-528))
30693075++ test-types-union-finite
3070− (weld (check ~.types-union-finite src-528 `tok-528 `tre-528) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-528 `typ-528 ~ ~ ~))
3076+ (weld (check ~.types-union-finite src-529 `tok-529 `tre-529) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-529 `typ-529 ~ ~ ~))
30713077++ test-types-union-finite-context
3072− (weld (check ~.types-union-finite-context src-529 `tok-529 `tre-529) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-529 `typ-529 ~ ~ ~))
3078+ (weld (check ~.types-union-finite-context src-530 `tok-530 `tre-530) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-530 `typ-530 ~ ~ ~))
30733079++ test-types-union-finite-generic
3074− (weld (check ~.types-union-finite-generic src-530 `tok-530 `tre-530) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-530 `typ-530 ~ ~ ~))
3080+ (weld (check ~.types-union-finite-generic src-531 `tok-531 `tre-531) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-531 `typ-531 ~ ~ ~))
30753081++ test-types-union-finite-limit
3076− (weld (check ~.types-union-finite-limit src-531 `tok-531 `tre-531) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-531 `typ-531 ~ ~ ~))
3082+ (weld (check ~.types-union-finite-limit src-532 `tok-532 `tre-532) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-532 `typ-532 ~ ~ ~))
30773083++ test-types-union-import
3078− (weld (weld (check ~.types-union-import src-532 `tok-532 `tre-532) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-532 `typ-532 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-532-1]])) (check-module-trees ~.types-union-import `mtre-532 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-532-1]]))
3084+ (weld (weld (check ~.types-union-import src-533 `tok-533 `tre-533) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-533 `typ-533 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-533-1]])) (check-module-trees ~.types-union-import `mtre-533 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-533-1]]))
30793085++ test-types-union-local-pending
3080− (weld (check ~.types-union-local-pending src-533 `tok-533 `tre-533) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-533 `typ-533))
3086+ (weld (check ~.types-union-local-pending src-534 `tok-534 `tre-534) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-534 `typ-534))
30813087++ test-types-union-overlap
3082− (weld (check ~.types-union-overlap src-534 `tok-534 `tre-534) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-534 `typ-534))
3088+ (weld (check ~.types-union-overlap src-535 `tok-535 `tre-535) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-535 `typ-535))
30833089++ test-types-union-overlap-nested
3084− (weld (check ~.types-union-overlap-nested src-535 `tok-535 `tre-535) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-535 `typ-535))
3090+ (weld (check ~.types-union-overlap-nested src-536 `tok-536 `tre-536) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-536 `typ-536))
30853091++ test-types-union-pattern-result-context
3086− (weld (check ~.types-union-pattern-result-context src-536 `tok-536 `tre-536) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-536 `typ-536 ~ ~ ~))
3092+ (weld (check ~.types-union-pattern-result-context src-537 `tok-537 `tre-537) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-537 `typ-537 ~ ~ ~))
30873093++ test-types-union-pattern-result-controls
3088− (weld (check ~.types-union-pattern-result-controls src-537 `tok-537 `tre-537) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-537 `typ-537 ~ ~ ~))
3094+ (weld (check ~.types-union-pattern-result-controls src-538 `tok-538 `tre-538) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-538 `typ-538 ~ ~ ~))
30893095++ test-types-union-patterns
3090− (weld (check ~.types-union-patterns src-538 `tok-538 `tre-538) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-538 `typ-538 ~ ~ ~))
3096+ (weld (check ~.types-union-patterns src-539 `tok-539 `tre-539) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-539 `typ-539 ~ ~ ~))
30913097++ test-types-union-patterns-generic
3092− (weld (check ~.types-union-patterns-generic src-539 `tok-539 `tre-539) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-539 `typ-539 ~ ~ ~))
3098+ (weld (check ~.types-union-patterns-generic src-540 `tok-540 `tre-540) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-540 `typ-540 ~ ~ ~))
30933099++ test-types-union-patterns-import
3094− (weld (weld (check ~.types-union-patterns-import src-540 `tok-540 `tre-540) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-540 `typ-540 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-540-1]])) (check-module-trees ~.types-union-patterns-import `mtre-540 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-540-1]]))
3100+ (weld (weld (check ~.types-union-patterns-import src-541 `tok-541 `tre-541) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-541 `typ-541 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-541-1]])) (check-module-trees ~.types-union-patterns-import `mtre-541 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-541-1]]))
30953101++ test-types-union-phantom-generic
3096− (weld (check ~.types-union-phantom-generic src-541 `tok-541 `tre-541) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-541 `typ-541))
3102+ (weld (check ~.types-union-phantom-generic src-542 `tok-542 `tre-542) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-542 `typ-542))
30973103++ test-types-union-print-cross-namespace
3098− (weld (weld (check ~.types-union-print-cross-namespace src-542 `tok-542 `tre-542) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-542 `typ-542 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-542-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-542 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-542-1]]))
3104+ (weld (weld (check ~.types-union-print-cross-namespace src-543 `tok-543 `tre-543) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-543 `typ-543 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-543-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-543 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-543-1]]))
30993105++ test-types-union-print-distinct
3100− (weld (weld (check ~.types-union-print-distinct src-543 `tok-543 `tre-543) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-543 `typ-543 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-543-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-543-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-543-3]])) (check-module-trees ~.types-union-print-distinct `mtre-543 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-543-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-543-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-543-3]]))
3106+ (weld (weld (check ~.types-union-print-distinct src-544 `tok-544 `tre-544) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-544 `typ-544 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-544-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-544-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-544-3]])) (check-module-trees ~.types-union-print-distinct `mtre-544 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-544-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-544-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-544-3]]))
31013107++ test-types-union-print-escape
3102− (weld (check ~.types-union-print-escape src-544 `tok-544 `tre-544) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-544 `typ-544))
3108+ (weld (check ~.types-union-print-escape src-545 `tok-545 `tre-545) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-545 `typ-545))
31033109++ test-types-union-print-local
3104− (weld (check ~.types-union-print-local src-545 `tok-545 `tre-545) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-545 `typ-545))
3110+ (weld (check ~.types-union-print-local src-546 `tok-546 `tre-546) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-546 `typ-546))
31053111++ test-types-union-print-nested
3106− (weld (check ~.types-union-print-nested src-546 `tok-546 `tre-546) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-546 `typ-546))
3112+ (weld (check ~.types-union-print-nested src-547 `tok-547 `tre-547) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-547 `typ-547))
31073113++ test-types-union-print-same-origin
3108− (weld (weld (check ~.types-union-print-same-origin src-547 `tok-547 `tre-547) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-547 `typ-547 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-547-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-547 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-547-1]]))
3114+ (weld (weld (check ~.types-union-print-same-origin src-548 `tok-548 `tre-548) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-548 `typ-548 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-548-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-548 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-548-1]]))
31093115++ test-types-union-print-transitive
3110− (weld (weld (check ~.types-union-print-transitive src-548 `tok-548 `tre-548) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-548 `typ-548 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-548-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-548-2]])) (check-module-trees ~.types-union-print-transitive `mtre-548 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-548-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-548-2]]))
3116+ (weld (weld (check ~.types-union-print-transitive src-549 `tok-549 `tre-549) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-549 `typ-549 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-549-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-549-2]])) (check-module-trees ~.types-union-print-transitive `mtre-549 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-549-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-549-2]]))
31113117++ test-types-union-singleton
3112− (weld (check ~.types-union-singleton src-549 `tok-549 `tre-549) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-549 `typ-549))
3118+ (weld (check ~.types-union-singleton src-550 `tok-550 `tre-550) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-550 `typ-550))
31133119++ test-types-union-tag-atoms
3114− (weld (check ~.types-union-tag-atoms src-550 `tok-550 `tre-550) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-550 `typ-550))
3120+ (weld (check ~.types-union-tag-atoms src-551 `tok-551 `tre-551) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-551 `typ-551))
31153121++ test-types-union-tags
3116− (weld (check ~.types-union-tags src-551 `tok-551 `tre-551) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-551 `typ-551))
3122+ (weld (check ~.types-union-tags src-552 `tok-552 `tre-552) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-552 `typ-552))
31173123++ test-types-union-unresolved
3118− (weld (check ~.types-union-unresolved src-552 `tok-552 `tre-552) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-552 `typ-552))
3124+ (weld (check ~.types-union-unresolved src-553 `tok-553 `tre-553) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-553 `typ-553))
31193125++ test-types-union-unresolved-flow
3120− (weld (check ~.types-union-unresolved-flow src-553 `tok-553 `tre-553) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-553 `typ-553))
3126+ (weld (check ~.types-union-unresolved-flow src-554 `tok-554 `tre-554) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-554 `typ-554))
31213127++ test-types-unit-construction
3122− (weld (check ~.types-unit-construction src-554 `tok-554 `tre-554) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-554 `typ-554 ~ ~ ~))
3128+ (weld (check ~.types-unit-construction src-555 `tok-555 `tre-555) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-555 `typ-555 ~ ~ ~))
31233129++ test-types-unit-context
3124− (weld (check ~.types-unit-context src-555 `tok-555 `tre-555) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-555 `typ-555 ~ ~ ~))
3130+ (weld (check ~.types-unit-context src-556 `tok-556 `tre-556) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-556 `typ-556 ~ ~ ~))
31253131++ test-types-unit-patterns
3126− (weld (check ~.types-unit-patterns src-556 `tok-556 `tre-556) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-556 `typ-556))
3132+ (weld (check ~.types-unit-patterns src-557 `tok-557 `tre-557) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-557 `typ-557))
31273133::
31283134:: +check: run golden:jibb on a case and compare both outputs
31293135::
tests/type-api-paths/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Overview, Agent APIs: a path names a request, a route and a mark for full state; `facts` supplies diff marks and an optional scry path. Imports: Hoon marks are read at their declared names.
2+tests: Partial path analysis uses the actual todo `/sur` and Ford-style mark samples, preserving the full and diff types and typed path parameter. Matching scry parameters are accepted; unknown scry parameters, missing, duplicate and undeclared marks, value and derived-name collisions, an invalid module path, a missing prelude, private imports and an import cycle fail closed. This does not check the module or derive request gates.
3+expect: partial path metadata or an unsupported/error report
tests/type-api-paths/api.txtnew file+13
@@ -0,0 +1,13 @@
1+:: /ui/api/todo.jibb
2+/- todo
3+/% %todo-action
4+/% %todos
5+/% %todo-update
6+/% %todo-item
7+
8++$ item item.todo
9++$ poke todo-action
10++$ paths
11+ [%todos /todos todos]
12+ [%changes /changes (facts todos todo-update)]
13+ [%todo-by-id /todo/[id=@ud] todo-item]
tests/type-api-paths/expected.txtnew file+18
@@ -0,0 +1,18 @@
1+partial API path analysis only; no module check or request interface
2+todo: accepted 3 path cases
3+todos: full=(list [id=@ud [done=? text=@t]]) diffs: parameters:
4+changes: full=(list [id=@ud [done=? text=@t]]) diffs: todo-update=[%added item=[id=@ud [done=? text=@t]]] [%toggled id=@ud] parameters:
5+todo-by-id: full=[id=@ud [done=? text=@t]] diffs: parameters: id=@ud
6+missing mark: API path declaration needs unsupported analysis
7+duplicate mark: API path declaration needs unsupported analysis
8+undeclared mark: API path declaration needs unsupported analysis
9+value collision: API path declaration needs unsupported analysis
10+poke collision: API path declaration needs unsupported analysis
11+scry matching parameters: accepted 3 path cases
12+scry metadata: id=@ud
13+scry unknown parameter: API path declaration needs unsupported analysis
14+wrong path: API path analysis requires /ui/api/<agent>.jibb
15+missing prelude: API path analysis needs the prepared prelude
16+private import: the prelude internal module is private
17+indirect private import: the prelude internal module is private
18+cycle: import cycle at /ui/aa/jibb
tests/type-api-paths/missing-decl.txtnew file+12
@@ -0,0 +1,12 @@
1+:: /ui/api/todo.jibb
2+/- todo
3+/% %todo-action
4+/% %todos
5+/% %todo-update
6+
7++$ item item.todo
8++$ poke todo-action
9++$ paths
10+ [%todos /todos todos]
11+ [%changes /changes (facts todos todo-update)]
12+ [%todo-by-id /todo/[id=@ud] todo-item]
tests/type-api-paths/poke-clash.txtnew file+12
@@ -0,0 +1,12 @@
1+:: /ui/api/todo.jibb
2+/- todo
3+/% %todo-action
4+/% %todos
5+/% %todo-update
6+/% %todo-item
7+
8++$ item item.todo
9++$ poke todo-action
10++$ paths
11+ [%todo-action /todos todos]
12+ [%todo-by-id /todo/[id=@ud] todo-item]
tests/type-api-paths/scry-bad.txtnew file+13
@@ -0,0 +1,13 @@
1+:: /ui/api/todo.jibb
2+/- todo
3+/% %todo-action
4+/% %todos
5+/% %todo-update
6+/% %todo-item
7+
8++$ item item.todo
9++$ poke todo-action
10++$ paths
11+ [%todos /todos todos]
12+ [%changes /changes (facts todos todo-update)]
13+ [%todo-by-id /todo/[id=@ud] todo-item scry=/peek/[other=@ud]]
tests/type-api-paths/scry.txtnew file+13
@@ -0,0 +1,13 @@
1+:: /ui/api/todo.jibb
2+/- todo
3+/% %todo-action
4+/% %todos
5+/% %todo-update
6+/% %todo-item
7+
8++$ item item.todo
9++$ poke todo-action
10++$ paths
11+ [%todos /todos todos]
12+ [%changes /changes (facts todos todo-update)]
13+ [%todo-by-id /todo/[id=@ud] todo-item scry=/peek/[id=@ud]]
tests/type-api-paths/todo-action.txtnew file+6
@@ -0,0 +1,6 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+|_ a=action:todo
3+++ grab |% ++ noun action:todo --
4+++ grow |% ++ noun a --
5+++ grad %noun
6+--
tests/type-api-paths/todo-item.txtnew file+6
@@ -0,0 +1,6 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+|_ a=item:todo
3+++ grab |% ++ noun item:todo --
4+++ grow |% ++ noun a --
5+++ grad %noun
6+--
tests/type-api-paths/todo-sur.txtnew file+12
@@ -0,0 +1,12 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+|%
3++$ item [id=@ud done=? text=@t]
4++$ action
5+ $% [%add text=@t]
6+ [%toggle id=@ud]
7+ ==
8++$ update
9+ $% [%added item=item]
10+ [%toggled id=@ud]
11+ ==
12+--
tests/type-api-paths/todo-update.txtnew file+6
@@ -0,0 +1,6 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+|_ a=update:todo
3+++ grab |% ++ noun update:todo --
4+++ grow |% ++ noun a --
5+++ grad %noun
6+--
tests/type-api-paths/todos.txtnew file+6
@@ -0,0 +1,6 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+|_ a=(list item:todo)
3+++ grab |% ++ noun (list item:todo) --
4+++ grow |% ++ noun a --
5+++ grad %noun
6+--
tests/type-api-paths/value-clash.txtnew file+15
@@ -0,0 +1,15 @@
1+:: /ui/api/todo.jibb
2+/- todo
3+/% %todo-action
4+/% %todos
5+/% %todo-update
6+/% %todo-item
7+
8++$ item item.todo
9++$ poke todo-action
10++$ paths
11+ [%todos /todos todos]
12+ [%changes /changes (facts todos todo-update)]
13+ [%todo-by-id /todo/[id=@ud] todo-item]
14+
15+++ todos "collision"
tools/clay-fixtures+13
@@ -168,6 +168,19 @@ if result.stdout != expected:
168168 sys.exit(1)
169169print('Clay mark importer golden passed')
170170
171+try:
172+ result = subprocess.run([str(ship), 'run', str(fixtures / 'mark-update-import.txt')],
173+ stdout=subprocess.PIPE, check=True)
174+except subprocess.CalledProcessError as error:
175+ sys.exit(error.returncode)
176+expected = (fixtures / 'mark-update-import-expected.txt').read_bytes()
177+if result.stdout != expected:
178+ print('Clay union mark import differs from tests/clay-fixtures/mark-update-import-expected.txt', file=sys.stderr)
179+ print('expected:', expected.decode().rstrip(), file=sys.stderr)
180+ print('actual: ', result.stdout.decode().rstrip(), file=sys.stderr)
181+ sys.exit(1)
182+print('Clay union mark importer golden passed')
183+
171184try:
172185 result = subprocess.run([str(ship), 'run', str(fixtures / 'mark-bridge.txt')],
173186 stdout=subprocess.PIPE, check=True)
tools/importer-test+1−1
@@ -34,4 +34,4 @@ if result.stdout != expected:
3434 result.stdout.decode().splitlines(keepends=True),
3535 fromfile='expected tree.txt', tofile='actual types'))
3636 sys.exit(1)
37−print('importer golden: 169 projections passed')
37+print('importer golden: 179 projections passed')
tools/type-api-paths-testnew file+52
@@ -0,0 +1,52 @@
1+#!/usr/bin/env python3
2+"""Compare partial API path analysis with real Ford-style todo marks under eval."""
3+
4+from pathlib import Path
5+import argparse
6+import difflib
7+import subprocess
8+import sys
9+import tempfile
10+
11+root = Path(__file__).resolve().parent.parent
12+parser = argparse.ArgumentParser(description=__doc__)
13+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
14+parser.add_argument('--update', action='store_true')
15+args = parser.parse_args()
16+fixture = root / 'tests/type-api-paths'
17+names = {'sur': 'todo-sur', 'action': 'todo-action', 'todos': 'todos',
18+ 'update': 'todo-update', 'item': 'todo-item', 'api': 'api',
19+ 'missing-decl': 'missing-decl', 'value-clash': 'value-clash',
20+ 'poke-clash': 'poke-clash', 'scry': 'scry', 'scry-bad': 'scry-bad'}
21+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
22+tests = (root / 'tests/lib/jibb-api-paths.hoon').read_text()
23+tests = tests[tests.index('\n|%\n') + 1:]
24+expression = ('=/ jibb .\n=/ jibb-import\n' + reader + '\n' +
25+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n' for name in names) +
26+ '=/ expected=wain ~\n=/ bridge\n' + tests +
27+ '\n(of-wain:format (fixture-output:bridge prelude internal ' +
28+ ' '.join(name + '-text' for name in names) + '))\n')
29+with tempfile.TemporaryDirectory(prefix='jibb-type-api-paths-') as tmp:
30+ program = Path(tmp) / 'bridge.hoon'
31+ program.write_text(expression)
32+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
33+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
34+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
35+ for name, filename in names.items():
36+ command += ['--cord', name + '-text=' + str(fixture / (filename + '.txt'))]
37+ result = subprocess.run(command, stdout=subprocess.PIPE)
38+if result.returncode:
39+ sys.exit(result.returncode)
40+expected_path = fixture / 'expected.txt'
41+if args.update:
42+ expected_path.write_bytes(result.stdout)
43+ print('updated partial API path analysis golden')
44+ sys.exit(0)
45+expected = expected_path.read_bytes()
46+if result.stdout != expected:
47+ sys.stderr.writelines(difflib.unified_diff(
48+ expected.decode().splitlines(keepends=True),
49+ result.stdout.decode().splitlines(keepends=True),
50+ fromfile='expected.txt', tofile='actual paths'))
51+ sys.exit(1)
52+print('partial API path analysis golden passed')