on master help sign in
Analyze API paths and import Ford union marks
beada10iko
README.md+1−1
@@ -42,7 +42,7 @@ tools/hoon '(golden /a/b/jibb (crip "++ main view"))'
42tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
42tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
43```
43```
44
44
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.
46
46
47### The doc's examples
47### The doc's examples
48
48
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
82
82
83A 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.
83A 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.
84
84
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.
86
86
87Self-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.
87Self-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.
88
88
89Callers 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.
89Callers 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.
90
90
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+
91`+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.
93`+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.
92
94
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.
94
96
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.
96
98
97And the design notes:
99And the design notes:
98
100
docs/development.md+5−1
@@ -65,6 +65,8 @@ git clone https://github.com/urbit/tools /root/src/tools
65| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
65| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
66| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
66| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
67| `tools/type-poke-test` | Checks source-backed prelude and poke-only API reports against `tests/type-poke/expected.txt` under eval |
67| `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 |
68| `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 |
70| `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 |
69| `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 |
71| `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 |
70| `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 |
72| `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
85tools/type-import-diagnostic-test # direct structured reader diagnostics match
87tools/type-import-diagnostic-test # direct structured reader diagnostics match
86tools/type-mark-test # mark/checker bridge golden report matches
88tools/type-mark-test # mark/checker bridge golden report matches
87tools/type-poke-test # source-backed poke/API bridge report matches
89tools/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
88tools/type-module-scope-test # module/prelude scope golden report matches
92tools/type-module-scope-test # module/prelude scope golden report matches
89tools/hoon check-spans-test # prints <<>>
93tools/hoon check-spans-test # prints <<>>
90tools/testdata/selftest # 22 checks, 0 failed
94tools/testdata/selftest # 22 checks, 0 failed
@@ -96,7 +100,7 @@ tools/ship check-commit # when the mark or the desks changed
96tools/clay-fixtures # when the my-app Hoon fixtures or importer changed
100tools/clay-fixtures # when the my-app Hoon fixtures or importer changed
97```
101```
98
102
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.
100
104
101## Golden cases
105## Golden cases
102
106
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
18
18
19## Questions milestone 2 raises
19## Questions milestone 2 raises
20
20
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.
22
22
231. **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.
231. **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.
242. **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.
242. **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
46
46
4724. **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`.
4724. **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`.
48
48
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+
49## Grammar questions never put to the doc's author
53## Grammar questions never put to the doc's author
50
54
51In 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.
55In 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
22
22
23`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
23`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
24
24
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.
26
26
27| Name | Hoon behavior | Jibb status |
27| Name | Hoon behavior | Jibb status |
28| --- | --- | --- |
28| --- | --- | --- |
@@ -32,7 +32,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
32| `both` | Returns a unit of both values when both units are present. | Written |
32| `both` | Returns a unit of both values when both units are present. | Written |
33| `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 |
33| `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 |
34| `clef` | Applies a gate returning a unit when both inputs are present; otherwise returns an absent unit. | Written |
34| `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 |
36| `fall` | Returns the value of a present unit or the supplied fallback. | Written; inferred by the partial checker |
36| `fall` | Returns the value of a present unit or the supplied fallback. | Written; inferred by the partial checker |
37| `flit` | Returns a gate that wraps a value only if it satisfies the predicate. | Written |
37| `flit` | Returns a gate that wraps a value only if it satisfies the predicate. | Written |
38| `hunt` | Returns the only present unit or chooses between two present values with an ordering gate. | Missing |
38| `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
45
45
46`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`.
46`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`.
47
47
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.
49
49
50## 2c
50## 2c
51
51
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
19
19
20## Milestone 2: in progress
20## Milestone 2: in progress
21
21
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.
23
23
24The 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.
24The 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.
25
25
@@ -39,8 +39,8 @@ What the plan asks for, and where it is:
39
39
40Besides the plan's list:
40Besides the plan's list:
41
41
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.
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 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.
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.
44- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
44- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
45- 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.
45- 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.
46- 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).
46- 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:
102| a140383 | 2026-10-31 | Report missing union tags and infer prelude unit helpers |
102| a140383 | 2026-10-31 | Report missing union tags and infer prelude unit helpers |
103| d69cc52 | 2026-10-31 | Infer longer cell binder patterns and prelude unit helpers |
103| d69cc52 | 2026-10-31 | Infer longer cell binder patterns and prelude unit helpers |
104| ae35005 | 2026-10-31 | Import source-verified tagged Hoon unions |
104| 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 |
106| 67f900e | 2026-10-31 | Infer local mutual gates and uncontextualized lists |
107| 67f900e | 2026-10-31 | Infer local mutual gates and uncontextualized lists |
107| 7ff15f1 | 2026-10-31 | Contextualize finite union patterns and record the initial poke decision |
108| 7ff15f1 | 2026-10-31 | Contextualize finite union patterns and record the initial poke decision |
108| c790a9f | 2026-10-31 | Expose transparent `poke` from the internal prelude |
109| c790a9f | 2026-10-31 | Expose transparent `poke` from the internal prelude |
109| ef4772a | 2026-10-31 | Bridge imported loobeans and loobean singletons |
110| 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 |
111
113
112## Checking it
114## Checking it
113
115
114On a machine set up as [development.md](development.md) says:
116On a machine set up as [development.md](development.md) says:
115
117
116```
118```
117−tools/golden # 556 cases under urbit eval
119+tools/golden # 557 cases under urbit eval
118tools/importer-test # the Hoon importer fixture projection
120tools/importer-test # the Hoon importer fixture projection
119tools/type-import-test # the importer/checker bridge fixture
121tools/type-import-test # the importer/checker bridge fixture
120tools/type-tlon-test # the real Tlon reader/checker fixture
122tools/type-tlon-test # the real Tlon reader/checker fixture
121tools/type-mark-test # the mark/checker bridge fixture
123tools/type-mark-test # the mark/checker bridge fixture
122tools/type-poke-test # the source-backed poke/API fixture
124tools/type-poke-test # the source-backed poke/API fixture
125+tools/type-api-paths-test # partial API path metadata fixture
123tools/type-module-scope-test # module and prelude scope fixture
126tools/type-module-scope-test # module and prelude scope fixture
124tools/hoon check-spans-test # prints <<>> when the span checker works
127tools/hoon check-spans-test # prints <<>> when the span checker works
125tools/testdata/selftest # the tools themselves
128tools/testdata/selftest # the tools themselves
126tools/doc-blocks docs/spec # the doc's examples are golden cases
129tools/doc-blocks docs/spec # the doc's examples are golden cases
127tools/ship start
130tools/ship start
128tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
131tools/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
130tools/testdata/ship-selftest
133tools/testdata/ship-selftest
131tools/ship check-commit # |commit stores .jibb files
134tools/ship check-commit # |commit stores .jibb files
132tools/clay-fixtures # example /sur files and marks build through Clay
135tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb-import.hoon+111−23
@@ -24,9 +24,10 @@
24:: the other fields are fixed atoms or collections of static atoms;
24:: the other fields are fixed atoms or collections of static atoms;
25:: other source shapes fail closed.
25:: other source shapes fail closed.
26::
26::
27−:: The checker has a small bridge for successful unfaced atom and cell
27+:: The partial checker bridges supported nouns, atoms, cells, faces,
28−:: results; it rejects other importer shapes. Failures return %|; no
28+:: proven forks and collections, and keeps proven recursive roots nominal.
29+:: Unsupported shapes fail closed. Reader failures return %|; no partial
29−:: partial tree is returned as success.
30+:: tree is returned as success.
30::
31::
31|%
32|%
32+$ imported
33+$ imported
@@ -80,13 +81,22 @@
80:: selected local arm. Restrict this fallback to distinct literal head tags
81:: selected local arm. Restrict this fallback to distinct literal head tags
81:: and proven-safe dependencies, then verify each projected branch again.
82:: and proven-safe dependencies, then verify each projected branch again.
82+$ tagged-case [tag=@ branch=spec]
83+$ tagged-case [tag=@ branch=spec]
83−:: Clay and eval expose different versions of the spec union. Inspect a
84+:: Clay and eval expose different versions of the spec union. Inspect help
84−:: help wrapper as a noun before checking its contained spec.
85+:: and source-location wrappers as nouns before checking their contained spec.
85++ source-gist-tail
86++ source-gist-tail
86 |= raw=*
87 |= raw=*
87 ^- (unit *)
88 ^- (unit *)
88− ?. ?=([%gist [%help *] *] raw) ~
89+ ?: ?=([%gist [%help *] *] raw) `+.+.raw
89− `+.+.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
90::
100::
91++ tagged-head
101++ tagged-head
92 |= branch=spec
102 |= branch=spec
@@ -96,8 +106,7 @@
96 ?+ branch ~
106 ?+ branch ~
97 [%bccl *]
107 [%bccl *]
98 ?~ t.p.branch ~
108 ?~ t.p.branch ~
99− ?. ?=([%leaf %tas @] i.p.branch) ~
109+ (tagged-term i.p.branch)
100− `q.i.p.branch
101 ==
110 ==
102::
111::
103++ tagged-cases
112++ tagged-cases
@@ -125,17 +134,17 @@
125++ tagged-source-code
134++ tagged-source-code
126 |= [code=hoon name=term]
135 |= [code=hoon name=term]
127 ^- (unit (list tagged-case))
136 ^- (unit (list tagged-case))
137+ =/ found=(unit spec) (local-mold-spec code name)
138+ ?~ found ~
139+ =/ body=spec u.found
140+ |-
128− =/ note=(unit *) (source-note-tail code)
141+ =/ gist=(unit *) (source-gist-tail body)
129− ?^ note $(code ;;(hoon u.note))
142+ ?^ gist $(body ;;(spec u.gist))
130− ?+ code ~
143+ ?. ?=([%bccn *] body) ~
131− [%ktcl *]
132− ?. ?=([%name * [%bccn *]] p.code) ~
133− ?. =(name p.p.code) ~
134− =/ cases=(list spec) p.q.p.code
144+ =/ cases=(list spec) p.body
135− ?~ cases ~
145+ ?~ cases ~
136− ?~ t.cases ~
146+ ?~ t.cases ~
137− (tagged-cases cases ~)
147+ (tagged-cases cases ~)
138− ==
139::
148::
140:: Source proof for dependencies of an explicitly tagged union. Only
149:: Source proof for dependencies of an explicitly tagged union. Only
141:: simple local molds, standard collections and distinct term enums are
150:: simple local molds, standard collections and distinct term enums are
@@ -204,7 +213,7 @@
204 =/ gist=(unit *) (source-gist-tail shape)
213 =/ gist=(unit *) (source-gist-tail shape)
205 ?^ gist $(shape ;;(spec u.gist))
214 ?^ gist $(shape ;;(spec u.gist))
206 ?+ shape ~
215 ?+ shape ~
207− [%base *] ?:(?=([%atom *] p.shape) `fuel ~)
216+ [%base *] ?:(|(?=([%atom *] p.shape) =(%flag p.shape)) `fuel ~)
208 [%leaf *] `fuel
217 [%leaf *] `fuel
209 [%bcts *] ?@ p.shape $(shape q.shape)
218 [%bcts *] ?@ p.shape $(shape q.shape)
210 ~
219 ~
@@ -312,6 +321,40 @@
312:: A mark door's payload is [sample build-subject]. Its outer sample
321:: A mark door's payload is [sample build-subject]. Its outer sample
313:: face names the door sample, not the imported mark type. Collection
322:: face names the door sample, not the imported mark type. Collection
314:: lookup for the sample happened against the pre-door build subject.
323:: 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+::
315++ read-mark
358++ read-mark
316 |= [name=term cor=type]
359 |= [name=term cor=type]
317 ^- (each imported @t)
360 ^- (each imported @t)
@@ -322,8 +365,12 @@
322 =/ sample=type p.p.cor
365 =/ sample=type p.p.cor
323 =/ raw=type ?:(?=([%face *] sample) q.sample sample)
366 =/ raw=type ?:(?=([%face *] sample) q.sample sample)
324 =/ result (read-with name name raw [~ q.p.cor])
367 =/ result (read-with name name raw [~ q.p.cor])
325− ?. ?=([%& *] result) result
368+ ?: ?=([%& *] result) result
369+ =/ fallback=(each (unit (each imported @t)) tang)
370+ (mule |.((mark-union-fallback raw q.p.cor)))
326− result
371+ ?: ?=(%| -.fallback) result
372+ ?~ p.fallback result
373+ u.p.fallback
327::
374::
328++ read-named-diagnostic
375++ read-named-diagnostic
329 |= [module=term name=term cor=type]
376 |= [module=term name=term cor=type]
@@ -1524,6 +1571,24 @@
1524 =/ source=hoon original(q.p (decorate-union-source q.p.original))
1571 =/ source=hoon original(q.p (decorate-union-source q.p.original))
1525 (read-mold %small name typ(q source))
1572 (read-mold %small name typ(q source))
1526::
1573::
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+::
1527:: Synthetic nodes test each part of the direct collection-call proof.
1592:: Synthetic nodes test each part of the direct collection-call proof.
1528++ collection-wrapper-fixture
1593++ collection-wrapper-fixture
1529 ^- tape
1594 ^- tape
@@ -1569,6 +1634,19 @@
1569 =/ mark-rec-core=type -:(ride fp mark-rec)
1634 =/ mark-rec-core=type -:(ride fp mark-rec)
1570 =/ mark-gate-core=type -:(ride -:!>(..zuse) mark-gate)
1635 =/ mark-gate-core=type -:(ride -:!>(..zuse) mark-gate)
1571 =/ mark-basic-core=type -:(ride -:!>(..zuse) mark-basic)
1636 =/ 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'))
1572 =/ fake-vase=type -:(ride -:!>(..zuse) '|%\0a+$ vase @ud\0a--\0a')
1650 =/ fake-vase=type -:(ride -:!>(..zuse) '|%\0a+$ vase @ud\0a--\0a')
1573 =/ spoof=(unit import-diagnostic)
1651 =/ spoof=(unit import-diagnostic)
1574 (first-invalid [%bad 'signed and float auras cannot be imported'])
1652 (first-invalid [%bad 'signed and float auras cannot be imported'])
@@ -1627,6 +1705,15 @@
1627 (crip "nested-static-mop: {(show-result (sample %nested-static-mop))}")
1705 (crip "nested-static-mop: {(show-result (sample %nested-static-mop))}")
1628 (crip "collection-siblings: {(show-result (sample %collection-siblings))}")
1706 (crip "collection-siblings: {(show-result (sample %collection-siblings))}")
1629 (crip "dynamic-sibling-mop: {(show-result (sample %dynamic-sibling-mop))}")
1707 (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")}")
1630 (crip "mark-record: {(show-result (read-mark %todo-item mark-core))}")
1717 (crip "mark-record: {(show-result (read-mark %todo-item mark-core))}")
1631 (crip "mark-recursive: {(show-result (read-mark %recursive mark-rec-core))}")
1718 (crip "mark-recursive: {(show-result (read-mark %recursive mark-rec-core))}")
1632 (crip "mark-gate: {(show-result (read-mark %bad mark-gate-core))}")
1719 (crip "mark-gate: {(show-result (read-mark %bad mark-gate-core))}")
@@ -1656,6 +1743,7 @@
1656 (crip "gate: {(show-result (sample %gate-test))}")
1743 (crip "gate: {(show-result (sample %gate-test))}")
1657 (crip "vase: {(show-result vase)}")
1744 (crip "vase: {(show-result vase)}")
1658 (crip "failed-branch: {(show-result (read-mold %external %bad bad-branch-fixture))}")
1745 (crip "failed-branch: {(show-result (read-mold %external %bad bad-branch-fixture))}")
1746+ (crip "debug-spec: {debug-spec-fixture}")
1659 (crip "debug-union: {(show-result (debug-union-fixture sc %action))}")
1747 (crip "debug-union: {(show-result (debug-union-fixture sc %action))}")
1660 (crip "debug-union-overlap: {(show-result (debug-union-fixture sc %explicit-wut-overlap))}")
1748 (crip "debug-union-overlap: {(show-result (debug-union-fixture sc %explicit-wut-overlap))}")
1661 (crip "debug-nested-cell: {(show-result (debug-union-fixture sc %nested-valid-cell))}")
1749 (crip "debug-nested-cell: {(show-result (debug-union-fixture sc %nested-valid-cell))}")
jibb-dev/lib/jibb.hoon+214
@@ -8807,6 +8807,220 @@
8807 ?: ?=(%| -.rest) rest
8807 ?: ?=(%| -.rest) rest
8808 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
8808 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
8809::
8809::
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+::
8810++ api-mark-exports
9024++ api-mark-exports
8811 |= [marks=(list term) all=(list term) externals=imark-externals]
9025 |= [marks=(list term) all=(list term) externals=imark-externals]
8812 ^- imold-types
9026 ^- imold-types
jibb-dev/lib/jibb/prelude.jibb+40−37
@@ -2,6 +2,7 @@
2+$ poke poke.internal
2+$ poke poke.internal
3
3
4:: Initial prelude functions. The rest of the inventory is still to come.
4:: Initial prelude functions. The rest of the inventory is still to come.
5+
5++ same |= x=A x
6++ same |= x=A x
6
7
7++ head |= p=[A B]
8++ head |= p=[A B]
@@ -143,9 +144,10 @@
143 (reverse-into xs ~)
144 (reverse-into xs ~)
144
145
145++ drop |= maybe=(unit A)
146++ drop |= maybe=(unit A)
147+ ^- (list A)
146− ?- maybe
148+ ?- maybe
147− ~ ~
149+ ~ ~
148− [~ value] [value ~]
150+ [~ value] [value ~]
149
151
150++ bind |= args=[(unit A) $-(A B)]
152++ bind |= args=[(unit A) $-(A B)]
151 ?- args
153 ?- args
@@ -193,23 +195,23 @@
193
195
194++ skim |= args=[(list A) $-(A ?)]
196++ skim |= args=[(list A) $-(A ?)]
195 ?- args
197 ?- args
196− [xs predicate]
198+ [xs predicate] ^- (list A)
197− ?- xs
199+ ?- xs
198− ~ ~
200+ ~ ~
199− [item rest]
201+ [item rest]
200− ?- (predicate item)
202+ ?- (predicate item)
201− %.y [item (skim rest predicate)]
203+ %.y [item (skim rest predicate)]
202− %.n (skim rest predicate)
204+ %.n (skim rest predicate)
203
205
204++ skip |= args=[(list A) $-(A ?)]
206++ skip |= args=[(list A) $-(A ?)]
205 ?- args
207 ?- args
206− [xs predicate]
208+ [xs predicate] ^- (list A)
207− ?- xs
209+ ?- xs
208− ~ ~
210+ ~ ~
209− [item rest]
211+ [item rest]
210− ?- (predicate item)
212+ ?- (predicate item)
211− %.y (skip rest predicate)
213+ %.y (skip rest predicate)
212− %.n [item (skip rest predicate)]
214+ %.n [item (skip rest predicate)]
213
215
214++ levy |= args=[(list A) $-(A ?)]
216++ levy |= args=[(list A) $-(A ?)]
215 ?- args
217 ?- args
@@ -254,31 +256,32 @@
254
256
255++ murn |= args=[(list A) $-(A (unit B))]
257++ murn |= args=[(list A) $-(A (unit B))]
256 ?- args
258 ?- args
257− [xs f]
259+ [xs f] ^- (list B)
258− ?- xs
260+ ?- xs
259− ~ ~
261+ ~ ~
260− [item rest]
262+ [item rest]
261− ?- (f item)
263+ ?- (f item)
262− ~ (murn rest f)
264+ ~ (murn rest f)
263− [~ value] [value (murn rest f)]
265+ [~ value] [value (murn rest f)]
264
266
265++ join |= args=[A (list A)]
267++ join |= args=[A (list A)]
266 ?- args
268 ?- args
267− [separator xs]
269+ [separator xs] ^- (list A)
268− ?- xs
270+ ?- xs
269− ~ ~
271+ ~ ~
270− [item rest]
272+ [item rest]
271− ?- rest
273+ ?- rest
272− ~ [item ~]
274+ ~ [item ~]
273− [next more] [item [separator (join separator rest)]]
275+ [next more] [item [separator (join separator rest)]]
274
276
275++ snip |= xs=(list A)
277++ snip |= xs=(list A)
278+ ^- (list A)
276− ?- xs
279+ ?- xs
277− ~ ~
280+ ~ ~
278− [item rest]
281+ [item rest]
279− ?- rest
282+ ?- rest
280− ~ ~
283+ ~ ~
281− [next more] [item (snip rest)]
284+ [next more] [item (snip rest)]
282
285
283++ rear |= xs=(list A)
286++ rear |= xs=(list A)
284 ?- xs
287 ?- 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 @@
2+$ poke poke.internal
2+$ poke poke.internal
3
3
4:: Initial prelude functions. The rest of the inventory is still to come.
4:: Initial prelude functions. The rest of the inventory is still to come.
5+
5++ same |= x=A x
6++ same |= x=A x
6
7
7++ head |= p=[A B]
8++ head |= p=[A B]
@@ -143,9 +144,10 @@
143 (reverse-into xs ~)
144 (reverse-into xs ~)
144
145
145++ drop |= maybe=(unit A)
146++ drop |= maybe=(unit A)
147+ ^- (list A)
146− ?- maybe
148+ ?- maybe
147− ~ ~
149+ ~ ~
148− [~ value] [value ~]
150+ [~ value] [value ~]
149
151
150++ bind |= args=[(unit A) $-(A B)]
152++ bind |= args=[(unit A) $-(A B)]
151 ?- args
153 ?- args
@@ -193,23 +195,23 @@
193
195
194++ skim |= args=[(list A) $-(A ?)]
196++ skim |= args=[(list A) $-(A ?)]
195 ?- args
197 ?- args
196− [xs predicate]
198+ [xs predicate] ^- (list A)
197− ?- xs
199+ ?- xs
198− ~ ~
200+ ~ ~
199− [item rest]
201+ [item rest]
200− ?- (predicate item)
202+ ?- (predicate item)
201− %.y [item (skim rest predicate)]
203+ %.y [item (skim rest predicate)]
202− %.n (skim rest predicate)
204+ %.n (skim rest predicate)
203
205
204++ skip |= args=[(list A) $-(A ?)]
206++ skip |= args=[(list A) $-(A ?)]
205 ?- args
207 ?- args
206− [xs predicate]
208+ [xs predicate] ^- (list A)
207− ?- xs
209+ ?- xs
208− ~ ~
210+ ~ ~
209− [item rest]
211+ [item rest]
210− ?- (predicate item)
212+ ?- (predicate item)
211− %.y (skip rest predicate)
213+ %.y (skip rest predicate)
212− %.n [item (skip rest predicate)]
214+ %.n [item (skip rest predicate)]
213
215
214++ levy |= args=[(list A) $-(A ?)]
216++ levy |= args=[(list A) $-(A ?)]
215 ?- args
217 ?- args
@@ -254,31 +256,32 @@
254
256
255++ murn |= args=[(list A) $-(A (unit B))]
257++ murn |= args=[(list A) $-(A (unit B))]
256 ?- args
258 ?- args
257− [xs f]
259+ [xs f] ^- (list B)
258− ?- xs
260+ ?- xs
259− ~ ~
261+ ~ ~
260− [item rest]
262+ [item rest]
261− ?- (f item)
263+ ?- (f item)
262− ~ (murn rest f)
264+ ~ (murn rest f)
263− [~ value] [value (murn rest f)]
265+ [~ value] [value (murn rest f)]
264
266
265++ join |= args=[A (list A)]
267++ join |= args=[A (list A)]
266 ?- args
268 ?- args
267− [separator xs]
269+ [separator xs] ^- (list A)
268− ?- xs
270+ ?- xs
269− ~ ~
271+ ~ ~
270− [item rest]
272+ [item rest]
271− ?- rest
273+ ?- rest
272− ~ [item ~]
274+ ~ [item ~]
273− [next more] [item [separator (join separator rest)]]
275+ [next more] [item [separator (join separator rest)]]
274
276
275++ snip |= xs=(list A)
277++ snip |= xs=(list A)
278+ ^- (list A)
276− ?- xs
279+ ?- xs
277− ~ ~
280+ ~ ~
278− [item rest]
281+ [item rest]
279− ?- rest
282+ ?- rest
280− ~ ~
283+ ~ ~
281− [next more] [item (snip rest)]
284+ [next more] [item (snip rest)]
282
285
283++ rear |= xs=(list A)
286++ rear |= xs=(list A)
284 ?- xs
287 ?- xs
tests/golden/prelude-unit-list-transforms/tokens.txt+1787−1753
@@ -10,1797 +10,1831 @@
102:1 glyph +$
102:1 glyph +$
112:4 name poke
112:4 name poke
122:9 wing poke.internal
122:9 wing poke.internal
13−5:1 NEWLINE
13+6:1 NEWLINE
14−5:1 glyph ++
14+6:1 glyph ++
15−5:4 name same
15+6:4 name same
16−5:9 glyph |=
16+6:9 glyph |=
17−5:12 name x
17+6:12 name x
18−5:13 tight glyph =
18+6:13 tight glyph =
19−5:14 tight tvar A
19+6:14 tight tvar A
20−5:16 name x
20+6:16 name x
21−7:1 NEWLINE
21+8:1 NEWLINE
22−7:1 glyph ++
22+8:1 glyph ++
23−7:4 name head
23+8:4 name head
24−7:9 glyph |=
24+8:9 glyph |=
25−7:12 name p
25+8:12 name p
26−7:13 tight glyph =
26+8:13 tight glyph =
27−7:14 tight glyph [
27+8:14 tight glyph [
28−7:15 tight tvar A
28+8:15 tight tvar A
29−7:17 tvar B
29+8:17 tvar B
30−7:18 tight glyph ]
30+8:18 tight glyph ]
31−8:3 INDENT
31+9:3 INDENT
32−8:3 glyph ?-
32+9:3 glyph ?-
33−8:6 name p
33+9:6 name p
34−9:5 INDENT
34+10:5 INDENT
35−9:5 glyph [
35+10:5 glyph [
36−9:6 tight name a
36+10:6 tight name a
37−9:8 name b
37+10:8 name b
38−9:9 tight glyph ]
38+10:9 tight glyph ]
39−9:11 name a
39+10:11 name a
40−11:1 DEDENT
40+12:1 DEDENT
41−11:1 DEDENT
41+12:1 DEDENT
42−11:1 NEWLINE
42+12:1 NEWLINE
43−11:1 glyph ++
43+12:1 glyph ++
44−11:4 name tail
44+12:4 name tail
45−11:9 glyph |=
45+12:9 glyph |=
46−11:12 name p
46+12:12 name p
47−11:13 tight glyph =
47+12:13 tight glyph =
48−11:14 tight glyph [
48+12:14 tight glyph [
49−11:15 tight tvar A
49+12:15 tight tvar A
50−11:17 tvar B
50+12:17 tvar B
51−11:18 tight glyph ]
51+12:18 tight glyph ]
52−12:3 INDENT
52+13:3 INDENT
53−12:3 glyph ?-
53+13:3 glyph ?-
54−12:6 name p
54+13:6 name p
55−13:5 INDENT
55+14:5 INDENT
56−13:5 glyph [
56+14:5 glyph [
57−13:6 tight name a
57+14:6 tight name a
58−13:8 name b
58+14:8 name b
59−13:9 tight glyph ]
59+14:9 tight glyph ]
60−13:11 name b
60+14:11 name b
61−15:1 DEDENT
61+16:1 DEDENT
62−15:1 DEDENT
62+16:1 DEDENT
63−15:1 NEWLINE
63+16:1 NEWLINE
64−15:1 glyph ++
64+16:1 glyph ++
65−15:4 name not
65+16:4 name not
66−15:8 glyph |=
66+16:8 glyph |=
67−15:11 name b
67+16:11 name b
68−15:12 tight glyph =
68+16:12 tight glyph =
69−15:13 tight glyph ?
69+16:13 tight glyph ?
70−16:3 INDENT
70+17:3 INDENT
71−16:3 glyph ?-
71+17:3 glyph ?-
72−16:6 name b
72+17:6 name b
73−17:5 INDENT
73+18:5 INDENT
74−17:5 lit %.y
74+18:5 lit %.y
75−17:9 lit %.n
75+18:9 lit %.n
76−18:5 NEWLINE
76+19:5 NEWLINE
77−18:5 lit %.n
77+19:5 lit %.n
78−18:9 lit %.y
78+19:9 lit %.y
79−20:1 DEDENT
79+21:1 DEDENT
80−20:1 DEDENT
80+21:1 DEDENT
81−20:1 NEWLINE
81+21:1 NEWLINE
82−20:1 glyph +$
82+21:1 glyph +$
83−20:4 name list
83+21:4 name list
84−20:9 glyph |$
84+21:9 glyph |$
85−20:12 glyph [
85+21:12 glyph [
86−20:13 tight tvar A
86+21:13 tight tvar A
87−20:14 tight glyph ]
87+21:14 tight glyph ]
88−21:3 INDENT
88+22:3 INDENT
89−21:3 lit ~
89+22:3 lit ~
90−22:3 NEWLINE
90+23:3 NEWLINE
91−22:3 glyph [
91+23:3 glyph [
92−22:4 tight name i
92+23:4 tight name i
93−22:5 tight glyph =
93+23:5 tight glyph =
94−22:6 tight tvar A
94+23:6 tight tvar A
95−22:8 name t
95+23:8 name t
96−22:9 tight glyph =
96+23:9 tight glyph =
97−22:10 tight glyph (
97+23:10 tight glyph (
98−22:11 tight name list
98+23:11 tight name list
99−22:16 tvar A
99+23:16 tvar A
100−22:17 tight glyph )
100+23:17 tight glyph )
101−22:18 tight glyph ]
101+23:18 tight glyph ]
102−24:1 DEDENT
102+25:1 DEDENT
103−24:1 NEWLINE
103+25:1 NEWLINE
104−24:1 glyph +$
104+25:1 glyph +$
105−24:4 name unit
105+25:4 name unit
106−24:9 glyph |$
106+25:9 glyph |$
107−24:12 glyph [
107+25:12 glyph [
108−24:13 tight tvar A
108+25:13 tight tvar A
109−24:14 tight glyph ]
109+25:14 tight glyph ]
110−25:3 INDENT
110+26:3 INDENT
111−25:3 lit ~
111+26:3 lit ~
112−26:3 NEWLINE
112+27:3 NEWLINE
113−26:3 glyph [
113+27:3 glyph [
114−26:4 tight lit ~
114+27:4 tight lit ~
115−26:6 name u
115+27:6 name u
116−26:7 tight glyph =
116+27:7 tight glyph =
117−26:8 tight tvar A
117+27:8 tight tvar A
118−26:9 tight glyph ]
118+27:9 tight glyph ]
119−28:1 DEDENT
119+29:1 DEDENT
120−28:1 NEWLINE
120+29:1 NEWLINE
121−28:1 glyph ++
121+29:1 glyph ++
122−28:4 name fall
122+29:4 name fall
123−28:9 glyph |=
123+29:9 glyph |=
124−28:12 name args
124+29:12 name args
125−28:16 tight glyph =
125+29:16 tight glyph =
126−28:17 tight glyph [
126+29:17 tight glyph [
127−28:18 tight glyph (
127+29:18 tight glyph (
128−28:19 tight name unit
128+29:19 tight name unit
129−28:24 tvar A
129+29:24 tvar A
130−28:25 tight glyph )
130+29:25 tight glyph )
131−28:27 tvar A
131+29:27 tvar A
132−28:28 tight glyph ]
132+29:28 tight glyph ]
133−29:3 INDENT
133+30:3 INDENT
134−29:3 glyph ?-
134+30:3 glyph ?-
135−29:6 name args
135+30:6 name args
136−30:5 INDENT
136+31:5 INDENT
137−30:5 glyph [
137+31:5 glyph [
138−30:6 tight name maybe
138+31:6 tight name maybe
139−30:12 name fallback
139+31:12 name fallback
140−30:20 tight glyph ]
140+31:20 tight glyph ]
141−31:7 INDENT
141+32:7 INDENT
142−31:7 glyph ?-
142+32:7 glyph ?-
143−31:10 name maybe
143+32:10 name maybe
144−32:9 INDENT
144+33:9 INDENT
145−32:9 lit ~
145+33:9 lit ~
146−32:11 name fallback
146+33:11 name fallback
147−33:9 NEWLINE
147+34:9 NEWLINE
148−33:9 glyph [
148+34:9 glyph [
149−33:10 tight lit ~
149+34:10 tight lit ~
150−33:12 name value
150+34:12 name value
151−33:17 tight glyph ]
151+34:17 tight glyph ]
152−33:19 name value
152+34:19 name value
153−35:1 DEDENT
153+36:1 DEDENT
154−35:1 DEDENT
154+36:1 DEDENT
155−35:1 DEDENT
155+36:1 DEDENT
156−35:1 DEDENT
156+36:1 DEDENT
157−35:1 NEWLINE
157+36:1 NEWLINE
158−35:1 glyph ++
158+36:1 glyph ++
159−35:4 name need
159+36:4 name need
160−35:9 glyph |=
160+36:9 glyph |=
161−35:12 name maybe
161+36:12 name maybe
162−35:17 tight glyph =
162+36:17 tight glyph =
163−35:18 tight glyph (
163+36:18 tight glyph (
164−35:19 tight name unit
164+36:19 tight name unit
165−35:24 tvar A
165+36:24 tvar A
166−35:25 tight glyph )
166+36:25 tight glyph )
167−36:3 INDENT
167+37:3 INDENT
168−36:3 glyph ?-
168+37:3 glyph ?-
169−36:6 name maybe
169+37:6 name maybe
170−37:5 INDENT
170+38:5 INDENT
171−37:5 lit ~
171+38:5 lit ~
172−37:7 glyph !!
172+38:7 glyph !!
173−38:5 NEWLINE
173+39:5 NEWLINE
174−38:5 glyph [
174+39:5 glyph [
175−38:6 tight lit ~
175+39:6 tight lit ~
176−38:8 name value
176+39:8 name value
177−38:13 tight glyph ]
177+39:13 tight glyph ]
178−38:15 name value
178+39:15 name value
179−40:1 DEDENT
179+41:1 DEDENT
180−40:1 DEDENT
180+41:1 DEDENT
181−40:1 NEWLINE
181+41:1 NEWLINE
182−40:1 glyph ++
182+41:1 glyph ++
183−40:4 name weld
183+41:4 name weld
184−40:9 glyph |=
184+41:9 glyph |=
185−40:12 name args
185+41:12 name args
186−40:16 tight glyph =
186+41:16 tight glyph =
187−40:17 tight glyph [
187+41:17 tight glyph [
188−40:18 tight glyph (
188+41:18 tight glyph (
189−40:19 tight name list
189+41:19 tight name list
190−40:24 tvar A
190+41:24 tvar A
191−40:25 tight glyph )
191+41:25 tight glyph )
192−40:27 glyph (
192+41:27 glyph (
193−40:28 tight name list
193+41:28 tight name list
194−40:33 tvar A
194+41:33 tvar A
195−40:34 tight glyph )
195+41:34 tight glyph )
196−40:35 tight glyph ]
196+41:35 tight glyph ]
197−41:3 INDENT
197+42:3 INDENT
198−41:3 glyph ?-
198+42:3 glyph ?-
199−41:6 name args
199+42:6 name args
200−42:5 INDENT
200+43:5 INDENT
201−42:5 glyph [
201+43:5 glyph [
202−42:6 tight name xs
202+43:6 tight name xs
203−42:9 name ys
203+43:9 name ys
204−42:11 tight glyph ]
204+43:11 tight glyph ]
205−43:7 INDENT
205+44:7 INDENT
206−43:7 glyph ^-
206+44:7 glyph ^-
207−43:10 glyph (
207+44:10 glyph (
208−43:11 tight name list
208+44:11 tight name list
209−43:16 tvar A
209+44:16 tvar A
210−43:17 tight glyph )
210+44:17 tight glyph )
211−44:9 INDENT
211+45:9 INDENT
212−44:9 glyph ?-
212+45:9 glyph ?-
213−44:12 name xs
213+45:12 name xs
214−45:11 INDENT
214+46:11 INDENT
215−45:11 lit ~
215+46:11 lit ~
216−45:13 name ys
216+46:13 name ys
217−46:11 NEWLINE
217+47:11 NEWLINE
218−46:11 glyph [
218+47:11 glyph [
219−46:12 tight name item
219+47:12 tight name item
220−46:17 name rest
220+47:17 name rest
221−46:21 tight glyph ]
221+47:21 tight glyph ]
222−46:23 glyph [
222+47:23 glyph [
223−46:24 tight name item
223+47:24 tight name item
224−46:29 glyph (
224+47:29 glyph (
225−46:30 tight name weld
225+47:30 tight name weld
226−46:35 name rest
226+47:35 name rest
227−46:40 name ys
227+47:40 name ys
228−46:42 tight glyph )
228+47:42 tight glyph )
229−46:43 tight glyph ]
229+47:43 tight glyph ]
230−48:1 DEDENT
230+49:1 DEDENT
231−48:1 DEDENT
231+49:1 DEDENT
232−48:1 DEDENT
232+49:1 DEDENT
233−48:1 DEDENT
233+49:1 DEDENT
234−48:1 DEDENT
234+49:1 DEDENT
235−48:1 NEWLINE
235+49:1 NEWLINE
236−48:1 glyph ++
236+49:1 glyph ++
237−48:4 name turn
237+49:4 name turn
238−48:9 glyph |=
238+49:9 glyph |=
239−48:12 name args
239+49:12 name args
240−48:16 tight glyph =
240+49:16 tight glyph =
241−48:17 tight glyph [
241+49:17 tight glyph [
242−48:18 tight glyph (
242+49:18 tight glyph (
243−48:19 tight name list
243+49:19 tight name list
244−48:24 tvar A
244+49:24 tvar A
245−48:25 tight glyph )
245+49:25 tight glyph )
246−48:27 glyph $-(
246+49:27 glyph $-(
247−48:30 tight tvar A
247+49:30 tight tvar A
248−48:32 tvar B
248+49:32 tvar B
249−48:33 tight glyph )
249+49:33 tight glyph )
250−48:34 tight glyph ]
250+49:34 tight glyph ]
251−49:3 INDENT
251+50:3 INDENT
252−49:3 glyph ?-
252+50:3 glyph ?-
253−49:6 name args
253+50:6 name args
254−50:5 INDENT
254+51:5 INDENT
255−50:5 glyph [
255+51:5 glyph [
256−50:6 tight name xs
256+51:6 tight name xs
257−50:9 name f
257+51:9 name f
258−50:10 tight glyph ]
258+51:10 tight glyph ]
259−51:7 INDENT
259+52:7 INDENT
260−51:7 glyph ^-
260+52:7 glyph ^-
261−51:10 glyph (
261+52:10 glyph (
262−51:11 tight name list
262+52:11 tight name list
263−51:16 tvar B
263+52:16 tvar B
264−51:17 tight glyph )
264+52:17 tight glyph )
265−52:9 INDENT
265+53:9 INDENT
266−52:9 glyph ?-
266+53:9 glyph ?-
267−52:12 name xs
267+53:12 name xs
268−53:11 INDENT
268+54:11 INDENT
269−53:11 lit ~
269+54:11 lit ~
270−53:13 lit ~
270+54:13 lit ~
271−54:11 NEWLINE
271+55:11 NEWLINE
272−54:11 glyph [
272+55:11 glyph [
273−54:12 tight name item
273+55:12 tight name item
274−54:17 name rest
274+55:17 name rest
275−54:21 tight glyph ]
275+55:21 tight glyph ]
276−54:23 glyph [
276+55:23 glyph [
277−54:24 tight glyph (
277+55:24 tight glyph (
278−54:25 tight name f
278+55:25 tight name f
279−54:27 name item
279+55:27 name item
280−54:31 tight glyph )
280+55:31 tight glyph )
281−54:33 glyph (
281+55:33 glyph (
282−54:34 tight name turn
282+55:34 tight name turn
283−54:39 name rest
283+55:39 name rest
284−54:44 name f
284+55:44 name f
285−54:45 tight glyph )
285+55:45 tight glyph )
286−54:46 tight glyph ]
286+55:46 tight glyph ]
287−56:1 DEDENT
287+57:1 DEDENT
288−56:1 DEDENT
288+57:1 DEDENT
289−56:1 DEDENT
289+57:1 DEDENT
290−56:1 DEDENT
290+57:1 DEDENT
291−56:1 DEDENT
291+57:1 DEDENT
292−56:1 NEWLINE
292+57:1 NEWLINE
293−56:1 glyph +$
293+57:1 glyph +$
294−56:4 name dime
294+57:4 name dime
295−56:9 glyph [
295+57:9 glyph [
296−56:10 tight name p
296+57:10 tight name p
297−56:11 tight glyph =
297+57:11 tight glyph =
298−56:12 tight aura @ta
298+57:12 tight aura @ta
299−56:16 name q
299+57:16 name q
300−56:17 tight glyph =
300+57:17 tight glyph =
301−56:18 tight aura @
301+57:18 tight aura @
302−56:19 tight glyph ]
302+57:19 tight glyph ]
303−58:1 NEWLINE
303+59:1 NEWLINE
304−58:1 glyph +$
304+59:1 glyph +$
305−58:4 name hair
305+59:4 name hair
306−58:9 glyph [
306+59:9 glyph [
307−58:10 tight name p
307+59:10 tight name p
308−58:11 tight glyph =
308+59:11 tight glyph =
309−58:12 tight aura @ud
309+59:12 tight aura @ud
310−58:16 name q
310+59:16 name q
311−58:17 tight glyph =
311+59:17 tight glyph =
312−58:18 tight aura @ud
312+59:18 tight aura @ud
313−58:21 tight glyph ]
313+59:21 tight glyph ]
314−60:1 NEWLINE
314+61:1 NEWLINE
315−60:1 glyph +$
315+61:1 glyph +$
316−60:4 name pint
316+61:4 name pint
317−60:9 glyph [
317+61:9 glyph [
318−60:10 tight name p
318+61:10 tight name p
319−60:11 tight glyph =
319+61:11 tight glyph =
320−60:12 tight glyph [
320+61:12 tight glyph [
321−60:13 tight name p
321+61:13 tight name p
322−60:14 tight glyph =
322+61:14 tight glyph =
323−60:15 tight aura @
323+61:15 tight aura @
324−60:17 name q
324+61:17 name q
325−60:18 tight glyph =
325+61:18 tight glyph =
326−60:19 tight aura @
326+61:19 tight aura @
327−60:20 tight glyph ]
327+61:20 tight glyph ]
328−60:22 name q
328+61:22 name q
329−60:23 tight glyph =
329+61:23 tight glyph =
330−60:24 tight glyph [
330+61:24 tight glyph [
331−60:25 tight name p
331+61:25 tight name p
332−60:26 tight glyph =
332+61:26 tight glyph =
333−60:27 tight aura @
333+61:27 tight aura @
334−60:29 name q
334+61:29 name q
335−60:30 tight glyph =
335+61:30 tight glyph =
336−60:31 tight aura @
336+61:31 tight aura @
337−60:32 tight glyph ]
337+61:32 tight glyph ]
338−60:33 tight glyph ]
338+61:33 tight glyph ]
339−62:1 NEWLINE
339+63:1 NEWLINE
340−62:1 glyph +$
340+63:1 glyph +$
341−62:4 name coin
341+63:4 name coin
342−63:3 INDENT
342+64: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
35064:3 glyph [
34364:3 glyph [
351−64:4 tight lit %blob
344+64:4 tight lit %$
352−64:10 name p
345+64:7 name p
353−64:11 tight glyph =
346+64:8 tight glyph =
354−64:12 tight glyph *
347+64:9 tight name dime
35564:13 tight glyph ]
34864:13 tight glyph ]
35665:3 NEWLINE
34965:3 NEWLINE
35765:3 glyph [
35065:3 glyph [
358−65:4 tight lit %many
351+65:4 tight lit %blob
35965:10 name p
35265:10 name p
36065:11 tight glyph =
35365:11 tight glyph =
361−65:12 tight glyph (
354+65:12 tight glyph *
362−65:13 tight name list
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−65:18 name coin
363+66:18 name coin
364−65:22 tight glyph )
364+66:22 tight glyph )
365−65:23 tight glyph ]
365+66:23 tight glyph ]
366−67:1 DEDENT
366+68:1 DEDENT
367−67:1 NEWLINE
367+68:1 NEWLINE
368−67:1 glyph +$
368+68:1 glyph +$
369−67:4 name pair
369+68:4 name pair
370−67:9 glyph |$
370+68:9 glyph |$
371−67:12 glyph [
371+68:12 glyph [
372−67:13 tight tvar A
372+68:13 tight tvar A
373−67:15 tvar B
373+68:15 tvar B
374−67:16 tight glyph ]
374+68:16 tight glyph ]
375−67:18 glyph [
375+68:18 glyph [
376−67:19 tight name p
376+68:19 tight name p
377−67:20 tight glyph =
377+68:20 tight glyph =
378−67:21 tight tvar A
378+68:21 tight tvar A
379−67:23 name q
379+68:23 name q
380−67:24 tight glyph =
380+68:24 tight glyph =
381−67:25 tight tvar B
381+68:25 tight tvar B
382−67:26 tight glyph ]
382+68:26 tight glyph ]
383−69:1 NEWLINE
383+70:1 NEWLINE
384−69:1 glyph +$
384+70:1 glyph +$
385−69:4 name trel
385+70:4 name trel
386−69:9 glyph |$
386+70:9 glyph |$
387−69:12 glyph [
387+70:12 glyph [
388−69:13 tight tvar A
388+70:13 tight tvar A
389−69:15 tvar B
389+70:15 tvar B
390−69:17 tvar C
390+70:17 tvar C
391−69:18 tight glyph ]
391+70:18 tight glyph ]
392−69:20 glyph [
392+70:20 glyph [
393−69:21 tight name p
393+70:21 tight name p
394−69:22 tight glyph =
394+70:22 tight glyph =
395−69:23 tight tvar A
395+70:23 tight tvar A
396−69:25 name q
396+70:25 name q
397−69:26 tight glyph =
397+70:26 tight glyph =
398−69:27 tight tvar B
398+70:27 tight tvar B
399−69:29 name r
399+70:29 name r
400−69:30 tight glyph =
400+70:30 tight glyph =
401−69:31 tight tvar C
401+70:31 tight tvar C
402−69:32 tight glyph ]
402+70:32 tight glyph ]
403−71:1 NEWLINE
403+72:1 NEWLINE
404−71:1 glyph +$
404+72:1 glyph +$
405−71:4 name qual
405+72:4 name qual
406−71:9 glyph |$
406+72:9 glyph |$
407−71:12 glyph [
407+72:12 glyph [
408−71:13 tight tvar A
408+72:13 tight tvar A
409−71:15 tvar B
409+72:15 tvar B
410−71:17 tvar C
410+72:17 tvar C
411−71:19 tvar D
411+72:19 tvar D
412−71:20 tight glyph ]
412+72:20 tight glyph ]
413−71:22 glyph [
413+72:22 glyph [
414−71:23 tight name p
414+72:23 tight name p
415−71:24 tight glyph =
415+72:24 tight glyph =
416−71:25 tight tvar A
416+72:25 tight tvar A
417−71:27 name q
417+72:27 name q
418−71:28 tight glyph =
418+72:28 tight glyph =
419−71:29 tight tvar B
419+72:29 tight tvar B
420−71:31 name r
420+72:31 name r
421−71:32 tight glyph =
421+72:32 tight glyph =
422−71:33 tight tvar C
422+72:33 tight tvar C
423−71:35 name s
423+72:35 name s
424−71:36 tight glyph =
424+72:36 tight glyph =
425−71:37 tight tvar D
425+72:37 tight tvar D
426−71:38 tight glyph ]
426+72:38 tight glyph ]
427−73:1 NEWLINE
427+74:1 NEWLINE
428−73:1 glyph +$
428+74:1 glyph +$
429−73:4 name cord
429+74:4 name cord
430−73:9 aura @t
430+74:9 aura @t
431−75:1 NEWLINE
431+76:1 NEWLINE
432−75:1 glyph +$
432+76:1 glyph +$
433−75:4 name knot
433+76:4 name knot
434−75:9 aura @ta
434+76:9 aura @ta
435−77:1 NEWLINE
435+78:1 NEWLINE
436−77:1 glyph +$
436+78:1 glyph +$
437−77:4 name tape
437+78:4 name tape
438−77:9 glyph (
438+78:9 glyph (
439−77:10 tight name list
439+78:10 tight name list
440−77:15 aura @tD
440+78:15 aura @tD
441−77:18 tight glyph )
441+78:18 tight glyph )
442−79:1 NEWLINE
442+80:1 NEWLINE
443−79:1 glyph +$
443+80:1 glyph +$
444−79:4 name path
444+80:4 name path
445−79:9 glyph (
445+80:9 glyph (
446−79:10 tight name list
446+80:10 tight name list
447−79:15 name knot
447+80:15 name knot
448−79:19 tight glyph )
448+80:19 tight glyph )
449−81:1 NEWLINE
449+82:1 NEWLINE
450−81:1 glyph +$
450+82:1 glyph +$
451−81:4 name tank
451+82:4 name tank
452−82:3 INDENT
452+83: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
453+83:3 name cord
458−83:11 tight glyph =
459−83:12 tight name tape
460−83:16 tight glyph ]
46184:3 NEWLINE
45484:3 NEWLINE
46284:3 glyph [
45584:3 glyph [
463−84:4 tight lit %palm
456+84:4 tight lit %leaf
46484:10 name p
45784:10 name p
46584:11 tight glyph =
45884:11 tight glyph =
466−84:12 tight glyph (
459+84:12 tight name tape
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 ]
460+84:16 tight glyph ]
48085:3 NEWLINE
46185:3 NEWLINE
48185:3 glyph [
46285:3 glyph [
482−85:4 tight lit %rose
463+85:4 tight lit %palm
48385:10 name p
46485:10 name p
48485:11 tight glyph =
46585:11 tight glyph =
48585:12 tight glyph (
46685:12 tight glyph (
486−85:13 tight name trel
467+85:13 tight name qual
48785:18 name tape
46885:18 name tape
48885:23 name tape
46985:23 name tape
48985:28 name tape
47085:28 name tape
471+85:33 name tape
490−85:32 tight glyph )
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−85:34 name q
491+86:34 name q
492−85:35 tight glyph =
492+86:35 tight glyph =
493−85:36 tight glyph (
493+86:36 tight glyph (
494−85:37 tight name list
494+86:37 tight name list
495−85:42 name tank
495+86:42 name tank
496−85:46 tight glyph )
496+86:46 tight glyph )
497−85:47 tight glyph ]
497+86:47 tight glyph ]
498−87:1 DEDENT
498+88:1 DEDENT
499−87:1 NEWLINE
499+88:1 NEWLINE
500−87:1 glyph +$
500+88:1 glyph +$
501−87:4 name nail
501+88:4 name nail
502−87:9 glyph [
502+88:9 glyph [
503−87:10 tight name p
503+88:10 tight name p
504−87:11 tight glyph =
504+88:11 tight glyph =
505−87:12 tight name hair
505+88:12 tight name hair
506−87:17 name q
506+88:17 name q
507−87:18 tight glyph =
507+88:18 tight glyph =
508−87:19 tight name tape
508+88:19 tight name tape
509−87:23 tight glyph ]
509+88:23 tight glyph ]
510−89:1 NEWLINE
510+90:1 NEWLINE
511−89:1 glyph +$
511+90:1 glyph +$
512−89:4 name edge
512+90:4 name edge
513−89:9 glyph [
513+90:9 glyph [
514−89:10 tight name p
514+90:10 tight name p
515−89:11 tight glyph =
515+90:11 tight glyph =
516−89:12 tight name hair
516+90:12 tight name hair
517−89:17 name q
517+90:17 name q
518−89:18 tight glyph =
518+90:18 tight glyph =
519−89:19 tight glyph (
519+90:19 tight glyph (
520−89:20 tight name unit
520+90:20 tight name unit
521−89:25 glyph [
521+90:25 glyph [
522−89:26 tight name p
522+90:26 tight name p
523−89:27 tight glyph =
523+90:27 tight glyph =
524−89:28 tight glyph *
524+90:28 tight glyph *
525−89:30 name q
525+90:30 name q
526−89:31 tight glyph =
526+90:31 tight glyph =
527−89:32 tight name nail
527+90:32 tight name nail
528−89:36 tight glyph ]
528+90:36 tight glyph ]
529−89:37 tight glyph )
529+90:37 tight glyph )
530−89:38 tight glyph ]
530+90:38 tight glyph ]
531−91:1 NEWLINE
531+92:1 NEWLINE
532−91:1 glyph +$
532+92:1 glyph +$
533−91:4 name rule
533+92:4 name rule
534−91:9 glyph $-(
534+92:9 glyph $-(
535−91:12 tight name nail
535+92:12 tight name nail
536−91:17 name edge
536+92:17 name edge
537−91:21 tight glyph )
537+92:21 tight glyph )
538−93:1 NEWLINE
538+94:1 NEWLINE
539−93:1 glyph +$
539+94:1 glyph +$
540−93:4 name spot
540+94:4 name spot
541−93:9 glyph [
541+94:9 glyph [
542−93:10 tight name p
542+94:10 tight name p
543−93:11 tight glyph =
543+94:11 tight glyph =
544−93:12 tight name path
544+94:12 tight name path
545−93:17 name q
545+94:17 name q
546−93:18 tight glyph =
546+94:18 tight glyph =
547−93:19 tight name pint
547+94:19 tight name pint
548−93:23 tight glyph ]
548+94:23 tight glyph ]
549−95:1 NEWLINE
549+96:1 NEWLINE
550−95:1 glyph +$
550+96:1 glyph +$
551−95:4 name toon
551+96:4 name toon
552−96:3 INDENT
552+97: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
56097:3 glyph [
55397:3 glyph [
561−97:4 tight lit %1
554+97:4 tight lit %0
56297:7 name p
55597:7 name p
56397:8 tight glyph =
55697:8 tight glyph =
56497:9 tight glyph *
55797:9 tight glyph *
56597:10 tight glyph ]
55897:10 tight glyph ]
56698:3 NEWLINE
55998:3 NEWLINE
56798:3 glyph [
56098:3 glyph [
568−98:4 tight lit %2
561+98:4 tight lit %1
56998:7 name p
56298:7 name p
57098:8 tight glyph =
56398:8 tight glyph =
571−98:9 tight glyph (
564+98:9 tight glyph *
572−98:10 tight name list
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−98:15 name tank
573+99:15 name tank
574−98:19 tight glyph )
574+99:19 tight glyph )
575−98:20 tight glyph ]
575+99:20 tight glyph ]
576−100:1 DEDENT
576+101:1 DEDENT
577−100:1 NEWLINE
577+101:1 NEWLINE
578−100:1 glyph +$
578+101:1 glyph +$
579−100:4 name like
579+101:4 name like
580−100:9 glyph |$
580+101:9 glyph |$
581−100:12 glyph [
581+101:12 glyph [
582−100:13 tight tvar A
582+101:13 tight tvar A
583−100:14 tight glyph ]
583+101:14 tight glyph ]
584−100:16 glyph [
584+101:16 glyph [
585−100:17 tight name p
585+101:17 tight name p
586−100:18 tight glyph =
586+101:18 tight glyph =
587−100:19 tight name hair
587+101:19 tight name hair
588−100:24 name q
588+101:24 name q
589−100:25 tight glyph =
589+101:25 tight glyph =
590−100:26 tight glyph (
590+101:26 tight glyph (
591−100:27 tight name unit
591+101:27 tight name unit
592−100:32 glyph [
592+101:32 glyph [
593−100:33 tight name p
593+101:33 tight name p
594−100:34 tight glyph =
594+101:34 tight glyph =
595−100:35 tight tvar A
595+101:35 tight tvar A
596−100:37 name q
596+101:37 name q
597−100:38 tight glyph =
597+101:38 tight glyph =
598−100:39 tight name nail
598+101:39 tight name nail
599−100:43 tight glyph ]
599+101:43 tight glyph ]
600−100:44 tight glyph )
600+101:44 tight glyph )
601−100:45 tight glyph ]
601+101:45 tight glyph ]
602−102:1 NEWLINE
602+103:1 NEWLINE
603−102:1 glyph ++
603+103:1 glyph ++
604−102:4 name wonk
604+103:4 name wonk
605−102:9 glyph |=
605+103:9 glyph |=
606−102:12 name veq
606+103:12 name veq
607−102:15 tight glyph =
607+103:15 tight glyph =
608−102:16 tight glyph (
608+103:16 tight glyph (
609−102:17 tight name like
609+103:17 tight name like
610−102:22 tvar A
610+103:22 tvar A
611−102:23 tight glyph )
611+103:23 tight glyph )
612−103:3 INDENT
612+104:3 INDENT
613−103:3 glyph ?-
613+104:3 glyph ?-
614−103:6 wing q.veq
614+104:6 wing q.veq
615−104:5 INDENT
615+105:5 INDENT
616−104:5 lit ~
616+105:5 lit ~
617−104:7 glyph !!
617+105:7 glyph !!
618−105:5 NEWLINE
618+106:5 NEWLINE
619−105:5 glyph [
619+106:5 glyph [
620−105:6 tight lit ~
620+106:6 tight lit ~
621−105:8 name product
621+106:8 name product
622−105:15 tight glyph ]
622+106:15 tight glyph ]
623−105:17 wing p.product
623+106:17 wing p.product
624−107:1 DEDENT
624+108:1 DEDENT
625−107:1 DEDENT
625+108:1 DEDENT
626−107:1 NEWLINE
626+108:1 NEWLINE
627−107:1 glyph +$
627+108:1 glyph +$
628−107:4 name lone
628+108:4 name lone
629−107:9 glyph |$
629+108:9 glyph |$
630−107:12 glyph [
630+108:12 glyph [
631−107:13 tight tvar A
631+108:13 tight tvar A
632−107:14 tight glyph ]
632+108:14 tight glyph ]
633−107:16 glyph [
633+108:16 glyph [
634−107:17 tight name p
634+108:17 tight name p
635−107:18 tight glyph =
635+108:18 tight glyph =
636−107:19 tight tvar A
636+108:19 tight tvar A
637−107:20 tight glyph ]
637+108:20 tight glyph ]
638−109:1 NEWLINE
638+110:1 NEWLINE
639−109:1 glyph +$
639+110:1 glyph +$
640−109:4 name lest
640+110:4 name lest
641−109:9 glyph |$
641+110:9 glyph |$
642−109:12 glyph [
642+110:12 glyph [
643−109:13 tight tvar A
643+110:13 tight tvar A
644−109:14 tight glyph ]
644+110:14 tight glyph ]
645−109:16 glyph [
645+110:16 glyph [
646−109:17 tight name i
646+110:17 tight name i
647−109:18 tight glyph =
647+110:18 tight glyph =
648−109:19 tight tvar A
648+110:19 tight tvar A
649−109:21 name t
649+110:21 name t
650−109:22 tight glyph =
650+110:22 tight glyph =
651−109:23 tight glyph (
651+110:23 tight glyph (
652−109:24 tight name list
652+110:24 tight name list
653−109:29 tvar A
653+110:29 tvar A
654−109:30 tight glyph )
654+110:30 tight glyph )
655−109:31 tight glyph ]
655+110:31 tight glyph ]
656−111:1 NEWLINE
656+112:1 NEWLINE
657−111:1 glyph +$
657+112:1 glyph +$
658−111:4 name pole
658+112:4 name pole
659−111:9 glyph |$
659+112:9 glyph |$
660−111:12 glyph [
660+112:12 glyph [
661−111:13 tight tvar A
661+112:13 tight tvar A
662−111:14 tight glyph ]
662+112:14 tight glyph ]
663−112:3 INDENT
663+113:3 INDENT
664−112:3 lit ~
664+113:3 lit ~
665−113:3 NEWLINE
665+114:3 NEWLINE
666−113:3 glyph [
666+114:3 glyph [
667−113:4 tight tvar A
667+114:4 tight tvar A
668−113:6 glyph (
668+114:6 glyph (
669−113:7 tight name pole
669+114:7 tight name pole
670−113:12 tvar A
670+114:12 tvar A
671−113:13 tight glyph )
671+114:13 tight glyph )
672−113:14 tight glyph ]
672+114:14 tight glyph ]
673−115:1 DEDENT
673+116:1 DEDENT
674−115:1 NEWLINE
674+116:1 NEWLINE
675−115:1 glyph +$
675+116:1 glyph +$
676−115:4 name quip
676+116:4 name quip
677−115:9 glyph |$
677+116:9 glyph |$
678−115:12 glyph [
678+116:12 glyph [
679−115:13 tight tvar A
679+116:13 tight tvar A
680−115:15 tvar B
680+116:15 tvar B
681−115:16 tight glyph ]
681+116:16 tight glyph ]
682−115:18 glyph [
682+116:18 glyph [
683−115:19 tight glyph (
683+116:19 tight glyph (
684−115:20 tight name list
684+116:20 tight name list
685−115:25 tvar A
685+116:25 tvar A
686−115:26 tight glyph )
686+116:26 tight glyph )
687−115:28 tvar B
687+116:28 tvar B
688−115:29 tight glyph ]
688+116:29 tight glyph ]
689−117:1 NEWLINE
689+118:1 NEWLINE
690−117:1 glyph +$
690+118:1 glyph +$
691−117:4 name tree
691+118:4 name tree
692−117:9 glyph |$
692+118:9 glyph |$
693−117:12 glyph [
693+118:12 glyph [
694−117:13 tight tvar A
694+118:13 tight tvar A
695−117:14 tight glyph ]
695+118:14 tight glyph ]
696−118:3 INDENT
696+119:3 INDENT
697−118:3 lit ~
697+119:3 lit ~
698−119:3 NEWLINE
698+120:3 NEWLINE
699−119:3 glyph [
699+120:3 glyph [
700−119:4 tight name n
700+120:4 tight name n
701−119:5 tight glyph =
701+120:5 tight glyph =
702−119:6 tight tvar A
702+120:6 tight tvar A
703−119:8 name l
703+120:8 name l
704−119:9 tight glyph =
704+120:9 tight glyph =
705−119:10 tight glyph (
705+120:10 tight glyph (
706−119:11 tight name tree
706+120:11 tight name tree
707−119:16 tvar A
707+120:16 tvar A
708−119:17 tight glyph )
708+120:17 tight glyph )
709−119:19 name r
709+120:19 name r
710−119:20 tight glyph =
710+120:20 tight glyph =
711−119:21 tight glyph (
711+120:21 tight glyph (
712−119:22 tight name tree
712+120:22 tight name tree
713−119:27 tvar A
713+120:27 tvar A
714−119:28 tight glyph )
714+120:28 tight glyph )
715−119:29 tight glyph ]
715+120:29 tight glyph ]
716−121:1 DEDENT
716+122:1 DEDENT
717−121:1 NEWLINE
717+122:1 NEWLINE
718−121:1 glyph +$
718+122:1 glyph +$
719−121:4 name each
719+122:4 name each
720−121:9 glyph |$
720+122:9 glyph |$
721−121:12 glyph [
721+122:12 glyph [
722−121:13 tight tvar A
722+122:13 tight tvar A
723−121:15 tvar B
723+122: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 ]
724+122:16 tight glyph ]
732−123:3 NEWLINE
725+123:3 INDENT
733123:3 glyph [
726123:3 glyph [
734−123:4 tight lit %&
727+123:4 tight lit %|
735123:7 name p
728123:7 name p
736123:8 tight glyph =
729123:8 tight glyph =
737−123:9 tight tvar A
730+123:9 tight tvar B
738123:10 tight glyph ]
731123:10 tight 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−125:1 DEDENT
739+126:1 DEDENT
740−125:1 NEWLINE
740+126:1 NEWLINE
741−125:1 glyph +$
741+126:1 glyph +$
742−125:4 name bloq
742+126:4 name bloq
743−125:9 aura @
743+126:9 aura @
744−127:1 NEWLINE
744+128:1 NEWLINE
745−127:1 glyph ++
745+128:1 glyph ++
746−127:4 name some
746+128:4 name some
747−127:9 glyph |=
747+128:9 glyph |=
748−127:12 name item
748+128:12 name item
749−127:16 tight glyph =
749+128:16 tight glyph =
750−127:17 tight tvar A
750+128:17 tight tvar A
751−127:19 glyph `
751+128:19 glyph `
752−127:20 tight name item
752+128:20 tight name item
753−129:1 NEWLINE
753+130:1 NEWLINE
754−129:1 glyph ++
754+130:1 glyph ++
755−129:4 name lure
755+130:4 name lure
756−129:9 glyph |=
756+130:9 glyph |=
757−129:12 name item
757+130:12 name item
758−129:16 tight glyph =
758+130:16 tight glyph =
759−129:17 tight tvar A
759+130:17 tight tvar A
760−130:3 INDENT
760+131:3 INDENT
761−130:3 glyph ^-
761+131:3 glyph ^-
762−130:6 glyph (
762+131:6 glyph (
763−130:7 tight name list
763+131:7 tight name list
764−130:12 tvar A
764+131:12 tvar A
765−130:13 tight glyph )
765+131:13 tight glyph )
766−130:15 glyph [
766+131:15 glyph [
767−130:16 tight name item
767+131:16 tight name item
768−130:21 lit ~
768+131:21 lit ~
769−130:22 tight glyph ]
769+131:22 tight glyph ]
770−132:1 DEDENT
770+133:1 DEDENT
771−132:1 NEWLINE
771+133:1 NEWLINE
772−132:1 glyph ++
772+133:1 glyph ++
773−132:4 name snoc
773+133:4 name snoc
774−132:9 glyph |=
774+133:9 glyph |=
775−132:12 name args
775+133:12 name args
776−132:16 tight glyph =
776+133:16 tight glyph =
777−132:17 tight glyph [
777+133:17 tight glyph [
778−132:18 tight glyph (
778+133:18 tight glyph (
779−132:19 tight name list
779+133:19 tight name list
780−132:24 tvar A
780+133:24 tvar A
781−132:25 tight glyph )
781+133:25 tight glyph )
782−132:27 tvar A
782+133:27 tvar A
783−132:28 tight glyph ]
783+133:28 tight glyph ]
784−133:3 INDENT
784+134:3 INDENT
785−133:3 glyph ?-
785+134:3 glyph ?-
786−133:6 name args
786+134:6 name args
787−134:5 INDENT
787+135:5 INDENT
788−134:5 glyph [
788+135:5 glyph [
789−134:6 tight name xs
789+135:6 tight name xs
790−134:9 name item
790+135:9 name item
791−134:13 tight glyph ]
791+135:13 tight glyph ]
792−134:15 glyph (
792+135:15 glyph (
793−134:16 tight name weld
793+135:16 tight name weld
794−134:21 name xs
794+135:21 name xs
795−134:24 glyph [
795+135:24 glyph [
796−134:25 tight name item
796+135:25 tight name item
797−134:30 lit ~
797+135:30 lit ~
798−134:31 tight glyph ]
798+135:31 tight glyph ]
799−134:32 tight glyph )
799+135:32 tight glyph )
800−136:1 DEDENT
800+137:1 DEDENT
801−136:1 DEDENT
801+137:1 DEDENT
802−136:1 NEWLINE
802+137:1 NEWLINE
803−136:1 glyph ++
803+137:1 glyph ++
804−136:4 name flop
804+137:4 name flop
805−136:9 glyph |=
805+137:9 glyph |=
806−136:12 name xs
806+137:12 name xs
807−136:14 tight glyph =
807+137:14 tight glyph =
808−136:15 tight glyph (
808+137:15 tight glyph (
809−136:16 tight name list
809+137:16 tight name list
810−136:21 tvar A
810+137:21 tvar A
811−136:22 tight glyph )
811+137:22 tight glyph )
812−137:3 INDENT
812+138:3 INDENT
813−137:3 glyph ++
813+138:3 glyph ++
814−137:6 name reverse-into
814+138:6 name reverse-into
815−137:19 glyph |=
815+138:19 glyph |=
816−137:22 name args
816+138:22 name args
817−137:26 tight glyph =
817+138:26 tight glyph =
818−137:27 tight glyph [
818+138:27 tight glyph [
819−137:28 tight glyph (
819+138:28 tight glyph (
820−137:29 tight name list
820+138:29 tight name list
821−137:34 tvar A
821+138:34 tvar A
822−137:35 tight glyph )
822+138:35 tight glyph )
823−137:37 glyph (
823+138:37 glyph (
824−137:38 tight name list
824+138:38 tight name list
825−137:43 tvar A
825+138:43 tvar A
826−137:44 tight glyph )
826+138:44 tight glyph )
827−137:45 tight glyph ]
827+138:45 tight glyph ]
828−138:5 INDENT
828+139:5 INDENT
829−138:5 glyph ?-
829+139:5 glyph ?-
830−138:8 name args
830+139:8 name args
831−139:7 INDENT
831+140:7 INDENT
832−139:7 glyph [
832+140:7 glyph [
833−139:8 tight name rest
833+140:8 tight name rest
834−139:13 name acc
834+140:13 name acc
835−139:16 tight glyph ]
835+140:16 tight glyph ]
836−140:9 INDENT
836+141:9 INDENT
837−140:9 glyph ?-
837+141:9 glyph ?-
838−140:12 name rest
838+141:12 name rest
839−141:11 INDENT
839+142:11 INDENT
840−141:11 lit ~
840+142:11 lit ~
841−141:13 name acc
841+142:13 name acc
842−142:11 NEWLINE
842+143:11 NEWLINE
843−142:11 glyph [
843+143:11 glyph [
844−142:12 tight name item
844+143:12 tight name item
845−142:17 name more
845+143:17 name more
846−142:21 tight glyph ]
846+143:21 tight glyph ]
847−142:23 glyph (
847+143:23 glyph (
848−142:24 tight name reverse-into
848+143:24 tight name reverse-into
849−142:37 name more
849+143:37 name more
850−142:42 glyph [
850+143:42 glyph [
851−142:43 tight name item
851+143:43 tight name item
852−142:48 name acc
852+143:48 name acc
853−142:51 tight glyph ]
853+143:51 tight glyph ]
854−142:52 tight glyph )
854+143:52 tight glyph )
855−143:3 DEDENT
855+144:3 DEDENT
856−143:3 DEDENT
856+144:3 DEDENT
857−143:3 DEDENT
857+144:3 DEDENT
858−143:3 DEDENT
858+144:3 DEDENT
859−143:3 NEWLINE
859+144:3 NEWLINE
860−143:3 glyph (
860+144:3 glyph (
861−143:4 tight name reverse-into
861+144:4 tight name reverse-into
862−143:17 name xs
862+144:17 name xs
863−143:20 lit ~
863+144:20 lit ~
864−143:21 tight glyph )
864+144:21 tight glyph )
865−145:1 DEDENT
865+146:1 DEDENT
866−145:1 NEWLINE
866+146:1 NEWLINE
867−145:1 glyph ++
867+146:1 glyph ++
868−145:4 name drop
868+146:4 name drop
869−145:9 glyph |=
869+146:9 glyph |=
870−145:12 name maybe
870+146:12 name maybe
871−145:17 tight glyph =
871+146:17 tight glyph =
872−145:18 tight glyph (
872+146:18 tight glyph (
873−145:19 tight name unit
873+146:19 tight name unit
874−145:24 tvar A
874+146:24 tvar A
875−145:25 tight glyph )
875+146:25 tight glyph )
876−146:3 INDENT
876+147:3 INDENT
877−146:3 glyph ?-
877+147:3 glyph ^-
878−146:6 name maybe
878+147:6 glyph (
879+147:7 tight name list
880+147:12 tvar A
881+147:13 tight glyph )
879−147:5 INDENT
882+148:5 INDENT
883+148:5 glyph ?-
884+148:8 name maybe
885+149:7 INDENT
880−147:5 lit ~
886+149:7 lit ~
881−147:7 lit ~
887+149:9 lit ~
882−148:5 NEWLINE
888+150:7 NEWLINE
883−148:5 glyph [
889+150:7 glyph [
884−148:6 tight lit ~
890+150:8 tight lit ~
885−148:8 name value
891+150:10 name value
886−148:13 tight glyph ]
892+150:15 tight glyph ]
887−148:15 glyph [
893+150:17 glyph [
888−148:16 tight name value
894+150:18 tight name value
889−148:22 lit ~
895+150:24 lit ~
890−148:23 tight glyph ]
896+150:25 tight glyph ]
897+152:1 DEDENT
891−150:1 DEDENT
898+152:1 DEDENT
892−150:1 DEDENT
899+152:1 DEDENT
893−150:1 NEWLINE
900+152:1 NEWLINE
894−150:1 glyph ++
901+152:1 glyph ++
895−150:4 name bind
902+152:4 name bind
896−150:9 glyph |=
903+152:9 glyph |=
897−150:12 name args
904+152:12 name args
898−150:16 tight glyph =
905+152:16 tight glyph =
899−150:17 tight glyph [
906+152:17 tight glyph [
900−150:18 tight glyph (
907+152: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 (
919152:19 tight name unit
908152:19 tight name unit
920−152:24 tvar B
909+152:24 tvar A
921152:25 tight glyph )
910152:25 tight 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 )
922−153:7 INDENT
929+155:7 INDENT
923−153:7 glyph ?-
930+155:7 glyph ?-
924−153:10 name maybe
931+155:10 name maybe
925−154:9 INDENT
932+156:9 INDENT
926−154:9 lit ~
933+156:9 lit ~
927−154:11 lit ~
934+156:11 lit ~
928−155:9 NEWLINE
935+157:9 NEWLINE
929−155:9 glyph [
936+157:9 glyph [
930−155:10 tight lit ~
937+157:10 tight lit ~
931−155:12 name value
938+157:12 name value
932−155:17 tight glyph ]
939+157:17 tight glyph ]
933−155:19 glyph `
940+157:19 glyph `
934−155:20 tight glyph (
941+157:20 tight glyph (
935−155:21 tight name f
942+157:21 tight name f
936−155:23 name value
943+157:23 name value
937−155:28 tight glyph )
944+157:28 tight glyph )
938−157:1 DEDENT
945+159:1 DEDENT
939−157:1 DEDENT
946+159:1 DEDENT
940−157:1 DEDENT
947+159:1 DEDENT
941−157:1 DEDENT
948+159:1 DEDENT
942−157:1 NEWLINE
949+159:1 NEWLINE
943−157:1 glyph ++
950+159:1 glyph ++
944−157:4 name biff
951+159:4 name biff
945−157:9 glyph |=
952+159:9 glyph |=
946−157:12 name args
953+159:12 name args
947−157:16 tight glyph =
954+159:16 tight glyph =
948−157:17 tight glyph [
955+159:17 tight glyph [
949−157:18 tight glyph (
956+159: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 (
971159:19 tight name unit
957159:19 tight name unit
972−159:24 tvar B
958+159:24 tvar A
973159:25 tight glyph )
959159:25 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 )
974−160:7 INDENT
981+162:7 INDENT
975−160:7 glyph ?-
982+162:7 glyph ?-
976−160:10 name maybe
983+162:10 name maybe
977−161:9 INDENT
984+163:9 INDENT
978−161:9 lit ~
985+163:9 lit ~
979−161:11 lit ~
986+163:11 lit ~
980−162:9 NEWLINE
987+164:9 NEWLINE
981−162:9 glyph [
988+164:9 glyph [
982−162:10 tight lit ~
989+164:10 tight lit ~
983−162:12 name value
990+164:12 name value
984−162:17 tight glyph ]
991+164:17 tight glyph ]
985−162:19 glyph (
992+164:19 glyph (
986−162:20 tight name f
993+164:20 tight name f
987−162:22 name value
994+164:22 name value
988−162:27 tight glyph )
995+164:27 tight glyph )
989−164:1 DEDENT
996+166:1 DEDENT
990−164:1 DEDENT
997+166:1 DEDENT
991−164:1 DEDENT
998+166:1 DEDENT
992−164:1 DEDENT
999+166:1 DEDENT
993−164:1 NEWLINE
1000+166:1 NEWLINE
994−164:1 glyph ++
1001+166:1 glyph ++
995−164:4 name both
1002+166:4 name both
996−164:9 glyph |=
1003+166:9 glyph |=
997−164:12 name args
1004+166:12 name args
998−164:16 tight glyph =
1005+166:16 tight glyph =
999−164:17 tight glyph [
1006+166:17 tight glyph [
1000−164:18 tight glyph (
1007+166:18 tight glyph (
1001−164:19 tight name unit
1008+166:19 tight name unit
1002−164:24 tvar A
1009+166:24 tvar A
1003−164:25 tight glyph )
1010+166:25 tight glyph )
1004−164:27 glyph (
1011+166:27 glyph (
1005−164:28 tight name unit
1012+166:28 tight name unit
1006−164:33 tvar B
1013+166: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 ]
1024166:34 tight glyph )
1014166:34 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 )
1025−167:7 INDENT
1032+169:7 INDENT
1026−167:7 glyph ?-
1033+169:7 glyph ?-
1027−167:10 name first
1034+169:10 name first
1028−168:9 INDENT
1035+170:9 INDENT
1029−168:9 lit ~
1036+170:9 lit ~
1030−168:11 lit ~
1037+170:11 lit ~
1031−169:9 NEWLINE
1038+171:9 NEWLINE
1032−169:9 glyph [
1039+171:9 glyph [
1033−169:10 tight lit ~
1040+171:10 tight lit ~
1034−169:12 name a
1041+171:12 name a
1035−169:13 tight glyph ]
1042+171:13 tight glyph ]
1036−170:11 INDENT
1043+172:11 INDENT
1037−170:11 glyph ?-
1044+172:11 glyph ?-
1038−170:14 name second
1045+172:14 name second
1039−171:13 INDENT
1046+173:13 INDENT
1040−171:13 lit ~
1047+173:13 lit ~
1041−171:15 lit ~
1048+173:15 lit ~
1042−172:13 NEWLINE
1049+174:13 NEWLINE
1043−172:13 glyph [
1050+174:13 glyph [
1044−172:14 tight lit ~
1051+174:14 tight lit ~
1045−172:16 name b
1052+174:16 name b
1046−172:17 tight glyph ]
1053+174:17 tight glyph ]
1047−172:19 glyph `
1054+174:19 glyph `
1048−172:20 tight glyph [
1055+174:20 tight glyph [
1049−172:21 tight name a
1056+174:21 tight name a
1050−172:23 name b
1057+174:23 name b
1051−172:24 tight glyph ]
1058+174:24 tight glyph ]
1052−174:1 DEDENT
1059+176:1 DEDENT
1053−174:1 DEDENT
1060+176:1 DEDENT
1054−174:1 DEDENT
1061+176:1 DEDENT
1055−174:1 DEDENT
1062+176:1 DEDENT
1056−174:1 DEDENT
1063+176:1 DEDENT
1057−174:1 DEDENT
1064+176:1 DEDENT
1058−174:1 NEWLINE
1065+176:1 NEWLINE
1059−174:1 glyph ++
1066+176:1 glyph ++
1060−174:4 name clap
1067+176:4 name clap
1061−174:9 glyph |=
1068+176:9 glyph |=
1062−174:12 name args
1069+176:12 name args
1063−174:16 tight glyph =
1070+176:16 tight glyph =
1064−174:17 tight glyph [
1071+176:17 tight glyph [
1065−174:18 tight glyph (
1072+176:18 tight glyph (
1066−174:19 tight name unit
1073+176:19 tight name unit
1067−174:24 tvar A
1074+176:24 tvar A
1068−174:25 tight glyph )
1075+176:25 tight glyph )
1069−174:27 glyph (
1076+176:27 glyph (
1070−174:28 tight name unit
1077+176:28 tight name unit
1071−174:33 tvar A
1078+176:33 tvar A
1072−174:34 tight glyph )
1079+176:34 tight glyph )
1073−174:36 glyph $-(
1080+176:36 glyph $-(
1074−174:39 tight glyph [
1081+176:39 tight glyph [
1075−174:40 tight tvar A
1082+176:40 tight tvar A
1076−174:42 tvar A
1083+176:42 tvar A
1077−174:43 tight glyph ]
1084+176:43 tight glyph ]
1078−174:45 tvar A
1085+176:45 tvar A
1079−174:46 tight glyph )
1086+176:46 tight glyph )
1080−174:47 tight glyph ]
1087+176:47 tight glyph ]
1081−175:3 INDENT
1088+177:3 INDENT
1082−175:3 glyph ?-
1089+177:3 glyph ?-
1083−175:6 name args
1090+177:6 name args
1084−176:5 INDENT
1091+178:5 INDENT
1085−176:5 glyph [
1092+178:5 glyph [
1086−176:6 tight name first
1093+178:6 tight name first
1087−176:12 name second
1094+178:12 name second
1088−176:19 name combine
1095+178:19 name combine
1089−176:26 tight glyph ]
1096+178:26 tight glyph ]
1090−176:28 glyph ^-
1097+178:28 glyph ^-
1091−176:31 glyph (
1098+178:31 glyph (
1092−176:32 tight name unit
1099+178:32 tight name unit
1093−176:37 tvar A
1100+178:37 tvar A
1094−176:38 tight glyph )
1101+178:38 tight glyph )
1095−177:7 INDENT
1102+179:7 INDENT
1096−177:7 glyph ?-
1103+179:7 glyph ?-
1097−177:10 name first
1104+179:10 name first
1098−178:9 INDENT
1105+180:9 INDENT
1099−178:9 lit ~
1106+180:9 lit ~
1100−178:11 name second
1107+180:11 name second
1101−179:9 NEWLINE
1108+181:9 NEWLINE
1102−179:9 glyph [
1109+181:9 glyph [
1103−179:10 tight lit ~
1110+181:10 tight lit ~
1104−179:12 name a
1111+181:12 name a
1105−179:13 tight glyph ]
1112+181:13 tight glyph ]
1106−180:11 INDENT
1113+182:11 INDENT
1107−180:11 glyph ?-
1114+182:11 glyph ?-
1108−180:14 name second
1115+182:14 name second
1109−181:13 INDENT
1116+183:13 INDENT
1110−181:13 lit ~
1117+183:13 lit ~
1111−181:15 name first
1118+183:15 name first
1112−182:13 NEWLINE
1119+184:13 NEWLINE
1113−182:13 glyph [
1120+184:13 glyph [
1114−182:14 tight lit ~
1121+184:14 tight lit ~
1115−182:16 name b
1122+184:16 name b
1116−182:17 tight glyph ]
1123+184:17 tight glyph ]
1117−182:19 glyph `
1124+184:19 glyph `
1118−182:20 tight glyph (
1125+184:20 tight glyph (
1119−182:21 tight name combine
1126+184:21 tight name combine
1120−182:29 name a
1127+184:29 name a
1121−182:31 name b
1128+184:31 name b
1122−182:32 tight glyph )
1129+184:32 tight glyph )
1123−184:1 DEDENT
1130+186:1 DEDENT
1124−184:1 DEDENT
1131+186:1 DEDENT
1125−184:1 DEDENT
1132+186:1 DEDENT
1126−184:1 DEDENT
1133+186:1 DEDENT
1127−184:1 DEDENT
1134+186:1 DEDENT
1128−184:1 DEDENT
1135+186:1 DEDENT
1129−184:1 NEWLINE
1136+186:1 NEWLINE
1130−184:1 glyph ++
1137+186:1 glyph ++
1131−184:4 name clef
1138+186:4 name clef
1132−184:9 glyph |=
1139+186:9 glyph |=
1133−184:12 name args
1140+186:12 name args
1134−184:16 tight glyph =
1141+186:16 tight glyph =
1135−184:17 tight glyph [
1142+186:17 tight glyph [
1136−184:18 tight glyph (
1143+186:18 tight glyph (
1137−184:19 tight name unit
1144+186:19 tight name unit
1138−184:24 tvar A
1145+186:24 tvar A
1139−184:25 tight glyph )
1146+186:25 tight glyph )
1140−184:27 glyph (
1147+186:27 glyph (
1141−184:28 tight name unit
1148+186:28 tight name unit
1142−184:33 tvar B
1149+186:33 tvar B
1143−184:34 tight glyph )
1150+186:34 tight glyph )
1144−184:36 glyph $-(
1151+186:36 glyph $-(
1145−184:39 tight glyph [
1152+186:39 tight glyph [
1146−184:40 tight tvar A
1153+186:40 tight tvar A
1147−184:42 tvar B
1154+186:42 tvar B
1148−184:43 tight glyph ]
1155+186:43 tight glyph ]
1149−184:45 glyph (
1156+186:45 glyph (
1150−184:46 tight name unit
1157+186:46 tight name unit
1151−184:51 tvar C
1158+186:51 tvar C
1152−184:52 tight glyph )
1159+186:52 tight glyph )
1153−184:53 tight glyph )
1160+186:53 tight glyph )
1154−184:54 tight glyph ]
1161+186:54 tight glyph ]
1155−185:3 INDENT
1162+187:3 INDENT
1156−185:3 glyph ?-
1163+187:3 glyph ?-
1157−185:6 name args
1164+187:6 name args
1158−186:5 INDENT
1165+188:5 INDENT
1159−186:5 glyph [
1166+188:5 glyph [
1160−186:6 tight name first
1167+188:6 tight name first
1161−186:12 name second
1168+188:12 name second
1162−186:19 name combine
1169+188:19 name combine
1163−186:26 tight glyph ]
1170+188:26 tight glyph ]
1164−186:28 glyph ^-
1171+188:28 glyph ^-
1165−186:31 glyph (
1172+188:31 glyph (
1166−186:32 tight name unit
1173+188:32 tight name unit
1167−186:37 tvar C
1174+188:37 tvar C
1168−186:38 tight glyph )
1175+188:38 tight glyph )
1169−187:7 INDENT
1176+189:7 INDENT
1170−187:7 glyph ?-
1177+189:7 glyph ?-
1171−187:10 name first
1178+189:10 name first
1172−188:9 INDENT
1179+190:9 INDENT
1173−188:9 lit ~
1180+190:9 lit ~
1174−188:11 lit ~
1181+190:11 lit ~
1175−189:9 NEWLINE
1182+191:9 NEWLINE
1176−189:9 glyph [
1183+191:9 glyph [
1177−189:10 tight lit ~
1184+191:10 tight lit ~
1178−189:12 name a
1185+191:12 name a
1179−189:13 tight glyph ]
1186+191:13 tight glyph ]
1180−190:11 INDENT
1187+192:11 INDENT
1181−190:11 glyph ?-
1188+192:11 glyph ?-
1182−190:14 name second
1189+192:14 name second
1183−191:13 INDENT
1190+193:13 INDENT
1184−191:13 lit ~
1191+193:13 lit ~
1185−191:15 lit ~
1192+193:15 lit ~
1186−192:13 NEWLINE
1193+194:13 NEWLINE
1187−192:13 glyph [
1194+194:13 glyph [
1188−192:14 tight lit ~
1195+194:14 tight lit ~
1189−192:16 name b
1196+194:16 name b
1190−192:17 tight glyph ]
1197+194:17 tight glyph ]
1191−192:19 glyph (
1198+194:19 glyph (
1192−192:20 tight name combine
1199+194:20 tight name combine
1193−192:28 name a
1200+194:28 name a
1194−192:30 name b
1201+194:30 name b
1195−192:31 tight glyph )
1202+194:31 tight glyph )
1196−194:1 DEDENT
1203+196:1 DEDENT
1197−194:1 DEDENT
1204+196:1 DEDENT
1198−194:1 DEDENT
1205+196:1 DEDENT
1199−194:1 DEDENT
1206+196:1 DEDENT
1200−194:1 DEDENT
1207+196:1 DEDENT
1201−194:1 DEDENT
1208+196:1 DEDENT
1202−194:1 NEWLINE
1209+196:1 NEWLINE
1203−194:1 glyph ++
1210+196:1 glyph ++
1204−194:4 name skim
1211+196:4 name skim
1205−194:9 glyph |=
1212+196:9 glyph |=
1206−194:12 name args
1213+196:12 name args
1207−194:16 tight glyph =
1214+196:16 tight glyph =
1208−194:17 tight glyph [
1215+196:17 tight glyph [
1209−194:18 tight glyph (
1216+196:18 tight glyph (
1210−194:19 tight name list
1217+196:19 tight name list
1211−194:24 tvar A
1218+196:24 tvar A
1212−194:25 tight glyph )
1219+196:25 tight glyph )
1213−194:27 glyph $-(
1220+196:27 glyph $-(
1214−194:30 tight tvar A
1221+196:30 tight tvar A
1215−194:32 glyph ?
1222+196:32 glyph ?
1216−194:33 tight glyph )
1223+196:33 tight glyph )
1217−194:34 tight glyph ]
1224+196:34 tight glyph ]
1218−195:3 INDENT
1225+197:3 INDENT
1219−195:3 glyph ?-
1226+197:3 glyph ?-
1220−195:6 name args
1227+197:6 name args
1221−196:5 INDENT
1228+198:5 INDENT
1222−196:5 glyph [
1229+198:5 glyph [
1223−196:6 tight name xs
1230+198:6 tight name xs
1224−196:9 name predicate
1231+198:9 name predicate
1225−196:18 tight glyph ]
1232+198:18 tight glyph ]
1226−197:7 INDENT
1233+198:20 glyph ^-
1227−197:7 glyph ?-
1234+198:23 glyph (
1228−197:10 name xs
1235+198:24 tight name list
1229−198:9 INDENT
1236+198:29 tvar A
1230−198:9 lit ~
1237+198:30 tight glyph )
1231−198:11 lit ~
1238+199:9 INDENT
1232−199:9 NEWLINE
1233−199:9 glyph [
1239+199:9 glyph ?-
1234−199:10 tight name item
1240+199:12 name xs
1235−199:15 name rest
1236−199:19 tight glyph ]
1237200:11 INDENT
1241200:11 INDENT
1238−200:11 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 ?-
1239−200:14 glyph (
1251+202:16 glyph (
1240−200:15 tight name predicate
1252+202:17 tight name predicate
1241−200:25 name item
1253+202:27 name item
1242−200:29 tight glyph )
1254+202:31 tight glyph )
1243−201:13 INDENT
1255+203:15 INDENT
1244−201:13 lit %.y
1256+203:15 lit %.y
1245−201:17 glyph [
1257+203:19 glyph [
1246−201:18 tight name item
1258+203:20 tight name item
1247−201:23 glyph (
1259+203:25 glyph (
1248−201:24 tight name skim
1260+203:26 tight name skim
1249−201:29 name rest
1261+203:31 name rest
1250−201:34 name predicate
1262+203:36 name predicate
1251−201:43 tight glyph )
1263+203:45 tight glyph )
1252−201:44 tight glyph ]
1264+203:46 tight glyph ]
1253−202:13 NEWLINE
1265+204:15 NEWLINE
1254−202:13 lit %.n
1266+204:15 lit %.n
1255−202:17 glyph (
1267+204:19 glyph (
1256−202:18 tight name skim
1268+204:20 tight name skim
1257−202:23 name rest
1269+204:25 name rest
1258−202:28 name predicate
1270+204:30 name predicate
1259−202:37 tight glyph )
1271+204:39 tight glyph )
1260−204:1 DEDENT
1272+206:1 DEDENT
1261−204:1 DEDENT
1273+206:1 DEDENT
1262−204:1 DEDENT
1274+206:1 DEDENT
1263−204:1 DEDENT
1275+206:1 DEDENT
1264−204:1 DEDENT
1276+206:1 DEDENT
1265−204:1 DEDENT
1277+206:1 DEDENT
1266−204:1 NEWLINE
1278+206:1 NEWLINE
1267−204:1 glyph ++
1279+206:1 glyph ++
1268−204:4 name skip
1280+206:4 name skip
1269−204:9 glyph |=
1281+206:9 glyph |=
1270−204:12 name args
1282+206:12 name args
1271−204:16 tight glyph =
1283+206:16 tight glyph =
1272−204:17 tight glyph [
1284+206:17 tight glyph [
1273−204:18 tight glyph (
1285+206:18 tight glyph (
1274−204:19 tight name list
1286+206:19 tight name list
1275−204:24 tvar A
1287+206:24 tvar A
1276−204:25 tight glyph )
1288+206:25 tight glyph )
1277−204:27 glyph $-(
1289+206:27 glyph $-(
1278−204:30 tight tvar A
1290+206:30 tight tvar A
1279−204:32 glyph ?
1291+206:32 glyph ?
1280−204:33 tight glyph )
1292+206:33 tight glyph )
1281−204:34 tight glyph ]
1293+206:34 tight glyph ]
1282−205:3 INDENT
1294+207:3 INDENT
1283−205:3 glyph ?-
1295+207:3 glyph ?-
1284−205:6 name args
1296+207:6 name args
1285−206:5 INDENT
1297+208:5 INDENT
1286−206:5 glyph [
1298+208:5 glyph [
1287−206:6 tight name xs
1299+208:6 tight name xs
1288−206:9 name predicate
1300+208:9 name predicate
1289−206:18 tight glyph ]
1301+208:18 tight glyph ]
1290−207:7 INDENT
1302+208:20 glyph ^-
1291−207:7 glyph ?-
1303+208:23 glyph (
1292−207:10 name xs
1304+208:24 tight name list
1293−208:9 INDENT
1305+208:29 tvar A
1294−208:9 lit ~
1306+208:30 tight glyph )
1295−208:11 lit ~
1307+209:9 INDENT
1296−209:9 NEWLINE
1297−209:9 glyph [
1308+209:9 glyph ?-
1298−209:10 tight name item
1309+209:12 name xs
1299−209:15 name rest
1300−209:19 tight glyph ]
1301210:11 INDENT
1310210:11 INDENT
1302−210:11 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 ?-
1303−210:14 glyph (
1320+212:16 glyph (
1304−210:15 tight name predicate
1321+212:17 tight name predicate
1305−210:25 name item
1322+212:27 name item
1306−210:29 tight glyph )
1323+212:31 tight glyph )
1307−211:13 INDENT
1324+213:15 INDENT
1308−211:13 lit %.y
1325+213:15 lit %.y
1309−211:17 glyph (
1326+213:19 glyph (
1310−211:18 tight name skip
1327+213:20 tight name skip
1311−211:23 name rest
1328+213:25 name rest
1312−211:28 name predicate
1329+213:30 name predicate
1313−211:37 tight glyph )
1330+213:39 tight glyph )
1314−212:13 NEWLINE
1331+214:15 NEWLINE
1315−212:13 lit %.n
1332+214:15 lit %.n
1316−212:17 glyph [
1333+214:19 glyph [
1317−212:18 tight name item
1334+214:20 tight name item
1318−212:23 glyph (
1335+214:25 glyph (
1319−212:24 tight name skip
1336+214:26 tight name skip
1320−212:29 name rest
1337+214:31 name rest
1321−212:34 name predicate
1338+214:36 name predicate
1322−212:43 tight glyph )
1339+214:45 tight glyph )
1323−212:44 tight glyph ]
1340+214:46 tight glyph ]
1324−214:1 DEDENT
1341+216:1 DEDENT
1325−214:1 DEDENT
1342+216:1 DEDENT
1326−214:1 DEDENT
1343+216:1 DEDENT
1327−214:1 DEDENT
1344+216:1 DEDENT
1328−214:1 DEDENT
1345+216:1 DEDENT
1329−214:1 DEDENT
1346+216:1 DEDENT
1330−214:1 NEWLINE
1347+216:1 NEWLINE
1331−214:1 glyph ++
1348+216:1 glyph ++
1332−214:4 name levy
1349+216:4 name levy
1333−214:9 glyph |=
1350+216:9 glyph |=
1334−214:12 name args
1351+216:12 name args
1335−214:16 tight glyph =
1352+216:16 tight glyph =
1336−214:17 tight glyph [
1353+216:17 tight glyph [
1337−214:18 tight glyph (
1354+216:18 tight glyph (
1338−214:19 tight name list
1355+216:19 tight name list
1339−214:24 tvar A
1356+216:24 tvar A
1340−214:25 tight glyph )
1357+216:25 tight glyph )
1341−214:27 glyph $-(
1358+216:27 glyph $-(
1342−214:30 tight tvar A
1359+216:30 tight tvar A
1343−214:32 glyph ?
1360+216:32 glyph ?
1344−214:33 tight glyph )
1361+216:33 tight glyph )
1345−214:34 tight glyph ]
1362+216:34 tight glyph ]
1346−215:3 INDENT
1363+217:3 INDENT
1347−215:3 glyph ?-
1364+217:3 glyph ?-
1348−215:6 name args
1365+217:6 name args
1349−216:5 INDENT
1366+218:5 INDENT
1350−216:5 glyph [
1367+218:5 glyph [
1351−216:6 tight name xs
1368+218:6 tight name xs
1352−216:9 name predicate
1369+218:9 name predicate
1353−216:18 tight glyph ]
1370+218:18 tight glyph ]
1354−217:7 INDENT
1371+219:7 INDENT
1355−217:7 glyph ?-
1372+219:7 glyph ?-
1356−217:10 name xs
1373+219:10 name xs
1357−218:9 INDENT
1374+220:9 INDENT
1358−218:9 lit ~
1375+220:9 lit ~
1359−218:11 lit %.y
1376+220:11 lit %.y
1360−219:9 NEWLINE
1377+221:9 NEWLINE
1361−219:9 glyph [
1378+221:9 glyph [
1362−219:10 tight name item
1379+221:10 tight name item
1363−219:15 name rest
1380+221:15 name rest
1364−219:19 tight glyph ]
1381+221:19 tight glyph ]
1365−220:11 INDENT
1382+222:11 INDENT
1366−220:11 glyph ?-
1383+222:11 glyph ?-
1367−220:14 glyph (
1384+222:14 glyph (
1368−220:15 tight name predicate
1385+222:15 tight name predicate
1369−220:25 name item
1386+222:25 name item
1370−220:29 tight glyph )
1387+222:29 tight glyph )
1371−221:13 INDENT
1388+223:13 INDENT
1372−221:13 lit %.y
1389+223:13 lit %.y
1373−221:17 glyph (
1390+223:17 glyph (
1374−221:18 tight name levy
1391+223:18 tight name levy
1375−221:23 name rest
1392+223:23 name rest
1376−221:28 name predicate
1393+223:28 name predicate
1377−221:37 tight glyph )
1394+223:37 tight glyph )
1378−222:13 NEWLINE
1395+224:13 NEWLINE
1379−222:13 lit %.n
1396+224:13 lit %.n
1380−222:17 lit %.n
1397+224:17 lit %.n
1381−224:1 DEDENT
1398+226:1 DEDENT
1382−224:1 DEDENT
1399+226:1 DEDENT
1383−224:1 DEDENT
1400+226:1 DEDENT
1384−224:1 DEDENT
1401+226:1 DEDENT
1385−224:1 DEDENT
1402+226:1 DEDENT
1386−224:1 DEDENT
1403+226:1 DEDENT
1387−224:1 NEWLINE
1404+226:1 NEWLINE
1388−224:1 glyph ++
1405+226:1 glyph ++
1389−224:4 name lien
1406+226:4 name lien
1390−224:9 glyph |=
1407+226:9 glyph |=
1391−224:12 name args
1408+226:12 name args
1392−224:16 tight glyph =
1409+226:16 tight glyph =
1393−224:17 tight glyph [
1410+226:17 tight glyph [
1394−224:18 tight glyph (
1411+226:18 tight glyph (
1395−224:19 tight name list
1412+226:19 tight name list
1396−224:24 tvar A
1413+226:24 tvar A
1397−224:25 tight glyph )
1414+226:25 tight glyph )
1398−224:27 glyph $-(
1415+226:27 glyph $-(
1399−224:30 tight tvar A
1416+226:30 tight tvar A
1400−224:32 glyph ?
1417+226:32 glyph ?
1401−224:33 tight glyph )
1418+226:33 tight glyph )
1402−224:34 tight glyph ]
1419+226:34 tight glyph ]
1403−225:3 INDENT
1420+227:3 INDENT
1404−225:3 glyph ?-
1421+227:3 glyph ?-
1405−225:6 name args
1422+227:6 name args
1406−226:5 INDENT
1423+228:5 INDENT
1407−226:5 glyph [
1424+228:5 glyph [
1408−226:6 tight name xs
1425+228:6 tight name xs
1409−226:9 name predicate
1426+228:9 name predicate
1410−226:18 tight glyph ]
1427+228:18 tight glyph ]
1411−227:7 INDENT
1428+229:7 INDENT
1412−227:7 glyph ?-
1429+229:7 glyph ?-
1413−227:10 name xs
1430+229:10 name xs
1414−228:9 INDENT
1431+230:9 INDENT
1415−228:9 lit ~
1432+230:9 lit ~
1416−228:11 lit %.n
1433+230:11 lit %.n
1417−229:9 NEWLINE
1434+231:9 NEWLINE
1418−229:9 glyph [
1435+231:9 glyph [
1419−229:10 tight name item
1436+231:10 tight name item
1420−229:15 name rest
1437+231:15 name rest
1421−229:19 tight glyph ]
1438+231:19 tight glyph ]
1422−230:11 INDENT
1439+232:11 INDENT
1423−230:11 glyph ?-
1440+232:11 glyph ?-
1424−230:14 glyph (
1441+232:14 glyph (
1425−230:15 tight name predicate
1442+232:15 tight name predicate
1426−230:25 name item
1443+232:25 name item
1427−230:29 tight glyph )
1444+232:29 tight glyph )
1428−231:13 INDENT
1445+233:13 INDENT
1429−231:13 lit %.y
1446+233:13 lit %.y
1430−231:17 lit %.y
1447+233:17 lit %.y
1431−232:13 NEWLINE
1448+234:13 NEWLINE
1432−232:13 lit %.n
1449+234:13 lit %.n
1433−232:17 glyph (
1450+234:17 glyph (
1434−232:18 tight name lien
1451+234:18 tight name lien
1435−232:23 name rest
1452+234:23 name rest
1436−232:28 name predicate
1453+234:28 name predicate
1437−232:37 tight glyph )
1454+234:37 tight glyph )
1438−234:1 DEDENT
1455+236:1 DEDENT
1439−234:1 DEDENT
1456+236:1 DEDENT
1440−234:1 DEDENT
1457+236:1 DEDENT
1441−234:1 DEDENT
1458+236:1 DEDENT
1442−234:1 DEDENT
1459+236:1 DEDENT
1443−234:1 DEDENT
1460+236:1 DEDENT
1444−234:1 NEWLINE
1461+236:1 NEWLINE
1445−234:1 glyph ++
1462+236:1 glyph ++
1446−234:4 name roll
1463+236:4 name roll
1447−234:9 glyph |=
1464+236:9 glyph |=
1448−234:12 name args
1465+236:12 name args
1449−234:16 tight glyph =
1466+236:16 tight glyph =
1450−234:17 tight glyph [
1467+236:17 tight glyph [
1451−234:18 tight glyph (
1468+236:18 tight glyph (
1452−234:19 tight name list
1469+236:19 tight name list
1453−234:24 tvar A
1470+236:24 tvar A
1454−234:25 tight glyph )
1471+236:25 tight glyph )
1455−234:27 tvar B
1472+236:27 tvar B
1456−234:29 glyph $-(
1473+236:29 glyph $-(
1457−234:32 tight glyph [
1474+236:32 tight glyph [
1458−234:33 tight tvar A
1475+236:33 tight tvar A
1459−234:35 tvar B
1476+236:35 tvar B
1460−234:36 tight glyph ]
1477+236:36 tight glyph ]
1461−234:38 tvar B
1478+236:38 tvar B
1462−234:39 tight glyph )
1479+236:39 tight glyph )
1463−234:40 tight glyph ]
1480+236:40 tight glyph ]
1464−235:3 INDENT
1481+237:3 INDENT
1465−235:3 glyph ?-
1482+237:3 glyph ?-
1466−235:6 name args
1483+237:6 name args
1467−236:5 INDENT
1484+238:5 INDENT
1468−236:5 glyph [
1485+238:5 glyph [
1469−236:6 tight name xs
1486+238:6 tight name xs
1470−236:9 name start
1487+238:9 name start
1471−236:15 name combine
1488+238:15 name combine
1472−236:22 tight glyph ]
1489+238:22 tight glyph ]
1473−237:7 INDENT
1490+239:7 INDENT
1474−237:7 glyph ?-
1491+239:7 glyph ?-
1475−237:10 name xs
1492+239:10 name xs
1476−238:9 INDENT
1493+240:9 INDENT
1477−238:9 lit ~
1494+240:9 lit ~
1478−238:11 name start
1495+240:11 name start
1479−239:9 NEWLINE
1496+241:9 NEWLINE
1480−239:9 glyph [
1497+241:9 glyph [
1481−239:10 tight name item
1498+241:10 tight name item
1482−239:15 name rest
1499+241:15 name rest
1483−239:19 tight glyph ]
1500+241:19 tight glyph ]
1484−239:21 glyph (
1501+241:21 glyph (
1485−239:22 tight name roll
1502+241:22 tight name roll
1486−239:27 name rest
1503+241:27 name rest
1487−239:32 glyph (
1504+241:32 glyph (
1488−239:33 tight name combine
1505+241:33 tight name combine
1489−239:41 name item
1506+241:41 name item
1490−239:46 name start
1507+241:46 name start
1491−239:51 tight glyph )
1508+241:51 tight glyph )
1492−239:53 name combine
1509+241:53 name combine
1493−239:60 tight glyph )
1510+241:60 tight glyph )
1494−241:1 DEDENT
1511+243:1 DEDENT
1495−241:1 DEDENT
1512+243:1 DEDENT
1496−241:1 DEDENT
1513+243:1 DEDENT
1497−241:1 DEDENT
1514+243:1 DEDENT
1498−241:1 NEWLINE
1515+243:1 NEWLINE
1499−241:1 glyph ++
1516+243:1 glyph ++
1500−241:4 name reel
1517+243:4 name reel
1501−241:9 glyph |=
1518+243:9 glyph |=
1502−241:12 name args
1519+243:12 name args
1503−241:16 tight glyph =
1520+243:16 tight glyph =
1504−241:17 tight glyph [
1521+243:17 tight glyph [
1505−241:18 tight glyph (
1522+243:18 tight glyph (
1506−241:19 tight name list
1523+243:19 tight name list
1507−241:24 tvar A
1524+243:24 tvar A
1508−241:25 tight glyph )
1525+243:25 tight glyph )
1509−241:27 tvar B
1526+243:27 tvar B
1510−241:29 glyph $-(
1527+243:29 glyph $-(
1511−241:32 tight glyph [
1528+243:32 tight glyph [
1512−241:33 tight tvar A
1529+243:33 tight tvar A
1513−241:35 tvar B
1530+243:35 tvar B
1514−241:36 tight glyph ]
1531+243:36 tight glyph ]
1515−241:38 tvar B
1532+243:38 tvar B
1516−241:39 tight glyph )
1533+243:39 tight glyph )
1517−241:40 tight glyph ]
1534+243:40 tight glyph ]
1518−242:3 INDENT
1535+244:3 INDENT
1519−242:3 glyph ?-
1536+244:3 glyph ?-
1520−242:6 name args
1537+244:6 name args
1521−243:5 INDENT
1538+245:5 INDENT
1522−243:5 glyph [
1539+245:5 glyph [
1523−243:6 tight name xs
1540+245:6 tight name xs
1524−243:9 name start
1541+245:9 name start
1525−243:15 name combine
1542+245:15 name combine
1526−243:22 tight glyph ]
1543+245:22 tight glyph ]
1527−244:7 INDENT
1544+246:7 INDENT
1528−244:7 glyph ?-
1545+246:7 glyph ?-
1529−244:10 name xs
1546+246:10 name xs
1530−245:9 INDENT
1547+247:9 INDENT
1531−245:9 lit ~
1548+247:9 lit ~
1532−245:11 name start
1549+247:11 name start
1533−246:9 NEWLINE
1550+248:9 NEWLINE
1534−246:9 glyph [
1551+248:9 glyph [
1535−246:10 tight name item
1552+248:10 tight name item
1536−246:15 name rest
1553+248:15 name rest
1537−246:19 tight glyph ]
1554+248:19 tight glyph ]
1538−246:21 glyph (
1555+248:21 glyph (
1539−246:22 tight name combine
1556+248:22 tight name combine
1540−246:30 name item
1557+248:30 name item
1541−246:35 glyph (
1558+248:35 glyph (
1542−246:36 tight name reel
1559+248:36 tight name reel
1543−246:41 name rest
1560+248:41 name rest
1544−246:46 name start
1561+248:46 name start
1545−246:52 name combine
1562+248:52 name combine
1546−246:59 tight glyph )
1563+248:59 tight glyph )
1547−246:60 tight glyph )
1564+248:60 tight glyph )
1548−248:1 DEDENT
1565+250:1 DEDENT
1549−248:1 DEDENT
1566+250:1 DEDENT
1550−248:1 DEDENT
1567+250:1 DEDENT
1551−248:1 DEDENT
1568+250:1 DEDENT
1552−248:1 NEWLINE
1569+250:1 NEWLINE
1553−248:1 glyph ++
1570+250:1 glyph ++
1554−248:4 name flit
1571+250:4 name flit
1555−248:9 glyph |=
1572+250:9 glyph |=
1556−248:12 name predicate
1573+250:12 name predicate
1557−248:21 tight glyph =
1574+250:21 tight glyph =
1558−248:22 tight glyph $-(
1575+250:22 tight glyph $-(
1559−248:25 tight tvar A
1576+250:25 tight tvar A
1560−248:27 glyph ?
1577+250:27 glyph ?
1561−248:28 tight glyph )
1578+250:28 tight glyph )
1562−249:3 INDENT
1579+251:3 INDENT
1563−249:3 glyph |=
1580+251:3 glyph |=
1564−249:6 name value
1581+251:6 name value
1565−249:11 tight glyph =
1582+251:11 tight glyph =
1566−249:12 tight tvar A
1583+251:12 tight tvar A
1567−250:5 INDENT
1584+252:5 INDENT
1568−250:5 glyph ^-
1585+252:5 glyph ^-
1569−250:8 glyph (
1586+252:8 glyph (
1570−250:9 tight name unit
1587+252:9 tight name unit
1571−250:14 tvar A
1588+252:14 tvar A
1572−250:15 tight glyph )
1589+252:15 tight glyph )
1573−251:7 INDENT
1590+253:7 INDENT
1574−251:7 glyph ?-
1591+253:7 glyph ?-
1575−251:10 glyph (
1592+253:10 glyph (
1576−251:11 tight name predicate
1593+253:11 tight name predicate
1577−251:21 name value
1594+253:21 name value
1578−251:26 tight glyph )
1595+253:26 tight glyph )
1579−252:9 INDENT
1596+254:9 INDENT
1580−252:9 lit %.y
1597+254:9 lit %.y
1581−252:13 glyph `
1598+254:13 glyph `
1582−252:14 tight name value
1599+254:14 tight name value
1583−253:9 NEWLINE
1600+255:9 NEWLINE
1584−253:9 lit %.n
1601+255:9 lit %.n
1585−253:13 lit ~
1602+255:13 lit ~
1586−255:1 DEDENT
1603+257:1 DEDENT
1587−255:1 DEDENT
1604+257:1 DEDENT
1588−255:1 DEDENT
1605+257:1 DEDENT
1589−255:1 DEDENT
1606+257:1 DEDENT
1590−255:1 NEWLINE
1607+257:1 NEWLINE
1591−255:1 glyph ++
1608+257:1 glyph ++
1592−255:4 name murn
1609+257:4 name murn
1593−255:9 glyph |=
1610+257:9 glyph |=
1594−255:12 name args
1611+257:12 name args
1595−255:16 tight glyph =
1612+257:16 tight glyph =
1596−255:17 tight glyph [
1613+257:17 tight glyph [
1597−255:18 tight glyph (
1614+257:18 tight glyph (
1598−255:19 tight name list
1615+257:19 tight name list
1599−255:24 tvar A
1616+257:24 tvar A
1600−255:25 tight glyph )
1617+257:25 tight glyph )
1601−255:27 glyph $-(
1618+257:27 glyph $-(
1602−255:30 tight tvar A
1619+257:30 tight tvar A
1603−255:32 glyph (
1620+257:32 glyph (
1604−255:33 tight name unit
1621+257:33 tight name unit
1605−255:38 tvar B
1622+257:38 tvar B
1606−255:39 tight glyph )
1623+257:39 tight glyph )
1607−255:40 tight glyph )
1624+257:40 tight glyph )
1608−255:41 tight glyph ]
1625+257:41 tight glyph ]
1609−256:3 INDENT
1626+258:3 INDENT
1610−256:3 glyph ?-
1627+258:3 glyph ?-
1611−256:6 name args
1628+258:6 name args
1612−257:5 INDENT
1629+259:5 INDENT
1613−257:5 glyph [
1630+259:5 glyph [
1614−257:6 tight name xs
1631+259:6 tight name xs
1615−257:9 name f
1632+259:9 name f
1616−257:10 tight glyph ]
1633+259:10 tight glyph ]
1617−258:7 INDENT
1634+259:12 glyph ^-
1618−258:7 glyph ?-
1635+259:15 glyph (
1619−258:10 name xs
1636+259:16 tight name list
1620−259:9 INDENT
1637+259:21 tvar B
1621−259:9 lit ~
1638+259:22 tight glyph )
1622−259:11 lit ~
1639+260:9 INDENT
1623−260:9 NEWLINE
1624−260:9 glyph [
1640+260:9 glyph ?-
1625−260:10 tight name item
1641+260:12 name xs
1626−260:15 name rest
1627−260:19 tight glyph ]
1628261:11 INDENT
1642261:11 INDENT
1629−261:11 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 ?-
1630−261:14 glyph (
1652+263:16 glyph (
1631−261:15 tight name f
1653+263:17 tight name f
1632−261:17 name item
1654+263:19 name item
1633−261:21 tight glyph )
1655+263:23 tight glyph )
1634−262:13 INDENT
1656+264:15 INDENT
1635−262:13 lit ~
1657+264:15 lit ~
1636−262:15 glyph (
1658+264:17 glyph (
1637−262:16 tight name murn
1659+264:18 tight name murn
1638−262:21 name rest
1660+264:23 name rest
1639−262:26 name f
1661+264:28 name f
1640−262:27 tight glyph )
1662+264:29 tight glyph )
1641−263:13 NEWLINE
1663+265:15 NEWLINE
1642−263:13 glyph [
1664+265:15 glyph [
1643−263:14 tight lit ~
1665+265:16 tight lit ~
1644−263:16 name value
1666+265:18 name value
1645−263:21 tight glyph ]
1667+265:23 tight glyph ]
1646−263:23 glyph [
1668+265:25 glyph [
1647−263:24 tight name value
1669+265:26 tight name value
1648−263:30 glyph (
1670+265:32 glyph (
1649−263:31 tight name murn
1671+265:33 tight name murn
1650−263:36 name rest
1672+265:38 name rest
1651−263:41 name f
1673+265:43 name f
1652−263:42 tight glyph )
1674+265:44 tight glyph )
1653−263:43 tight glyph ]
1675+265:45 tight glyph ]
1654−265:1 DEDENT
1676+267:1 DEDENT
1655−265:1 DEDENT
1677+267:1 DEDENT
1656−265:1 DEDENT
1678+267:1 DEDENT
1657−265:1 DEDENT
1679+267:1 DEDENT
1658−265:1 DEDENT
1680+267:1 DEDENT
1659−265:1 DEDENT
1681+267:1 DEDENT
1660−265:1 NEWLINE
1682+267:1 NEWLINE
1661−265:1 glyph ++
1683+267:1 glyph ++
1662−265:4 name join
1684+267:4 name join
1663−265:9 glyph |=
1685+267:9 glyph |=
1664−265:12 name args
1686+267:12 name args
1665−265:16 tight glyph =
1687+267:16 tight glyph =
1666−265:17 tight glyph [
1688+267:17 tight glyph [
1667−265:18 tight tvar A
1689+267:18 tight tvar A
1668−265:20 glyph (
1690+267:20 glyph (
1669−265:21 tight name list
1691+267:21 tight name list
1670−265:26 tvar A
1692+267:26 tvar A
1671−265:27 tight glyph )
1693+267:27 tight glyph )
1672−265:28 tight glyph ]
1694+267:28 tight glyph ]
1673−266:3 INDENT
1695+268:3 INDENT
1674−266:3 glyph ?-
1696+268:3 glyph ?-
1675−266:6 name args
1697+268:6 name args
1676−267:5 INDENT
1698+269:5 INDENT
1677−267:5 glyph [
1699+269:5 glyph [
1678−267:6 tight name separator
1700+269:6 tight name separator
1679−267:16 name xs
1701+269:16 name xs
1680−267:18 tight glyph ]
1702+269:18 tight glyph ]
1681−268:7 INDENT
1703+269:20 glyph ^-
1682−268:7 glyph ?-
1704+269:23 glyph (
1683−268:10 name xs
1705+269:24 tight name list
1684−269:9 INDENT
1706+269:29 tvar A
1685−269:9 lit ~
1707+269:30 tight glyph )
1686−269:11 lit ~
1708+270:9 INDENT
1687−270:9 NEWLINE
1688−270:9 glyph [
1709+270:9 glyph ?-
1689−270:10 tight name item
1690−270:15 name rest
1710+270:12 name xs
1691−270:19 tight glyph ]
1692271:11 INDENT
1711271:11 INDENT
1693−271:11 glyph ?-
1712+271:11 lit ~
1713+271:13 lit ~
1714+272:11 NEWLINE
1715+272:11 glyph [
1716+272:12 tight name item
1694−271:14 name rest
1717+272:17 name rest
1718+272:21 tight glyph ]
1695−272:13 INDENT
1719+273:13 INDENT
1696−272:13 lit ~
1720+273:13 glyph ?-
1721+273:16 name rest
1722+274:15 INDENT
1723+274:15 lit ~
1697−272:15 glyph [
1724+274:17 glyph [
1698−272:16 tight name item
1725+274:18 tight name item
1699−272:21 lit ~
1726+274:23 lit ~
1700−272:22 tight glyph ]
1727+274:24 tight glyph ]
1701−273:13 NEWLINE
1728+275:15 NEWLINE
1702−273:13 glyph [
1729+275:15 glyph [
1703−273:14 tight name next
1730+275:16 tight name next
1704−273:19 name more
1731+275:21 name more
1705−273:23 tight glyph ]
1706−273:25 glyph [
1732+275:25 tight glyph ]
1733+275:27 glyph [
1707−273:26 tight name item
1734+275:28 tight name item
1708−273:31 glyph [
1735+275:33 glyph [
1709−273:32 tight name separator
1736+275:34 tight name separator
1710−273:42 glyph (
1737+275:44 glyph (
1711−273:43 tight name join
1738+275:45 tight name join
1712−273:48 name separator
1739+275:50 name separator
1713−273:58 name rest
1740+275:60 name rest
1714−273:62 tight glyph )
1715−273:63 tight glyph ]
1716−273:64 tight glyph ]
1741+275:64 tight glyph )
1742+275:65 tight glyph ]
1743+275:66 tight glyph ]
1717−275:1 DEDENT
1744+277:1 DEDENT
1718−275:1 DEDENT
1745+277:1 DEDENT
1719−275:1 DEDENT
1746+277:1 DEDENT
1720−275:1 DEDENT
1747+277:1 DEDENT
1721−275:1 DEDENT
1748+277:1 DEDENT
1722−275:1 DEDENT
1749+277:1 DEDENT
1723−275:1 NEWLINE
1750+277:1 NEWLINE
1724−275:1 glyph ++
1751+277:1 glyph ++
1725−275:4 name snip
1752+277:4 name snip
1726−275:9 glyph |=
1753+277:9 glyph |=
1727−275:12 name xs
1754+277:12 name xs
1728−275:14 tight glyph =
1755+277:14 tight glyph =
1729−275:15 tight glyph (
1756+277:15 tight glyph (
1730−275:16 tight name list
1757+277:16 tight name list
1731−275:21 tvar A
1758+277:21 tvar A
1732−275:22 tight glyph )
1759+277:22 tight glyph )
1733−276:3 INDENT
1760+278:3 INDENT
1734−276:3 glyph ?-
1761+278: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 [
1762+278:6 glyph (
1741−278:6 tight name item
1763+278:7 tight name list
1742−278:11 name rest
1764+278:12 tvar A
1743−278:15 tight glyph ]
1765+278:13 tight glyph )
1744−279:7 INDENT
1766+279:5 INDENT
1745−279:7 glyph ?-
1767+279:5 glyph ?-
1746−279:10 name rest
1768+279:8 name xs
1747−280:9 INDENT
1769+280:7 INDENT
1770+280:7 lit ~
1748280:9 lit ~
1771280:9 lit ~
1749−280:11 lit ~
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 ~
1750−281:9 NEWLINE
1783+284:11 NEWLINE
1751−281:9 glyph [
1784+284:11 glyph [
1752−281:10 tight name next
1785+284:12 tight name next
1753−281:15 name more
1786+284:17 name more
1754−281:19 tight glyph ]
1787+284:21 tight glyph ]
1755−281:21 glyph [
1788+284:23 glyph [
1756−281:22 tight name item
1789+284:24 tight name item
1757−281:27 glyph (
1790+284:29 glyph (
1758−281:28 tight name snip
1791+284:30 tight name snip
1759−281:33 name rest
1792+284:35 name rest
1760−281:37 tight glyph )
1793+284:39 tight glyph )
1761−281:38 tight glyph ]
1794+284:40 tight glyph ]
1795+286:1 DEDENT
1762−283:1 DEDENT
1796+286:1 DEDENT
1763−283:1 DEDENT
1797+286:1 DEDENT
1764−283:1 DEDENT
1798+286:1 DEDENT
1765−283:1 DEDENT
1799+286:1 DEDENT
1766−283:1 NEWLINE
1800+286:1 NEWLINE
1767−283:1 glyph ++
1801+286:1 glyph ++
1768−283:4 name rear
1802+286:4 name rear
1769−283:9 glyph |=
1803+286:9 glyph |=
1770−283:12 name xs
1804+286:12 name xs
1771−283:14 tight glyph =
1805+286:14 tight glyph =
1772−283:15 tight glyph (
1806+286:15 tight glyph (
1773−283:16 tight name list
1807+286:16 tight name list
1774−283:21 tvar A
1808+286:21 tvar A
1775−283:22 tight glyph )
1809+286:22 tight glyph )
1776−284:3 INDENT
1810+287:3 INDENT
1777−284:3 glyph ?-
1811+287:3 glyph ?-
1778−284:6 name xs
1812+287:6 name xs
1779−285:5 INDENT
1813+288:5 INDENT
1780−285:5 lit ~
1814+288:5 lit ~
1781−285:7 glyph !!
1815+288:7 glyph !!
1782−286:5 NEWLINE
1816+289:5 NEWLINE
1783−286:5 glyph [
1817+289:5 glyph [
1784−286:6 tight name item
1818+289:6 tight name item
1785−286:11 name rest
1819+289:11 name rest
1786−286:15 tight glyph ]
1820+289:15 tight glyph ]
1787−287:7 INDENT
1821+290:7 INDENT
1788−287:7 glyph ?-
1822+290:7 glyph ?-
1789−287:10 name rest
1823+290:10 name rest
1790−288:9 INDENT
1824+291:9 INDENT
1791−288:9 lit ~
1825+291:9 lit ~
1792−288:11 name item
1826+291:11 name item
1793−289:9 NEWLINE
1827+292:9 NEWLINE
1794−289:9 glyph [
1828+292:9 glyph [
1795−289:10 tight name next
1829+292:10 tight name next
1796−289:15 name more
1830+292:15 name more
1797−289:19 tight glyph ]
1831+292:19 tight glyph ]
1798−289:21 glyph (
1832+292:21 glyph (
1799−289:22 tight name rear
1833+292:22 tight name rear
1800−289:27 name rest
1834+292:27 name rest
1801−289:31 tight glyph )
1835+292:31 tight glyph )
1802−289:32 DEDENT
1836+292:32 DEDENT
1803−289:32 DEDENT
1837+292:32 DEDENT
1804−289:32 DEDENT
1838+292:32 DEDENT
1805−289:32 DEDENT
1839+292:32 DEDENT
1806−289:32 NEWLINE
1840+292:32 NEWLINE
tests/golden/prelude-unit-list-transforms/tree.txt+782−768
@@ -1,780 +1,794 @@
1(module
1(module
2 (jibb 1:1 internal /lib/jibb/internal)
2 (jibb 1:1 internal /lib/jibb/internal)
3 (mold 2:1 poke (ref 2:9 poke.internal))
3 (mold 2:1 poke (ref 2:9 poke.internal))
4− (value 5:1 same
4+ (value 6:1 same
5− (gate 5:9
5+ (gate 6:9
6− (face 5:12 x (tvar 5:14 A))
6+ (face 6:12 x (tvar 6:14 A))
7− (wing 5:16 x)))
7+ (wing 6:16 x)))
8− (value 7:1 head
8+ (value 8:1 head
9− (gate 7:9
9+ (gate 8:9
10− (face 7:12 p
10+ (face 8:12 p
11− (cell 7:14 (tvar 7:15 A) (tvar 7:17 B)))
11+ (cell 8:14 (tvar 8:15 A) (tvar 8:17 B)))
12− (body 8:3
12+ (body 9:3
13− (branch 8:3
13+ (branch 9:3
14− (wing 8:6 p)
14+ (wing 9:6 p)
15− (arm 9:5
15+ (arm 10:5
16− (cell 9:5 (bind 9:6 a) (bind 9:8 b))
16+ (cell 10:5 (bind 10:6 a) (bind 10:8 b))
17− (wing 9:11 a))))))
17+ (wing 10:11 a))))))
18− (value 11:1 tail
18+ (value 12:1 tail
19− (gate 11:9
19+ (gate 12:9
20− (face 11:12 p
20+ (face 12:12 p
21− (cell 11:14 (tvar 11:15 A) (tvar 11:17 B)))
21+ (cell 12:14 (tvar 12:15 A) (tvar 12:17 B)))
22− (body 12:3
22+ (body 13:3
23− (branch 12:3
23+ (branch 13:3
24− (wing 12:6 p)
24+ (wing 13:6 p)
25− (arm 13:5
25+ (arm 14:5
26− (cell 13:5 (bind 13:6 a) (bind 13:8 b))
26+ (cell 14:5 (bind 14:6 a) (bind 14:8 b))
27− (wing 13:11 b))))))
27+ (wing 14:11 b))))))
28− (value 15:1 not
28+ (value 16:1 not
29− (gate 15:8
29+ (gate 16:8
30− (face 15:11 b (flag 15:13))
30+ (face 16:11 b (flag 16:13))
31− (body 16:3
31+ (body 17:3
32− (branch 16:3
32+ (branch 17:3
33− (wing 16:6 b)
33+ (wing 17:6 b)
34− (arm 17:5 (lit 17:5 %.y) (lit 17:9 %.n))
34+ (arm 18:5 (lit 18:5 %.y) (lit 18:9 %.n))
35− (arm 18:5 (lit 18:5 %.n) (lit 18:9 %.y))))))
35+ (arm 19:5 (lit 19:5 %.n) (lit 19:9 %.y))))))
36− (mold 20:1 list
36+ (mold 21:1 list
37− (generic 20:9 A
37+ (generic 21:9 A
38− (union 21:3
38+ (union 22:3
39− (const 21:3 ~)
39+ (const 22:3 ~)
40− (cell 22:3
40+ (cell 23:3
41− (face 22:4 i (tvar 22:6 A))
41+ (face 23:4 i (tvar 23:6 A))
42− (face 22:8 t
42+ (face 23:8 t
43− (apply 22:10 list (tvar 22:16 A)))))))
43+ (apply 23:10 list (tvar 23:16 A)))))))
44− (mold 24:1 unit
44+ (mold 25:1 unit
45− (generic 24:9 A
45+ (generic 25:9 A
46− (union 25:3
46+ (union 26:3
47− (const 25:3 ~)
47+ (const 26:3 ~)
48− (cell 26:3
48+ (cell 27:3
49− (const 26:4 ~)
49+ (const 27:4 ~)
50− (face 26:6 u (tvar 26:8 A))))))
50+ (face 27:6 u (tvar 27:8 A))))))
51− (value 28:1 fall
51+ (value 29:1 fall
52− (gate 28:9
52+ (gate 29:9
53− (face 28:12 args
53+ (face 29:12 args
54− (cell 28:17
54+ (cell 29:17
55− (apply 28:18 unit (tvar 28:24 A))
55+ (apply 29:18 unit (tvar 29:24 A))
56− (tvar 28:27 A)))
56+ (tvar 29:27 A)))
57− (body 29:3
57+ (body 30:3
58− (branch 29:3
58+ (branch 30:3
59− (wing 29:6 args)
59+ (wing 30:6 args)
60− (arm 30:5
60+ (arm 31:5
61− (cell 30:5 (bind 30:6 maybe) (bind 30:12 fallback))
61+ (cell 31:5 (bind 31:6 maybe) (bind 31:12 fallback))
62− (body 31:7
62+ (body 32:7
63− (branch 31:7
63+ (branch 32:7
64− (wing 31:10 maybe)
64+ (wing 32:10 maybe)
65− (arm 32:9 (lit 32:9 ~) (wing 32:11 fallback))
65+ (arm 33:9 (lit 33:9 ~) (wing 33:11 fallback))
66− (arm 33:9
66+ (arm 34:9
67− (cell 33:9 (lit 33:10 ~) (bind 33:12 value))
67+ (cell 34:9 (lit 34:10 ~) (bind 34:12 value))
68− (wing 33:19 value)))))))))
68+ (wing 34:19 value)))))))))
69− (value 35:1 need
69+ (value 36:1 need
70− (gate 35:9
70+ (gate 36:9
71− (face 35:12 maybe
71+ (face 36:12 maybe
72− (apply 35:18 unit (tvar 35:24 A)))
72+ (apply 36:18 unit (tvar 36:24 A)))
73− (body 36:3
73+ (body 37:3
74− (branch 36:3
74+ (branch 37:3
75− (wing 36:6 maybe)
75+ (wing 37:6 maybe)
76− (arm 37:5 (lit 37:5 ~) (crash 37:7))
76+ (arm 38:5 (lit 38:5 ~) (crash 38:7))
77− (arm 38:5
77+ (arm 39:5
78− (cell 38:5 (lit 38:6 ~) (bind 38:8 value))
78+ (cell 39:5 (lit 39:6 ~) (bind 39:8 value))
79− (wing 38:15 value))))))
79+ (wing 39:15 value))))))
80− (value 40:1 weld
80+ (value 41:1 weld
81− (gate 40:9
81+ (gate 41:9
82− (face 40:12 args
82+ (face 41:12 args
83− (cell 40:17
83+ (cell 41:17
84− (apply 40:18 list (tvar 40:24 A))
84+ (apply 41:18 list (tvar 41:24 A))
85− (apply 40:27 list (tvar 40:33 A))))
85+ (apply 41:27 list (tvar 41:33 A))))
86− (body 41:3
86+ (body 42:3
87− (branch 41:3
87+ (branch 42:3
88− (wing 41:6 args)
88+ (wing 42:6 args)
89− (arm 42:5
89+ (arm 43:5
90− (cell 42:5 (bind 42:6 xs) (bind 42:9 ys))
90+ (cell 43:5 (bind 43:6 xs) (bind 43:9 ys))
91− (body 43:7
91+ (body 44:7
92− (cast 43:7
92+ (cast 44:7
93− (apply 43:10 list (tvar 43:16 A))
93+ (apply 44:10 list (tvar 44:16 A))
94− (body 44:9
94+ (body 45:9
95− (branch 44:9
95+ (branch 45:9
96− (wing 44:12 xs)
96+ (wing 45:12 xs)
97− (arm 45:11 (lit 45:11 ~) (wing 45:13 ys))
97+ (arm 46:11 (lit 46:11 ~) (wing 46:13 ys))
98− (arm 46:11
98+ (arm 47:11
99− (cell 46:11 (bind 46:12 item) (bind 46:17 rest))
99+ (cell 47:11 (bind 47:12 item) (bind 47:17 rest))
100− (tuple 46:23
100+ (tuple 47:23
101− (wing 46:24 item)
101+ (wing 47:24 item)
102− (group 46:29
102+ (group 47:29
103− (call 46:30 (wing 46:30 weld) (wing 46:35 rest) (wing 46:40 ys))))))))))))))
103+ (call 47:30 (wing 47:30 weld) (wing 47:35 rest) (wing 47:40 ys))))))))))))))
104− (value 48:1 turn
104+ (value 49:1 turn
105− (gate 48:9
105+ (gate 49:9
106− (face 48:12 args
106+ (face 49:12 args
107− (cell 48:17
107+ (cell 49:17
108− (apply 48:18 list (tvar 48:24 A))
108+ (apply 49:18 list (tvar 49:24 A))
109− (fn 48:27 (tvar 48:30 A) (tvar 48:32 B))))
109+ (fn 49:27 (tvar 49:30 A) (tvar 49:32 B))))
110− (body 49:3
110+ (body 50:3
111− (branch 49:3
111+ (branch 50:3
112− (wing 49:6 args)
112+ (wing 50:6 args)
113− (arm 50:5
113+ (arm 51:5
114− (cell 50:5 (bind 50:6 xs) (bind 50:9 f))
114+ (cell 51:5 (bind 51:6 xs) (bind 51:9 f))
115− (body 51:7
115+ (body 52:7
116− (cast 51:7
116+ (cast 52:7
117− (apply 51:10 list (tvar 51:16 B))
117+ (apply 52:10 list (tvar 52:16 B))
118− (body 52:9
118+ (body 53:9
119− (branch 52:9
119+ (branch 53:9
120− (wing 52:12 xs)
120+ (wing 53:12 xs)
121− (arm 53:11 (lit 53:11 ~) (lit 53:13 ~))
121+ (arm 54:11 (lit 54:11 ~) (lit 54:13 ~))
122− (arm 54:11
122+ (arm 55:11
123− (cell 54:11 (bind 54:12 item) (bind 54:17 rest))
123+ (cell 55:11 (bind 55:12 item) (bind 55:17 rest))
124− (tuple 54:23
124+ (tuple 55:23
125− (group 54:24
125+ (group 55:24
126− (call 54:25 (wing 54:25 f) (wing 54:27 item)))
126+ (call 55:25 (wing 55:25 f) (wing 55:27 item)))
127− (group 54:33
127+ (group 55:33
128− (call 54:34 (wing 54:34 turn) (wing 54:39 rest) (wing 54:44 f))))))))))))))
128+ (call 55:34 (wing 55:34 turn) (wing 55:39 rest) (wing 55:44 f))))))))))))))
129− (mold 56:1 dime
129+ (mold 57:1 dime
130− (cell 56:9
130+ (cell 57:9
131− (face 56:10 p (aura 56:12 @ta))
131+ (face 57:10 p (aura 57:12 @ta))
132− (face 56:16 q (aura 56:18 @))))
132+ (face 57:16 q (aura 57:18 @))))
133− (mold 58:1 hair
133+ (mold 59:1 hair
134− (cell 58:9
134+ (cell 59:9
135− (face 58:10 p (aura 58:12 @ud))
135+ (face 59:10 p (aura 59:12 @ud))
136− (face 58:16 q (aura 58:18 @ud))))
136+ (face 59:16 q (aura 59:18 @ud))))
137− (mold 60:1 pint
137+ (mold 61:1 pint
138− (cell 60:9
138+ (cell 61:9
139− (face 60:10 p
139+ (face 61:10 p
140− (cell 60:12
140+ (cell 61:12
141− (face 60:13 p (aura 60:15 @))
141+ (face 61:13 p (aura 61:15 @))
142− (face 60:17 q (aura 60:19 @))))
142+ (face 61:17 q (aura 61:19 @))))
143− (face 60:22 q
143+ (face 61:22 q
144− (cell 60:24
144+ (cell 61:24
145− (face 60:25 p (aura 60:27 @))
145+ (face 61:25 p (aura 61:27 @))
146− (face 60:29 q (aura 60:31 @))))))
146+ (face 61:29 q (aura 61:31 @))))))
147− (mold 62:1 coin
147+ (mold 63:1 coin
148− (union 63:3
148+ (union 64:3
149− (cell 63:3
150− (const 63:4 %$)
151− (face 63:7 p (ref 63:9 dime)))
152 (cell 64:3
149 (cell 64:3
153− (const 64:4 %blob)
150+ (const 64:4 %$)
154− (face 64:10 p (noun 64:12)))
151+ (face 64:7 p (ref 64:9 dime)))
155 (cell 65:3
152 (cell 65:3
156− (const 65:4 %many)
153+ (const 65:4 %blob)
154+ (face 65:10 p (noun 65:12)))
155+ (cell 66:3
156+ (const 66:4 %many)
157− (face 65:10 p
157+ (face 66:10 p
158− (apply 65:12 list (ref 65:18 coin))))))
158+ (apply 66:12 list (ref 66:18 coin))))))
159− (mold 67:1 pair
159+ (mold 68:1 pair
160− (generic 67:9 A B
160+ (generic 68:9 A B
161− (cell 67:18
161+ (cell 68:18
162− (face 67:19 p (tvar 67:21 A))
162+ (face 68:19 p (tvar 68:21 A))
163− (face 67:23 q (tvar 67:25 B)))))
163+ (face 68:23 q (tvar 68:25 B)))))
164− (mold 69:1 trel
164+ (mold 70:1 trel
165− (generic 69:9 A B C
165+ (generic 70:9 A B C
166− (cell 69:20
166+ (cell 70:20
167− (face 69:21 p (tvar 69:23 A))
167+ (face 70:21 p (tvar 70:23 A))
168− (face 69:25 q (tvar 69:27 B))
168+ (face 70:25 q (tvar 70:27 B))
169− (face 69:29 r (tvar 69:31 C)))))
169+ (face 70:29 r (tvar 70:31 C)))))
170− (mold 71:1 qual
170+ (mold 72:1 qual
171− (generic 71:9 A B C D
171+ (generic 72:9 A B C D
172− (cell 71:22
172+ (cell 72:22
173− (face 71:23 p (tvar 71:25 A))
173+ (face 72:23 p (tvar 72:25 A))
174− (face 71:27 q (tvar 71:29 B))
174+ (face 72:27 q (tvar 72:29 B))
175− (face 71:31 r (tvar 71:33 C))
175+ (face 72:31 r (tvar 72:33 C))
176− (face 71:35 s (tvar 71:37 D)))))
176+ (face 72:35 s (tvar 72:37 D)))))
177− (mold 73:1 cord (aura 73:9 @t))
177+ (mold 74:1 cord (aura 74:9 @t))
178− (mold 75:1 knot (aura 75:9 @ta))
178+ (mold 76:1 knot (aura 76:9 @ta))
179− (mold 77:1 tape
179+ (mold 78:1 tape
180− (apply 77:9 list (aura 77:15 @tD)))
180+ (apply 78:9 list (aura 78:15 @tD)))
181− (mold 79:1 path
181+ (mold 80:1 path
182− (apply 79:9 list (ref 79:15 knot)))
182+ (apply 80:9 list (ref 80:15 knot)))
183− (mold 81:1 tank
183+ (mold 82:1 tank
184− (union 82:3
184+ (union 83:3
185− (ref 82:3 cord)
185+ (ref 83:3 cord)
186− (cell 83:3
187− (const 83:4 %leaf)
188− (face 83:10 p (ref 83:12 tape)))
189 (cell 84:3
186 (cell 84:3
190− (const 84:4 %palm)
187+ (const 84:4 %leaf)
191− (face 84:10 p
188+ (face 84:10 p (ref 84:12 tape)))
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))))
195 (cell 85:3
189 (cell 85:3
196− (const 85:4 %rose)
190+ (const 85:4 %palm)
197 (face 85:10 p
191 (face 85:10 p
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 85:12 trel (ref 85:18 tape) (ref 85:23 tape) (ref 85:28 tape)))
198+ (apply 86:12 trel (ref 86:18 tape) (ref 86:23 tape) (ref 86:28 tape)))
199− (face 85:34 q
199+ (face 86:34 q
200− (apply 85:36 list (ref 85:42 tank))))))
200+ (apply 86:36 list (ref 86:42 tank))))))
201− (mold 87:1 nail
201+ (mold 88:1 nail
202− (cell 87:9
202+ (cell 88:9
203− (face 87:10 p (ref 87:12 hair))
203+ (face 88:10 p (ref 88:12 hair))
204− (face 87:17 q (ref 87:19 tape))))
204+ (face 88:17 q (ref 88:19 tape))))
205− (mold 89:1 edge
205+ (mold 90:1 edge
206− (cell 89:9
206+ (cell 90:9
207− (face 89:10 p (ref 89:12 hair))
207+ (face 90:10 p (ref 90:12 hair))
208− (face 89:17 q
208+ (face 90:17 q
209− (apply 89:19 unit
209+ (apply 90:19 unit
210− (cell 89:25
210+ (cell 90:25
211− (face 89:26 p (noun 89:28))
211+ (face 90:26 p (noun 90:28))
212− (face 89:30 q (ref 89:32 nail)))))))
212+ (face 90:30 q (ref 90:32 nail)))))))
213− (mold 91:1 rule
213+ (mold 92:1 rule
214− (fn 91:9 (ref 91:12 nail) (ref 91:17 edge)))
214+ (fn 92:9 (ref 92:12 nail) (ref 92:17 edge)))
215− (mold 93:1 spot
215+ (mold 94:1 spot
216− (cell 93:9
216+ (cell 94:9
217− (face 93:10 p (ref 93:12 path))
217+ (face 94:10 p (ref 94:12 path))
218− (face 93:17 q (ref 93:19 pint))))
218+ (face 94:17 q (ref 94:19 pint))))
219− (mold 95:1 toon
219+ (mold 96:1 toon
220− (union 96:3
220+ (union 97:3
221− (cell 96:3
222− (const 96:4 %0)
223− (face 96:7 p (noun 96:9)))
224 (cell 97:3
221 (cell 97:3
225− (const 97:4 %1)
222+ (const 97:4 %0)
226 (face 97:7 p (noun 97:9)))
223 (face 97:7 p (noun 97:9)))
227 (cell 98:3
224 (cell 98:3
228− (const 98:4 %2)
225+ (const 98:4 %1)
226+ (face 98:7 p (noun 98:9)))
227+ (cell 99:3
228+ (const 99:4 %2)
229− (face 98:7 p
229+ (face 99:7 p
230− (apply 98:9 list (ref 98:15 tank))))))
230+ (apply 99:9 list (ref 99:15 tank))))))
231− (mold 100:1 like
231+ (mold 101:1 like
232− (generic 100:9 A
232+ (generic 101:9 A
233− (cell 100:16
233+ (cell 101:16
234− (face 100:17 p (ref 100:19 hair))
234+ (face 101:17 p (ref 101:19 hair))
235− (face 100:24 q
235+ (face 101:24 q
236− (apply 100:26 unit
236+ (apply 101:26 unit
237− (cell 100:32
237+ (cell 101:32
238− (face 100:33 p (tvar 100:35 A))
238+ (face 101:33 p (tvar 101:35 A))
239− (face 100:37 q (ref 100:39 nail))))))))
239+ (face 101:37 q (ref 101:39 nail))))))))
240− (value 102:1 wonk
240+ (value 103:1 wonk
241− (gate 102:9
241+ (gate 103:9
242− (face 102:12 veq
242+ (face 103:12 veq
243− (apply 102:16 like (tvar 102:22 A)))
243+ (apply 103:16 like (tvar 103:22 A)))
244− (body 103:3
244+ (body 104:3
245− (branch 103:3
245+ (branch 104:3
246− (wing 103:6 q.veq)
246+ (wing 104:6 q.veq)
247− (arm 104:5 (lit 104:5 ~) (crash 104:7))
247+ (arm 105:5 (lit 105:5 ~) (crash 105:7))
248− (arm 105:5
248+ (arm 106:5
249− (cell 105:5 (lit 105:6 ~) (bind 105:8 product))
249+ (cell 106:5 (lit 106:6 ~) (bind 106:8 product))
250− (wing 105:17 p.product))))))
250+ (wing 106:17 p.product))))))
251− (mold 107:1 lone
251+ (mold 108:1 lone
252− (generic 107:9 A
252+ (generic 108:9 A
253− (cell 107:16
253+ (cell 108:16
254− (face 107:17 p (tvar 107:19 A)))))
254+ (face 108:17 p (tvar 108:19 A)))))
255− (mold 109:1 lest
255+ (mold 110:1 lest
256− (generic 109:9 A
256+ (generic 110:9 A
257− (cell 109:16
257+ (cell 110:16
258− (face 109:17 i (tvar 109:19 A))
258+ (face 110:17 i (tvar 110:19 A))
259− (face 109:21 t
259+ (face 110:21 t
260− (apply 109:23 list (tvar 109:29 A))))))
260+ (apply 110:23 list (tvar 110:29 A))))))
261− (mold 111:1 pole
261+ (mold 112:1 pole
262− (generic 111:9 A
262+ (generic 112:9 A
263− (union 112:3
263+ (union 113:3
264− (const 112:3 ~)
264+ (const 113:3 ~)
265− (cell 113:3
265+ (cell 114:3
266− (tvar 113:4 A)
266+ (tvar 114:4 A)
267− (apply 113:6 pole (tvar 113:12 A))))))
267+ (apply 114:6 pole (tvar 114:12 A))))))
268− (mold 115:1 quip
268+ (mold 116:1 quip
269− (generic 115:9 A B
269+ (generic 116:9 A B
270− (cell 115:18
270+ (cell 116:18
271− (apply 115:19 list (tvar 115:25 A))
271+ (apply 116:19 list (tvar 116:25 A))
272− (tvar 115:28 B))))
272+ (tvar 116:28 B))))
273− (mold 117:1 tree
273+ (mold 118:1 tree
274− (generic 117:9 A
274+ (generic 118:9 A
275− (union 118:3
275+ (union 119:3
276− (const 118:3 ~)
276+ (const 119:3 ~)
277− (cell 119:3
277+ (cell 120:3
278− (face 119:4 n (tvar 119:6 A))
278+ (face 120:4 n (tvar 120:6 A))
279− (face 119:8 l
279+ (face 120:8 l
280− (apply 119:10 tree (tvar 119:16 A)))
280+ (apply 120:10 tree (tvar 120:16 A)))
281− (face 119:19 r
281+ (face 120:19 r
282− (apply 119:21 tree (tvar 119:27 A)))))))
282+ (apply 120:21 tree (tvar 120:27 A)))))))
283− (mold 121:1 each
283+ (mold 122:1 each
284− (generic 121:9 A B
284+ (generic 122:9 A B
285− (union 122:3
285+ (union 123:3
286− (cell 122:3
287− (const 122:4 %|)
288− (face 122:7 p (tvar 122:9 B)))
289 (cell 123:3
286 (cell 123:3
290− (const 123:4 %&)
287+ (const 123:4 %|)
291− (face 123:7 p (tvar 123:9 A))))))
288+ (face 123:7 p (tvar 123:9 B)))
292− (mold 125:1 bloq (aura 125:9 @))
289+ (cell 124:3
293− (value 127:1 some
290+ (const 124:4 %&)
294− (gate 127:9
291+ (face 124:7 p (tvar 124:9 A))))))
295− (face 127:12 item (tvar 127:17 A))
292+ (mold 126:1 bloq (aura 126:9 @))
296− (unit 127:19 (wing 127:20 item))))
293+ (value 128:1 some
297− (value 129:1 lure
294+ (gate 128:9
298− (gate 129:9
295+ (face 128:12 item (tvar 128:17 A))
299− (face 129:12 item (tvar 129:17 A))
296+ (unit 128:19 (wing 128:20 item))))
300− (body 130:3
297+ (value 130:1 lure
301− (cast 130:3
298+ (gate 130:9
302− (apply 130:6 list (tvar 130:12 A))
299+ (face 130:12 item (tvar 130:17 A))
303− (tuple 130:15 (wing 130:16 item) (lit 130:21 ~))))))
300+ (body 131:3
304− (value 132:1 snoc
301+ (cast 131:3
305− (gate 132:9
302+ (apply 131:6 list (tvar 131:12 A))
306− (face 132:12 args
303+ (tuple 131:15 (wing 131:16 item) (lit 131:21 ~))))))
307− (cell 132:17
304+ (value 133:1 snoc
308− (apply 132:18 list (tvar 132:24 A))
305+ (gate 133:9
309− (tvar 132:27 A)))
306+ (face 133:12 args
310− (body 133:3
307+ (cell 133:17
311− (branch 133:3
308+ (apply 133:18 list (tvar 133:24 A))
312− (wing 133:6 args)
309+ (tvar 133:27 A)))
313− (arm 134:5
310+ (body 134:3
314− (cell 134:5 (bind 134:6 xs) (bind 134:9 item))
311+ (branch 134:3
315− (group 134:15
312+ (wing 134:6 args)
316− (call 134:16
313+ (arm 135:5
317− (wing 134:16 weld)
314+ (cell 135:5 (bind 135:6 xs) (bind 135:9 item))
318− (wing 134:21 xs)
315+ (group 135:15
319− (tuple 134:24 (wing 134:25 item) (lit 134:30 ~)))))))))
316+ (call 135:16
320− (value 136:1 flop
317+ (wing 135:16 weld)
321− (gate 136:9
318+ (wing 135:21 xs)
322− (face 136:12 xs
319+ (tuple 135:24 (wing 135:25 item) (lit 135:30 ~)))))))))
323− (apply 136:15 list (tvar 136:21 A)))
320+ (value 137:1 flop
324− (body 137:3
321+ (gate 137:9
325− (value 137:3 reverse-into
322+ (face 137:12 xs
326− (gate 137:19
323+ (apply 137:15 list (tvar 137:21 A)))
327− (face 137:22 args
324+ (body 138:3
328− (cell 137:27
325+ (value 138:3 reverse-into
329− (apply 137:28 list (tvar 137:34 A))
326+ (gate 138:19
330− (apply 137:37 list (tvar 137:43 A))))
327+ (face 138:22 args
331− (body 138:5
328+ (cell 138:27
332− (branch 138:5
329+ (apply 138:28 list (tvar 138:34 A))
333− (wing 138:8 args)
330+ (apply 138:37 list (tvar 138:43 A))))
334− (arm 139:7
331+ (body 139:5
335− (cell 139:7 (bind 139:8 rest) (bind 139:13 acc))
332+ (branch 139:5
336− (body 140:9
333+ (wing 139:8 args)
337− (branch 140:9
334+ (arm 140:7
338− (wing 140:12 rest)
335+ (cell 140:7 (bind 140:8 rest) (bind 140:13 acc))
339− (arm 141:11 (lit 141:11 ~) (wing 141:13 acc))
336+ (body 141:9
340− (arm 142:11
337+ (branch 141:9
341− (cell 142:11 (bind 142:12 item) (bind 142:17 more))
338+ (wing 141:12 rest)
342− (group 142:23
339+ (arm 142:11 (lit 142:11 ~) (wing 142:13 acc))
343− (call 142:24
340+ (arm 143:11
344− (wing 142:24 reverse-into)
341+ (cell 143:11 (bind 143:12 item) (bind 143:17 more))
345− (wing 142:37 more)
342+ (group 143:23
346− (tuple 142:42 (wing 142:43 item) (wing 142:48 acc))))))))))))
343+ (call 143:24
347− (group 143:3
344+ (wing 143:24 reverse-into)
348− (call 143:4 (wing 143:4 reverse-into) (wing 143:17 xs) (lit 143:20 ~))))))
345+ (wing 143:37 more)
349− (value 145:1 drop
346+ (tuple 143:42 (wing 143:43 item) (wing 143:48 acc))))))))))))
350− (gate 145:9
347+ (group 144:3
351− (face 145:12 maybe
348+ (call 144:4 (wing 144:4 reverse-into) (wing 144:17 xs) (lit 144:20 ~))))))
352− (apply 145:18 unit (tvar 145:24 A)))
349+ (value 146:1 drop
353− (body 146:3
350+ (gate 146:9
354− (branch 146:3
351+ (face 146:12 maybe
355− (wing 146:6 maybe)
352+ (apply 146:18 unit (tvar 146:24 A)))
356− (arm 147:5 (lit 147:5 ~) (lit 147:7 ~))
353+ (body 147:3
357− (arm 148:5
354+ (cast 147:3
358− (cell 148:5 (lit 148:6 ~) (bind 148:8 value))
355+ (apply 147:6 list (tvar 147:12 A))
359− (tuple 148:15 (wing 148:16 value) (lit 148:22 ~)))))))
356+ (body 148:5
360− (value 150:1 bind
357+ (branch 148:5
361− (gate 150:9
358+ (wing 148:8 maybe)
362− (face 150:12 args
359+ (arm 149:7 (lit 149:7 ~) (lit 149:9 ~))
363− (cell 150:17
360+ (arm 150:7
364− (apply 150:18 unit (tvar 150:24 A))
361+ (cell 150:7 (lit 150:8 ~) (bind 150:10 value))
365− (fn 150:27 (tvar 150:30 A) (tvar 150:32 B))))
362+ (tuple 150:17 (wing 150:18 value) (lit 150:24 ~)))))))))
366− (body 151:3
363+ (value 152:1 bind
367− (branch 151:3
364+ (gate 152:9
368− (wing 151:6 args)
365+ (face 152:12 args
369− (arm 152:5
366+ (cell 152:17
370− (cell 152:5 (bind 152:6 maybe) (bind 152:12 f))
367+ (apply 152:18 unit (tvar 152:24 A))
371− (cast 152:15
368+ (fn 152:27 (tvar 152:30 A) (tvar 152:32 B))))
372− (apply 152:18 unit (tvar 152:24 B))
369+ (body 153:3
373− (body 153:7
370+ (branch 153:3
374− (branch 153:7
371+ (wing 153:6 args)
375− (wing 153:10 maybe)
372+ (arm 154:5
376− (arm 154:9 (lit 154:9 ~) (lit 154:11 ~))
373+ (cell 154:5 (bind 154:6 maybe) (bind 154:12 f))
377− (arm 155:9
374+ (cast 154:15
378− (cell 155:9 (lit 155:10 ~) (bind 155:12 value))
375+ (apply 154:18 unit (tvar 154:24 B))
379− (unit 155:19
376+ (body 155:7
380− (group 155:20
377+ (branch 155:7
381− (call 155:21 (wing 155:21 f) (wing 155:23 value)))))))))))))
378+ (wing 155:10 maybe)
382− (value 157:1 biff
379+ (arm 156:9 (lit 156:9 ~) (lit 156:11 ~))
383− (gate 157:9
380+ (arm 157:9
384− (face 157:12 args
381+ (cell 157:9 (lit 157:10 ~) (bind 157:12 value))
385− (cell 157:17
382+ (unit 157:19
386− (apply 157:18 unit (tvar 157:24 A))
383+ (group 157:20
387− (fn 157:27
384+ (call 157:21 (wing 157:21 f) (wing 157:23 value)))))))))))))
388− (tvar 157:30 A)
385+ (value 159:1 biff
389− (apply 157:32 unit (tvar 157:38 B)))))
386+ (gate 159:9
390− (body 158:3
387+ (face 159:12 args
391− (branch 158:3
388+ (cell 159:17
392− (wing 158:6 args)
389+ (apply 159:18 unit (tvar 159:24 A))
393− (arm 159:5
390+ (fn 159:27
394− (cell 159:5 (bind 159:6 maybe) (bind 159:12 f))
391+ (tvar 159:30 A)
395− (cast 159:15
392+ (apply 159:32 unit (tvar 159:38 B)))))
396− (apply 159:18 unit (tvar 159:24 B))
393+ (body 160:3
397− (body 160:7
394+ (branch 160:3
398− (branch 160:7
395+ (wing 160:6 args)
399− (wing 160:10 maybe)
396+ (arm 161:5
400− (arm 161:9 (lit 161:9 ~) (lit 161:11 ~))
397+ (cell 161:5 (bind 161:6 maybe) (bind 161:12 f))
401− (arm 162:9
398+ (cast 161:15
402− (cell 162:9 (lit 162:10 ~) (bind 162:12 value))
399+ (apply 161:18 unit (tvar 161:24 B))
403− (group 162:19
400+ (body 162:7
404− (call 162:20 (wing 162:20 f) (wing 162:22 value))))))))))))
401+ (branch 162:7
405− (value 164:1 both
402+ (wing 162:10 maybe)
406− (gate 164:9
403+ (arm 163:9 (lit 163:9 ~) (lit 163:11 ~))
407− (face 164:12 args
404+ (arm 164:9
408− (cell 164:17
405+ (cell 164:9 (lit 164:10 ~) (bind 164:12 value))
409− (apply 164:18 unit (tvar 164:24 A))
406+ (group 164:19
410− (apply 164:27 unit (tvar 164:33 B))))
407+ (call 164:20 (wing 164:20 f) (wing 164:22 value))))))))))))
411− (body 165:3
408+ (value 166:1 both
412− (branch 165:3
409+ (gate 166:9
413− (wing 165:6 args)
410+ (face 166:12 args
414− (arm 166:5
411+ (cell 166:17
415− (cell 166:5 (bind 166:6 first) (bind 166:12 second))
412+ (apply 166:18 unit (tvar 166:24 A))
416− (cast 166:20
413+ (apply 166:27 unit (tvar 166:33 B))))
417− (apply 166:23 unit
414+ (body 167:3
418− (cell 166:29 (tvar 166:30 A) (tvar 166:32 B)))
415+ (branch 167:3
419− (body 167:7
416+ (wing 167:6 args)
420− (branch 167:7
417+ (arm 168:5
421− (wing 167:10 first)
418+ (cell 168:5 (bind 168:6 first) (bind 168:12 second))
422− (arm 168:9 (lit 168:9 ~) (lit 168:11 ~))
419+ (cast 168:20
423− (arm 169:9
420+ (apply 168:23 unit
424− (cell 169:9 (lit 169:10 ~) (bind 169:12 a))
421+ (cell 168:29 (tvar 168:30 A) (tvar 168:32 B)))
425− (body 170:11
422+ (body 169:7
426− (branch 170:11
423+ (branch 169:7
427− (wing 170:14 second)
424+ (wing 169:10 first)
428− (arm 171:13 (lit 171:13 ~) (lit 171:15 ~))
425+ (arm 170:9 (lit 170:9 ~) (lit 170:11 ~))
429− (arm 172:13
426+ (arm 171:9
430− (cell 172:13 (lit 172:14 ~) (bind 172:16 b))
427+ (cell 171:9 (lit 171:10 ~) (bind 171:12 a))
431− (unit 172:19
428+ (body 172:11
432− (tuple 172:20 (wing 172:21 a) (wing 172:23 b)))))))))))))))
429+ (branch 172:11
433− (value 174:1 clap
430+ (wing 172:14 second)
434− (gate 174:9
431+ (arm 173:13 (lit 173:13 ~) (lit 173:15 ~))
435− (face 174:12 args
432+ (arm 174:13
436− (cell 174:17
433+ (cell 174:13 (lit 174:14 ~) (bind 174:16 b))
437− (apply 174:18 unit (tvar 174:24 A))
434+ (unit 174:19
438− (apply 174:27 unit (tvar 174:33 A))
435+ (tuple 174:20 (wing 174:21 a) (wing 174:23 b)))))))))))))))
439− (fn 174:36
436+ (value 176:1 clap
440− (cell 174:39 (tvar 174:40 A) (tvar 174:42 A))
437+ (gate 176:9
441− (tvar 174:45 A))))
438+ (face 176:12 args
442− (body 175:3
439+ (cell 176:17
443− (branch 175:3
440+ (apply 176:18 unit (tvar 176:24 A))
444− (wing 175:6 args)
441+ (apply 176:27 unit (tvar 176:33 A))
445− (arm 176:5
442+ (fn 176:36
446− (cell 176:5 (bind 176:6 first) (bind 176:12 second) (bind 176:19 combine))
443+ (cell 176:39 (tvar 176:40 A) (tvar 176:42 A))
447− (cast 176:28
444+ (tvar 176:45 A))))
448− (apply 176:31 unit (tvar 176:37 A))
445+ (body 177:3
449− (body 177:7
446+ (branch 177:3
450− (branch 177:7
447+ (wing 177:6 args)
451− (wing 177:10 first)
448+ (arm 178:5
452− (arm 178:9 (lit 178:9 ~) (wing 178:11 second))
449+ (cell 178:5 (bind 178:6 first) (bind 178:12 second) (bind 178:19 combine))
453− (arm 179:9
450+ (cast 178:28
454− (cell 179:9 (lit 179:10 ~) (bind 179:12 a))
451+ (apply 178:31 unit (tvar 178:37 A))
455− (body 180:11
452+ (body 179:7
456− (branch 180:11
453+ (branch 179:7
457− (wing 180:14 second)
454+ (wing 179:10 first)
458− (arm 181:13 (lit 181:13 ~) (wing 181:15 first))
455+ (arm 180:9 (lit 180:9 ~) (wing 180:11 second))
459− (arm 182:13
456+ (arm 181:9
460− (cell 182:13 (lit 182:14 ~) (bind 182:16 b))
457+ (cell 181:9 (lit 181:10 ~) (bind 181:12 a))
461− (unit 182:19
458+ (body 182:11
462− (group 182:20
459+ (branch 182:11
463− (call 182:21 (wing 182:21 combine) (wing 182:29 a) (wing 182:31 b))))))))))))))))
460+ (wing 182:14 second)
464− (value 184:1 clef
461+ (arm 183:13 (lit 183:13 ~) (wing 183:15 first))
465− (gate 184:9
462+ (arm 184:13
466− (face 184:12 args
463+ (cell 184:13 (lit 184:14 ~) (bind 184:16 b))
467− (cell 184:17
464+ (unit 184:19
468− (apply 184:18 unit (tvar 184:24 A))
465+ (group 184:20
469− (apply 184:27 unit (tvar 184:33 B))
466+ (call 184:21 (wing 184:21 combine) (wing 184:29 a) (wing 184:31 b))))))))))))))))
470− (fn 184:36
467+ (value 186:1 clef
471− (cell 184:39 (tvar 184:40 A) (tvar 184:42 B))
468+ (gate 186:9
472− (apply 184:45 unit (tvar 184:51 C)))))
469+ (face 186:12 args
473− (body 185:3
470+ (cell 186:17
474− (branch 185:3
471+ (apply 186:18 unit (tvar 186:24 A))
475− (wing 185:6 args)
472+ (apply 186:27 unit (tvar 186:33 B))
476− (arm 186:5
473+ (fn 186:36
477− (cell 186:5 (bind 186:6 first) (bind 186:12 second) (bind 186:19 combine))
474+ (cell 186:39 (tvar 186:40 A) (tvar 186:42 B))
478− (cast 186:28
475+ (apply 186:45 unit (tvar 186:51 C)))))
479− (apply 186:31 unit (tvar 186:37 C))
476+ (body 187:3
480− (body 187:7
477+ (branch 187:3
481− (branch 187:7
478+ (wing 187:6 args)
482− (wing 187:10 first)
479+ (arm 188:5
483− (arm 188:9 (lit 188:9 ~) (lit 188:11 ~))
480+ (cell 188:5 (bind 188:6 first) (bind 188:12 second) (bind 188:19 combine))
484− (arm 189:9
481+ (cast 188:28
485− (cell 189:9 (lit 189:10 ~) (bind 189:12 a))
482+ (apply 188:31 unit (tvar 188:37 C))
486− (body 190:11
483+ (body 189:7
487− (branch 190:11
484+ (branch 189:7
488− (wing 190:14 second)
485+ (wing 189:10 first)
489− (arm 191:13 (lit 191:13 ~) (lit 191:15 ~))
486+ (arm 190:9 (lit 190:9 ~) (lit 190:11 ~))
490− (arm 192:13
487+ (arm 191:9
491− (cell 192:13 (lit 192:14 ~) (bind 192:16 b))
488+ (cell 191:9 (lit 191:10 ~) (bind 191:12 a))
492− (group 192:19
489+ (body 192:11
493− (call 192:20 (wing 192:20 combine) (wing 192:28 a) (wing 192:30 b)))))))))))))))
490+ (branch 192:11
494− (value 194:1 skim
491+ (wing 192:14 second)
495− (gate 194:9
492+ (arm 193:13 (lit 193:13 ~) (lit 193:15 ~))
496− (face 194:12 args
493+ (arm 194:13
497− (cell 194:17
494+ (cell 194:13 (lit 194:14 ~) (bind 194:16 b))
498− (apply 194:18 list (tvar 194:24 A))
495+ (group 194:19
499− (fn 194:27 (tvar 194:30 A) (flag 194:32))))
496+ (call 194:20 (wing 194:20 combine) (wing 194:28 a) (wing 194:30 b)))))))))))))))
500− (body 195:3
497+ (value 196:1 skim
501− (branch 195:3
498+ (gate 196:9
502− (wing 195:6 args)
499+ (face 196:12 args
503− (arm 196:5
500+ (cell 196:17
504− (cell 196:5 (bind 196:6 xs) (bind 196:9 predicate))
501+ (apply 196:18 list (tvar 196:24 A))
505− (body 197:7
502+ (fn 196:27 (tvar 196:30 A) (flag 196:32))))
506− (branch 197:7
503+ (body 197:3
507− (wing 197:10 xs)
504+ (branch 197:3
508− (arm 198:9 (lit 198:9 ~) (lit 198:11 ~))
505+ (wing 197:6 args)
509− (arm 199:9
506+ (arm 198:5
510− (cell 199:9 (bind 199:10 item) (bind 199:15 rest))
507+ (cell 198:5 (bind 198:6 xs) (bind 198:9 predicate))
511− (body 200:11
508+ (cast 198:20
512− (branch 200:11
509+ (apply 198:23 list (tvar 198:29 A))
513− (group 200:14
510+ (body 199:9
514− (call 200:15 (wing 200:15 predicate) (wing 200:25 item)))
511+ (branch 199:9
515− (arm 201:13
512+ (wing 199:12 xs)
516− (lit 201:13 %.y)
513+ (arm 200:11 (lit 200:11 ~) (lit 200:13 ~))
517− (tuple 201:17
514+ (arm 201:11
518− (wing 201:18 item)
515+ (cell 201:11 (bind 201:12 item) (bind 201:17 rest))
519− (group 201:23
516+ (body 202:13
520− (call 201:24 (wing 201:24 skim) (wing 201:29 rest) (wing 201:34 predicate)))))
517+ (branch 202:13
521− (arm 202:13
518+ (group 202:16
522− (lit 202:13 %.n)
519+ (call 202:17 (wing 202:17 predicate) (wing 202:27 item)))
523− (group 202:17
520+ (arm 203:15
524− (call 202:18 (wing 202:18 skim) (wing 202:23 rest) (wing 202:28 predicate))))))))))))))
521+ (lit 203:15 %.y)
525− (value 204:1 skip
522+ (tuple 203:19
526− (gate 204:9
523+ (wing 203:20 item)
527− (face 204:12 args
524+ (group 203:25
528− (cell 204:17
525+ (call 203:26 (wing 203:26 skim) (wing 203:31 rest) (wing 203:36 predicate)))))
529− (apply 204:18 list (tvar 204:24 A))
526+ (arm 204:15
530− (fn 204:27 (tvar 204:30 A) (flag 204:32))))
527+ (lit 204:15 %.n)
531− (body 205:3
528+ (group 204:19
532− (branch 205:3
529+ (call 204:20 (wing 204:20 skim) (wing 204:25 rest) (wing 204:30 predicate)))))))))))))))
533− (wing 205:6 args)
530+ (value 206:1 skip
534− (arm 206:5
531+ (gate 206:9
535− (cell 206:5 (bind 206:6 xs) (bind 206:9 predicate))
532+ (face 206:12 args
536− (body 207:7
533+ (cell 206:17
537− (branch 207:7
534+ (apply 206:18 list (tvar 206:24 A))
538− (wing 207:10 xs)
535+ (fn 206:27 (tvar 206:30 A) (flag 206:32))))
539− (arm 208:9 (lit 208:9 ~) (lit 208:11 ~))
536+ (body 207:3
540− (arm 209:9
537+ (branch 207:3
541− (cell 209:9 (bind 209:10 item) (bind 209:15 rest))
538+ (wing 207:6 args)
542− (body 210:11
539+ (arm 208:5
543− (branch 210:11
540+ (cell 208:5 (bind 208:6 xs) (bind 208:9 predicate))
544− (group 210:14
541+ (cast 208:20
545− (call 210:15 (wing 210:15 predicate) (wing 210:25 item)))
542+ (apply 208:23 list (tvar 208:29 A))
546− (arm 211:13
543+ (body 209:9
547− (lit 211:13 %.y)
544+ (branch 209:9
548− (group 211:17
545+ (wing 209:12 xs)
549− (call 211:18 (wing 211:18 skip) (wing 211:23 rest) (wing 211:28 predicate))))
546+ (arm 210:11 (lit 210:11 ~) (lit 210:13 ~))
550− (arm 212:13
547+ (arm 211:11
551− (lit 212:13 %.n)
548+ (cell 211:11 (bind 211:12 item) (bind 211:17 rest))
552− (tuple 212:17
549+ (body 212:13
553− (wing 212:18 item)
550+ (branch 212:13
554− (group 212:23
551+ (group 212:16
555− (call 212:24 (wing 212:24 skip) (wing 212:29 rest) (wing 212:34 predicate)))))))))))))))
552+ (call 212:17 (wing 212:17 predicate) (wing 212:27 item)))
556− (value 214:1 levy
553+ (arm 213:15
557− (gate 214:9
554+ (lit 213:15 %.y)
558− (face 214:12 args
555+ (group 213:19
559− (cell 214:17
556+ (call 213:20 (wing 213:20 skip) (wing 213:25 rest) (wing 213:30 predicate))))
560− (apply 214:18 list (tvar 214:24 A))
557+ (arm 214:15
561− (fn 214:27 (tvar 214:30 A) (flag 214:32))))
558+ (lit 214:15 %.n)
562− (body 215:3
559+ (tuple 214:19
563− (branch 215:3
560+ (wing 214:20 item)
564− (wing 215:6 args)
561+ (group 214:25
565− (arm 216:5
562+ (call 214:26 (wing 214:26 skip) (wing 214:31 rest) (wing 214:36 predicate))))))))))))))))
566− (cell 216:5 (bind 216:6 xs) (bind 216:9 predicate))
563+ (value 216:1 levy
567− (body 217:7
564+ (gate 216:9
568− (branch 217:7
565+ (face 216:12 args
569− (wing 217:10 xs)
566+ (cell 216:17
570− (arm 218:9 (lit 218:9 ~) (lit 218:11 %.y))
567+ (apply 216:18 list (tvar 216:24 A))
571− (arm 219:9
568+ (fn 216:27 (tvar 216:30 A) (flag 216:32))))
572− (cell 219:9 (bind 219:10 item) (bind 219:15 rest))
569+ (body 217:3
573− (body 220:11
570+ (branch 217:3
574− (branch 220:11
571+ (wing 217:6 args)
575− (group 220:14
572+ (arm 218:5
576− (call 220:15 (wing 220:15 predicate) (wing 220:25 item)))
573+ (cell 218:5 (bind 218:6 xs) (bind 218:9 predicate))
577− (arm 221:13
574+ (body 219:7
578− (lit 221:13 %.y)
575+ (branch 219:7
579− (group 221:17
576+ (wing 219:10 xs)
580− (call 221:18 (wing 221:18 levy) (wing 221:23 rest) (wing 221:28 predicate))))
577+ (arm 220:9 (lit 220:9 ~) (lit 220:11 %.y))
581− (arm 222:13 (lit 222:13 %.n) (lit 222:17 %.n))))))))))))
578+ (arm 221:9
582− (value 224:1 lien
579+ (cell 221:9 (bind 221:10 item) (bind 221:15 rest))
583− (gate 224:9
580+ (body 222:11
584− (face 224:12 args
581+ (branch 222:11
585− (cell 224:17
582+ (group 222:14
586− (apply 224:18 list (tvar 224:24 A))
583+ (call 222:15 (wing 222:15 predicate) (wing 222:25 item)))
587− (fn 224:27 (tvar 224:30 A) (flag 224:32))))
584+ (arm 223:13
588− (body 225:3
585+ (lit 223:13 %.y)
589− (branch 225:3
586+ (group 223:17
590− (wing 225:6 args)
587+ (call 223:18 (wing 223:18 levy) (wing 223:23 rest) (wing 223:28 predicate))))
591− (arm 226:5
588+ (arm 224:13 (lit 224:13 %.n) (lit 224:17 %.n))))))))))))
592− (cell 226:5 (bind 226:6 xs) (bind 226:9 predicate))
589+ (value 226:1 lien
593− (body 227:7
590+ (gate 226:9
594− (branch 227:7
591+ (face 226:12 args
595− (wing 227:10 xs)
592+ (cell 226:17
596− (arm 228:9 (lit 228:9 ~) (lit 228:11 %.n))
593+ (apply 226:18 list (tvar 226:24 A))
597− (arm 229:9
594+ (fn 226:27 (tvar 226:30 A) (flag 226:32))))
598− (cell 229:9 (bind 229:10 item) (bind 229:15 rest))
595+ (body 227:3
599− (body 230:11
596+ (branch 227:3
600− (branch 230:11
597+ (wing 227:6 args)
601− (group 230:14
598+ (arm 228:5
602− (call 230:15 (wing 230:15 predicate) (wing 230:25 item)))
599+ (cell 228:5 (bind 228:6 xs) (bind 228:9 predicate))
603− (arm 231:13 (lit 231:13 %.y) (lit 231:17 %.y))
600+ (body 229:7
604− (arm 232:13
601+ (branch 229:7
605− (lit 232:13 %.n)
602+ (wing 229:10 xs)
606− (group 232:17
603+ (arm 230:9 (lit 230:9 ~) (lit 230:11 %.n))
607− (call 232:18 (wing 232:18 lien) (wing 232:23 rest) (wing 232:28 predicate))))))))))))))
604+ (arm 231:9
608− (value 234:1 roll
605+ (cell 231:9 (bind 231:10 item) (bind 231:15 rest))
609− (gate 234:9
606+ (body 232:11
610− (face 234:12 args
607+ (branch 232:11
611− (cell 234:17
608+ (group 232:14
612− (apply 234:18 list (tvar 234:24 A))
609+ (call 232:15 (wing 232:15 predicate) (wing 232:25 item)))
613− (tvar 234:27 B)
610+ (arm 233:13 (lit 233:13 %.y) (lit 233:17 %.y))
614− (fn 234:29
611+ (arm 234:13
615− (cell 234:32 (tvar 234:33 A) (tvar 234:35 B))
612+ (lit 234:13 %.n)
616− (tvar 234:38 B))))
613+ (group 234:17
617− (body 235:3
614+ (call 234:18 (wing 234:18 lien) (wing 234:23 rest) (wing 234:28 predicate))))))))))))))
618− (branch 235:3
615+ (value 236:1 roll
619− (wing 235:6 args)
616+ (gate 236:9
620− (arm 236:5
617+ (face 236:12 args
621− (cell 236:5 (bind 236:6 xs) (bind 236:9 start) (bind 236:15 combine))
618+ (cell 236:17
622− (body 237:7
619+ (apply 236:18 list (tvar 236:24 A))
623− (branch 237:7
620+ (tvar 236:27 B)
624− (wing 237:10 xs)
621+ (fn 236:29
625− (arm 238:9 (lit 238:9 ~) (wing 238:11 start))
622+ (cell 236:32 (tvar 236:33 A) (tvar 236:35 B))
626− (arm 239:9
623+ (tvar 236:38 B))))
627− (cell 239:9 (bind 239:10 item) (bind 239:15 rest))
624+ (body 237:3
628− (group 239:21
625+ (branch 237:3
629− (call 239:22
626+ (wing 237:6 args)
630− (wing 239:22 roll)
627+ (arm 238:5
631− (wing 239:27 rest)
628+ (cell 238:5 (bind 238:6 xs) (bind 238:9 start) (bind 238:15 combine))
632− (group 239:32
629+ (body 239:7
633− (call 239:33 (wing 239:33 combine) (wing 239:41 item) (wing 239:46 start)))
630+ (branch 239:7
634− (wing 239:53 combine)))))))))))
631+ (wing 239:10 xs)
635− (value 241:1 reel
632+ (arm 240:9 (lit 240:9 ~) (wing 240:11 start))
636− (gate 241:9
633+ (arm 241:9
637− (face 241:12 args
634+ (cell 241:9 (bind 241:10 item) (bind 241:15 rest))
638− (cell 241:17
635+ (group 241:21
639− (apply 241:18 list (tvar 241:24 A))
636+ (call 241:22
640− (tvar 241:27 B)
637+ (wing 241:22 roll)
641− (fn 241:29
638+ (wing 241:27 rest)
642− (cell 241:32 (tvar 241:33 A) (tvar 241:35 B))
639+ (group 241:32
643− (tvar 241:38 B))))
640+ (call 241:33 (wing 241:33 combine) (wing 241:41 item) (wing 241:46 start)))
644− (body 242:3
641+ (wing 241:53 combine)))))))))))
645− (branch 242:3
642+ (value 243:1 reel
646− (wing 242:6 args)
643+ (gate 243:9
647− (arm 243:5
644+ (face 243:12 args
648− (cell 243:5 (bind 243:6 xs) (bind 243:9 start) (bind 243:15 combine))
645+ (cell 243:17
649− (body 244:7
646+ (apply 243:18 list (tvar 243:24 A))
650− (branch 244:7
647+ (tvar 243:27 B)
651− (wing 244:10 xs)
648+ (fn 243:29
652− (arm 245:9 (lit 245:9 ~) (wing 245:11 start))
649+ (cell 243:32 (tvar 243:33 A) (tvar 243:35 B))
653− (arm 246:9
650+ (tvar 243:38 B))))
654− (cell 246:9 (bind 246:10 item) (bind 246:15 rest))
651+ (body 244:3
655− (group 246:21
652+ (branch 244:3
656− (call 246:22
653+ (wing 244:6 args)
657− (wing 246:22 combine)
654+ (arm 245:5
658− (wing 246:30 item)
655+ (cell 245:5 (bind 245:6 xs) (bind 245:9 start) (bind 245:15 combine))
659− (group 246:35
656+ (body 246:7
660− (call 246:36 (wing 246:36 reel) (wing 246:41 rest) (wing 246:46 start) (wing 246:52 combine)))))))))))))
657+ (branch 246:7
661− (value 248:1 flit
658+ (wing 246:10 xs)
662− (gate 248:9
659+ (arm 247:9 (lit 247:9 ~) (wing 247:11 start))
663− (face 248:12 predicate
660+ (arm 248:9
664− (fn 248:22 (tvar 248:25 A) (flag 248:27)))
661+ (cell 248:9 (bind 248:10 item) (bind 248:15 rest))
665− (body 249:3
662+ (group 248:21
666− (gate 249:3
663+ (call 248:22
667− (face 249:6 value (tvar 249:12 A))
664+ (wing 248:22 combine)
668− (body 250:5
665+ (wing 248:30 item)
669− (cast 250:5
666+ (group 248:35
670− (apply 250:8 unit (tvar 250:14 A))
667+ (call 248:36 (wing 248:36 reel) (wing 248:41 rest) (wing 248:46 start) (wing 248:52 combine)))))))))))))
671− (body 251:7
668+ (value 250:1 flit
672− (branch 251:7
669+ (gate 250:9
673− (group 251:10
670+ (face 250:12 predicate
674− (call 251:11 (wing 251:11 predicate) (wing 251:21 value)))
671+ (fn 250:22 (tvar 250:25 A) (flag 250:27)))
675− (arm 252:9
672+ (body 251:3
676− (lit 252:9 %.y)
673+ (gate 251:3
677− (unit 252:13 (wing 252:14 value)))
674+ (face 251:6 value (tvar 251:12 A))
678− (arm 253:9 (lit 253:9 %.n) (lit 253:13 ~))))))))))
675+ (body 252:5
679− (value 255:1 murn
676+ (cast 252:5
680− (gate 255:9
677+ (apply 252:8 unit (tvar 252:14 A))
681− (face 255:12 args
678+ (body 253:7
682− (cell 255:17
679+ (branch 253:7
683− (apply 255:18 list (tvar 255:24 A))
680+ (group 253:10
684− (fn 255:27
681+ (call 253:11 (wing 253:11 predicate) (wing 253:21 value)))
685− (tvar 255:30 A)
682+ (arm 254:9
686− (apply 255:32 unit (tvar 255:38 B)))))
683+ (lit 254:9 %.y)
687− (body 256:3
684+ (unit 254:13 (wing 254:14 value)))
688− (branch 256:3
685+ (arm 255:9 (lit 255:9 %.n) (lit 255:13 ~))))))))))
689− (wing 256:6 args)
686+ (value 257:1 murn
690− (arm 257:5
687+ (gate 257:9
691− (cell 257:5 (bind 257:6 xs) (bind 257:9 f))
688+ (face 257:12 args
692− (body 258:7
689+ (cell 257:17
693− (branch 258:7
690+ (apply 257:18 list (tvar 257:24 A))
694− (wing 258:10 xs)
691+ (fn 257:27
695− (arm 259:9 (lit 259:9 ~) (lit 259:11 ~))
692+ (tvar 257:30 A)
696− (arm 260:9
693+ (apply 257:32 unit (tvar 257:38 B)))))
697− (cell 260:9 (bind 260:10 item) (bind 260:15 rest))
694+ (body 258:3
698− (body 261:11
695+ (branch 258:3
699− (branch 261:11
696+ (wing 258:6 args)
700− (group 261:14
697+ (arm 259:5
701− (call 261:15 (wing 261:15 f) (wing 261:17 item)))
698+ (cell 259:5 (bind 259:6 xs) (bind 259:9 f))
702− (arm 262:13
699+ (cast 259:12
703− (lit 262:13 ~)
700+ (apply 259:15 list (tvar 259:21 B))
704− (group 262:15
701+ (body 260:9
705− (call 262:16 (wing 262:16 murn) (wing 262:21 rest) (wing 262:26 f))))
702+ (branch 260:9
706− (arm 263:13
703+ (wing 260:12 xs)
707− (cell 263:13 (lit 263:14 ~) (bind 263:16 value))
704+ (arm 261:11 (lit 261:11 ~) (lit 261:13 ~))
708− (tuple 263:23
705+ (arm 262:11
709− (wing 263:24 value)
706+ (cell 262:11 (bind 262:12 item) (bind 262:17 rest))
710− (group 263:30
707+ (body 263:13
711− (call 263:31 (wing 263:31 murn) (wing 263:36 rest) (wing 263:41 f)))))))))))))))
708+ (branch 263:13
712− (value 265:1 join
709+ (group 263:16
713− (gate 265:9
710+ (call 263:17 (wing 263:17 f) (wing 263:19 item)))
714− (face 265:12 args
711+ (arm 264:15
715− (cell 265:17
712+ (lit 264:15 ~)
716− (tvar 265:18 A)
713+ (group 264:17
717− (apply 265:20 list (tvar 265:26 A))))
714+ (call 264:18 (wing 264:18 murn) (wing 264:23 rest) (wing 264:28 f))))
718− (body 266:3
715+ (arm 265:15
719− (branch 266:3
716+ (cell 265:15 (lit 265:16 ~) (bind 265:18 value))
720− (wing 266:6 args)
717+ (tuple 265:25
721− (arm 267:5
718+ (wing 265:26 value)
722− (cell 267:5 (bind 267:6 separator) (bind 267:16 xs))
719+ (group 265:32
723− (body 268:7
720+ (call 265:33 (wing 265:33 murn) (wing 265:38 rest) (wing 265:43 f))))))))))))))))
724− (branch 268:7
721+ (value 267:1 join
725− (wing 268:10 xs)
722+ (gate 267:9
726− (arm 269:9 (lit 269:9 ~) (lit 269:11 ~))
723+ (face 267:12 args
727− (arm 270:9
724+ (cell 267:17
728− (cell 270:9 (bind 270:10 item) (bind 270:15 rest))
725+ (tvar 267:18 A)
729− (body 271:11
726+ (apply 267:20 list (tvar 267:26 A))))
730− (branch 271:11
727+ (body 268:3
731− (wing 271:14 rest)
728+ (branch 268:3
732− (arm 272:13
729+ (wing 268:6 args)
733− (lit 272:13 ~)
730+ (arm 269:5
734− (tuple 272:15 (wing 272:16 item) (lit 272:21 ~)))
731+ (cell 269:5 (bind 269:6 separator) (bind 269:16 xs))
735− (arm 273:13
732+ (cast 269:20
736− (cell 273:13 (bind 273:14 next) (bind 273:19 more))
733+ (apply 269:23 list (tvar 269:29 A))
737− (tuple 273:25
734+ (body 270:9
738− (wing 273:26 item)
735+ (branch 270:9
739− (tuple 273:31
736+ (wing 270:12 xs)
740− (wing 273:32 separator)
737+ (arm 271:11 (lit 271:11 ~) (lit 271:13 ~))
741− (group 273:42
738+ (arm 272:11
742− (call 273:43 (wing 273:43 join) (wing 273:48 separator) (wing 273:58 rest))))))))))))))))
739+ (cell 272:11 (bind 272:12 item) (bind 272:17 rest))
743− (value 275:1 snip
740+ (body 273:13
744− (gate 275:9
741+ (branch 273:13
745− (face 275:12 xs
742+ (wing 273:16 rest)
746− (apply 275:15 list (tvar 275:21 A)))
743+ (arm 274:15
747− (body 276:3
744+ (lit 274:15 ~)
748− (branch 276:3
745+ (tuple 274:17 (wing 274:18 item) (lit 274:23 ~)))
749− (wing 276:6 xs)
746+ (arm 275:15
750− (arm 277:5 (lit 277:5 ~) (lit 277:7 ~))
747+ (cell 275:15 (bind 275:16 next) (bind 275:21 more))
751− (arm 278:5
748+ (tuple 275:27
752− (cell 278:5 (bind 278:6 item) (bind 278:11 rest))
749+ (wing 275:28 item)
753− (body 279:7
750+ (tuple 275:33
754− (branch 279:7
751+ (wing 275:34 separator)
755− (wing 279:10 rest)
752+ (group 275:44
756− (arm 280:9 (lit 280:9 ~) (lit 280:11 ~))
753+ (call 275:45 (wing 275:45 join) (wing 275:50 separator) (wing 275:60 rest)))))))))))))))))
757− (arm 281:9
754+ (value 277:1 snip
758− (cell 281:9 (bind 281:10 next) (bind 281:15 more))
755+ (gate 277:9
759− (tuple 281:21
756+ (face 277:12 xs
760− (wing 281:22 item)
757+ (apply 277:15 list (tvar 277:21 A)))
761− (group 281:27
758+ (body 278:3
762− (call 281:28 (wing 281:28 snip) (wing 281:33 rest))))))))))))
759+ (cast 278:3
763− (value 283:1 rear
760+ (apply 278:6 list (tvar 278:12 A))
764− (gate 283:9
761+ (body 279:5
765− (face 283:12 xs
762+ (branch 279:5
766− (apply 283:15 list (tvar 283:21 A)))
763+ (wing 279:8 xs)
767− (body 284:3
764+ (arm 280:7 (lit 280:7 ~) (lit 280:9 ~))
768− (branch 284:3
765+ (arm 281:7
769− (wing 284:6 xs)
766+ (cell 281:7 (bind 281:8 item) (bind 281:13 rest))
770− (arm 285:5 (lit 285:5 ~) (crash 285:7))
767+ (body 282:9
771− (arm 286:5
768+ (branch 282:9
772− (cell 286:5 (bind 286:6 item) (bind 286:11 rest))
769+ (wing 282:12 rest)
773− (body 287:7
770+ (arm 283:11 (lit 283:11 ~) (lit 283:13 ~))
774− (branch 287:7
771+ (arm 284:11
775− (wing 287:10 rest)
772+ (cell 284:11 (bind 284:12 next) (bind 284:17 more))
776− (arm 288:9 (lit 288:9 ~) (wing 288:11 item))
773+ (tuple 284:23
777− (arm 289:9
774+ (wing 284:24 item)
778− (cell 289:9 (bind 289:10 next) (bind 289:15 more))
775+ (group 284:29
779− (group 289:21
776+ (call 284:30 (wing 284:30 snip) (wing 284:35 rest))))))))))))))
780− (call 289:22 (wing 289:22 rear) (wing 289:27 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
40++ lure: cast mold is not supported by partial inference
40++ lure: cast mold is not supported by partial inference
41++ snoc: sample mold is not supported by partial inference
41++ snoc: sample mold is not supported by partial inference
42++ flop: sample mold is not supported by partial inference
42++ 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
44++ bind: unit construction needs the standard prelude in partial inference
44++ bind: unit construction needs the standard prelude in partial inference
45++ biff: $-([(unit A) $-(A (unit B))] (unit B))
45++ biff: $-([(unit A) $-(A (unit B))] (unit B))
46++ both: unit construction needs the standard prelude in partial inference
46++ 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
20subjects and recursive references through local, imported and transitive
20subjects and recursive references through local, imported and transitive
21cores, 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,
21cores, 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,
22collection provenance, unsupported gates and recursive sample provenance.
22collection 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.
23The synthetic hold in +bad-branch-fixture checks that a failed Hoon branch expansion returns
29The synthetic hold in +bad-branch-fixture checks that a failed Hoon branch expansion returns
24an error. `tlon-epic.txt`, `tlon-presence.txt` and `tlon-docs.txt` are the
30an error. `tlon-epic.txt`, `tlon-presence.txt` and `tlon-docs.txt` are the
25unmodified `desk/sur/epic.hoon`, `desk/sur/presence.hoon` and
31unmodified `desk/sur/epic.hoon`, `desk/sur/presence.hoon` and
tests/importer/small.txt+5
@@ -101,4 +101,9 @@
101+$ tag-fuel-9 [tag-fuel-8 tag-fuel-8]
101+$ tag-fuel-9 [tag-fuel-8 tag-fuel-8]
102+$ tag-fuel-10 [tag-fuel-9 tag-fuel-9]
102+$ tag-fuel-10 [tag-fuel-9 tag-fuel-9]
103+$ tag-fuel-11 [tag-fuel-10 tag-fuel-10]
103+$ 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])
104--
109--
tests/importer/tree.txt+10
@@ -17,6 +17,15 @@ mixed-mop: [a=(mop @ud @t) b=(list @ud)]
17nested-static-mop: [a=(mop @ud @t) b=(map @ud (jar @t @ud))]
17nested-static-mop: [a=(mop @ud @t) b=(map @ud (jar @t @ud))]
18collection-siblings: [a=(mop @ud @t) [b=(set @ud) [c=(qeu @t) [d=(unit @ud) e=(jug @ud @t)]]]]
18collection-siblings: [a=(mop @ud @t) [b=(set @ud) [c=(qeu @t) [d=(unit @ud) e=(jug @ud @t)]]]]
19dynamic-sibling-mop: error: a nested Hoon mop needs source-aware import
19dynamic-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
20mark-record: [id=@ud text=@t]
29mark-record: [id=@ud text=@t]
21mark-recursive: (union [value=@ud next=chain.small] @n:0)
30mark-recursive: (union [value=@ud next=chain.small] @n:0)
22mark-gate: error: cores and gates cannot be imported
31mark-gate: error: cores and gates cannot be imported
@@ -46,6 +55,7 @@ float: error: signed and float auras cannot be imported
46gate: error: cores and gates cannot be imported
55gate: error: cores and gates cannot be imported
47vase: error: vases cannot be imported
56vase: error: vases cannot be imported
48failed-branch: error: a Hoon $^ union needs a source-level disjointness check
57failed-branch: error: a Hoon $^ union needs a source-level disjointness check
58+debug-spec: valid wrapper; duplicate and malformed rejected
49debug-union: (union [add text=@t] [remove id=@ud])
59debug-union: (union [add text=@t] [remove id=@ud])
50debug-union-overlap: error: Hoon union disjointness could not be verified
60debug-union-overlap: error: Hoon union disjointness could not be verified
51debug-nested-cell: [id=@ud value=(union [a=@ud b=@t] @ud)]
61debug-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 @@
1743/* mod-495-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1743/* mod-495-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1744/* typ-495 %txt /tests/golden/types-prelude-list-functions/types/txt
1744/* typ-495 %txt /tests/golden/types-prelude-list-functions/types/txt
1745/* mtre-495 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1745/* mtre-495 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1746−/* src-496 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1746+/* src-496 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1747−/* tok-496 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1747+/* tok-496 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1748−/* tre-496 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1748+/* tre-496 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1749−/* typ-496 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1749+/* typ-496 %txt /tests/golden/types-prelude-list-helpers/types/txt
1750−/* src-497 %jibb /tests/golden/types-record-bound-variable/source/jibb
1750+/* src-497 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1751−/* tok-497 %txt /tests/golden/types-record-bound-variable/tokens/txt
1751+/* tok-497 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1752−/* tre-497 %txt /tests/golden/types-record-bound-variable/tree/txt
1752+/* tre-497 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1753−/* typ-497 %txt /tests/golden/types-record-bound-variable/types/txt
1753+/* typ-497 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1754−/* src-498 %jibb /tests/golden/types-record-cast-context/source/jibb
1754+/* src-498 %jibb /tests/golden/types-record-bound-variable/source/jibb
1755−/* tok-498 %txt /tests/golden/types-record-cast-context/tokens/txt
1755+/* tok-498 %txt /tests/golden/types-record-bound-variable/tokens/txt
1756−/* tre-498 %txt /tests/golden/types-record-cast-context/tree/txt
1756+/* tre-498 %txt /tests/golden/types-record-bound-variable/tree/txt
1757−/* typ-498 %txt /tests/golden/types-record-cast-context/types/txt
1757+/* typ-498 %txt /tests/golden/types-record-bound-variable/types/txt
1758−/* src-499 %jibb /tests/golden/types-record-change/source/jibb
1758+/* src-499 %jibb /tests/golden/types-record-cast-context/source/jibb
1759−/* tok-499 %txt /tests/golden/types-record-change/tokens/txt
1759+/* tok-499 %txt /tests/golden/types-record-cast-context/tokens/txt
1760−/* tre-499 %txt /tests/golden/types-record-change/tree/txt
1760+/* tre-499 %txt /tests/golden/types-record-cast-context/tree/txt
1761−/* typ-499 %txt /tests/golden/types-record-change/types/txt
1761+/* typ-499 %txt /tests/golden/types-record-cast-context/types/txt
1762−/* src-500 %jibb /tests/golden/types-record-change-generic/source/jibb
1762+/* src-500 %jibb /tests/golden/types-record-change/source/jibb
1763−/* tok-500 %txt /tests/golden/types-record-change-generic/tokens/txt
1763+/* tok-500 %txt /tests/golden/types-record-change/tokens/txt
1764−/* tre-500 %txt /tests/golden/types-record-change-generic/tree/txt
1764+/* tre-500 %txt /tests/golden/types-record-change/tree/txt
1765−/* typ-500 %txt /tests/golden/types-record-change-generic/types/txt
1765+/* typ-500 %txt /tests/golden/types-record-change/types/txt
1766−/* src-501 %jibb /tests/golden/types-record-faces/source/jibb
1766+/* src-501 %jibb /tests/golden/types-record-change-generic/source/jibb
1767−/* tok-501 %txt /tests/golden/types-record-faces/tokens/txt
1767+/* tok-501 %txt /tests/golden/types-record-change-generic/tokens/txt
1768−/* tre-501 %txt /tests/golden/types-record-faces/tree/txt
1768+/* tre-501 %txt /tests/golden/types-record-change-generic/tree/txt
1769−/* typ-501 %txt /tests/golden/types-record-faces/types/txt
1769+/* typ-501 %txt /tests/golden/types-record-change-generic/types/txt
1770−/* src-502 %jibb /tests/golden/types-record-import/source/jibb
1770+/* src-502 %jibb /tests/golden/types-record-faces/source/jibb
1771−/* tok-502 %txt /tests/golden/types-record-import/tokens/txt
1771+/* tok-502 %txt /tests/golden/types-record-faces/tokens/txt
1772−/* tre-502 %txt /tests/golden/types-record-import/tree/txt
1772+/* tre-502 %txt /tests/golden/types-record-faces/tree/txt
1773−/* mod-502-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1773+/* typ-502 %txt /tests/golden/types-record-faces/types/txt
1774−/* typ-502 %txt /tests/golden/types-record-import/types/txt
1774+/* src-503 %jibb /tests/golden/types-record-import/source/jibb
1775−/* mtre-502 %txt /tests/golden/types-record-import/module-trees/txt
1775+/* tok-503 %txt /tests/golden/types-record-import/tokens/txt
1776−/* src-503 %jibb /tests/golden/types-record-local-scheme/source/jibb
1776+/* tre-503 %txt /tests/golden/types-record-import/tree/txt
1777−/* tok-503 %txt /tests/golden/types-record-local-scheme/tokens/txt
1777+/* mod-503-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1778−/* tre-503 %txt /tests/golden/types-record-local-scheme/tree/txt
1778+/* typ-503 %txt /tests/golden/types-record-import/types/txt
1779−/* typ-503 %txt /tests/golden/types-record-local-scheme/types/txt
1779+/* mtre-503 %txt /tests/golden/types-record-import/module-trees/txt
1780−/* src-504 %jibb /tests/golden/types-record-nested/source/jibb
1780+/* src-504 %jibb /tests/golden/types-record-local-scheme/source/jibb
1781−/* tok-504 %txt /tests/golden/types-record-nested/tokens/txt
1781+/* tok-504 %txt /tests/golden/types-record-local-scheme/tokens/txt
1782−/* tre-504 %txt /tests/golden/types-record-nested/tree/txt
1782+/* tre-504 %txt /tests/golden/types-record-local-scheme/tree/txt
1783−/* typ-504 %txt /tests/golden/types-record-nested/types/txt
1783+/* typ-504 %txt /tests/golden/types-record-local-scheme/types/txt
1784−/* src-505 %jibb /tests/golden/types-record-to-tuple/source/jibb
1784+/* src-505 %jibb /tests/golden/types-record-nested/source/jibb
1785−/* tok-505 %txt /tests/golden/types-record-to-tuple/tokens/txt
1785+/* tok-505 %txt /tests/golden/types-record-nested/tokens/txt
1786−/* tre-505 %txt /tests/golden/types-record-to-tuple/tree/txt
1786+/* tre-505 %txt /tests/golden/types-record-nested/tree/txt
1787−/* typ-505 %txt /tests/golden/types-record-to-tuple/types/txt
1787+/* typ-505 %txt /tests/golden/types-record-nested/types/txt
1788−/* src-506 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1788+/* src-506 %jibb /tests/golden/types-record-to-tuple/source/jibb
1789−/* tok-506 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1789+/* tok-506 %txt /tests/golden/types-record-to-tuple/tokens/txt
1790−/* tre-506 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1790+/* tre-506 %txt /tests/golden/types-record-to-tuple/tree/txt
1791−/* typ-506 %txt /tests/golden/types-recursion-scc-failures/types/txt
1791+/* typ-506 %txt /tests/golden/types-record-to-tuple/types/txt
1792−/* src-507 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1792+/* src-507 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1793−/* tok-507 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1793+/* tok-507 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1794−/* tre-507 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1794+/* tre-507 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1795−/* typ-507 %txt /tests/golden/types-recursion-scc-groups/types/txt
1795+/* typ-507 %txt /tests/golden/types-recursion-scc-failures/types/txt
1796−/* src-508 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1796+/* src-508 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1797−/* tok-508 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1797+/* tok-508 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1798−/* tre-508 %txt /tests/golden/types-recursion-scc-import/tree/txt
1798+/* tre-508 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1799−/* mod-508-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1799+/* typ-508 %txt /tests/golden/types-recursion-scc-groups/types/txt
1800−/* typ-508 %txt /tests/golden/types-recursion-scc-import/types/txt
1800+/* src-509 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1801−/* mtre-508 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1801+/* tok-509 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1802−/* src-509 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1802+/* tre-509 %txt /tests/golden/types-recursion-scc-import/tree/txt
1803−/* tok-509 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1803+/* mod-509-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1804−/* tre-509 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1804+/* typ-509 %txt /tests/golden/types-recursion-scc-import/types/txt
1805−/* mod-509-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1805+/* mtre-509 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1806−/* typ-509 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1806+/* src-510 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1807−/* mtre-509 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1807+/* tok-510 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1808−/* src-510 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1808+/* tre-510 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1809−/* tok-510 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1809+/* mod-510-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1810−/* tre-510 %txt /tests/golden/types-recursion-scc-local/tree/txt
1810+/* typ-510 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1811−/* typ-510 %txt /tests/golden/types-recursion-scc-local/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-order/source/jibb
1812+/* src-511 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1813−/* tok-511 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1813+/* tok-511 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1814−/* tre-511 %txt /tests/golden/types-recursion-scc-order/tree/txt
1814+/* tre-511 %txt /tests/golden/types-recursion-scc-local/tree/txt
1815−/* typ-511 %txt /tests/golden/types-recursion-scc-order/types/txt
1815+/* typ-511 %txt /tests/golden/types-recursion-scc-local/types/txt
1816−/* src-512 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1816+/* src-512 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1817−/* tok-512 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1817+/* tok-512 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1818−/* tre-512 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1818+/* tre-512 %txt /tests/golden/types-recursion-scc-order/tree/txt
1819−/* typ-512 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1819+/* typ-512 %txt /tests/golden/types-recursion-scc-order/types/txt
1820−/* src-513 %jibb /tests/golden/types-recursive-branch/source/jibb
1820+/* src-513 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1821−/* tok-513 %txt /tests/golden/types-recursive-branch/tokens/txt
1821+/* tok-513 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1822−/* tre-513 %txt /tests/golden/types-recursive-branch/tree/txt
1822+/* tre-513 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1823−/* typ-513 %txt /tests/golden/types-recursive-branch/types/txt
1823+/* typ-513 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1824−/* src-514 %jibb /tests/golden/types-recursive-gate/source/jibb
1824+/* src-514 %jibb /tests/golden/types-recursive-branch/source/jibb
1825−/* tok-514 %txt /tests/golden/types-recursive-gate/tokens/txt
1825+/* tok-514 %txt /tests/golden/types-recursive-branch/tokens/txt
1826−/* tre-514 %txt /tests/golden/types-recursive-gate/tree/txt
1826+/* tre-514 %txt /tests/golden/types-recursive-branch/tree/txt
1827−/* typ-514 %txt /tests/golden/types-recursive-gate/types/txt
1827+/* typ-514 %txt /tests/golden/types-recursive-branch/types/txt
1828−/* src-515 %jibb /tests/golden/types-recursive-sample/source/jibb
1828+/* src-515 %jibb /tests/golden/types-recursive-gate/source/jibb
1829−/* tok-515 %txt /tests/golden/types-recursive-sample/tokens/txt
1829+/* tok-515 %txt /tests/golden/types-recursive-gate/tokens/txt
1830−/* tre-515 %txt /tests/golden/types-recursive-sample/tree/txt
1830+/* tre-515 %txt /tests/golden/types-recursive-gate/tree/txt
1831−/* typ-515 %txt /tests/golden/types-recursive-sample/types/txt
1831+/* typ-515 %txt /tests/golden/types-recursive-gate/types/txt
1832−/* src-516 %jibb /tests/golden/types-scope-library-poke/source/jibb
1832+/* src-516 %jibb /tests/golden/types-recursive-sample/source/jibb
1833−/* tok-516 %txt /tests/golden/types-scope-library-poke/tokens/txt
1833+/* tok-516 %txt /tests/golden/types-recursive-sample/tokens/txt
1834−/* tre-516 %txt /tests/golden/types-scope-library-poke/tree/txt
1834+/* tre-516 %txt /tests/golden/types-recursive-sample/tree/txt
1835−/* typ-516 %txt /tests/golden/types-scope-library-poke/types/txt
1835+/* typ-516 %txt /tests/golden/types-recursive-sample/types/txt
1836−/* src-517 %jibb /tests/golden/types-scope-root-api/source/jibb
1836+/* src-517 %jibb /tests/golden/types-scope-library-poke/source/jibb
1837−/* tok-517 %txt /tests/golden/types-scope-root-api/tokens/txt
1837+/* tok-517 %txt /tests/golden/types-scope-library-poke/tokens/txt
1838−/* tre-517 %txt /tests/golden/types-scope-root-api/tree/txt
1838+/* tre-517 %txt /tests/golden/types-scope-library-poke/tree/txt
1839−/* typ-517 %txt /tests/golden/types-scope-root-api/types/txt
1839+/* typ-517 %txt /tests/golden/types-scope-library-poke/types/txt
1840−/* src-518 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
1840+/* src-518 %jibb /tests/golden/types-scope-root-api/source/jibb
1841−/* tok-518 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
1841+/* tok-518 %txt /tests/golden/types-scope-root-api/tokens/txt
1842−/* tre-518 %txt /tests/golden/types-scope-store-duplicate/tree/txt
1842+/* tre-518 %txt /tests/golden/types-scope-root-api/tree/txt
1843−/* typ-518 %txt /tests/golden/types-scope-store-duplicate/types/txt
1843+/* typ-518 %txt /tests/golden/types-scope-root-api/types/txt
1844−/* src-519 %jibb /tests/golden/types-scope-store-shadow/source/jibb
1844+/* src-519 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
1845−/* tok-519 %txt /tests/golden/types-scope-store-shadow/tokens/txt
1845+/* tok-519 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
1846−/* tre-519 %txt /tests/golden/types-scope-store-shadow/tree/txt
1846+/* tre-519 %txt /tests/golden/types-scope-store-duplicate/tree/txt
1847−/* typ-519 %txt /tests/golden/types-scope-store-shadow/types/txt
1847+/* typ-519 %txt /tests/golden/types-scope-store-duplicate/types/txt
1848−/* src-520 %jibb /tests/golden/types-string-interpolation/source/jibb
1848+/* src-520 %jibb /tests/golden/types-scope-store-shadow/source/jibb
1849−/* tok-520 %txt /tests/golden/types-string-interpolation/tokens/txt
1849+/* tok-520 %txt /tests/golden/types-scope-store-shadow/tokens/txt
1850−/* tre-520 %txt /tests/golden/types-string-interpolation/tree/txt
1850+/* tre-520 %txt /tests/golden/types-scope-store-shadow/tree/txt
1851−/* typ-520 %txt /tests/golden/types-string-interpolation/types/txt
1851+/* typ-520 %txt /tests/golden/types-scope-store-shadow/types/txt
1852−/* src-521 %jibb /tests/golden/types-tuple-context/source/jibb
1852+/* src-521 %jibb /tests/golden/types-string-interpolation/source/jibb
1853−/* tok-521 %txt /tests/golden/types-tuple-context/tokens/txt
1853+/* tok-521 %txt /tests/golden/types-string-interpolation/tokens/txt
1854−/* tre-521 %txt /tests/golden/types-tuple-context/tree/txt
1854+/* tre-521 %txt /tests/golden/types-string-interpolation/tree/txt
1855−/* typ-521 %txt /tests/golden/types-tuple-context/types/txt
1855+/* typ-521 %txt /tests/golden/types-string-interpolation/types/txt
1856−/* src-522 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1856+/* src-522 %jibb /tests/golden/types-tuple-context/source/jibb
1857−/* tok-522 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1857+/* tok-522 %txt /tests/golden/types-tuple-context/tokens/txt
1858−/* tre-522 %txt /tests/golden/types-tuple-context-nested/tree/txt
1858+/* tre-522 %txt /tests/golden/types-tuple-context/tree/txt
1859−/* typ-522 %txt /tests/golden/types-tuple-context-nested/types/txt
1859+/* typ-522 %txt /tests/golden/types-tuple-context/types/txt
1860−/* src-523 %jibb /tests/golden/types-union-alias/source/jibb
1860+/* src-523 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1861−/* tok-523 %txt /tests/golden/types-union-alias/tokens/txt
1861+/* tok-523 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1862−/* tre-523 %txt /tests/golden/types-union-alias/tree/txt
1862+/* tre-523 %txt /tests/golden/types-tuple-context-nested/tree/txt
1863−/* typ-523 %txt /tests/golden/types-union-alias/types/txt
1863+/* typ-523 %txt /tests/golden/types-tuple-context-nested/types/txt
1864−/* src-524 %jibb /tests/golden/types-union-branch-context/source/jibb
1864+/* src-524 %jibb /tests/golden/types-union-alias/source/jibb
1865−/* tok-524 %txt /tests/golden/types-union-branch-context/tokens/txt
1865+/* tok-524 %txt /tests/golden/types-union-alias/tokens/txt
1866−/* tre-524 %txt /tests/golden/types-union-branch-context/tree/txt
1866+/* tre-524 %txt /tests/golden/types-union-alias/tree/txt
1867−/* typ-524 %txt /tests/golden/types-union-branch-context/types/txt
1867+/* typ-524 %txt /tests/golden/types-union-alias/types/txt
1868−/* src-525 %jibb /tests/golden/types-union-branch-pending/source/jibb
1868+/* src-525 %jibb /tests/golden/types-union-branch-context/source/jibb
1869−/* tok-525 %txt /tests/golden/types-union-branch-pending/tokens/txt
1869+/* tok-525 %txt /tests/golden/types-union-branch-context/tokens/txt
1870−/* tre-525 %txt /tests/golden/types-union-branch-pending/tree/txt
1870+/* tre-525 %txt /tests/golden/types-union-branch-context/tree/txt
1871−/* typ-525 %txt /tests/golden/types-union-branch-pending/types/txt
1871+/* typ-525 %txt /tests/golden/types-union-branch-context/types/txt
1872−/* src-526 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1872+/* src-526 %jibb /tests/golden/types-union-branch-pending/source/jibb
1873−/* tok-526 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1873+/* tok-526 %txt /tests/golden/types-union-branch-pending/tokens/txt
1874−/* tre-526 %txt /tests/golden/types-union-constructor-shape/tree/txt
1874+/* tre-526 %txt /tests/golden/types-union-branch-pending/tree/txt
1875−/* typ-526 %txt /tests/golden/types-union-constructor-shape/types/txt
1875+/* typ-526 %txt /tests/golden/types-union-branch-pending/types/txt
1876−/* src-527 %jibb /tests/golden/types-union-context-flow/source/jibb
1876+/* src-527 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1877−/* tok-527 %txt /tests/golden/types-union-context-flow/tokens/txt
1877+/* tok-527 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1878−/* tre-527 %txt /tests/golden/types-union-context-flow/tree/txt
1878+/* tre-527 %txt /tests/golden/types-union-constructor-shape/tree/txt
1879−/* typ-527 %txt /tests/golden/types-union-context-flow/types/txt
1879+/* typ-527 %txt /tests/golden/types-union-constructor-shape/types/txt
1880−/* src-528 %jibb /tests/golden/types-union-finite/source/jibb
1880+/* src-528 %jibb /tests/golden/types-union-context-flow/source/jibb
1881−/* tok-528 %txt /tests/golden/types-union-finite/tokens/txt
1881+/* tok-528 %txt /tests/golden/types-union-context-flow/tokens/txt
1882−/* tre-528 %txt /tests/golden/types-union-finite/tree/txt
1882+/* tre-528 %txt /tests/golden/types-union-context-flow/tree/txt
1883−/* typ-528 %txt /tests/golden/types-union-finite/types/txt
1883+/* typ-528 %txt /tests/golden/types-union-context-flow/types/txt
1884−/* src-529 %jibb /tests/golden/types-union-finite-context/source/jibb
1884+/* src-529 %jibb /tests/golden/types-union-finite/source/jibb
1885−/* tok-529 %txt /tests/golden/types-union-finite-context/tokens/txt
1885+/* tok-529 %txt /tests/golden/types-union-finite/tokens/txt
1886−/* tre-529 %txt /tests/golden/types-union-finite-context/tree/txt
1886+/* tre-529 %txt /tests/golden/types-union-finite/tree/txt
1887−/* typ-529 %txt /tests/golden/types-union-finite-context/types/txt
1887+/* typ-529 %txt /tests/golden/types-union-finite/types/txt
1888−/* src-530 %jibb /tests/golden/types-union-finite-generic/source/jibb
1888+/* src-530 %jibb /tests/golden/types-union-finite-context/source/jibb
1889−/* tok-530 %txt /tests/golden/types-union-finite-generic/tokens/txt
1889+/* tok-530 %txt /tests/golden/types-union-finite-context/tokens/txt
1890−/* tre-530 %txt /tests/golden/types-union-finite-generic/tree/txt
1890+/* tre-530 %txt /tests/golden/types-union-finite-context/tree/txt
1891−/* typ-530 %txt /tests/golden/types-union-finite-generic/types/txt
1891+/* typ-530 %txt /tests/golden/types-union-finite-context/types/txt
1892−/* src-531 %jibb /tests/golden/types-union-finite-limit/source/jibb
1892+/* src-531 %jibb /tests/golden/types-union-finite-generic/source/jibb
1893−/* tok-531 %txt /tests/golden/types-union-finite-limit/tokens/txt
1893+/* tok-531 %txt /tests/golden/types-union-finite-generic/tokens/txt
1894−/* tre-531 %txt /tests/golden/types-union-finite-limit/tree/txt
1894+/* tre-531 %txt /tests/golden/types-union-finite-generic/tree/txt
1895−/* typ-531 %txt /tests/golden/types-union-finite-limit/types/txt
1895+/* typ-531 %txt /tests/golden/types-union-finite-generic/types/txt
1896−/* src-532 %jibb /tests/golden/types-union-import/source/jibb
1896+/* src-532 %jibb /tests/golden/types-union-finite-limit/source/jibb
1897−/* tok-532 %txt /tests/golden/types-union-import/tokens/txt
1897+/* tok-532 %txt /tests/golden/types-union-finite-limit/tokens/txt
1898−/* tre-532 %txt /tests/golden/types-union-import/tree/txt
1898+/* tre-532 %txt /tests/golden/types-union-finite-limit/tree/txt
1899−/* mod-532-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1899+/* typ-532 %txt /tests/golden/types-union-finite-limit/types/txt
1900−/* typ-532 %txt /tests/golden/types-union-import/types/txt
1900+/* src-533 %jibb /tests/golden/types-union-import/source/jibb
1901−/* mtre-532 %txt /tests/golden/types-union-import/module-trees/txt
1901+/* tok-533 %txt /tests/golden/types-union-import/tokens/txt
1902−/* src-533 %jibb /tests/golden/types-union-local-pending/source/jibb
1902+/* tre-533 %txt /tests/golden/types-union-import/tree/txt
1903−/* tok-533 %txt /tests/golden/types-union-local-pending/tokens/txt
1903+/* mod-533-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1904−/* tre-533 %txt /tests/golden/types-union-local-pending/tree/txt
1904+/* typ-533 %txt /tests/golden/types-union-import/types/txt
1905−/* typ-533 %txt /tests/golden/types-union-local-pending/types/txt
1905+/* mtre-533 %txt /tests/golden/types-union-import/module-trees/txt
1906−/* src-534 %jibb /tests/golden/types-union-overlap/source/jibb
1906+/* src-534 %jibb /tests/golden/types-union-local-pending/source/jibb
1907−/* tok-534 %txt /tests/golden/types-union-overlap/tokens/txt
1907+/* tok-534 %txt /tests/golden/types-union-local-pending/tokens/txt
1908−/* tre-534 %txt /tests/golden/types-union-overlap/tree/txt
1908+/* tre-534 %txt /tests/golden/types-union-local-pending/tree/txt
1909−/* typ-534 %txt /tests/golden/types-union-overlap/types/txt
1909+/* typ-534 %txt /tests/golden/types-union-local-pending/types/txt
1910−/* src-535 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1910+/* src-535 %jibb /tests/golden/types-union-overlap/source/jibb
1911−/* tok-535 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1911+/* tok-535 %txt /tests/golden/types-union-overlap/tokens/txt
1912−/* tre-535 %txt /tests/golden/types-union-overlap-nested/tree/txt
1912+/* tre-535 %txt /tests/golden/types-union-overlap/tree/txt
1913−/* typ-535 %txt /tests/golden/types-union-overlap-nested/types/txt
1913+/* typ-535 %txt /tests/golden/types-union-overlap/types/txt
1914−/* src-536 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1914+/* src-536 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1915−/* tok-536 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1915+/* tok-536 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1916−/* tre-536 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1916+/* tre-536 %txt /tests/golden/types-union-overlap-nested/tree/txt
1917−/* typ-536 %txt /tests/golden/types-union-pattern-result-context/types/txt
1917+/* typ-536 %txt /tests/golden/types-union-overlap-nested/types/txt
1918−/* src-537 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1918+/* src-537 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1919−/* tok-537 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1919+/* tok-537 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1920−/* tre-537 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1920+/* tre-537 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1921−/* typ-537 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1921+/* typ-537 %txt /tests/golden/types-union-pattern-result-context/types/txt
1922−/* src-538 %jibb /tests/golden/types-union-patterns/source/jibb
1922+/* src-538 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1923−/* tok-538 %txt /tests/golden/types-union-patterns/tokens/txt
1923+/* tok-538 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1924−/* tre-538 %txt /tests/golden/types-union-patterns/tree/txt
1924+/* tre-538 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1925−/* typ-538 %txt /tests/golden/types-union-patterns/types/txt
1925+/* typ-538 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1926−/* src-539 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1926+/* src-539 %jibb /tests/golden/types-union-patterns/source/jibb
1927−/* tok-539 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1927+/* tok-539 %txt /tests/golden/types-union-patterns/tokens/txt
1928−/* tre-539 %txt /tests/golden/types-union-patterns-generic/tree/txt
1928+/* tre-539 %txt /tests/golden/types-union-patterns/tree/txt
1929−/* typ-539 %txt /tests/golden/types-union-patterns-generic/types/txt
1929+/* typ-539 %txt /tests/golden/types-union-patterns/types/txt
1930−/* src-540 %jibb /tests/golden/types-union-patterns-import/source/jibb
1930+/* src-540 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1931−/* tok-540 %txt /tests/golden/types-union-patterns-import/tokens/txt
1931+/* tok-540 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1932−/* tre-540 %txt /tests/golden/types-union-patterns-import/tree/txt
1932+/* tre-540 %txt /tests/golden/types-union-patterns-generic/tree/txt
1933−/* mod-540-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1933+/* typ-540 %txt /tests/golden/types-union-patterns-generic/types/txt
1934−/* typ-540 %txt /tests/golden/types-union-patterns-import/types/txt
1934+/* src-541 %jibb /tests/golden/types-union-patterns-import/source/jibb
1935−/* mtre-540 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1935+/* tok-541 %txt /tests/golden/types-union-patterns-import/tokens/txt
1936−/* src-541 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1936+/* tre-541 %txt /tests/golden/types-union-patterns-import/tree/txt
1937−/* tok-541 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1937+/* mod-541-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1938−/* tre-541 %txt /tests/golden/types-union-phantom-generic/tree/txt
1938+/* typ-541 %txt /tests/golden/types-union-patterns-import/types/txt
1939−/* typ-541 %txt /tests/golden/types-union-phantom-generic/types/txt
1939+/* mtre-541 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1940−/* src-542 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1940+/* src-542 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1941−/* tok-542 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1941+/* tok-542 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1942−/* tre-542 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1942+/* tre-542 %txt /tests/golden/types-union-phantom-generic/tree/txt
1943−/* mod-542-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1943+/* typ-542 %txt /tests/golden/types-union-phantom-generic/types/txt
1944−/* typ-542 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1944+/* src-543 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1945−/* mtre-542 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1945+/* tok-543 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1946−/* src-543 %jibb /tests/golden/types-union-print-distinct/source/jibb
1946+/* tre-543 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1947−/* tok-543 %txt /tests/golden/types-union-print-distinct/tokens/txt
1947+/* mod-543-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1948−/* tre-543 %txt /tests/golden/types-union-print-distinct/tree/txt
1948+/* typ-543 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1949−/* mod-543-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1949+/* mtre-543 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1950−/* mod-543-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1950+/* src-544 %jibb /tests/golden/types-union-print-distinct/source/jibb
1951−/* mod-543-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1951+/* tok-544 %txt /tests/golden/types-union-print-distinct/tokens/txt
1952−/* typ-543 %txt /tests/golden/types-union-print-distinct/types/txt
1952+/* tre-544 %txt /tests/golden/types-union-print-distinct/tree/txt
1953−/* mtre-543 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1953+/* mod-544-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1954−/* src-544 %jibb /tests/golden/types-union-print-escape/source/jibb
1954+/* mod-544-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1955−/* tok-544 %txt /tests/golden/types-union-print-escape/tokens/txt
1955+/* mod-544-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1956−/* tre-544 %txt /tests/golden/types-union-print-escape/tree/txt
1956+/* typ-544 %txt /tests/golden/types-union-print-distinct/types/txt
1957−/* typ-544 %txt /tests/golden/types-union-print-escape/types/txt
1957+/* mtre-544 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1958−/* src-545 %jibb /tests/golden/types-union-print-local/source/jibb
1958+/* src-545 %jibb /tests/golden/types-union-print-escape/source/jibb
1959−/* tok-545 %txt /tests/golden/types-union-print-local/tokens/txt
1959+/* tok-545 %txt /tests/golden/types-union-print-escape/tokens/txt
1960−/* tre-545 %txt /tests/golden/types-union-print-local/tree/txt
1960+/* tre-545 %txt /tests/golden/types-union-print-escape/tree/txt
1961−/* typ-545 %txt /tests/golden/types-union-print-local/types/txt
1961+/* typ-545 %txt /tests/golden/types-union-print-escape/types/txt
1962−/* src-546 %jibb /tests/golden/types-union-print-nested/source/jibb
1962+/* src-546 %jibb /tests/golden/types-union-print-local/source/jibb
1963−/* tok-546 %txt /tests/golden/types-union-print-nested/tokens/txt
1963+/* tok-546 %txt /tests/golden/types-union-print-local/tokens/txt
1964−/* tre-546 %txt /tests/golden/types-union-print-nested/tree/txt
1964+/* tre-546 %txt /tests/golden/types-union-print-local/tree/txt
1965−/* typ-546 %txt /tests/golden/types-union-print-nested/types/txt
1965+/* typ-546 %txt /tests/golden/types-union-print-local/types/txt
1966−/* src-547 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1966+/* src-547 %jibb /tests/golden/types-union-print-nested/source/jibb
1967−/* tok-547 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1967+/* tok-547 %txt /tests/golden/types-union-print-nested/tokens/txt
1968−/* tre-547 %txt /tests/golden/types-union-print-same-origin/tree/txt
1968+/* tre-547 %txt /tests/golden/types-union-print-nested/tree/txt
1969−/* mod-547-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1969+/* typ-547 %txt /tests/golden/types-union-print-nested/types/txt
1970−/* typ-547 %txt /tests/golden/types-union-print-same-origin/types/txt
1970+/* src-548 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1971−/* mtre-547 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1971+/* tok-548 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1972−/* src-548 %jibb /tests/golden/types-union-print-transitive/source/jibb
1972+/* tre-548 %txt /tests/golden/types-union-print-same-origin/tree/txt
1973−/* tok-548 %txt /tests/golden/types-union-print-transitive/tokens/txt
1973+/* mod-548-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1974−/* tre-548 %txt /tests/golden/types-union-print-transitive/tree/txt
1974+/* typ-548 %txt /tests/golden/types-union-print-same-origin/types/txt
1975−/* mod-548-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1975+/* mtre-548 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1976−/* mod-548-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1976+/* src-549 %jibb /tests/golden/types-union-print-transitive/source/jibb
1977−/* typ-548 %txt /tests/golden/types-union-print-transitive/types/txt
1977+/* tok-549 %txt /tests/golden/types-union-print-transitive/tokens/txt
1978−/* mtre-548 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1978+/* tre-549 %txt /tests/golden/types-union-print-transitive/tree/txt
1979−/* src-549 %jibb /tests/golden/types-union-singleton/source/jibb
1979+/* mod-549-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1980−/* tok-549 %txt /tests/golden/types-union-singleton/tokens/txt
1980+/* mod-549-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1981−/* tre-549 %txt /tests/golden/types-union-singleton/tree/txt
1981+/* typ-549 %txt /tests/golden/types-union-print-transitive/types/txt
1982−/* typ-549 %txt /tests/golden/types-union-singleton/types/txt
1982+/* mtre-549 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1983−/* src-550 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1983+/* src-550 %jibb /tests/golden/types-union-singleton/source/jibb
1984−/* tok-550 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1984+/* tok-550 %txt /tests/golden/types-union-singleton/tokens/txt
1985−/* tre-550 %txt /tests/golden/types-union-tag-atoms/tree/txt
1985+/* tre-550 %txt /tests/golden/types-union-singleton/tree/txt
1986−/* typ-550 %txt /tests/golden/types-union-tag-atoms/types/txt
1986+/* typ-550 %txt /tests/golden/types-union-singleton/types/txt
1987−/* src-551 %jibb /tests/golden/types-union-tags/source/jibb
1987+/* src-551 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1988−/* tok-551 %txt /tests/golden/types-union-tags/tokens/txt
1988+/* tok-551 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1989−/* tre-551 %txt /tests/golden/types-union-tags/tree/txt
1989+/* tre-551 %txt /tests/golden/types-union-tag-atoms/tree/txt
1990−/* typ-551 %txt /tests/golden/types-union-tags/types/txt
1990+/* typ-551 %txt /tests/golden/types-union-tag-atoms/types/txt
1991−/* src-552 %jibb /tests/golden/types-union-unresolved/source/jibb
1991+/* src-552 %jibb /tests/golden/types-union-tags/source/jibb
1992−/* tok-552 %txt /tests/golden/types-union-unresolved/tokens/txt
1992+/* tok-552 %txt /tests/golden/types-union-tags/tokens/txt
1993−/* tre-552 %txt /tests/golden/types-union-unresolved/tree/txt
1993+/* tre-552 %txt /tests/golden/types-union-tags/tree/txt
1994−/* typ-552 %txt /tests/golden/types-union-unresolved/types/txt
1994+/* typ-552 %txt /tests/golden/types-union-tags/types/txt
1995−/* src-553 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1995+/* src-553 %jibb /tests/golden/types-union-unresolved/source/jibb
1996−/* tok-553 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1996+/* tok-553 %txt /tests/golden/types-union-unresolved/tokens/txt
1997−/* tre-553 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1997+/* tre-553 %txt /tests/golden/types-union-unresolved/tree/txt
1998−/* typ-553 %txt /tests/golden/types-union-unresolved-flow/types/txt
1998+/* typ-553 %txt /tests/golden/types-union-unresolved/types/txt
1999−/* src-554 %jibb /tests/golden/types-unit-construction/source/jibb
1999+/* src-554 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2000−/* tok-554 %txt /tests/golden/types-unit-construction/tokens/txt
2000+/* tok-554 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2001−/* tre-554 %txt /tests/golden/types-unit-construction/tree/txt
2001+/* tre-554 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2002−/* typ-554 %txt /tests/golden/types-unit-construction/types/txt
2002+/* typ-554 %txt /tests/golden/types-union-unresolved-flow/types/txt
2003−/* src-555 %jibb /tests/golden/types-unit-context/source/jibb
2003+/* src-555 %jibb /tests/golden/types-unit-construction/source/jibb
2004−/* tok-555 %txt /tests/golden/types-unit-context/tokens/txt
2004+/* tok-555 %txt /tests/golden/types-unit-construction/tokens/txt
2005−/* tre-555 %txt /tests/golden/types-unit-context/tree/txt
2005+/* tre-555 %txt /tests/golden/types-unit-construction/tree/txt
2006−/* typ-555 %txt /tests/golden/types-unit-context/types/txt
2006+/* typ-555 %txt /tests/golden/types-unit-construction/types/txt
2007−/* src-556 %jibb /tests/golden/types-unit-patterns/source/jibb
2007+/* src-556 %jibb /tests/golden/types-unit-context/source/jibb
2008−/* tok-556 %txt /tests/golden/types-unit-patterns/tokens/txt
2008+/* tok-556 %txt /tests/golden/types-unit-context/tokens/txt
2009−/* tre-556 %txt /tests/golden/types-unit-patterns/tree/txt
2009+/* tre-556 %txt /tests/golden/types-unit-context/tree/txt
2010−/* typ-556 %txt /tests/golden/types-unit-patterns/types/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
2011=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
2015=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
2012|%
2016|%
2013:: one arm per case
2017:: one arm per case
@@ -3002,128 +3006,130 @@
3002 (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]]))
3006 (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]]))
3003++ test-types-prelude-list-functions
3007++ test-types-prelude-list-functions
3004 (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]]))
3008 (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 ~ ~ ~))
3005++ test-types-prelude-unit-helpers
3011++ 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 ~ ~ ~))
3007++ test-types-record-bound-variable
3013++ 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))
3009++ test-types-record-cast-context
3015++ 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 ~ ~ ~))
3011++ test-types-record-change
3017++ 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 ~ ~ ~))
3013++ test-types-record-change-generic
3019++ 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 ~ ~ ~))
3015++ test-types-record-faces
3021++ 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))
3017++ test-types-record-import
3023++ 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]]))
3019++ test-types-record-local-scheme
3025++ 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))
3021++ test-types-record-nested
3027++ 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))
3023++ test-types-record-to-tuple
3029++ 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))
3025++ test-types-recursion-scc-failures
3031++ 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 ~ ~ ~))
3027++ test-types-recursion-scc-groups
3033++ 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 ~ ~ ~))
3029++ test-types-recursion-scc-import
3035++ 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]]))
3031++ test-types-recursion-scc-import-bad
3037++ 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]]))
3033++ test-types-recursion-scc-local
3039++ 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 ~ ~ ~))
3035++ test-types-recursion-scc-order
3041++ 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 ~ ~ ~))
3037++ test-types-recursion-scc-shadow
3043++ 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 ~ ~ ~))
3039++ test-types-recursive-branch
3045++ 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 ~ ~ ~))
3041++ test-types-recursive-gate
3047++ 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))
3043++ test-types-recursive-sample
3049++ 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))
3045++ test-types-scope-library-poke
3051++ 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 ~ ~ ~))
3047++ test-types-scope-root-api
3053++ 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 ~ ~ ~))
3049++ test-types-scope-store-duplicate
3055++ 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 ~ ~ ~))
3051++ test-types-scope-store-shadow
3057++ 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 ~ ~ ~))
3053++ test-types-string-interpolation
3059++ 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 ~ ~ ~))
3055++ test-types-tuple-context
3061++ 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 ~ ~ ~))
3057++ test-types-tuple-context-nested
3063++ 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 ~ ~ ~))
3059++ test-types-union-alias
3065++ 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))
3061++ test-types-union-branch-context
3067++ 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))
3063++ test-types-union-branch-pending
3069++ 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))
3065++ test-types-union-constructor-shape
3071++ 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))
3067++ test-types-union-context-flow
3073++ 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))
3069++ test-types-union-finite
3075++ 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 ~ ~ ~))
3071++ test-types-union-finite-context
3077++ 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 ~ ~ ~))
3073++ test-types-union-finite-generic
3079++ 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 ~ ~ ~))
3075++ test-types-union-finite-limit
3081++ 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 ~ ~ ~))
3077++ test-types-union-import
3083++ 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]]))
3079++ test-types-union-local-pending
3085++ 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))
3081++ test-types-union-overlap
3087++ 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))
3083++ test-types-union-overlap-nested
3089++ 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))
3085++ test-types-union-pattern-result-context
3091++ 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 ~ ~ ~))
3087++ test-types-union-pattern-result-controls
3093++ 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 ~ ~ ~))
3089++ test-types-union-patterns
3095++ 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 ~ ~ ~))
3091++ test-types-union-patterns-generic
3097++ 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 ~ ~ ~))
3093++ test-types-union-patterns-import
3099++ 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]]))
3095++ test-types-union-phantom-generic
3101++ 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))
3097++ test-types-union-print-cross-namespace
3103++ 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]]))
3099++ test-types-union-print-distinct
3105++ 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]]))
3101++ test-types-union-print-escape
3107++ 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))
3103++ test-types-union-print-local
3109++ 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))
3105++ test-types-union-print-nested
3111++ 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))
3107++ test-types-union-print-same-origin
3113++ 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]]))
3109++ test-types-union-print-transitive
3115++ 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]]))
3111++ test-types-union-singleton
3117++ 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))
3113++ test-types-union-tag-atoms
3119++ 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))
3115++ test-types-union-tags
3121++ 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))
3117++ test-types-union-unresolved
3123++ 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))
3119++ test-types-union-unresolved-flow
3125++ 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))
3121++ test-types-unit-construction
3127++ 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 ~ ~ ~))
3123++ test-types-unit-context
3129++ 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 ~ ~ ~))
3125++ test-types-unit-patterns
3131++ 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))
3127::
3133::
3128:: +check: run golden:jibb on a case and compare both outputs
3134:: +check: run golden:jibb on a case and compare both outputs
3129::
3135::
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:
168 sys.exit(1)
168 sys.exit(1)
169print('Clay mark importer golden passed')
169print('Clay mark importer golden passed')
170
170
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+
171try:
184try:
172 result = subprocess.run([str(ship), 'run', str(fixtures / 'mark-bridge.txt')],
185 result = subprocess.run([str(ship), 'run', str(fixtures / 'mark-bridge.txt')],
173 stdout=subprocess.PIPE, check=True)
186 stdout=subprocess.PIPE, check=True)
tools/importer-test+1−1
@@ -34,4 +34,4 @@ if result.stdout != expected:
34 result.stdout.decode().splitlines(keepends=True),
34 result.stdout.decode().splitlines(keepends=True),
35 fromfile='expected tree.txt', tofile='actual types'))
35 fromfile='expected tree.txt', tofile='actual types'))
36 sys.exit(1)
36 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')