on master help sign in
Expose transparent poke from internal prelude
commitc790a9f900c41fb31b6bd134ff89e2a15971cc8e authoriko <mail@iko.soy> dateSat 31 Oct 2026, 02:31 (1 day ago) parent7ff15f1
72 files changed+3440−2834
README.md+1−1 docs/compiler.md+2−2 docs/development.md+4−2 docs/open-questions.md+1−1 docs/prelude-inventory.md+2 docs/prompts/milestone-2.md+2−2 docs/spec/decisions.md+3−3 docs/spec/grammar.md+3−2 docs/spec/overview.md+2−2 docs/status.md+9−6 jibb-dev/lib/jibb.hoon+183−24 jibb-dev/lib/jibb/internal.jibb+6 jibb-dev/lib/jibb/prelude.jibb+3 tests/golden/doc-grammar-06-cart-store/about.txt+1−1 tests/golden/doc-grammar-06-cart-store/types.txt+1−6 tests/golden/prelude-unit-list-transforms/source.jibb+3 tests/golden/prelude-unit-list-transforms/tokens.txt+1798−1785 tests/golden/prelude-unit-list-transforms/tree.txt+776−774 tests/golden/prelude-unit-list-transforms/types.txt+1 tests/golden/types-scope-library-poke/about.txt+4 tests/golden/types-scope-library-poke/modules.txt+1 tests/golden/types-scope-library-poke/path.txt+1 tests/golden/types-scope-library-poke/source.jibb+2 tests/golden/types-scope-library-poke/tokens.txt+8 tests/golden/types-scope-library-poke/tree.txt+3 tests/golden/types-scope-library-poke/types.txt+2 tests/golden/types-scope-root-api/about.txt+4 tests/golden/types-scope-root-api/modules.txt+1 tests/golden/types-scope-root-api/path.txt+1 tests/golden/types-scope-root-api/source.jibb+2 tests/golden/types-scope-root-api/tokens.txt+7 tests/golden/types-scope-root-api/tree.txt+3 tests/golden/types-scope-root-api/types.txt+2 tests/golden/types-scope-store-duplicate/about.txt+4 tests/golden/types-scope-store-duplicate/modules.txt+1 tests/golden/types-scope-store-duplicate/path.txt+1 tests/golden/types-scope-store-duplicate/source.jibb+3 tests/golden/types-scope-store-duplicate/tokens.txt+16 tests/golden/types-scope-store-duplicate/tree.txt+6 tests/golden/types-scope-store-duplicate/types.txt+2 tests/golden/types-scope-store-shadow/about.txt+4 tests/golden/types-scope-store-shadow/modules.txt+1 tests/golden/types-scope-store-shadow/path.txt+1 tests/golden/types-scope-store-shadow/source.jibb+3 tests/golden/types-scope-store-shadow/tokens.txt+16 tests/golden/types-scope-store-shadow/tree.txt+6 tests/golden/types-scope-store-shadow/types.txt+2 tests/lib/jibb-module-scope.hoon+3−2 tests/lib/jibb-poke-bridge.hoon+88 tests/lib/jibb.hoon+227−202 tests/type-import-diagnostic/about.txt+1−1 tests/type-import-diagnostic/expected.txt+4−1 tests/type-poke/about.txt+7 tests/type-poke/alias.txt+2 tests/type-poke/api.txt+2 tests/type-poke/client.txt+23 tests/type-poke/direct.txt+2 tests/type-poke/expected.txt+66 tests/type-poke/exported.txt+9 tests/type-poke/fake.txt+4 tests/type-poke/impostor-client.txt+2 tests/type-poke/impostor.txt+1 tests/type-poke/inner.txt+2 tests/type-poke/mark.txt+5 tests/type-poke/public.txt+2 tests/type-poke/transitive.txt+2 tools/golden+12−2 tools/ship+3−2 tools/testdata/selftest+10−10 tools/testdata/ship-selftest+3−2 tools/type-module-scope-test+2−1 tools/type-poke-test+50
README.md+1−1
@@ -42,7 +42,7 @@ tools/hoon '(golden /a/b/jibb (crip "++ main view"))'
4242tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
4343```
4444
45−`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-tlon-test` and `tools/type-mark-test` check the importer/checker bridges 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` and `tools/type-poke-test` check importer/checker and prelude boundaries under eval; the ship suite runs the same fixtures.
4646
4747### The doc's examples
4848
docs/compiler.md+2−2
@@ -64,7 +64,7 @@ String interpolation infers its pieces in order and preserves substitutions and
6464
6565A bare tag that provably matches no case of a known union reports the union and tag sites. This covers casts, single-argument calls, contextual unit payloads, list items and supported branch arms, including unnamed imported unions. For syntactic tuples, ordered fit replay can identify a missing tag in a nested position; an earlier mismatch or uncertainty stops the replay instead of guessing. Existing tags whose shape or payload does not fit retain the ordinary mismatch; unresolved tags stay pending.
6666
67−A change can replace uniquely named fields on a fully known, faced record spine, including through a nested wing. Replacements receive the field type as context, substitutions and pending constraints are retained, and the resulting type remains the original record. Missing fields, empty changes and definite replacement mismatches report sites; the expected-type site is the edit, since the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A cast to a known record also supplies field context to a tuple or record initializer, including nested list and union fields. The expected-type site is the cast mold; the original field declaration location is not retained. The cart-store example’s `init` and `update` infer in this fragment; store kind and declaration checking remain unfinished.
67+A change can replace uniquely named fields on a fully known, faced record spine, including through a nested wing. Replacements receive the field type as context, substitutions and pending constraints are retained, and the resulting type remains the original record. Missing fields, empty changes and definite replacement mismatches report sites; the expected-type site is the edit, since the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A cast to a known record also supplies field context to a tuple or record initializer, including nested list and union fields. The expected-type site is the cast mold; the original field declaration location is not retained. Isolated cart-style `init` and `update` expressions infer in this fragment. The complete cart-store source fails closed because store kind and declaration scope are not yet checked.
6868
6969For supported closed unions, the type printer keeps the union’s origin separate from its displayed name. It prints an in-scope name such as `msg` or `msg.lib`, including in records and gates; an accessible imported nongeneric alias may name a transitive union. A nongeneric body-local union that escapes its scope, or an origin without an accessible name, prints its cases separated by spaces, parenthesized when nested. That case-list form is print-only. A supported generic union prints its name and all arguments, including unused arguments; when its name is unavailable, the partial printer reports that limitation instead of dropping its arguments. Two faces for the same imported origin remain compatible; compatibility between distinct union origins, including in gate types, remains unsupported. Some comparisons of generic union arguments also remain unsupported rather than deciding equality or mismatch. The Hoon bridge also translates some imported unnamed unions into this representation; unsupported cases remain errors.
7070
@@ -88,7 +88,7 @@ Callers that have a `/sur` core and a name can use `+read-named`: it checks for
8888
8989`+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.
9090
91−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. Prelude imports, including the planned private internal module, are not supported by preparation. 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.
91+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.
9292
9393`+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.
9494
docs/development.md+4−2
@@ -64,6 +64,7 @@ git clone https://github.com/urbit/tools /root/src/tools
6464| `tools/type-tlon-test` | Runs the real Tlon presence source through the importer and partial checker, comparing `tests/type-tlon/expected.txt` under eval |
6565| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
6666| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
67+| `tools/type-poke-test` | Checks source-backed prelude and poke-only API reports against `tests/type-poke/expected.txt` under eval |
6768| `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 |
6869| `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 |
6970| `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 |
@@ -83,6 +84,7 @@ tools/type-import-test # importer/checker bridge golden report match
8384tools/type-tlon-test # real Tlon importer/checker report matches
8485tools/type-import-diagnostic-test # direct structured reader diagnostics match
8586tools/type-mark-test # mark/checker bridge golden report matches
87+tools/type-poke-test # source-backed poke/API bridge report matches
8688tools/type-module-scope-test # module/prelude scope golden report matches
8789tools/hoon check-spans-test # prints <<>>
8890tools/testdata/selftest # 22 checks, 0 failed
@@ -94,7 +96,7 @@ tools/ship check-commit # when the mark or the desks changed
9496tools/clay-fixtures # when the my-app Hoon fixtures or importer changed
9597```
9698
97−`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-module-scope.hoon` and `tools/type-module-scope-test` compare the prelude scope report on the ship and under eval.
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.
98100
99101## Golden cases
100102
@@ -108,7 +110,7 @@ A case is a folder `tests/golden/<name>/` holding:
108110- optionally, `imports.txt` selects Hoon `/sur` molds, one `module mold` pair per line. Each module's source goes in `sur/<module>.txt` and is compiled against zuse by both runners. `marks.txt` selects marks, one name per line, with source in `mar/<name>.txt`; both kinds may be supplied together. The reader results go to the partial checker, and a type output is required. Both runners reconstruct fixture text from `%txt` lines and identify the fixture if its compilation crashes; a crash fails the case without discarding its successful parse output. These fixtures currently handle only sources without Ford imports.
109111- optionally, `modules.txt` lists logical `/ui/.../*.jibb` paths, one per line. The corresponding sources live below the case's `modules/ui/` directory. Both runners parse each source at its logical path and compare the combined `module-trees.txt`; `--update` writes that output. A case with type output also supplies these sources and the vendored prelude to the partial module checker. The file opts in even when it lists no sources; use a comment such as `# no module fixtures` for an empty bundle, since zero-byte `%txt` fixtures do not sync reliably on the ship. Blank lines and comment lines are ignored. Cases without `modules.txt` keep their existing no-prelude type interface.
110112
111−The runners prepare the trusted vendored prelude once for their generated test core and share its partial interface. Preparation reserves all names present in that source and supplies the molds and values the fragment can infer; an unsupported declaration remains reserved but unavailable. The source and the checker are incomplete, so the output still says the module has not been checked and does not claim complete shadowing coverage. `+golden-types-with-prelude` accepts source directly; callers using `+golden-types-with-prepared-prelude` must pass the unchanged result of `+prepare-prelude`. Missing, malformed or conflicting source fails closed, and prelude imports are not supported yet.
113+The runners prepare the trusted vendored public and internal prelude sources once for their generated test core and share the partial interface. Preparation reserves all names present in the public source and supplies the molds and values the fragment can infer; an unsupported declaration remains reserved but unavailable. The source and checker are incomplete, so the output still says the module has not been checked and does not claim complete shadowing coverage. `+golden-types-with-prelude-and-internal` accepts both sources directly; callers using `+golden-types-with-prepared-prelude` pass the unchanged result of `+prepare-prelude-with-internal`. The older source-only entry points remain available for preludes without imports. Missing or malformed sources fail closed.
112114
113115A zero-byte mark fixture currently fails ship synchronization validation after commit. Use a newline-only fixture to test an empty Hoon source on the ship.
114116
docs/open-questions.md+1−1
@@ -44,7 +44,7 @@ Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking i
444422. **Settled: overlapping imported `$%` and `$?` cases.** On 2026-10-30, @iko confirmed that the general union disjointness rule rejects imported `$%` and `$?` cases that overlap as nouns where the type is used, as it does for `$^`. The importer rejects recognizable overlaps and fails closed when it cannot verify them.
454523. **Settled: converging explicit capitals.** On 2026-10-30, @iko chose that a body cannot force two separately written capitals to be equal. For `++ repeated |= x=(choice A A) x`, `++ f |= x=(choice A B) (repeated x)` is an error; use `A` in both positions when the type must be shared. This also applies across local captures and within generic mold applications.
4646
47−24. **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 expose only its opaque type through the public prelude. The checker hides its representation from ordinary modules; derived gates and `pure` remain its builders. This settles `poke`; it does not decide the representation of `ask` or `qath`.
47+24. **Settled: how the internal prelude provides `poke`.** On 2026-10-31, @iko chose to define `poke` in the source-backed private internal prelude module and re-export it through the public prelude as an ordinary transparent type. Ordinary modules can construct and inspect its values. This settles `poke`; it does not decide the representation of `ask` or `qath`.
4848
4949## Grammar questions never put to the doc's author
5050
docs/prelude-inventory.md+2
@@ -4,6 +4,8 @@ This is a working inventory, not a completed prelude interface. It lists top-lev
44
55The source is the fake ship's `%base` `/sys/hoon.hoon` (Hoon version 135), read through Clay with `tools/ship scry /cx/=base=/sys/hoon/hoon --raw`. SHA-256: `ef538ced0877230f02ff86f9fb7a0abc6833bb1cf0e8675742b4d6ce478fcc92`. It differs in bytes from [upstream Hoon at the inspected commit](https://github.com/urbit/urbit/blob/5a187fededc4582a34fcd6055c67bb63e0917b94/pkg/arvo/sys/hoon.hoon); verify against the actual target ship when updating this inventory.
66
7+The vendored prelude defines `poke` in its private internal module and re-exports it as a transparent type. The partial checker resolves its supported source shape and a narrow imported API constructor; complete checking of the private body, other API shapes, effect lowering and runtime execution remain unfinished. `ask` and `qath` are not yet defined there.
8+
79Hoon `+$` arms are marked **mold** below; `++` arms can be gates, doors or mold generators, and need individual inspection. Jibb's loobean `not` and Hoon's bitwise `not.bit` are distinct. Parser helpers outside 3g are excluded from the intended prelude except the specifically listed `slav` and `slaw`; the raw candidates below still need to be classified.
810
911## 1a
docs/prompts/milestone-2.md+2−2
@@ -49,7 +49,7 @@ And from the plan's Risks:
4949
5050## First steps
5151
52−1. **Specify the prelude inventory.** The checker needs the prelude's complete exported inventory and signatures; include all names from the listed Hoon library sections except explicitly excluded groups, as `docs/open-questions.md` question 3 records. The prelude imports private helpers and low-level primitives from a separate internal module without exposing them; its public foundational gates are implemented in Jibb on those primitives. The source-backed internal module defines `poke`; the public prelude exposes only its opaque type, and the checker hides its representation from ordinary modules, as question 24 records. Derived gates and `pure` remain its builders. This decision does not specify the representation of `ask` or `qath`.
52+1. **Specify the prelude inventory.** The checker needs the prelude's complete exported inventory and signatures; include all names from the listed Hoon library sections except explicitly excluded groups, as `docs/open-questions.md` question 3 records. The prelude imports private helpers and low-level primitives from a separate internal module without exposing them; its public foundational gates are implemented in Jibb on those primitives. The source-backed internal module defines `poke`; the public prelude re-exports it as an ordinary transparent type that modules can construct and inspect, as question 24 records. This decision does not specify the representation of `ask` or `qath`.
5353
5454 The plan's three core-language rules were adopted: gate-free `eq` arguments and map and set keys, with gates opaque for union matching; jetted prelude functions taking gates; and rejection of a non-gate value that depends on itself even through a gate.
55552. **Start the importer early**, as the plan's Risks ask: first on a small `/sur` file, then on Tlon's. "Suggested design" below has a way in.
@@ -68,7 +68,7 @@ The rules are scattered across the tabs. This is a map of them, not a replacemen
6868- A sample's mold may be left out: every bare name in a sample binds, at any depth, as in `|=(p title.p)` "when the call fixes the type", `|= [a=@ b]` and `|=(m ~)`.
6969- Generic molds: `+$ result |$ [V E]` with cases below, applied as `(result V E)`; `|$` goes right after a `+$`'s name, and the prelude's `cmd` and `sub` use `|$ [M]`.
7070- `!!` is the empty mold, and as an expression it has any type. `*` is the noun type, not a type variable; generic positions such as the keys in `each` and `table` use a capital. A value of a more specific noun type can be used where `*` is expected.
71−- `poke`, `ask` and `qath` are opaque, built only by derived gates, `pure` and application-path literals.
71+- `poke` is transparent and re-exported from the source-backed internal prelude. `ask` and `qath` are opaque, built only by derived gates, `pure` and application-path literals.
7272- The Literals table gives every other literal its type: `0x1f` a `@ux`, ships `@p`, dates `@da`, durations `@dr`, `~.knot` a `@ta`, strings `@t`, `` `x `` a `(unit A)`, `~[…]` a `(list A)`, `gap+%s2` the pair `[%gap %s2]`, `/posts/~zod` a `path`, `%/blog` a `qath`.
7373
7474**Tags, `~`, numbers and cells wait for their context** (Grammar: Tag resolution, Literals by context)
docs/spec/decisions.md+3−3
@@ -31,8 +31,8 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
3131| Equality and negation | The gates `eq` and `not`, with Hoon's bitwise `not` exposed as `not.bit`; `eq`'s arguments and map and set keys contain no gates, even nested; the checker infers and generalizes that constraint; union matching never inspects a gate to distinguish cases | Decided 2026-10-30 |
3232| Special rules | No built-ins; type-directed rules are welcome, each listed in the Grammar tab | Decided 2026-10-29 |
3333| Inference | Hindley–Milner with aura variables; `@` is any atom, a specific atom fits `@` and a more specific aura fits an ancestor in its Hoon aura family, but each reverse needs a check, and repeated atom-constrained capitals give the same type; a number takes `@ud` only where its `++` isn't generic over its aura; distinct specific auras remain distinct; faces are part of record types, and an unnamed position can take a face but two different faces don't unify; principal types | Decided 2026-10-30 |
34−| Effects | The library unions `cmd` and `sub`; pokes and requests are opaque, from derived gates and `pure`; islands read agents only by watching; replies get full state, and diffs take a fold; timers carry the time; `%who` gives the owner's `@p`; nacks reach replies as text | Decided 2026-10-29 |
35−| Opaque poke representation | The source-backed private internal prelude module defines `poke`; the public prelude exposes only its opaque type, and the checker hides its representation from ordinary modules. Its builders remain derived gates and `pure` | Decided 2026-10-31 |
34+| Effects | The library unions `cmd` and `sub`; `poke` is a transparent type, and requests are opaque, from derived gates and `pure`; islands read agents only by watching; replies get full state, and diffs take a fold; timers carry the time; `%who` gives the owner's `@p`; nacks reach replies as text | Decided 2026-10-31 |
35+| Poke representation | The source-backed private internal prelude module defines `poke`, and the public prelude re-exports it as an ordinary transparent type. Ordinary modules can construct and inspect its values | Decided 2026-10-31 |
3636| Agent APIs | `/ui/api/<agent>.jibb` with `+$ poke` and `+$ paths`, over the agent's mark types; a case is a name, a path and a type, with `(facts full diff …)` for diffs, told apart by mark; an optional scry path, for pages; an island watching such a request has a type error; typed segments by aura | Decided 2026-10-30 |
3737| Mark names | Any name: `/%` names types after marks, and constructors poke with their type's mark; no alias marks | Decided 2026-10-26 |
3838| Derived gates | API files and stores give a constructor per poke type and a checked request per path or store state; clashing names are errors, including a derived name that clashes with an import face | Decided 2026-10-30 |
@@ -68,7 +68,7 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
6868| Inputs | A message per input event, none mid-composition; controls reset to the latest view after every event; fields read-only until the island starts | Decided 2026-10-29 |
6969| Transactions | None; one poke per command | Decided |
7070| Reloads | Restart from the model the page is served with | Decided 2026-10-29 |
71−| Shared state | Stores: browser agents written like API files, with `state`, `+$ poke` and `(store init update)`; the store's `+$ poke` is a declaration, not a mold; poked and watched through derived gates; one per page | Decided 2026-10-30 |
71+| Shared state | Stores: browser agents written like API files, with `state`, `+$ poke` and `(store init update)`; the store's `+$ poke` is a declaration, not a mold; derived gates provide poke constructors and state requests; one per page | Decided 2026-10-31 |
7272| Subscriptions | By agent and path, shared per page; the first fact is full state, so no paths that need a scry path | Decided 2026-10-29 |
7373| Apps | One island under a catch-all route, given the path by `pure`; `%url` delivers the path on every change; in-section links act as `go`; focus moves to the first heading | Decided 2026-10-29 |
7474| Layout vocabulary | Jibb's elements and theme tokens; the stylesheet comes from the theme alone; chars and fill are inline; `[%fill n]` below 1 counts as 1 | Decided 2026-10-29 |
docs/spec/grammar.md+3−2
@@ -129,7 +129,8 @@ A mold is only a type: never called on a noun, and with no default. Types are in
129129- **Paths**: `/todos` is constant, `/` empty, and `/todo/[id=@ud]` typed by aura. `%/blog/(slug)` is an `qath`, checked against routes and static files.
130130- **Generic molds**: `+$ result |$ [V E]` with cases below; `|$` goes only right after a `+$`'s name.
131131- **Noun**: `*`, not a type variable; use a capital for a generic type. A value already known to have a more specific noun type, such as `@ud`, can be used where `*` is expected. **Empty**: `!!`.
132−- **Opaque**: `poke`, `ask` and `qath`, built only by derived gates, `pure` and application-path literals. `poke` is defined in the source-backed private internal prelude module; the public prelude exposes only its opaque type, and the checker hides its representation from ordinary modules. Pokes are built by derived gates and `pure`. `(facts full diff …)` appears only in an API file's `paths`.
132+- **Pokes**: `poke` is defined in the source-backed private internal prelude module and re-exported by the public prelude as an ordinary transparent type. Ordinary modules can construct and inspect its values.
133+- **Opaque**: `ask` and `qath`, built only by derived gates, `pure` and application-path literals. `(facts full diff …)` appears only in an API file's `paths`.
133134- **Identity**: recursive molds go by name and module.
134135
135136`eq`'s arguments and map and set keys must contain no gates, even nested inside another value. The checker infers this gate-free constraint on type variables and retains it when generalizing a `++`, so a generic helper that calls `eq` stays generic over gate-free types. Printed types show the constraint as `$-([A A] ?) where A contains no gates`. An inferred atom constraint prints as `$-([A A] A) where A is an atom`. Multiple clauses are comma-separated, as `where A is an atom, B contains no gates`. Union-case matching treats gates as opaque and never inspects a gate to distinguish cases.
@@ -339,4 +340,4 @@ knot = { lower | digit | "-" | "." | "~" | "_" } ;
339340 button "Add" %add
340341```
341342
342−A store is written like an API file: `state`, `+$ poke` and `(store init update)`. Islands poke it with derived constructors and watch it with `(state.cart |=%got)`, whose first fact is the current state and each later fact the next. It runs in the browser, shared by the page's islands.
343+A store is written like an API file: `state`, `+$ poke` and `(store init update)`. Islands can poke it with derived constructors and watch it with `(state.cart |=%got)`, whose first fact is the current state and each later fact the next. It runs in the browser, shared by the page's islands.
docs/spec/overview.md+2−2
@@ -78,7 +78,7 @@ Unused molds are skipped, so unsupported constructs elsewhere in a `/sur` file a
7878
7979## Prelude
8080
81−Hoon's standard library regrouped, written in Jibb and vendored as `/lib/jibb/prelude`; an island's bundle carries only what it uses. The exported inventory includes all names from the Hoon library sections listed below, excluding the groups explicitly left out. Jetted prelude functions have working Jibb implementations; the compiler recognizes their shapes and uses the Hoon versions so jets can fire. They may take gates as arguments (Core language). Private helpers and low-level primitives live in a separate internal prelude module, imported without exposing them; foundational public gates are implemented in Jibb on top of those primitives. This source-backed internal module defines `poke`; the public prelude exposes only its opaque type, and the checker hides its representation from ordinary modules. The prelude also holds `eq`, `not`, `page`, `program`, `store`, `pure`, `island`, and the layout elements and molds.
81+Hoon's standard library regrouped, written in Jibb and vendored as `/lib/jibb/prelude`; an island's bundle carries only what it uses. The exported inventory includes all names from the Hoon library sections listed below, excluding the groups explicitly left out. Jetted prelude functions have working Jibb implementations; the compiler recognizes their shapes and uses the Hoon versions so jets can fire. They may take gates as arguments (Core language). Private helpers and low-level primitives live in a separate internal prelude module, imported without exposing them; foundational public gates are implemented in Jibb on top of those primitives. This source-backed internal module defines `poke`; the public prelude re-exports it as an ordinary transparent type, so ordinary modules can construct and inspect its values. The prelude also holds `eq`, `not`, `page`, `program`, `store`, `pure`, `island`, and the layout elements and molds.
8282
8383| Group | Hoon | Jibb |
8484| --- | --- | --- |
@@ -150,7 +150,7 @@ Loads and renders run in Nock.
150150 [%url reply=$-(path M)]
151151```
152152
153−- `poke` and `ask` are opaque, built only by derived gates and `pure`. A constructor such as `(todo-action.todo [%add draft.m])` checks its value and supplies the agent and mark, so one island can poke several agents. The agent's mark rechecks on the ship; a nack's `tang` reaches the reply as text. Store constructors poke the store in the browser.
153+- `poke` is a transparent type; `ask` is opaque, built only by derived gates and `pure`. A derived poke constructor such as `(todo-action.todo [%add draft.m])` checks its value and supplies the agent and mark, so one island can poke several agents. The agent's mark rechecks on the ship; a nack's `tang` reaches the reply as text. Store constructors poke the store in the browser.
154154- A request such as `(todos.todo |=%got)` comes from a declared path or a store's `state`; its reply always gets full state. A path with diffs also takes a fold, `(changes.todo |=%got apply)`, which the runtime applies first. Facts are checked; a bad one crashes the reply, which counts as a crashed `update`.
155155- Islands read agents only by watching. A watch's first fact must be full state, so watching a request whose path case has a separate `scry=` path is a type error in an island. The runtime acks facts, rewatches after a kick or a dropped connection and reseeds from the first fact; a refused watch shows the crash notice.
156156- Watches match by agent and path, timers by gap, and the newest reply is always used. After each `update`, `subs` is diffed to start and stop watches and timers. `%now` and `%every` give the time, `%who` the owner's `@p` from `/~/name`; `%wait` is a one-shot delay.
docs/status.md+9−6
@@ -19,7 +19,7 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
1919
2020## Milestone 2: in progress
2121
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, the null singleton, 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. It does not yet check API or kind semantics, and 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. The cart-store example’s `init` and `update` now infer, while its kind, declarations and full module 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. Uncontextualized list construction, 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; mutually recursive local groups and 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 selected Hoon atoms, term singletons, the null singleton, 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.
2323
2424The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc` and `turn`. The validated standard `list` mold is injected when the prelude’s own gates are inferred; `weld` and `turn` have ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through direct or transitive mold aliases. List-dependent prelude mold aliases remain unsupported because their templates are prepared before injection. Unsupported entries such as most list helpers remain reserved but unavailable; backend validation of the helpers remains outstanding. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
2525
@@ -39,8 +39,8 @@ What the plan asks for, and where it is:
3939
4040Besides the plan's list:
4141
42−- 550 golden cases: 334 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 550-case corpus passed under `urbit eval` in 66.6 s. The fake ship passed all 557 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 38.4 s for sync and 44.4 s for tests. The importer golden compares 169 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
42+- 554 golden cases: 338 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 554-case corpus passed under `urbit eval` in 67.8 s. The fake ship passed all 562 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 38.3 s for sync and 43.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.
4444- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
4545- Two independent audits before 7c739b7, one of which compared the library with a reference parser written in Python from the doc over about 19,000 generated programs. Before ab797a9, a second Python parser, written from the decisions, agreed with the library on 8,000 generated programs and 900 hand-written probes.
4646- Speed: starting `urbit eval` and building the library takes about 8 s. After that, a 2,000-line module of 400 definitions parses in about a second. Loops over definitions, arms, lines and items grow no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (library section 3).
@@ -104,24 +104,27 @@ Besides the plan's list:
104104| ae35005 | 2026-10-31 | Import source-verified tagged Hoon unions |
105105| ef2ea71 | 2026-10-31 | Report nested missing tags and contextualize union branch results |
106106| 67f900e | 2026-10-31 | Infer local mutual gates and uncontextualized lists |
107−| This change | 2026-10-31 | Contextualize finite union patterns and record opaque poke decision |
107+| 7ff15f1 | 2026-10-31 | Contextualize finite union patterns and record the initial poke decision |
108+| This change | 2026-10-31 | Expose transparent poke and infer selected API constructors |
108109
109110## Checking it
110111
111112On a machine set up as [development.md](development.md) says:
112113
113114```
114−tools/golden # 550 cases under urbit eval
115+tools/golden # 554 cases under urbit eval
115116tools/importer-test # the Hoon importer fixture projection
116117tools/type-import-test # the importer/checker bridge fixture
118+tools/type-tlon-test # the real Tlon reader/checker fixture
117119tools/type-mark-test # the mark/checker bridge fixture
120+tools/type-poke-test # the source-backed poke/API fixture
118121tools/type-module-scope-test # module and prelude scope fixture
119122tools/hoon check-spans-test # prints <<>> when the span checker works
120123tools/testdata/selftest # the tools themselves
121124tools/doc-blocks docs/spec # the doc's examples are golden cases
122125tools/ship start
123126tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
124−tools/ship test # the same 550 cases as -test arms on the ship
127+tools/ship test # the same 554 cases as -test arms on the ship
125128tools/testdata/ship-selftest
126129tools/ship check-commit # |commit stores .jibb files
127130tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb.hoon+183−24
@@ -4608,6 +4608,7 @@
46084608 [%atom aura=@ta]
46094609 [%any-atom ~]
46104610 [%flag ~]
4611+ [%noun ~]
46114612 [%tag id=@ud literal=lit constructor=?]
46124613 [%const literal=lit]
46134614 [%collection name=term args=(list itype)]
@@ -4661,6 +4662,7 @@
46614662 %atom |
46624663 %any-atom |
46634664 %flag |
4665+ %noun |
46644666 %tag =(n id.t)
46654667 %const |
46664668 %union |((lien cases.t |=(c=itype (itype-occurs n c sub))) (lien args.t |=(c=itype (itype-occurs n c sub))))
@@ -4757,6 +4759,7 @@
47574759 %atom |
47584760 %any-atom &
47594761 %flag |
4762+ %noun |
47604763 %tag |
47614764 %const |
47624765 %union |((lien cases.t |=(c=itype (itype-has-any-atom c sub))) (lien args.t |=(c=itype (itype-has-any-atom c sub))))
@@ -4827,6 +4830,7 @@
48274830 %atom &
48284831 %any-atom &
48294832 %flag &
4833+ %noun |
48304834 %tag &
48314835 %const &
48324836 %union |((lien cases.typ |=(c=itype (itype-has-fixed-atom c))) (lien args.typ |=(c=itype (itype-has-fixed-atom c))))
@@ -4916,6 +4920,7 @@
49164920 %cell &
49174921 %union &
49184922 %recursive &
4923+ %noun &
49194924 %collection &
49204925 %face $(t body.t)
49214926 %fn |($(t sample.t) $(t product.t))
@@ -5055,6 +5060,15 @@
50555060 =. actual (itype-walk actual sub)
50565061 =. expected (itype-walk expected sub)
50575062 ?: =(actual expected) [%ok sub next]
5063+ :: Any value can be used where a noun is expected. An unresolved
5064+ :: bare tag is fixed as a constant; a constructor still needs a gate.
5065+ ?: ?=(%noun -.expected)
5066+ ?: ?=(%tag -.actual)
5067+ ?: constructor.actual [%unknown ~]
5068+ [%ok [[id.actual expected] sub] next]
5069+ [%ok sub next]
5070+ :: An arbitrary noun is not known to fit a narrower type.
5071+ ?: &(?=(%noun -.actual) !?=(%var -.expected)) [%unknown ~]
50585072 ?: &(?=(%recursive -.actual) ?=(%recursive -.expected))
50595073 ?:(&(=(module.actual module.expected) =(name.actual name.expected)) [%ok sub next] [%bad ~])
50605074 ?: &(|(?=(%recursive -.actual) ?=(%recursive -.expected)) !|(?=(%var -.actual) ?=(%var -.expected))) [%unknown ~]
@@ -5242,7 +5256,8 @@
52425256+$ ischeme [typ=itype vars=(list @ud)]
52435257+$ ienv (list [name=term scheme=ischeme])
52445258+$ imold-types (list [name=term template=ischeme])
5245−+$ ifile [values=ienv molds=imold-types at=path]
5259++$ iderived [name=term agent=term mark=term]
5260++$ ifile [values=ienv molds=imold-types at=path derived=(list iderived)]
52465261+$ ijimports (list [face=term interface=ifile])
52475262+$ icap [name=@t id=@ud at=span]
52485263+$ icaps (list icap)
@@ -5288,6 +5303,8 @@
52885303:: generalize an aura from its sample, which requires constraint analysis
52895304:: beyond this fragment; leave those cases unresolved.
52905305::
5306+:: This helper only controls decimal defaulting in visible types. A noun
5307+:: may contain gates and is not proof of a gate-free value.
52915308++ itype-has-gate
52925309 |= t=itype
52935310 ^- ?
@@ -5306,6 +5323,7 @@
53065323 %atom |
53075324 %any-atom |
53085325 %flag |
5326+ %noun |
53095327 ==
53105328::
53115329++ default-decimals
@@ -5330,6 +5348,7 @@
53305348 %atom ~
53315349 %any-atom ~
53325350 %flag ~
5351+ %noun ~
53335352 %tag ~
53345353 %const ~
53355354 %union (zing (turn (weld args.t cases.t) |=(c=itype (itype-vars c))))
@@ -5368,6 +5387,7 @@
53685387 %atom t
53695388 %any-atom t
53705389 %flag t
5390+ %noun t
53715391 %tag t
53725392 %const t
53735393 %union [%union (turn cases.t |=(c=itype (itype-rename c ren))) origin.t label.t (turn args.t |=(c=itype (itype-rename c ren)))]
@@ -5391,6 +5411,7 @@
53915411 %atom |
53925412 %any-atom |
53935413 %flag |
5414+ %noun |
53945415 %tag |
53955416 %const |
53965417 %union |((lien cases.t |=(c=itype (itype-var-is-atom n c))) (lien args.t |=(c=itype (itype-var-is-atom n c))))
@@ -5741,25 +5762,41 @@
57415762 ?:(=(`origin origin.typ.template) `name.i.molds $(molds t.molds))
57425763 $(molds t.molds)
57435764::
5744−:: Only names exported by this directly imported module are visible through
5745−:: its face. Other origins retain identity but print as unnamed unions.
5765+:: A public non-generic alias names exactly its origin and arguments.
5766+:: Reusing only an origin could print a different generic instantiation.
5767+++ prelude-union-alias
5768+ |= [origin=[at=path name=term] args=(list itype) molds=imold-types]
5769+ ^- (unit term)
5770+ ?^ args ~
5771+ ?~ molds ~
5772+ =/ template=ischeme template.i.molds
5773+ ?: &(?=(~ vars.template) ?=(%union -.typ.template))
5774+ ?:(&(=(`origin origin.typ.template) =(args args.typ.template)) `name.i.molds $(molds t.molds))
5775+ $(molds t.molds)
5776+::
5777+:: Names exported by the directly imported module are visible through its
5778+:: face; a matching prelude alias is also visible without a qualifier.
57465779::
57475780++ itype-in-import
5748− |= [t=itype iface=ifile face=term]
5781+ |= [t=itype iface=ifile face=term prelude=(unit ifile)]
57495782 ^- itype
57505783 ?- -.t
57515784 %union
57525785 =/ label=(unit @t)
57535786 ?~ origin.t ~
57545787 ?: =(at.u.origin.t /lib/jibb/prelude/jibb) `name.u.origin.t
5788+ =/ public=(unit term)
5789+ ?~ prelude ~
5790+ (prelude-union-alias u.origin.t args.t molds.u.prelude)
5791+ ?^ public `u.public
57555792 =/ alias=(unit term) ~
57565793 =? alias &(=(at.u.origin.t at.iface) ?=(^ (find-jibb-mold name.u.origin.t iface))) `name.u.origin.t
57575794 =? alias ?=(~ alias) (imported-union-alias u.origin.t molds.iface)
57585795 ?~ alias ~
57595796 `(crip "{(trip u.alias)}.{(trip face)}")
5760− [%union (turn cases.t |=(c=itype (itype-in-import c iface face))) origin.t label (turn args.t |=(c=itype (itype-in-import c iface face)))]
5797+ [%union (turn cases.t |=(c=itype (itype-in-import c iface face prelude))) origin.t label (turn args.t |=(c=itype (itype-in-import c iface face prelude)))]
57615798 %recursive [%recursive module.t name.t ~]
5762− %collection [%collection name.t (turn args.t |=(c=itype (itype-in-import c iface face)))]
5799+ %collection [%collection name.t (turn args.t |=(c=itype (itype-in-import c iface face prelude)))]
57635800 %face [%face name.t $(t body.t)]
57645801 %fn [%fn $(t sample.t) $(t product.t)]
57655802 %cell [%cell $(t hed.t) $(t tal.t)]
@@ -5959,6 +5996,7 @@
59595996 ?: =(0 aura.sh) `[[%any-atom ~] state]
59605997 `[[%atom aura.sh] state]
59615998 %flag `[[%flag ~] state]
5999+ %noun `[[%noun ~] state]
59626000 %const
59636001 ?. |(=(%term form.lit.sh) =(%null form.lit.sh)) ~
59646002 `[[%const lit.sh] state]
@@ -5985,7 +6023,7 @@
59856023 =/ found=(unit ischeme) (find-jibb-mold n u.iface)
59866024 ?~ found ~
59876025 ?^ vars.u.found ~
5988− `[(itype-in-import typ.u.found u.iface i.t.names.sh) state]
6026+ `[(itype-in-import typ.u.found u.iface i.t.names.sh prelude.state) state]
59896027 =/ found=(unit itype)
59906028 (find-imported-mold i.t.names.sh n externals.state surs.state)
59916029 ?~ found ~
@@ -6022,7 +6060,7 @@
60226060 ?~ vars.u.template ~
60236061 =/ applied=(unit itype) (template-apply u.template types.u.args)
60246062 ?~ applied ~
6025− `[(itype-in-import u.applied u.iface i.t.ref.sh) state.u.args]
6063+ `[(itype-in-import u.applied u.iface i.t.ref.sh prelude.state.u.args) state.u.args]
60266064 ?: (lien active.state.u.args |=(x=term =(x n))) ~
60276065 =/ found=(unit shape) (find-simple-mold n molds.state.u.args)
60286066 ?~ found
@@ -7210,7 +7248,7 @@
72107248 ?~ iface (infer-field-wing names.e env state)
72117249 =/ member=(unit ischeme) (ienv-lookup i.names.e values.u.iface)
72127250 ?~ member [%| ["module member is not available to partial inference" ~]]
7213− =. typ.u.member (itype-in-import typ.u.member u.iface i.t.names.e)
7251+ =. typ.u.member (itype-in-import typ.u.member u.iface i.t.names.e prelude.state)
72147252 =/ instance=[typ=itype state=istate] (instantiate-scheme u.member state)
72157253 [%& typ.instance state.instance]
72167254 =/ scheme=(unit ischeme) (ienv-lookup i.names.e env)
@@ -7559,7 +7597,7 @@
75597597 ?~ t.names |
75607598 =. typ (itype-walk typ sub)
75617599 ?: ?=(%cell -.typ) $(typ tal.typ, names t.names)
7562− |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
7600+ |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
75637601::
75647602++ infer-cell-branch
75657603 |= [e=expr env=ienv state=istate]
@@ -7605,6 +7643,7 @@
76057643 %atom "@{(trip aura.t)}"
76067644 %any-atom "@"
76077645 %flag "?"
7646+ %noun "*"
76087647 %tag (trip txt.literal.t)
76097648 %const (trip txt.literal.t)
76107649 %union
@@ -7652,6 +7691,7 @@
76527691 %atom |
76537692 %any-atom |
76547693 %flag |
7694+ %noun |
76557695 %tag |
76567696 %const |
76577697 %union |((lien cases.typ |=(c=itype (itype-has-nvar c))) (lien args.typ |=(c=itype (itype-has-nvar c))))
@@ -7760,6 +7800,7 @@
77607800 %atom |
77617801 %any-atom |
77627802 %flag |
7803+ %noun |
77637804 %tag |
77647805 %const |
77657806 %union |((lien cases.t |=(c=itype (has-atom-var n c))) (lien args.t |=(c=itype (has-atom-var n c))))
@@ -8517,6 +8558,22 @@
85178558 ?. (levy vals |=(n=term &((unique-value-name n vals) !(lien prelude-values |=(v=term =(n v)))))) |
85188559 (levy mold-names |=(n=term &((unique-value-name n mold-names) !(lien prelude-molds |=(m=term =(n m))))))
85198560::
8561+:: In an API file or before main's kind is known, a lone `+$ poke`
8562+:: may be a declaration rather than a mold that shadows the prelude. Do not call
8563+:: that one collision definite, and do not hide unrelated scope errors.
8564+++ pending-declared-poke
8565+ |= [at=path mod=module prelude-values=(list term) prelude-molds=(list term)]
8566+ ^- ?
8567+ ?. (lien prelude-molds |=(n=term =(%poke n))) |
8568+ ?. |(?=([%ui %api @ %jibb ~] at) (lien defs.mod |=(d=def &(?=(%value -.d) =(%main name.d))))) |
8569+ =/ pokes=(list def)
8570+ (skim defs.mod |=(d=def &(?=(%mold -.d) =(%poke name.d))))
8571+ ?~ pokes |
8572+ ?^ t.pokes |
8573+ =/ remaining=(list def)
8574+ (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
8575+ (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
8576+::
85208577++ module-mold-types
85218578 |= [molds=imolds state=istate]
85228579 ^- (each imold-types @t)
@@ -8532,9 +8589,9 @@
85328589::
85338590:: Prepare a provisional interface from the trusted vendored source.
85348591:: Every declared name remains reserved, but only molds and values this
8535−:: fragment can infer are usable. Unsupported bodies are not validated,
8536−:: and imports into the prelude are not supported yet. The fixed origin
8537−:: gives its named unions the same identity in every importing module.
8592+:: fragment can infer are usable. Unsupported bodies are not validated.
8593+:: An optional internal source supplies the prelude's one supported import;
8594+:: clients cannot import that path directly. Named unions retain their origin.
85388595::
85398596:: Recognize only the complete standard prelude list shape. Its recursive
85408597:: tail uses the same parameter and the unqualified list name. The reader
@@ -8574,6 +8631,13 @@
85748631 ?. ?=(%tvar -.i.args.tail) |
85758632 =(var name.i.args.tail)
85768633::
8634+++ prelude-label
8635+ |= [typ=itype name=term]
8636+ ^- itype
8637+ ?. ?=(%union -.typ) typ
8638+ ?^ args.typ typ
8639+ typ(label `name)
8640+::
85778641++ partial-prelude-molds
85788642 |= [molds=imolds state=istate]
85798643 ^- imold-types
@@ -8586,22 +8650,32 @@
85868650 (infer-mold-template body.m state(active [name.m active.state], in-mold &))
85878651 ?~ out $(molds t.molds)
85888652 =. typ.template.u.out (label-direct-union typ.template.u.out body.m name.m state)
8653+ =. typ.template.u.out (prelude-label typ.template.u.out name.m)
85898654 [[name.m template.u.out] $(molds t.molds)]
85908655::
8591−++ partial-prelude-interface
8592− |= src=@t
8656+++ partial-prelude-interface-with-internal
8657+ |= [src=@t internal-source=(unit @t)]
85938658 ^- (unit ifile)
85948659 ?: =(0 src) ~
85958660 =/ at=path /lib/jibb/prelude/jibb
85968661 =/ parsed (parse at src)
85978662 ?: ?=(%| -.parsed) ~
8598− ?^ imports.p.parsed ~
8663+ =/ private=(unit ijimports)
8664+ ?~ imports.p.parsed `~
8665+ ?. ?=([[%jibb *] ~] imports.p.parsed) ~
8666+ ?. =(path.i.imports.p.parsed /lib/jibb/internal) ~
8667+ ?~ internal-source ~
8668+ =/ built=jfile-result
8669+ (infer-jibb-file /lib/jibb/internal/jibb u.internal-source ~ ~ ~ ~[/lib/jibb/internal/jibb] ~ ~ ~ ~)
8670+ ?: ?=(%| -.built) ~
8671+ `~[[face.i.imports.p.parsed iface.p.built]]
8672+ ?~ private ~
85998673 ?~ defs.p.parsed ~
86008674 ?. (module-scope-valid p.parsed ~ ~) ~
86018675 =/ ds=(list def) defs.p.parsed
86028676 =/ molds=imolds (collect-simple-molds ds)
86038677 =/ names=(list term) (turn molds |=(m=[name=term body=shape] name.m))
8604− =/ globals=(list term) (global-value-names ds)
8678+ =/ globals=(list term) (weld (import-binding-names imports.p.parsed) (global-value-names ds))
86058679 :: Remove raw list before inferring any template, so an altered list
86068680 :: cannot leak through an alias. Its name remains reserved either way.
86078681 =/ declared=? (lien names |=(name=term =(%list name)))
@@ -8609,11 +8683,26 @@
86098683 =? env-molds declared
86108684 (skim molds |=(m=[name=term body=shape] !=(%list name.m)))
86118685 =/ reserved=(list term) ?:(declared ~[%list] ~)
8612− =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ ~ reserved ~ ~ ~ | at names ~]
8686+ =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~]
86138687 =/ mt=imold-types (partial-prelude-molds molds state)
8614− =/ partial=ifile [~ mt at]
8615− =/ env=ienv (resolve-supported-defs ds env-molds globals ~ ~ ~ ~ ~ reserved at `partial)
8616− `[env mt at]
8688+ =/ partial=ifile [~ mt at ~]
8689+ :: An explicitly qualified re-export must resolve. Other unsupported
8690+ :: prelude declarations remain reserved but absent from the interface.
8691+ =/ required=imolds
8692+ %+ skim molds
8693+ |= m=[name=term body=shape]
8694+ =/ sh=shape body.m
8695+ ?. ?=(%ref -.sh) |
8696+ ?~ names.sh |
8697+ ?=(^ t.names.sh)
8698+ ?. (levy required |=(m=[name=term body=shape] ?=(^ (find-jibb-mold name.m partial)))) ~
8699+ =/ env=ienv (resolve-supported-defs ds env-molds globals ~ ~ ~ ~ u.private reserved at `partial)
8700+ `[env mt at ~]
8701+::
8702+++ partial-prelude-interface
8703+ |= src=@t
8704+ ^- (unit ifile)
8705+ (partial-prelude-interface-with-internal src ~)
86178706::
86188707+$ iprelude [iface=ifile values=(list term) molds=(list term)]
86198708::
@@ -8628,6 +8717,17 @@
86288717 =/ ms=(list term) (turn (collect-simple-molds defs.p.parsed) |=(m=[name=term body=shape] name.m))
86298718 `[u.iface vals ms]
86308719::
8720+++ prepare-prelude-with-internal
8721+ |= [src=@t internal-source=@t]
8722+ ^- (unit iprelude)
8723+ =/ iface=(unit ifile) (partial-prelude-interface-with-internal src `internal-source)
8724+ ?~ iface ~
8725+ =/ parsed (parse /lib/jibb/prelude/jibb src)
8726+ ?: ?=(%| -.parsed) ~
8727+ =/ vals=(list term) (global-value-names defs.p.parsed)
8728+ =/ ms=(list term) (turn (collect-simple-molds defs.p.parsed) |=(m=[name=term body=shape] name.m))
8729+ `[u.iface vals ms]
8730+::
86318731++ module-values-complete
86328732 |= [ds=(list def) env=ienv]
86338733 ^- ?
@@ -8654,6 +8754,8 @@
86548754 ?~ imports [%& [~ cache]]
86558755 ?. ?=(%jibb -.i.imports) $(imports t.imports)
86568756 =/ at=path (weld path.i.imports `path`~[%jibb])
8757+ ?: =(at /lib/jibb/internal/jibb)
8758+ [%| 'the prelude internal module is private']
86578759 ?: (lien active |=(p=path =(p at)))
86588760 [%| (crip "import cycle at {(spud at)}")]
86598761 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
@@ -8668,14 +8770,63 @@
86688770 ?: ?=(%| -.rest) rest
86698771 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
86708772::
8773+++ api-mark-exports
8774+ |= [marks=(list term) all=(list term) externals=imark-externals]
8775+ ^- imold-types
8776+ ?~ marks ~
8777+ =/ t=(unit itype) (find-imported-mark i.marks externals all)
8778+ ?~ t $(marks t.marks)
8779+ [[i.marks [u.t ~]] $(marks t.marks)]
8780+::
8781+:: Experimental direct poke-only API. Unsupported API declarations fail
8782+:: as a whole; supplied mark reader results retain their existing boundary.
8783+++ api-poke-interface
8784+ |= [at=path mod=module mark-externals=imark-externals prelude-values=(list term) prelude-molds=(list term) prelude=(unit ifile)]
8785+ ^- (unit ifile)
8786+ ?. ?=([%ui %api @ %jibb ~] at) ~
8787+ ?~ prelude ~
8788+ ?. =(at.u.prelude /lib/jibb/prelude/jibb) ~
8789+ =/ poke=(unit ischeme) (find-jibb-mold %poke u.prelude)
8790+ ?~ poke ~
8791+ ?. ?=(%union -.typ.u.poke) ~
8792+ ?^ vars.u.poke ~
8793+ =/ compatible=?
8794+ %+ lien cases.typ.u.poke
8795+ |= c=itype
8796+ ?=([%cell [%const [%term %tas %agent *]] [%cell [%face %agent [%atom %tas]] [%cell [%face %mark [%atom %tas]] [%face %payload [%noun ~]]]]] c)
8797+ ?. compatible ~
8798+ ?. (module-scope-valid mod(defs ~) prelude-values prelude-molds) ~
8799+ ?. (levy imports.mod |=(i=import ?=(%mark -.i))) ~
8800+ =/ marks=(list term) (collect-mark-imports imports.mod)
8801+ ?. ?=([@ ~] marks) ~
8802+ =/ ds=(list def) defs.mod
8803+ ?. ?=([[%mold *] ~] ds) ~
8804+ ?. =(%poke name.i.ds) ~
8805+ =/ sh=shape shape.i.ds
8806+ ?. ?=([%ref *] sh) ~
8807+ ?. ?=([@ ~] names.sh) ~
8808+ =/ n=term i.names.sh
8809+ ?. (unique-value-name n marks) ~
8810+ ?: |((lien prelude-values |=(x=term =(n x))) (lien prelude-molds |=(x=term =(n x)))) ~
8811+ =/ mark=(unit itype) (find-imported-mark n mark-externals marks)
8812+ ?~ mark ~
8813+ =/ sc=ischeme [[%fn u.mark typ.u.poke] ~]
8814+ `[~[[n sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]]]
8815+::
86718816++ infer-jibb-file
86728817 |= [at=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
86738818 ^- jfile-result
8674− ?: ?=([%ui %api *] at) [%| (crip "API module needs unsupported inference: {(spud at)}")]
86758819 =/ parsed (parse at src)
86768820 ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
86778821 =/ mod=module p.parsed
8678− ?. (module-scope-valid mod prelude-values prelude-molds) [%| (crip "module has conflicting names: {(spud at)}")]
8822+ ?: ?=([%ui %api *] at)
8823+ =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
8824+ ?~ iface [%| (crip "API module needs unsupported inference: {(spud at)}")]
8825+ [%& [u.iface [[at u.iface] cache]]]
8826+ ?. (module-scope-valid mod prelude-values prelude-molds)
8827+ ?: (pending-declared-poke at mod prelude-values prelude-molds)
8828+ [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
8829+ [%| (crip "module has conflicting names: {(spud at)}")]
86798830 =/ vals=(list term) (global-value-names defs.mod)
86808831 ?: (lien vals |=(n=term =(n %main)))
86818832 [%| (crip "module kind needs unsupported inference: {(spud at)}")]
@@ -8693,7 +8844,7 @@
86938844 =/ env=ienv (resolve-supported-defs defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
86948845 ?. (module-values-complete defs.mod env)
86958846 [%| (crip "module definitions need unsupported inference: {(spud at)}")]
8696− [%& [[env p.mts at] [[at [env p.mts at]] cache.p.js]]]
8847+ [%& [[env p.mts at ~] [[at [env p.mts at ~]] cache.p.js]]]
86978848::
86988849:: +golden-types-with-modules fails closed for imports without prelude
86998850:: scope. +golden-types-with-prelude resolves supported library graphs;
@@ -8725,6 +8876,12 @@
87258876 ?~ prepared 'partial inference; module not checked\0aprelude interface is not supported'
87268877 (golden-types-with-prepared-prelude file src externals mark-externals modules prepared)
87278878::
8879+++ golden-types-with-prelude-and-internal
8880+ |= [file=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle prelude-source=@t internal-source=@t]
8881+ ^- @t
8882+ =/ prepared=(unit iprelude) (prepare-prelude-with-internal prelude-source internal-source)
8883+ (golden-types-with-prepared-prelude file src externals mark-externals modules prepared)
8884+::
87288885++ golden-types-with-prepared-prelude
87298886 |= [file=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle prepared=(unit iprelude)]
87308887 ^- @t
@@ -8735,6 +8892,8 @@
87358892 =/ prelude-molds=(list term) molds.u.prepared
87368893 =/ iface=(unit ifile) `iface.u.prepared
87378894 ?. (module-scope-valid p.parsed prelude-values prelude-molds)
8895+ ?: (pending-declared-poke file p.parsed prelude-values prelude-molds)
8896+ 'partial inference; module not checked\0amodule kind or scope needs unsupported inference'
87388897 'partial inference; module not checked\0amodule has conflicting names'
87398898 =/ js=jimports-result
87408899 (resolve-jibb-imports imports.p.parsed externals mark-externals modules ~[file] prelude-values prelude-molds ~ iface)
jibb-dev/lib/jibb/internal.jibbnew file+6
@@ -0,0 +1,6 @@
1+:: Representation for agent and in-process store pokes.
2+:: The prelude re-exports this mold; effect lowering and the runtime must
3+:: agree on these cells when effect execution is implemented.
4++$ poke
5+ [%agent agent=@tas mark=@tas payload=*]
6+ [%store module=@t action=@tas payload=*]
jibb-dev/lib/jibb/prelude.jibb+3
@@ -1,3 +1,6 @@
1+/= internal /lib/jibb/internal
2++$ poke poke.internal
3+
14:: Initial prelude functions. The rest of the inventory is still to come.
25++ same |= x=A x
36
tests/golden/doc-grammar-06-cart-store/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar tab, section "Example: a store and an island", code block 6 of the tab (block 5 is the EBNF)
22tests: a store module: a record mold with a mold application and the loobean mold `?`; a union with its cases below; a mold that is a name; a blank line; `++ main (store init update)`; a cast with its mold and expression on one line, `^- state [~ %.n]`; a gate with a cell sample; `?-` arms whose expressions are changes, `s(items=[item items.s])` and `s(open=(not open.s))`
33expect: parses
4−expect-types: a partial inference report
4+expect-types: a partial inference report; store kind and declaration scope remain unresolved
tests/golden/doc-grammar-06-cart-store/types.txt+1−6
@@ -1,7 +1,2 @@
11partial inference; module not checked
2−+$ state: not checked
3−+$ cart-action: cases proven disjoint; mold not checked
4−+$ poke: not checked
5−++ main: name is not available to partial inference
6−++ init: [items=(list @t) open=?]
7−++ update: $-([a=cart-action s=[items=(list @t) open=?]] [items=(list @t) open=?])
2+module kind or scope needs unsupported inference
tests/golden/prelude-unit-list-transforms/source.jibb+3
@@ -1,3 +1,6 @@
1+/= internal /lib/jibb/internal
2++$ poke poke.internal
3+
14:: Initial prelude functions. The rest of the inventory is still to come.
25++ same |= x=A x
36
tests/golden/prelude-unit-list-transforms/tokens.txt+1798−1785
@@ -1,1793 +1,1806 @@
1−2:1 glyph ++
2−2:4 name same
3−2:9 glyph |=
4−2:12 name x
5−2:13 tight glyph =
6−2:14 tight tvar A
7−2:16 name x
8−4:1 NEWLINE
9−4:1 glyph ++
10−4:4 name head
11−4:9 glyph |=
12−4:12 name p
13−4:13 tight glyph =
14−4:14 tight glyph [
15−4:15 tight tvar A
16−4:17 tvar B
17−4:18 tight glyph ]
18−5:3 INDENT
19−5:3 glyph ?-
20−5:6 name p
21−6:5 INDENT
22−6:5 glyph [
23−6:6 tight name a
24−6:8 name b
25−6:9 tight glyph ]
26−6:11 name a
27−8:1 DEDENT
28−8:1 DEDENT
29−8:1 NEWLINE
30−8:1 glyph ++
31−8:4 name tail
32−8:9 glyph |=
33−8:12 name p
34−8:13 tight glyph =
35−8:14 tight glyph [
36−8:15 tight tvar A
37−8:17 tvar B
38−8:18 tight glyph ]
39−9:3 INDENT
40−9:3 glyph ?-
41−9:6 name p
42−10:5 INDENT
43−10:5 glyph [
44−10:6 tight name a
45−10:8 name b
46−10:9 tight glyph ]
47−10:11 name b
48−12:1 DEDENT
49−12:1 DEDENT
50−12:1 NEWLINE
51−12:1 glyph ++
52−12:4 name not
53−12:8 glyph |=
54−12:11 name b
55−12:12 tight glyph =
56−12:13 tight glyph ?
57−13:3 INDENT
58−13:3 glyph ?-
59−13:6 name b
60−14:5 INDENT
61−14:5 lit %.y
62−14:9 lit %.n
63−15:5 NEWLINE
64−15:5 lit %.n
65−15:9 lit %.y
66−17:1 DEDENT
67−17:1 DEDENT
68−17:1 NEWLINE
69−17:1 glyph +$
70−17:4 name list
71−17:9 glyph |$
72−17:12 glyph [
73−17:13 tight tvar A
74−17:14 tight glyph ]
75−18:3 INDENT
76−18:3 lit ~
77−19:3 NEWLINE
78−19:3 glyph [
79−19:4 tight name i
80−19:5 tight glyph =
81−19:6 tight tvar A
82−19:8 name t
83−19:9 tight glyph =
84−19:10 tight glyph (
85−19:11 tight name list
86−19:16 tvar A
87−19:17 tight glyph )
88−19:18 tight glyph ]
89−21:1 DEDENT
90−21:1 NEWLINE
91−21:1 glyph +$
92−21:4 name unit
93−21:9 glyph |$
94−21:12 glyph [
95−21:13 tight tvar A
96−21:14 tight glyph ]
97−22:3 INDENT
98−22:3 lit ~
99−23:3 NEWLINE
100−23:3 glyph [
101−23:4 tight lit ~
102−23:6 name u
103−23:7 tight glyph =
104−23:8 tight tvar A
105−23:9 tight glyph ]
106−25:1 DEDENT
107−25:1 NEWLINE
108−25:1 glyph ++
109−25:4 name fall
110−25:9 glyph |=
111−25:12 name args
112−25:16 tight glyph =
113−25:17 tight glyph [
114−25:18 tight glyph (
115−25:19 tight name unit
116−25:24 tvar A
117−25:25 tight glyph )
118−25:27 tvar A
119−25:28 tight glyph ]
120−26:3 INDENT
121−26:3 glyph ?-
122−26:6 name args
123−27:5 INDENT
124−27:5 glyph [
125−27:6 tight name maybe
126−27:12 name fallback
127−27:20 tight glyph ]
128−28:7 INDENT
129−28:7 glyph ?-
130−28:10 name maybe
131−29:9 INDENT
132−29:9 lit ~
133−29:11 name fallback
134−30:9 NEWLINE
135−30:9 glyph [
136−30:10 tight lit ~
137−30:12 name value
138−30:17 tight glyph ]
139−30:19 name value
140−32:1 DEDENT
141−32:1 DEDENT
142−32:1 DEDENT
143−32:1 DEDENT
144−32:1 NEWLINE
145−32:1 glyph ++
146−32:4 name need
147−32:9 glyph |=
148−32:12 name maybe
149−32:17 tight glyph =
150−32:18 tight glyph (
151−32:19 tight name unit
152−32:24 tvar A
153−32:25 tight glyph )
154−33:3 INDENT
155−33:3 glyph ?-
156−33:6 name maybe
157−34:5 INDENT
158−34:5 lit ~
159−34:7 glyph !!
160−35:5 NEWLINE
161−35:5 glyph [
162−35:6 tight lit ~
163−35:8 name value
164−35:13 tight glyph ]
165−35:15 name value
166−37:1 DEDENT
167−37:1 DEDENT
168−37:1 NEWLINE
169−37:1 glyph ++
170−37:4 name weld
171−37:9 glyph |=
172−37:12 name args
173−37:16 tight glyph =
174−37:17 tight glyph [
175−37:18 tight glyph (
176−37:19 tight name list
177−37:24 tvar A
178−37:25 tight glyph )
179−37:27 glyph (
180−37:28 tight name list
181−37:33 tvar A
182−37:34 tight glyph )
183−37:35 tight glyph ]
184−38:3 INDENT
185−38:3 glyph ?-
186−38:6 name args
187−39:5 INDENT
188−39:5 glyph [
189−39:6 tight name xs
190−39:9 name ys
191−39:11 tight glyph ]
192−40:7 INDENT
193−40:7 glyph ^-
194−40:10 glyph (
195−40:11 tight name list
196−40:16 tvar A
197−40:17 tight glyph )
198−41:9 INDENT
199−41:9 glyph ?-
200−41:12 name xs
201−42:11 INDENT
202−42:11 lit ~
203−42:13 name ys
204−43:11 NEWLINE
205−43:11 glyph [
206−43:12 tight name item
207−43:17 name rest
208−43:21 tight glyph ]
209−43:23 glyph [
210−43:24 tight name item
211−43:29 glyph (
212−43:30 tight name weld
213−43:35 name rest
214−43:40 name ys
215−43:42 tight glyph )
216−43:43 tight glyph ]
217−45:1 DEDENT
218−45:1 DEDENT
219−45:1 DEDENT
220−45:1 DEDENT
221−45:1 DEDENT
222−45:1 NEWLINE
223−45:1 glyph ++
224−45:4 name turn
225−45:9 glyph |=
226−45:12 name args
227−45:16 tight glyph =
228−45:17 tight glyph [
229−45:18 tight glyph (
230−45:19 tight name list
231−45:24 tvar A
232−45:25 tight glyph )
233−45:27 glyph $-(
234−45:30 tight tvar A
235−45:32 tvar B
236−45:33 tight glyph )
237−45:34 tight glyph ]
238−46:3 INDENT
239−46:3 glyph ?-
240−46:6 name args
241−47:5 INDENT
242−47:5 glyph [
243−47:6 tight name xs
244−47:9 name f
245−47:10 tight glyph ]
246−48:7 INDENT
247−48:7 glyph ^-
248−48:10 glyph (
249−48:11 tight name list
250−48:16 tvar B
251−48:17 tight glyph )
252−49:9 INDENT
253−49:9 glyph ?-
254−49:12 name xs
255−50:11 INDENT
256−50:11 lit ~
257−50:13 lit ~
258−51:11 NEWLINE
259−51:11 glyph [
260−51:12 tight name item
261−51:17 name rest
262−51:21 tight glyph ]
263−51:23 glyph [
264−51:24 tight glyph (
265−51:25 tight name f
266−51:27 name item
267−51:31 tight glyph )
268−51:33 glyph (
269−51:34 tight name turn
270−51:39 name rest
271−51:44 name f
272−51:45 tight glyph )
273−51:46 tight glyph ]
274−53:1 DEDENT
275−53:1 DEDENT
276−53:1 DEDENT
277−53:1 DEDENT
278−53:1 DEDENT
279−53:1 NEWLINE
280−53:1 glyph +$
281−53:4 name dime
282−53:9 glyph [
283−53:10 tight name p
284−53:11 tight glyph =
285−53:12 tight aura @ta
286−53:16 name q
287−53:17 tight glyph =
288−53:18 tight aura @
289−53:19 tight glyph ]
290−55:1 NEWLINE
291−55:1 glyph +$
292−55:4 name hair
293−55:9 glyph [
294−55:10 tight name p
295−55:11 tight glyph =
296−55:12 tight aura @ud
297−55:16 name q
298−55:17 tight glyph =
299−55:18 tight aura @ud
300−55:21 tight glyph ]
301−57:1 NEWLINE
302−57:1 glyph +$
303−57:4 name pint
304−57:9 glyph [
305−57:10 tight name p
306−57:11 tight glyph =
307−57:12 tight glyph [
308−57:13 tight name p
309−57:14 tight glyph =
310−57:15 tight aura @
311−57:17 name q
312−57:18 tight glyph =
313−57:19 tight aura @
314−57:20 tight glyph ]
315−57:22 name q
316−57:23 tight glyph =
317−57:24 tight glyph [
318−57:25 tight name p
319−57:26 tight glyph =
320−57:27 tight aura @
321−57:29 name q
322−57:30 tight glyph =
323−57:31 tight aura @
324−57:32 tight glyph ]
325−57:33 tight glyph ]
326−59:1 NEWLINE
327−59:1 glyph +$
328−59:4 name coin
329−60:3 INDENT
330−60:3 glyph [
331−60:4 tight lit %$
332−60:7 name p
333−60:8 tight glyph =
334−60:9 tight name dime
335−60:13 tight glyph ]
336−61:3 NEWLINE
337−61:3 glyph [
338−61:4 tight lit %blob
339−61:10 name p
340−61:11 tight glyph =
341−61:12 tight glyph *
342−61:13 tight glyph ]
343−62:3 NEWLINE
344−62:3 glyph [
345−62:4 tight lit %many
346−62:10 name p
347−62:11 tight glyph =
348−62:12 tight glyph (
349−62:13 tight name list
350−62:18 name coin
351−62:22 tight glyph )
352−62:23 tight glyph ]
353−64:1 DEDENT
354−64:1 NEWLINE
355−64:1 glyph +$
356−64:4 name pair
357−64:9 glyph |$
358−64:12 glyph [
359−64:13 tight tvar A
360−64:15 tvar B
361−64:16 tight glyph ]
362−64:18 glyph [
363−64:19 tight name p
364−64:20 tight glyph =
365−64:21 tight tvar A
366−64:23 name q
367−64:24 tight glyph =
368−64:25 tight tvar B
369−64:26 tight glyph ]
370−66:1 NEWLINE
371−66:1 glyph +$
372−66:4 name trel
373−66:9 glyph |$
374−66:12 glyph [
375−66:13 tight tvar A
376−66:15 tvar B
377−66:17 tvar C
378−66:18 tight glyph ]
379−66:20 glyph [
380−66:21 tight name p
381−66:22 tight glyph =
382−66:23 tight tvar A
383−66:25 name q
384−66:26 tight glyph =
385−66:27 tight tvar B
386−66:29 name r
387−66:30 tight glyph =
388−66:31 tight tvar C
389−66:32 tight glyph ]
390−68:1 NEWLINE
391−68:1 glyph +$
392−68:4 name qual
393−68:9 glyph |$
394−68:12 glyph [
395−68:13 tight tvar A
396−68:15 tvar B
397−68:17 tvar C
398−68:19 tvar D
399−68:20 tight glyph ]
400−68:22 glyph [
401−68:23 tight name p
402−68:24 tight glyph =
403−68:25 tight tvar A
404−68:27 name q
405−68:28 tight glyph =
406−68:29 tight tvar B
407−68:31 name r
408−68:32 tight glyph =
409−68:33 tight tvar C
410−68:35 name s
411−68:36 tight glyph =
412−68:37 tight tvar D
413−68:38 tight glyph ]
414−70:1 NEWLINE
415−70:1 glyph +$
416−70:4 name cord
417−70:9 aura @t
418−72:1 NEWLINE
419−72:1 glyph +$
420−72:4 name knot
421−72:9 aura @ta
422−74:1 NEWLINE
423−74:1 glyph +$
424−74:4 name tape
425−74:9 glyph (
426−74:10 tight name list
427−74:15 aura @tD
428−74:18 tight glyph )
429−76:1 NEWLINE
430−76:1 glyph +$
431−76:4 name path
432−76:9 glyph (
433−76:10 tight name list
434−76:15 name knot
435−76:19 tight glyph )
436−78:1 NEWLINE
437−78:1 glyph +$
438−78:4 name tank
439−79:3 INDENT
440−79:3 name cord
441−80:3 NEWLINE
442−80:3 glyph [
443−80:4 tight lit %leaf
444−80:10 name p
445−80:11 tight glyph =
446−80:12 tight name tape
447−80:16 tight glyph ]
448−81:3 NEWLINE
449−81:3 glyph [
450−81:4 tight lit %palm
451−81:10 name p
452−81:11 tight glyph =
453−81:12 tight glyph (
454−81:13 tight name qual
455−81:18 name tape
456−81:23 name tape
457−81:28 name tape
458−81:33 name tape
459−81:37 tight glyph )
460−81:39 name q
461−81:40 tight glyph =
462−81:41 tight glyph (
463−81:42 tight name list
464−81:47 name tank
465−81:51 tight glyph )
466−81:52 tight glyph ]
467−82:3 NEWLINE
468−82:3 glyph [
469−82:4 tight lit %rose
470−82:10 name p
471−82:11 tight glyph =
472−82:12 tight glyph (
473−82:13 tight name trel
474−82:18 name tape
475−82:23 name tape
476−82:28 name tape
477−82:32 tight glyph )
478−82:34 name q
479−82:35 tight glyph =
480−82:36 tight glyph (
481−82:37 tight name list
482−82:42 name tank
483−82:46 tight glyph )
484−82:47 tight glyph ]
485−84:1 DEDENT
486−84:1 NEWLINE
487−84:1 glyph +$
488−84:4 name nail
489−84:9 glyph [
490−84:10 tight name p
1+1:1 glyph /=
2+1:4 name internal
3+1:13 glyph /
4+1:14 tight knot lib
5+1:17 tight glyph /
6+1:18 tight knot jibb
7+1:22 tight glyph /
8+1:23 tight knot internal
9+2:1 NEWLINE
10+2:1 glyph +$
11+2:4 name poke
12+2:9 wing poke.internal
13+5:1 NEWLINE
14+5:1 glyph ++
15+5:4 name same
16+5:9 glyph |=
17+5:12 name x
18+5:13 tight glyph =
19+5:14 tight tvar A
20+5:16 name x
21+7:1 NEWLINE
22+7:1 glyph ++
23+7:4 name head
24+7:9 glyph |=
25+7:12 name p
26+7:13 tight glyph =
27+7:14 tight glyph [
28+7:15 tight tvar A
29+7:17 tvar B
30+7:18 tight glyph ]
31+8:3 INDENT
32+8:3 glyph ?-
33+8:6 name p
34+9:5 INDENT
35+9:5 glyph [
36+9:6 tight name a
37+9:8 name b
38+9:9 tight glyph ]
39+9:11 name a
40+11:1 DEDENT
41+11:1 DEDENT
42+11:1 NEWLINE
43+11:1 glyph ++
44+11:4 name tail
45+11:9 glyph |=
46+11:12 name p
47+11:13 tight glyph =
48+11:14 tight glyph [
49+11:15 tight tvar A
50+11:17 tvar B
51+11:18 tight glyph ]
52+12:3 INDENT
53+12:3 glyph ?-
54+12:6 name p
55+13:5 INDENT
56+13:5 glyph [
57+13:6 tight name a
58+13:8 name b
59+13:9 tight glyph ]
60+13:11 name b
61+15:1 DEDENT
62+15:1 DEDENT
63+15:1 NEWLINE
64+15:1 glyph ++
65+15:4 name not
66+15:8 glyph |=
67+15:11 name b
68+15:12 tight glyph =
69+15:13 tight glyph ?
70+16:3 INDENT
71+16:3 glyph ?-
72+16:6 name b
73+17:5 INDENT
74+17:5 lit %.y
75+17:9 lit %.n
76+18:5 NEWLINE
77+18:5 lit %.n
78+18:9 lit %.y
79+20:1 DEDENT
80+20:1 DEDENT
81+20:1 NEWLINE
82+20:1 glyph +$
83+20:4 name list
84+20:9 glyph |$
85+20:12 glyph [
86+20:13 tight tvar A
87+20:14 tight glyph ]
88+21:3 INDENT
89+21:3 lit ~
90+22:3 NEWLINE
91+22:3 glyph [
92+22:4 tight name i
93+22:5 tight glyph =
94+22:6 tight tvar A
95+22:8 name t
96+22:9 tight glyph =
97+22:10 tight glyph (
98+22:11 tight name list
99+22:16 tvar A
100+22:17 tight glyph )
101+22:18 tight glyph ]
102+24:1 DEDENT
103+24:1 NEWLINE
104+24:1 glyph +$
105+24:4 name unit
106+24:9 glyph |$
107+24:12 glyph [
108+24:13 tight tvar A
109+24:14 tight glyph ]
110+25:3 INDENT
111+25:3 lit ~
112+26:3 NEWLINE
113+26:3 glyph [
114+26:4 tight lit ~
115+26:6 name u
116+26:7 tight glyph =
117+26:8 tight tvar A
118+26:9 tight glyph ]
119+28:1 DEDENT
120+28:1 NEWLINE
121+28:1 glyph ++
122+28:4 name fall
123+28:9 glyph |=
124+28:12 name args
125+28:16 tight glyph =
126+28:17 tight glyph [
127+28:18 tight glyph (
128+28:19 tight name unit
129+28:24 tvar A
130+28:25 tight glyph )
131+28:27 tvar A
132+28:28 tight glyph ]
133+29:3 INDENT
134+29:3 glyph ?-
135+29:6 name args
136+30:5 INDENT
137+30:5 glyph [
138+30:6 tight name maybe
139+30:12 name fallback
140+30:20 tight glyph ]
141+31:7 INDENT
142+31:7 glyph ?-
143+31:10 name maybe
144+32:9 INDENT
145+32:9 lit ~
146+32:11 name fallback
147+33:9 NEWLINE
148+33:9 glyph [
149+33:10 tight lit ~
150+33:12 name value
151+33:17 tight glyph ]
152+33:19 name value
153+35:1 DEDENT
154+35:1 DEDENT
155+35:1 DEDENT
156+35:1 DEDENT
157+35:1 NEWLINE
158+35:1 glyph ++
159+35:4 name need
160+35:9 glyph |=
161+35:12 name maybe
162+35:17 tight glyph =
163+35:18 tight glyph (
164+35:19 tight name unit
165+35:24 tvar A
166+35:25 tight glyph )
167+36:3 INDENT
168+36:3 glyph ?-
169+36:6 name maybe
170+37:5 INDENT
171+37:5 lit ~
172+37:7 glyph !!
173+38:5 NEWLINE
174+38:5 glyph [
175+38:6 tight lit ~
176+38:8 name value
177+38:13 tight glyph ]
178+38:15 name value
179+40:1 DEDENT
180+40:1 DEDENT
181+40:1 NEWLINE
182+40:1 glyph ++
183+40:4 name weld
184+40:9 glyph |=
185+40:12 name args
186+40:16 tight glyph =
187+40:17 tight glyph [
188+40:18 tight glyph (
189+40:19 tight name list
190+40:24 tvar A
191+40:25 tight glyph )
192+40:27 glyph (
193+40:28 tight name list
194+40:33 tvar A
195+40:34 tight glyph )
196+40:35 tight glyph ]
197+41:3 INDENT
198+41:3 glyph ?-
199+41:6 name args
200+42:5 INDENT
201+42:5 glyph [
202+42:6 tight name xs
203+42:9 name ys
204+42:11 tight glyph ]
205+43:7 INDENT
206+43:7 glyph ^-
207+43:10 glyph (
208+43:11 tight name list
209+43:16 tvar A
210+43:17 tight glyph )
211+44:9 INDENT
212+44:9 glyph ?-
213+44:12 name xs
214+45:11 INDENT
215+45:11 lit ~
216+45:13 name ys
217+46:11 NEWLINE
218+46:11 glyph [
219+46:12 tight name item
220+46:17 name rest
221+46:21 tight glyph ]
222+46:23 glyph [
223+46:24 tight name item
224+46:29 glyph (
225+46:30 tight name weld
226+46:35 name rest
227+46:40 name ys
228+46:42 tight glyph )
229+46:43 tight glyph ]
230+48:1 DEDENT
231+48:1 DEDENT
232+48:1 DEDENT
233+48:1 DEDENT
234+48:1 DEDENT
235+48:1 NEWLINE
236+48:1 glyph ++
237+48:4 name turn
238+48:9 glyph |=
239+48:12 name args
240+48:16 tight glyph =
241+48:17 tight glyph [
242+48:18 tight glyph (
243+48:19 tight name list
244+48:24 tvar A
245+48:25 tight glyph )
246+48:27 glyph $-(
247+48:30 tight tvar A
248+48:32 tvar B
249+48:33 tight glyph )
250+48:34 tight glyph ]
251+49:3 INDENT
252+49:3 glyph ?-
253+49:6 name args
254+50:5 INDENT
255+50:5 glyph [
256+50:6 tight name xs
257+50:9 name f
258+50:10 tight glyph ]
259+51:7 INDENT
260+51:7 glyph ^-
261+51:10 glyph (
262+51:11 tight name list
263+51:16 tvar B
264+51:17 tight glyph )
265+52:9 INDENT
266+52:9 glyph ?-
267+52:12 name xs
268+53:11 INDENT
269+53:11 lit ~
270+53:13 lit ~
271+54:11 NEWLINE
272+54:11 glyph [
273+54:12 tight name item
274+54:17 name rest
275+54:21 tight glyph ]
276+54:23 glyph [
277+54:24 tight glyph (
278+54:25 tight name f
279+54:27 name item
280+54:31 tight glyph )
281+54:33 glyph (
282+54:34 tight name turn
283+54:39 name rest
284+54:44 name f
285+54:45 tight glyph )
286+54:46 tight glyph ]
287+56:1 DEDENT
288+56:1 DEDENT
289+56:1 DEDENT
290+56:1 DEDENT
291+56:1 DEDENT
292+56:1 NEWLINE
293+56:1 glyph +$
294+56:4 name dime
295+56:9 glyph [
296+56:10 tight name p
297+56:11 tight glyph =
298+56:12 tight aura @ta
299+56:16 name q
300+56:17 tight glyph =
301+56:18 tight aura @
302+56:19 tight glyph ]
303+58:1 NEWLINE
304+58:1 glyph +$
305+58:4 name hair
306+58:9 glyph [
307+58:10 tight name p
308+58:11 tight glyph =
309+58:12 tight aura @ud
310+58:16 name q
311+58:17 tight glyph =
312+58:18 tight aura @ud
313+58:21 tight glyph ]
314+60:1 NEWLINE
315+60:1 glyph +$
316+60:4 name pint
317+60:9 glyph [
318+60:10 tight name p
319+60:11 tight glyph =
320+60:12 tight glyph [
321+60:13 tight name p
322+60:14 tight glyph =
323+60:15 tight aura @
324+60:17 name q
325+60:18 tight glyph =
326+60:19 tight aura @
327+60:20 tight glyph ]
328+60:22 name q
329+60:23 tight glyph =
330+60:24 tight glyph [
331+60:25 tight name p
332+60:26 tight glyph =
333+60:27 tight aura @
334+60:29 name q
335+60:30 tight glyph =
336+60:31 tight aura @
337+60:32 tight glyph ]
338+60:33 tight glyph ]
339+62:1 NEWLINE
340+62:1 glyph +$
341+62:4 name coin
342+63:3 INDENT
343+63:3 glyph [
344+63:4 tight lit %$
345+63:7 name p
346+63:8 tight glyph =
347+63:9 tight name dime
348+63:13 tight glyph ]
349+64:3 NEWLINE
350+64:3 glyph [
351+64:4 tight lit %blob
352+64:10 name p
353+64:11 tight glyph =
354+64:12 tight glyph *
355+64:13 tight glyph ]
356+65:3 NEWLINE
357+65:3 glyph [
358+65:4 tight lit %many
359+65:10 name p
360+65:11 tight glyph =
361+65:12 tight glyph (
362+65:13 tight name list
363+65:18 name coin
364+65:22 tight glyph )
365+65:23 tight glyph ]
366+67:1 DEDENT
367+67:1 NEWLINE
368+67:1 glyph +$
369+67:4 name pair
370+67:9 glyph |$
371+67:12 glyph [
372+67:13 tight tvar A
373+67:15 tvar B
374+67:16 tight glyph ]
375+67:18 glyph [
376+67:19 tight name p
377+67:20 tight glyph =
378+67:21 tight tvar A
379+67:23 name q
380+67:24 tight glyph =
381+67:25 tight tvar B
382+67:26 tight glyph ]
383+69:1 NEWLINE
384+69:1 glyph +$
385+69:4 name trel
386+69:9 glyph |$
387+69:12 glyph [
388+69:13 tight tvar A
389+69:15 tvar B
390+69:17 tvar C
391+69:18 tight glyph ]
392+69:20 glyph [
393+69:21 tight name p
394+69:22 tight glyph =
395+69:23 tight tvar A
396+69:25 name q
397+69:26 tight glyph =
398+69:27 tight tvar B
399+69:29 name r
400+69:30 tight glyph =
401+69:31 tight tvar C
402+69:32 tight glyph ]
403+71:1 NEWLINE
404+71:1 glyph +$
405+71:4 name qual
406+71:9 glyph |$
407+71:12 glyph [
408+71:13 tight tvar A
409+71:15 tvar B
410+71:17 tvar C
411+71:19 tvar D
412+71:20 tight glyph ]
413+71:22 glyph [
414+71:23 tight name p
415+71:24 tight glyph =
416+71:25 tight tvar A
417+71:27 name q
418+71:28 tight glyph =
419+71:29 tight tvar B
420+71:31 name r
421+71:32 tight glyph =
422+71:33 tight tvar C
423+71:35 name s
424+71:36 tight glyph =
425+71:37 tight tvar D
426+71:38 tight glyph ]
427+73:1 NEWLINE
428+73:1 glyph +$
429+73:4 name cord
430+73:9 aura @t
431+75:1 NEWLINE
432+75:1 glyph +$
433+75:4 name knot
434+75:9 aura @ta
435+77:1 NEWLINE
436+77:1 glyph +$
437+77:4 name tape
438+77:9 glyph (
439+77:10 tight name list
440+77:15 aura @tD
441+77:18 tight glyph )
442+79:1 NEWLINE
443+79:1 glyph +$
444+79:4 name path
445+79:9 glyph (
446+79:10 tight name list
447+79:15 name knot
448+79:19 tight glyph )
449+81:1 NEWLINE
450+81:1 glyph +$
451+81:4 name tank
452+82:3 INDENT
453+82:3 name cord
454+83:3 NEWLINE
455+83:3 glyph [
456+83:4 tight lit %leaf
457+83:10 name p
458+83:11 tight glyph =
459+83:12 tight name tape
460+83:16 tight glyph ]
461+84:3 NEWLINE
462+84:3 glyph [
463+84:4 tight lit %palm
464+84:10 name p
49146584:11 tight glyph =
492−84:12 tight name hair
493−84:17 name q
494−84:18 tight glyph =
495−84:19 tight name tape
496−84:23 tight glyph ]
497−86:1 NEWLINE
498−86:1 glyph +$
499−86:4 name edge
500−86:9 glyph [
501−86:10 tight name p
502−86:11 tight glyph =
503−86:12 tight name hair
504−86:17 name q
505−86:18 tight glyph =
506−86:19 tight glyph (
507−86:20 tight name unit
508−86:25 glyph [
509−86:26 tight name p
510−86:27 tight glyph =
511−86:28 tight glyph *
512−86:30 name q
513−86:31 tight glyph =
514−86:32 tight name nail
515−86:36 tight glyph ]
516−86:37 tight glyph )
517−86:38 tight glyph ]
518−88:1 NEWLINE
519−88:1 glyph +$
520−88:4 name rule
521−88:9 glyph $-(
522−88:12 tight name nail
523−88:17 name edge
524−88:21 tight glyph )
525−90:1 NEWLINE
526−90:1 glyph +$
527−90:4 name spot
528−90:9 glyph [
529−90:10 tight name p
530−90:11 tight glyph =
531−90:12 tight name path
532−90:17 name q
533−90:18 tight glyph =
534−90:19 tight name pint
535−90:23 tight glyph ]
536−92:1 NEWLINE
537−92:1 glyph +$
538−92:4 name toon
539−93:3 INDENT
540−93:3 glyph [
541−93:4 tight lit %0
542−93:7 name p
543−93:8 tight glyph =
544−93:9 tight glyph *
545−93:10 tight glyph ]
546−94:3 NEWLINE
547−94:3 glyph [
548−94:4 tight lit %1
549−94:7 name p
550−94:8 tight glyph =
551−94:9 tight glyph *
552−94:10 tight glyph ]
553−95:3 NEWLINE
554−95:3 glyph [
555−95:4 tight lit %2
556−95:7 name p
557−95:8 tight glyph =
558−95:9 tight glyph (
559−95:10 tight name list
560−95:15 name tank
561−95:19 tight glyph )
562−95:20 tight glyph ]
563−97:1 DEDENT
564−97:1 NEWLINE
565−97:1 glyph +$
566−97:4 name like
567−97:9 glyph |$
568−97:12 glyph [
569−97:13 tight tvar A
570−97:14 tight glyph ]
571−97:16 glyph [
572−97:17 tight name p
573−97:18 tight glyph =
574−97:19 tight name hair
575−97:24 name q
576−97:25 tight glyph =
577−97:26 tight glyph (
578−97:27 tight name unit
579−97:32 glyph [
580−97:33 tight name p
581−97:34 tight glyph =
582−97:35 tight tvar A
583−97:37 name q
584−97:38 tight glyph =
585−97:39 tight name nail
586−97:43 tight glyph ]
587−97:44 tight glyph )
588−97:45 tight glyph ]
589−99:1 NEWLINE
590−99:1 glyph ++
591−99:4 name wonk
592−99:9 glyph |=
593−99:12 name veq
594−99:15 tight glyph =
595−99:16 tight glyph (
596−99:17 tight name like
597−99:22 tvar A
598−99:23 tight glyph )
599−100:3 INDENT
600−100:3 glyph ?-
601−100:6 wing q.veq
602−101:5 INDENT
603−101:5 lit ~
604−101:7 glyph !!
605−102:5 NEWLINE
606−102:5 glyph [
607−102:6 tight lit ~
608−102:8 name product
609−102:15 tight glyph ]
610−102:17 wing p.product
611−104:1 DEDENT
612−104:1 DEDENT
613−104:1 NEWLINE
614−104:1 glyph +$
615−104:4 name lone
616−104:9 glyph |$
617−104:12 glyph [
618−104:13 tight tvar A
619−104:14 tight glyph ]
620−104:16 glyph [
621−104:17 tight name p
622−104:18 tight glyph =
623−104:19 tight tvar A
624−104:20 tight glyph ]
625−106:1 NEWLINE
626−106:1 glyph +$
627−106:4 name lest
628−106:9 glyph |$
629−106:12 glyph [
630−106:13 tight tvar A
631−106:14 tight glyph ]
632−106:16 glyph [
633−106:17 tight name i
634−106:18 tight glyph =
635−106:19 tight tvar A
636−106:21 name t
637−106:22 tight glyph =
638−106:23 tight glyph (
639−106:24 tight name list
640−106:29 tvar A
641−106:30 tight glyph )
642−106:31 tight glyph ]
643−108:1 NEWLINE
644−108:1 glyph +$
645−108:4 name pole
646−108:9 glyph |$
647−108:12 glyph [
648−108:13 tight tvar A
649−108:14 tight glyph ]
650−109:3 INDENT
651−109:3 lit ~
652−110:3 NEWLINE
653−110:3 glyph [
654−110:4 tight tvar A
655−110:6 glyph (
656−110:7 tight name pole
657−110:12 tvar A
658−110:13 tight glyph )
659−110:14 tight glyph ]
660−112:1 DEDENT
661−112:1 NEWLINE
662−112:1 glyph +$
663−112:4 name quip
664−112:9 glyph |$
665−112:12 glyph [
666−112:13 tight tvar A
667−112:15 tvar B
668−112:16 tight glyph ]
669−112:18 glyph [
670−112:19 tight glyph (
671−112:20 tight name list
672−112:25 tvar A
673−112:26 tight glyph )
674−112:28 tvar B
675−112:29 tight glyph ]
676−114:1 NEWLINE
677−114:1 glyph +$
678−114:4 name tree
679−114:9 glyph |$
680−114:12 glyph [
681−114:13 tight tvar A
682−114:14 tight glyph ]
683−115:3 INDENT
684−115:3 lit ~
685−116:3 NEWLINE
686−116:3 glyph [
687−116:4 tight name n
688−116:5 tight glyph =
689−116:6 tight tvar A
690−116:8 name l
691−116:9 tight glyph =
692−116:10 tight glyph (
693−116:11 tight name tree
694−116:16 tvar A
695−116:17 tight glyph )
696−116:19 name r
697−116:20 tight glyph =
698−116:21 tight glyph (
699−116:22 tight name tree
700−116:27 tvar A
701−116:28 tight glyph )
702−116:29 tight glyph ]
703−118:1 DEDENT
704−118:1 NEWLINE
705−118:1 glyph +$
706−118:4 name each
707−118:9 glyph |$
708−118:12 glyph [
709−118:13 tight tvar A
710−118:15 tvar B
711−118:16 tight glyph ]
712−119:3 INDENT
466+84:12 tight glyph (
467+84:13 tight name qual
468+84:18 name tape
469+84:23 name tape
470+84:28 name tape
471+84:33 name tape
472+84:37 tight glyph )
473+84:39 name q
474+84:40 tight glyph =
475+84:41 tight glyph (
476+84:42 tight name list
477+84:47 name tank
478+84:51 tight glyph )
479+84:52 tight glyph ]
480+85:3 NEWLINE
481+85:3 glyph [
482+85:4 tight lit %rose
483+85:10 name p
484+85:11 tight glyph =
485+85:12 tight glyph (
486+85:13 tight name trel
487+85:18 name tape
488+85:23 name tape
489+85:28 name tape
490+85:32 tight glyph )
491+85:34 name q
492+85:35 tight glyph =
493+85:36 tight glyph (
494+85:37 tight name list
495+85:42 name tank
496+85:46 tight glyph )
497+85:47 tight glyph ]
498+87:1 DEDENT
499+87:1 NEWLINE
500+87:1 glyph +$
501+87:4 name nail
502+87:9 glyph [
503+87:10 tight name p
504+87:11 tight glyph =
505+87:12 tight name hair
506+87:17 name q
507+87:18 tight glyph =
508+87:19 tight name tape
509+87:23 tight glyph ]
510+89:1 NEWLINE
511+89:1 glyph +$
512+89:4 name edge
513+89:9 glyph [
514+89:10 tight name p
515+89:11 tight glyph =
516+89:12 tight name hair
517+89:17 name q
518+89:18 tight glyph =
519+89:19 tight glyph (
520+89:20 tight name unit
521+89:25 glyph [
522+89:26 tight name p
523+89:27 tight glyph =
524+89:28 tight glyph *
525+89:30 name q
526+89:31 tight glyph =
527+89:32 tight name nail
528+89:36 tight glyph ]
529+89:37 tight glyph )
530+89:38 tight glyph ]
531+91:1 NEWLINE
532+91:1 glyph +$
533+91:4 name rule
534+91:9 glyph $-(
535+91:12 tight name nail
536+91:17 name edge
537+91:21 tight glyph )
538+93:1 NEWLINE
539+93:1 glyph +$
540+93:4 name spot
541+93:9 glyph [
542+93:10 tight name p
543+93:11 tight glyph =
544+93:12 tight name path
545+93:17 name q
546+93:18 tight glyph =
547+93:19 tight name pint
548+93:23 tight glyph ]
549+95:1 NEWLINE
550+95:1 glyph +$
551+95:4 name toon
552+96:3 INDENT
553+96:3 glyph [
554+96:4 tight lit %0
555+96:7 name p
556+96:8 tight glyph =
557+96:9 tight glyph *
558+96:10 tight glyph ]
559+97:3 NEWLINE
560+97:3 glyph [
561+97:4 tight lit %1
562+97:7 name p
563+97:8 tight glyph =
564+97:9 tight glyph *
565+97:10 tight glyph ]
566+98:3 NEWLINE
567+98:3 glyph [
568+98:4 tight lit %2
569+98:7 name p
570+98:8 tight glyph =
571+98:9 tight glyph (
572+98:10 tight name list
573+98:15 name tank
574+98:19 tight glyph )
575+98:20 tight glyph ]
576+100:1 DEDENT
577+100:1 NEWLINE
578+100:1 glyph +$
579+100:4 name like
580+100:9 glyph |$
581+100:12 glyph [
582+100:13 tight tvar A
583+100:14 tight glyph ]
584+100:16 glyph [
585+100:17 tight name p
586+100:18 tight glyph =
587+100:19 tight name hair
588+100:24 name q
589+100:25 tight glyph =
590+100:26 tight glyph (
591+100:27 tight name unit
592+100:32 glyph [
593+100:33 tight name p
594+100:34 tight glyph =
595+100:35 tight tvar A
596+100:37 name q
597+100:38 tight glyph =
598+100:39 tight name nail
599+100:43 tight glyph ]
600+100:44 tight glyph )
601+100:45 tight glyph ]
602+102:1 NEWLINE
603+102:1 glyph ++
604+102:4 name wonk
605+102:9 glyph |=
606+102:12 name veq
607+102:15 tight glyph =
608+102:16 tight glyph (
609+102:17 tight name like
610+102:22 tvar A
611+102:23 tight glyph )
612+103:3 INDENT
613+103:3 glyph ?-
614+103:6 wing q.veq
615+104:5 INDENT
616+104:5 lit ~
617+104:7 glyph !!
618+105:5 NEWLINE
619+105:5 glyph [
620+105:6 tight lit ~
621+105:8 name product
622+105:15 tight glyph ]
623+105:17 wing p.product
624+107:1 DEDENT
625+107:1 DEDENT
626+107:1 NEWLINE
627+107:1 glyph +$
628+107:4 name lone
629+107:9 glyph |$
630+107:12 glyph [
631+107:13 tight tvar A
632+107:14 tight glyph ]
633+107:16 glyph [
634+107:17 tight name p
635+107:18 tight glyph =
636+107:19 tight tvar A
637+107:20 tight glyph ]
638+109:1 NEWLINE
639+109:1 glyph +$
640+109:4 name lest
641+109:9 glyph |$
642+109:12 glyph [
643+109:13 tight tvar A
644+109:14 tight glyph ]
645+109:16 glyph [
646+109:17 tight name i
647+109:18 tight glyph =
648+109:19 tight tvar A
649+109:21 name t
650+109:22 tight glyph =
651+109:23 tight glyph (
652+109:24 tight name list
653+109:29 tvar A
654+109:30 tight glyph )
655+109:31 tight glyph ]
656+111:1 NEWLINE
657+111:1 glyph +$
658+111:4 name pole
659+111:9 glyph |$
660+111:12 glyph [
661+111:13 tight tvar A
662+111:14 tight glyph ]
663+112:3 INDENT
664+112:3 lit ~
665+113:3 NEWLINE
666+113:3 glyph [
667+113:4 tight tvar A
668+113:6 glyph (
669+113:7 tight name pole
670+113:12 tvar A
671+113:13 tight glyph )
672+113:14 tight glyph ]
673+115:1 DEDENT
674+115:1 NEWLINE
675+115:1 glyph +$
676+115:4 name quip
677+115:9 glyph |$
678+115:12 glyph [
679+115:13 tight tvar A
680+115:15 tvar B
681+115:16 tight glyph ]
682+115:18 glyph [
683+115:19 tight glyph (
684+115:20 tight name list
685+115:25 tvar A
686+115:26 tight glyph )
687+115:28 tvar B
688+115:29 tight glyph ]
689+117:1 NEWLINE
690+117:1 glyph +$
691+117:4 name tree
692+117:9 glyph |$
693+117:12 glyph [
694+117:13 tight tvar A
695+117:14 tight glyph ]
696+118:3 INDENT
697+118:3 lit ~
698+119:3 NEWLINE
713699119:3 glyph [
714−119:4 tight lit %|
715−119:7 name p
716−119:8 tight glyph =
717−119:9 tight tvar B
718−119:10 tight glyph ]
719−120:3 NEWLINE
720−120:3 glyph [
721−120:4 tight lit %&
722−120:7 name p
723−120:8 tight glyph =
724−120:9 tight tvar A
725−120:10 tight glyph ]
726−122:1 DEDENT
727−122:1 NEWLINE
728−122:1 glyph +$
729−122:4 name bloq
730−122:9 aura @
731−124:1 NEWLINE
732−124:1 glyph ++
733−124:4 name some
734−124:9 glyph |=
735−124:12 name item
736−124:16 tight glyph =
737−124:17 tight tvar A
738−124:19 glyph `
739−124:20 tight name item
740−126:1 NEWLINE
741−126:1 glyph ++
742−126:4 name lure
743−126:9 glyph |=
744−126:12 name item
745−126:16 tight glyph =
746−126:17 tight tvar A
747−127:3 INDENT
748−127:3 glyph ^-
749−127:6 glyph (
750−127:7 tight name list
751−127:12 tvar A
752−127:13 tight glyph )
753−127:15 glyph [
754−127:16 tight name item
755−127:21 lit ~
756−127:22 tight glyph ]
757−129:1 DEDENT
700+119:4 tight name n
701+119:5 tight glyph =
702+119:6 tight tvar A
703+119:8 name l
704+119:9 tight glyph =
705+119:10 tight glyph (
706+119:11 tight name tree
707+119:16 tvar A
708+119:17 tight glyph )
709+119:19 name r
710+119:20 tight glyph =
711+119:21 tight glyph (
712+119:22 tight name tree
713+119:27 tvar A
714+119:28 tight glyph )
715+119:29 tight glyph ]
716+121:1 DEDENT
717+121:1 NEWLINE
718+121:1 glyph +$
719+121:4 name each
720+121:9 glyph |$
721+121:12 glyph [
722+121:13 tight tvar A
723+121:15 tvar B
724+121:16 tight glyph ]
725+122:3 INDENT
726+122:3 glyph [
727+122:4 tight lit %|
728+122:7 name p
729+122:8 tight glyph =
730+122:9 tight tvar B
731+122:10 tight glyph ]
732+123:3 NEWLINE
733+123:3 glyph [
734+123:4 tight lit %&
735+123:7 name p
736+123:8 tight glyph =
737+123:9 tight tvar A
738+123:10 tight glyph ]
739+125:1 DEDENT
740+125:1 NEWLINE
741+125:1 glyph +$
742+125:4 name bloq
743+125:9 aura @
744+127:1 NEWLINE
745+127:1 glyph ++
746+127:4 name some
747+127:9 glyph |=
748+127:12 name item
749+127:16 tight glyph =
750+127:17 tight tvar A
751+127:19 glyph `
752+127:20 tight name item
758753129:1 NEWLINE
759754129:1 glyph ++
760−129:4 name snoc
755+129:4 name lure
761756129:9 glyph |=
762−129:12 name args
757+129:12 name item
763758129:16 tight glyph =
764−129:17 tight glyph [
765−129:18 tight glyph (
766−129:19 tight name list
767−129:24 tvar A
768−129:25 tight glyph )
769−129:27 tvar A
770−129:28 tight glyph ]
759+129:17 tight tvar A
771760130:3 INDENT
772−130:3 glyph ?-
773−130:6 name args
774−131:5 INDENT
775−131:5 glyph [
776−131:6 tight name xs
777−131:9 name item
778−131:13 tight glyph ]
779−131:15 glyph (
780−131:16 tight name weld
781−131:21 name xs
782−131:24 glyph [
783−131:25 tight name item
784−131:30 lit ~
785−131:31 tight glyph ]
786−131:32 tight glyph )
787−133:1 DEDENT
788−133:1 DEDENT
789−133:1 NEWLINE
790−133:1 glyph ++
791−133:4 name flop
792−133:9 glyph |=
793−133:12 name xs
794−133:14 tight glyph =
795−133:15 tight glyph (
796−133:16 tight name list
797−133:21 tvar A
798−133:22 tight glyph )
799−134:3 INDENT
800−134:3 glyph ++
801−134:6 name reverse-into
802−134:19 glyph |=
803−134:22 name args
804−134:26 tight glyph =
805−134:27 tight glyph [
806−134:28 tight glyph (
807−134:29 tight name list
808−134:34 tvar A
809−134:35 tight glyph )
810−134:37 glyph (
811−134:38 tight name list
812−134:43 tvar A
813−134:44 tight glyph )
814−134:45 tight glyph ]
815−135:5 INDENT
816−135:5 glyph ?-
817−135:8 name args
818−136:7 INDENT
819−136:7 glyph [
820−136:8 tight name rest
821−136:13 name acc
822−136:16 tight glyph ]
823−137:9 INDENT
824−137:9 glyph ?-
825−137:12 name rest
826−138:11 INDENT
827−138:11 lit ~
828−138:13 name acc
829−139:11 NEWLINE
830−139:11 glyph [
831−139:12 tight name item
832−139:17 name more
833−139:21 tight glyph ]
834−139:23 glyph (
835−139:24 tight name reverse-into
836−139:37 name more
837−139:42 glyph [
838−139:43 tight name item
839−139:48 name acc
840−139:51 tight glyph ]
841−139:52 tight glyph )
842−140:3 DEDENT
843−140:3 DEDENT
844−140:3 DEDENT
845−140:3 DEDENT
846−140:3 NEWLINE
847−140:3 glyph (
848−140:4 tight name reverse-into
849−140:17 name xs
850−140:20 lit ~
851−140:21 tight glyph )
852−142:1 DEDENT
853−142:1 NEWLINE
854−142:1 glyph ++
855−142:4 name drop
856−142:9 glyph |=
857−142:12 name maybe
858−142:17 tight glyph =
859−142:18 tight glyph (
860−142:19 tight name unit
861−142:24 tvar A
862−142:25 tight glyph )
863−143:3 INDENT
864−143:3 glyph ?-
865−143:6 name maybe
866−144:5 INDENT
867−144:5 lit ~
868−144:7 lit ~
869−145:5 NEWLINE
870−145:5 glyph [
871−145:6 tight lit ~
872−145:8 name value
873−145:13 tight glyph ]
874−145:15 glyph [
875−145:16 tight name value
876−145:22 lit ~
877−145:23 tight glyph ]
878−147:1 DEDENT
879−147:1 DEDENT
880−147:1 NEWLINE
881−147:1 glyph ++
882−147:4 name bind
883−147:9 glyph |=
884−147:12 name args
885−147:16 tight glyph =
886−147:17 tight glyph [
887−147:18 tight glyph (
888−147:19 tight name unit
889−147:24 tvar A
890−147:25 tight glyph )
891−147:27 glyph $-(
892−147:30 tight tvar A
893−147:32 tvar B
894−147:33 tight glyph )
895−147:34 tight glyph ]
896−148:3 INDENT
897−148:3 glyph ?-
898−148:6 name args
899−149:5 INDENT
900−149:5 glyph [
901−149:6 tight name maybe
902−149:12 name f
903−149:13 tight glyph ]
904−149:15 glyph ^-
905−149:18 glyph (
906−149:19 tight name unit
907−149:24 tvar B
908−149:25 tight glyph )
909−150:7 INDENT
910−150:7 glyph ?-
911−150:10 name maybe
912−151:9 INDENT
913−151:9 lit ~
914−151:11 lit ~
915−152:9 NEWLINE
916−152:9 glyph [
917−152:10 tight lit ~
918−152:12 name value
919−152:17 tight glyph ]
920−152:19 glyph `
921−152:20 tight glyph (
922−152:21 tight name f
923−152:23 name value
924−152:28 tight glyph )
925−154:1 DEDENT
926−154:1 DEDENT
927−154:1 DEDENT
928−154:1 DEDENT
929−154:1 NEWLINE
930−154:1 glyph ++
931−154:4 name biff
932−154:9 glyph |=
933−154:12 name args
934−154:16 tight glyph =
935−154:17 tight glyph [
936−154:18 tight glyph (
937−154:19 tight name unit
938−154:24 tvar A
939−154:25 tight glyph )
940−154:27 glyph $-(
941−154:30 tight tvar A
942−154:32 glyph (
943−154:33 tight name unit
944−154:38 tvar B
945−154:39 tight glyph )
946−154:40 tight glyph )
947−154:41 tight glyph ]
948−155:3 INDENT
949−155:3 glyph ?-
950−155:6 name args
951−156:5 INDENT
952−156:5 glyph [
953−156:6 tight name maybe
954−156:12 name f
955−156:13 tight glyph ]
956−156:15 glyph ^-
957−156:18 glyph (
958−156:19 tight name unit
959−156:24 tvar B
960−156:25 tight glyph )
961−157:7 INDENT
962−157:7 glyph ?-
963−157:10 name maybe
964−158:9 INDENT
965−158:9 lit ~
966−158:11 lit ~
967−159:9 NEWLINE
968−159:9 glyph [
969−159:10 tight lit ~
970−159:12 name value
971−159:17 tight glyph ]
972−159:19 glyph (
973−159:20 tight name f
974−159:22 name value
975−159:27 tight glyph )
976−161:1 DEDENT
977−161:1 DEDENT
978−161:1 DEDENT
979−161:1 DEDENT
980−161:1 NEWLINE
981−161:1 glyph ++
982−161:4 name both
983−161:9 glyph |=
984−161:12 name args
985−161:16 tight glyph =
986−161:17 tight glyph [
987−161:18 tight glyph (
988−161:19 tight name unit
989−161:24 tvar A
990−161:25 tight glyph )
991−161:27 glyph (
992−161:28 tight name unit
993−161:33 tvar B
994−161:34 tight glyph )
995−161:35 tight glyph ]
996−162:3 INDENT
997−162:3 glyph ?-
998−162:6 name args
999−163:5 INDENT
1000−163:5 glyph [
1001−163:6 tight name first
1002−163:12 name second
1003−163:18 tight glyph ]
1004−163:20 glyph ^-
1005−163:23 glyph (
1006−163:24 tight name unit
1007−163:29 glyph [
1008−163:30 tight tvar A
1009−163:32 tvar B
1010−163:33 tight glyph ]
1011−163:34 tight glyph )
1012−164:7 INDENT
1013−164:7 glyph ?-
1014−164:10 name first
1015−165:9 INDENT
1016−165:9 lit ~
1017−165:11 lit ~
1018−166:9 NEWLINE
1019−166:9 glyph [
1020−166:10 tight lit ~
1021−166:12 name a
1022−166:13 tight glyph ]
1023−167:11 INDENT
1024−167:11 glyph ?-
1025−167:14 name second
1026−168:13 INDENT
1027−168:13 lit ~
1028−168:15 lit ~
1029−169:13 NEWLINE
1030−169:13 glyph [
1031−169:14 tight lit ~
1032−169:16 name b
1033−169:17 tight glyph ]
1034−169:19 glyph `
1035−169:20 tight glyph [
1036−169:21 tight name a
1037−169:23 name b
1038−169:24 tight glyph ]
1039−171:1 DEDENT
1040−171:1 DEDENT
1041−171:1 DEDENT
1042−171:1 DEDENT
1043−171:1 DEDENT
1044−171:1 DEDENT
1045−171:1 NEWLINE
1046−171:1 glyph ++
1047−171:4 name clap
1048−171:9 glyph |=
1049−171:12 name args
1050−171:16 tight glyph =
1051−171:17 tight glyph [
1052−171:18 tight glyph (
1053−171:19 tight name unit
1054−171:24 tvar A
1055−171:25 tight glyph )
1056−171:27 glyph (
1057−171:28 tight name unit
1058−171:33 tvar A
1059−171:34 tight glyph )
1060−171:36 glyph $-(
1061−171:39 tight glyph [
1062−171:40 tight tvar A
1063−171:42 tvar A
1064−171:43 tight glyph ]
1065−171:45 tvar A
1066−171:46 tight glyph )
1067−171:47 tight glyph ]
1068−172:3 INDENT
1069−172:3 glyph ?-
1070−172:6 name args
1071−173:5 INDENT
1072−173:5 glyph [
1073−173:6 tight name first
1074−173:12 name second
1075−173:19 name combine
1076−173:26 tight glyph ]
1077−173:28 glyph ^-
1078−173:31 glyph (
1079−173:32 tight name unit
1080−173:37 tvar A
1081−173:38 tight glyph )
1082−174:7 INDENT
1083−174:7 glyph ?-
1084−174:10 name first
1085−175:9 INDENT
1086−175:9 lit ~
1087−175:11 name second
1088−176:9 NEWLINE
1089−176:9 glyph [
1090−176:10 tight lit ~
1091−176:12 name a
1092−176:13 tight glyph ]
1093−177:11 INDENT
1094−177:11 glyph ?-
1095−177:14 name second
1096−178:13 INDENT
1097−178:13 lit ~
1098−178:15 name first
1099−179:13 NEWLINE
1100−179:13 glyph [
1101−179:14 tight lit ~
1102−179:16 name b
1103−179:17 tight glyph ]
1104−179:19 glyph `
1105−179:20 tight glyph (
1106−179:21 tight name combine
1107−179:29 name a
1108−179:31 name b
1109−179:32 tight glyph )
1110−181:1 DEDENT
1111−181:1 DEDENT
1112−181:1 DEDENT
1113−181:1 DEDENT
1114−181:1 DEDENT
1115−181:1 DEDENT
1116−181:1 NEWLINE
1117−181:1 glyph ++
1118−181:4 name clef
1119−181:9 glyph |=
1120−181:12 name args
1121−181:16 tight glyph =
1122−181:17 tight glyph [
1123−181:18 tight glyph (
1124−181:19 tight name unit
1125−181:24 tvar A
1126−181:25 tight glyph )
1127−181:27 glyph (
1128−181:28 tight name unit
1129−181:33 tvar B
1130−181:34 tight glyph )
1131−181:36 glyph $-(
1132−181:39 tight glyph [
1133−181:40 tight tvar A
1134−181:42 tvar B
1135−181:43 tight glyph ]
1136−181:45 glyph (
1137−181:46 tight name unit
1138−181:51 tvar C
1139−181:52 tight glyph )
1140−181:53 tight glyph )
1141−181:54 tight glyph ]
1142−182:3 INDENT
1143−182:3 glyph ?-
1144−182:6 name args
1145−183:5 INDENT
1146−183:5 glyph [
1147−183:6 tight name first
1148−183:12 name second
1149−183:19 name combine
1150−183:26 tight glyph ]
1151−183:28 glyph ^-
1152−183:31 glyph (
1153−183:32 tight name unit
1154−183:37 tvar C
1155−183:38 tight glyph )
1156−184:7 INDENT
1157−184:7 glyph ?-
1158−184:10 name first
1159−185:9 INDENT
1160−185:9 lit ~
1161−185:11 lit ~
1162−186:9 NEWLINE
1163−186:9 glyph [
1164−186:10 tight lit ~
1165−186:12 name a
1166−186:13 tight glyph ]
1167−187:11 INDENT
1168−187:11 glyph ?-
1169−187:14 name second
1170−188:13 INDENT
1171−188:13 lit ~
1172−188:15 lit ~
1173−189:13 NEWLINE
1174−189:13 glyph [
1175−189:14 tight lit ~
1176−189:16 name b
1177−189:17 tight glyph ]
1178−189:19 glyph (
1179−189:20 tight name combine
1180−189:28 name a
1181−189:30 name b
1182−189:31 tight glyph )
1183−191:1 DEDENT
1184−191:1 DEDENT
1185−191:1 DEDENT
1186−191:1 DEDENT
1187−191:1 DEDENT
1188−191:1 DEDENT
1189−191:1 NEWLINE
1190−191:1 glyph ++
1191−191:4 name skim
1192−191:9 glyph |=
1193−191:12 name args
1194−191:16 tight glyph =
1195−191:17 tight glyph [
1196−191:18 tight glyph (
1197−191:19 tight name list
1198−191:24 tvar A
1199−191:25 tight glyph )
1200−191:27 glyph $-(
1201−191:30 tight tvar A
1202−191:32 glyph ?
1203−191:33 tight glyph )
1204−191:34 tight glyph ]
1205−192:3 INDENT
1206−192:3 glyph ?-
1207−192:6 name args
1208−193:5 INDENT
1209−193:5 glyph [
1210−193:6 tight name xs
1211−193:9 name predicate
1212−193:18 tight glyph ]
1213−194:7 INDENT
1214−194:7 glyph ?-
1215−194:10 name xs
1216−195:9 INDENT
1217−195:9 lit ~
1218−195:11 lit ~
1219−196:9 NEWLINE
1220−196:9 glyph [
1221−196:10 tight name item
1222−196:15 name rest
1223−196:19 tight glyph ]
1224−197:11 INDENT
1225−197:11 glyph ?-
1226−197:14 glyph (
1227−197:15 tight name predicate
1228−197:25 name item
1229−197:29 tight glyph )
1230−198:13 INDENT
1231−198:13 lit %.y
1232−198:17 glyph [
1233−198:18 tight name item
1234−198:23 glyph (
1235−198:24 tight name skim
1236−198:29 name rest
1237−198:34 name predicate
1238−198:43 tight glyph )
1239−198:44 tight glyph ]
1240−199:13 NEWLINE
1241−199:13 lit %.n
1242−199:17 glyph (
1243−199:18 tight name skim
1244−199:23 name rest
1245−199:28 name predicate
1246−199:37 tight glyph )
1247−201:1 DEDENT
1248−201:1 DEDENT
1249−201:1 DEDENT
1250−201:1 DEDENT
1251−201:1 DEDENT
1252−201:1 DEDENT
1253−201:1 NEWLINE
1254−201:1 glyph ++
1255−201:4 name skip
1256−201:9 glyph |=
1257−201:12 name args
1258−201:16 tight glyph =
1259−201:17 tight glyph [
1260−201:18 tight glyph (
1261−201:19 tight name list
1262−201:24 tvar A
1263−201:25 tight glyph )
1264−201:27 glyph $-(
1265−201:30 tight tvar A
1266−201:32 glyph ?
1267−201:33 tight glyph )
1268−201:34 tight glyph ]
1269−202:3 INDENT
1270−202:3 glyph ?-
1271−202:6 name args
1272−203:5 INDENT
1273−203:5 glyph [
1274−203:6 tight name xs
1275−203:9 name predicate
1276−203:18 tight glyph ]
1277−204:7 INDENT
1278−204:7 glyph ?-
1279−204:10 name xs
1280−205:9 INDENT
1281−205:9 lit ~
1282−205:11 lit ~
1283−206:9 NEWLINE
1284−206:9 glyph [
1285−206:10 tight name item
1286−206:15 name rest
1287−206:19 tight glyph ]
1288−207:11 INDENT
1289−207:11 glyph ?-
1290−207:14 glyph (
1291−207:15 tight name predicate
1292−207:25 name item
1293−207:29 tight glyph )
1294−208:13 INDENT
1295−208:13 lit %.y
1296−208:17 glyph (
1297−208:18 tight name skip
1298−208:23 name rest
1299−208:28 name predicate
1300−208:37 tight glyph )
1301−209:13 NEWLINE
1302−209:13 lit %.n
1303−209:17 glyph [
1304−209:18 tight name item
1305−209:23 glyph (
1306−209:24 tight name skip
1307−209:29 name rest
1308−209:34 name predicate
1309−209:43 tight glyph )
1310−209:44 tight glyph ]
1311−211:1 DEDENT
1312−211:1 DEDENT
1313−211:1 DEDENT
1314−211:1 DEDENT
1315−211:1 DEDENT
1316−211:1 DEDENT
1317−211:1 NEWLINE
1318−211:1 glyph ++
1319−211:4 name levy
1320−211:9 glyph |=
1321−211:12 name args
1322−211:16 tight glyph =
1323−211:17 tight glyph [
1324−211:18 tight glyph (
1325−211:19 tight name list
1326−211:24 tvar A
1327−211:25 tight glyph )
1328−211:27 glyph $-(
1329−211:30 tight tvar A
1330−211:32 glyph ?
1331−211:33 tight glyph )
1332−211:34 tight glyph ]
1333−212:3 INDENT
1334−212:3 glyph ?-
1335−212:6 name args
1336−213:5 INDENT
1337−213:5 glyph [
1338−213:6 tight name xs
1339−213:9 name predicate
1340−213:18 tight glyph ]
1341−214:7 INDENT
1342−214:7 glyph ?-
1343−214:10 name xs
1344−215:9 INDENT
1345−215:9 lit ~
1346−215:11 lit %.y
1347−216:9 NEWLINE
1348−216:9 glyph [
1349−216:10 tight name item
1350−216:15 name rest
1351−216:19 tight glyph ]
1352−217:11 INDENT
1353−217:11 glyph ?-
1354−217:14 glyph (
1355−217:15 tight name predicate
1356−217:25 name item
1357−217:29 tight glyph )
1358−218:13 INDENT
1359−218:13 lit %.y
1360−218:17 glyph (
1361−218:18 tight name levy
1362−218:23 name rest
1363−218:28 name predicate
1364−218:37 tight glyph )
1365−219:13 NEWLINE
1366−219:13 lit %.n
1367−219:17 lit %.n
1368−221:1 DEDENT
1369−221:1 DEDENT
1370−221:1 DEDENT
1371−221:1 DEDENT
1372−221:1 DEDENT
1373−221:1 DEDENT
1374−221:1 NEWLINE
1375−221:1 glyph ++
1376−221:4 name lien
1377−221:9 glyph |=
1378−221:12 name args
1379−221:16 tight glyph =
1380−221:17 tight glyph [
1381−221:18 tight glyph (
1382−221:19 tight name list
1383−221:24 tvar A
1384−221:25 tight glyph )
1385−221:27 glyph $-(
1386−221:30 tight tvar A
1387−221:32 glyph ?
1388−221:33 tight glyph )
1389−221:34 tight glyph ]
1390−222:3 INDENT
1391−222:3 glyph ?-
1392−222:6 name args
1393−223:5 INDENT
1394−223:5 glyph [
1395−223:6 tight name xs
1396−223:9 name predicate
1397−223:18 tight glyph ]
1398−224:7 INDENT
1399−224:7 glyph ?-
1400−224:10 name xs
1401−225:9 INDENT
1402−225:9 lit ~
1403−225:11 lit %.n
1404−226:9 NEWLINE
1405−226:9 glyph [
1406−226:10 tight name item
1407−226:15 name rest
1408−226:19 tight glyph ]
1409−227:11 INDENT
1410−227:11 glyph ?-
1411−227:14 glyph (
1412−227:15 tight name predicate
1413−227:25 name item
1414−227:29 tight glyph )
1415−228:13 INDENT
1416−228:13 lit %.y
1417−228:17 lit %.y
1418−229:13 NEWLINE
1419−229:13 lit %.n
1420−229:17 glyph (
1421−229:18 tight name lien
1422−229:23 name rest
1423−229:28 name predicate
1424−229:37 tight glyph )
1425−231:1 DEDENT
1426−231:1 DEDENT
1427−231:1 DEDENT
1428−231:1 DEDENT
1429−231:1 DEDENT
1430−231:1 DEDENT
1431−231:1 NEWLINE
1432−231:1 glyph ++
1433−231:4 name roll
1434−231:9 glyph |=
1435−231:12 name args
1436−231:16 tight glyph =
1437−231:17 tight glyph [
1438−231:18 tight glyph (
1439−231:19 tight name list
1440−231:24 tvar A
1441−231:25 tight glyph )
1442−231:27 tvar B
1443−231:29 glyph $-(
1444−231:32 tight glyph [
1445−231:33 tight tvar A
1446−231:35 tvar B
1447−231:36 tight glyph ]
1448−231:38 tvar B
1449−231:39 tight glyph )
1450−231:40 tight glyph ]
1451−232:3 INDENT
1452−232:3 glyph ?-
1453−232:6 name args
1454−233:5 INDENT
1455−233:5 glyph [
1456−233:6 tight name xs
1457−233:9 name start
1458−233:15 name combine
1459−233:22 tight glyph ]
1460−234:7 INDENT
1461−234:7 glyph ?-
1462−234:10 name xs
1463−235:9 INDENT
1464−235:9 lit ~
1465−235:11 name start
1466−236:9 NEWLINE
1467−236:9 glyph [
1468−236:10 tight name item
1469−236:15 name rest
1470−236:19 tight glyph ]
1471−236:21 glyph (
1472−236:22 tight name roll
1473−236:27 name rest
1474−236:32 glyph (
1475−236:33 tight name combine
1476−236:41 name item
1477−236:46 name start
1478−236:51 tight glyph )
1479−236:53 name combine
1480−236:60 tight glyph )
1481−238:1 DEDENT
1482−238:1 DEDENT
1483−238:1 DEDENT
1484−238:1 DEDENT
1485−238:1 NEWLINE
1486−238:1 glyph ++
1487−238:4 name reel
1488−238:9 glyph |=
1489−238:12 name args
1490−238:16 tight glyph =
1491−238:17 tight glyph [
1492−238:18 tight glyph (
1493−238:19 tight name list
1494−238:24 tvar A
1495−238:25 tight glyph )
1496−238:27 tvar B
1497−238:29 glyph $-(
1498−238:32 tight glyph [
1499−238:33 tight tvar A
1500−238:35 tvar B
1501−238:36 tight glyph ]
1502−238:38 tvar B
1503−238:39 tight glyph )
1504−238:40 tight glyph ]
1505−239:3 INDENT
1506−239:3 glyph ?-
1507−239:6 name args
1508−240:5 INDENT
1509−240:5 glyph [
1510−240:6 tight name xs
1511−240:9 name start
1512−240:15 name combine
1513−240:22 tight glyph ]
1514−241:7 INDENT
1515−241:7 glyph ?-
1516−241:10 name xs
1517−242:9 INDENT
1518−242:9 lit ~
1519−242:11 name start
1520−243:9 NEWLINE
1521−243:9 glyph [
1522−243:10 tight name item
1523−243:15 name rest
1524−243:19 tight glyph ]
1525−243:21 glyph (
1526−243:22 tight name combine
1527−243:30 name item
1528−243:35 glyph (
1529−243:36 tight name reel
1530−243:41 name rest
1531−243:46 name start
1532−243:52 name combine
1533−243:59 tight glyph )
1534−243:60 tight glyph )
1535−245:1 DEDENT
1536−245:1 DEDENT
1537−245:1 DEDENT
1538−245:1 DEDENT
1539−245:1 NEWLINE
1540−245:1 glyph ++
1541−245:4 name flit
1542−245:9 glyph |=
1543−245:12 name predicate
1544−245:21 tight glyph =
1545−245:22 tight glyph $-(
1546−245:25 tight tvar A
1547−245:27 glyph ?
1548−245:28 tight glyph )
1549−246:3 INDENT
1550−246:3 glyph |=
1551−246:6 name value
1552−246:11 tight glyph =
1553−246:12 tight tvar A
1554−247:5 INDENT
1555−247:5 glyph ^-
1556−247:8 glyph (
1557−247:9 tight name unit
1558−247:14 tvar A
1559−247:15 tight glyph )
1560−248:7 INDENT
1561−248:7 glyph ?-
1562−248:10 glyph (
1563−248:11 tight name predicate
1564−248:21 name value
1565−248:26 tight glyph )
1566−249:9 INDENT
1567−249:9 lit %.y
1568−249:13 glyph `
1569−249:14 tight name value
1570−250:9 NEWLINE
1571−250:9 lit %.n
1572−250:13 lit ~
1573−252:1 DEDENT
1574−252:1 DEDENT
1575−252:1 DEDENT
1576−252:1 DEDENT
1577−252:1 NEWLINE
1578−252:1 glyph ++
1579−252:4 name murn
1580−252:9 glyph |=
1581−252:12 name args
1582−252:16 tight glyph =
1583−252:17 tight glyph [
1584−252:18 tight glyph (
1585−252:19 tight name list
1586−252:24 tvar A
1587−252:25 tight glyph )
1588−252:27 glyph $-(
1589−252:30 tight tvar A
1590−252:32 glyph (
1591−252:33 tight name unit
1592−252:38 tvar B
1593−252:39 tight glyph )
1594−252:40 tight glyph )
1595−252:41 tight glyph ]
1596−253:3 INDENT
1597−253:3 glyph ?-
1598−253:6 name args
1599−254:5 INDENT
1600−254:5 glyph [
1601−254:6 tight name xs
1602−254:9 name f
1603−254:10 tight glyph ]
1604−255:7 INDENT
1605−255:7 glyph ?-
1606−255:10 name xs
1607−256:9 INDENT
1608−256:9 lit ~
1609−256:11 lit ~
1610−257:9 NEWLINE
1611−257:9 glyph [
1612−257:10 tight name item
1613−257:15 name rest
1614−257:19 tight glyph ]
1615−258:11 INDENT
1616−258:11 glyph ?-
1617−258:14 glyph (
1618−258:15 tight name f
1619−258:17 name item
1620−258:21 tight glyph )
1621−259:13 INDENT
1622−259:13 lit ~
1623−259:15 glyph (
1624−259:16 tight name murn
1625−259:21 name rest
1626−259:26 name f
1627−259:27 tight glyph )
1628−260:13 NEWLINE
1629−260:13 glyph [
1630−260:14 tight lit ~
1631−260:16 name value
1632−260:21 tight glyph ]
1633−260:23 glyph [
1634−260:24 tight name value
1635−260:30 glyph (
1636−260:31 tight name murn
1637−260:36 name rest
1638−260:41 name f
1639−260:42 tight glyph )
1640−260:43 tight glyph ]
1641−262:1 DEDENT
1642−262:1 DEDENT
1643−262:1 DEDENT
1644−262:1 DEDENT
1645−262:1 DEDENT
1646−262:1 DEDENT
1647−262:1 NEWLINE
1648−262:1 glyph ++
1649−262:4 name join
1650−262:9 glyph |=
1651−262:12 name args
1652−262:16 tight glyph =
1653−262:17 tight glyph [
1654−262:18 tight tvar A
1655−262:20 glyph (
1656−262:21 tight name list
1657−262:26 tvar A
761+130:3 glyph ^-
762+130:6 glyph (
763+130:7 tight name list
764+130:12 tvar A
765+130:13 tight glyph )
766+130:15 glyph [
767+130:16 tight name item
768+130:21 lit ~
769+130:22 tight glyph ]
770+132:1 DEDENT
771+132:1 NEWLINE
772+132:1 glyph ++
773+132:4 name snoc
774+132:9 glyph |=
775+132:12 name args
776+132:16 tight glyph =
777+132:17 tight glyph [
778+132:18 tight glyph (
779+132:19 tight name list
780+132:24 tvar A
781+132:25 tight glyph )
782+132:27 tvar A
783+132:28 tight glyph ]
784+133:3 INDENT
785+133:3 glyph ?-
786+133:6 name args
787+134:5 INDENT
788+134:5 glyph [
789+134:6 tight name xs
790+134:9 name item
791+134:13 tight glyph ]
792+134:15 glyph (
793+134:16 tight name weld
794+134:21 name xs
795+134:24 glyph [
796+134:25 tight name item
797+134:30 lit ~
798+134:31 tight glyph ]
799+134:32 tight glyph )
800+136:1 DEDENT
801+136:1 DEDENT
802+136:1 NEWLINE
803+136:1 glyph ++
804+136:4 name flop
805+136:9 glyph |=
806+136:12 name xs
807+136:14 tight glyph =
808+136:15 tight glyph (
809+136:16 tight name list
810+136:21 tvar A
811+136:22 tight glyph )
812+137:3 INDENT
813+137:3 glyph ++
814+137:6 name reverse-into
815+137:19 glyph |=
816+137:22 name args
817+137:26 tight glyph =
818+137:27 tight glyph [
819+137:28 tight glyph (
820+137:29 tight name list
821+137:34 tvar A
822+137:35 tight glyph )
823+137:37 glyph (
824+137:38 tight name list
825+137:43 tvar A
826+137:44 tight glyph )
827+137:45 tight glyph ]
828+138:5 INDENT
829+138:5 glyph ?-
830+138:8 name args
831+139:7 INDENT
832+139:7 glyph [
833+139:8 tight name rest
834+139:13 name acc
835+139:16 tight glyph ]
836+140:9 INDENT
837+140:9 glyph ?-
838+140:12 name rest
839+141:11 INDENT
840+141:11 lit ~
841+141:13 name acc
842+142:11 NEWLINE
843+142:11 glyph [
844+142:12 tight name item
845+142:17 name more
846+142:21 tight glyph ]
847+142:23 glyph (
848+142:24 tight name reverse-into
849+142:37 name more
850+142:42 glyph [
851+142:43 tight name item
852+142:48 name acc
853+142:51 tight glyph ]
854+142:52 tight glyph )
855+143:3 DEDENT
856+143:3 DEDENT
857+143:3 DEDENT
858+143:3 DEDENT
859+143:3 NEWLINE
860+143:3 glyph (
861+143:4 tight name reverse-into
862+143:17 name xs
863+143:20 lit ~
864+143:21 tight glyph )
865+145:1 DEDENT
866+145:1 NEWLINE
867+145:1 glyph ++
868+145:4 name drop
869+145:9 glyph |=
870+145:12 name maybe
871+145:17 tight glyph =
872+145:18 tight glyph (
873+145:19 tight name unit
874+145:24 tvar A
875+145:25 tight glyph )
876+146:3 INDENT
877+146:3 glyph ?-
878+146:6 name maybe
879+147:5 INDENT
880+147:5 lit ~
881+147:7 lit ~
882+148:5 NEWLINE
883+148:5 glyph [
884+148:6 tight lit ~
885+148:8 name value
886+148:13 tight glyph ]
887+148:15 glyph [
888+148:16 tight name value
889+148:22 lit ~
890+148:23 tight glyph ]
891+150:1 DEDENT
892+150:1 DEDENT
893+150:1 NEWLINE
894+150:1 glyph ++
895+150:4 name bind
896+150:9 glyph |=
897+150:12 name args
898+150:16 tight glyph =
899+150:17 tight glyph [
900+150:18 tight glyph (
901+150:19 tight name unit
902+150:24 tvar A
903+150:25 tight glyph )
904+150:27 glyph $-(
905+150:30 tight tvar A
906+150:32 tvar B
907+150:33 tight glyph )
908+150:34 tight glyph ]
909+151:3 INDENT
910+151:3 glyph ?-
911+151:6 name args
912+152:5 INDENT
913+152:5 glyph [
914+152:6 tight name maybe
915+152:12 name f
916+152:13 tight glyph ]
917+152:15 glyph ^-
918+152:18 glyph (
919+152:19 tight name unit
920+152:24 tvar B
921+152:25 tight glyph )
922+153:7 INDENT
923+153:7 glyph ?-
924+153:10 name maybe
925+154:9 INDENT
926+154:9 lit ~
927+154:11 lit ~
928+155:9 NEWLINE
929+155:9 glyph [
930+155:10 tight lit ~
931+155:12 name value
932+155:17 tight glyph ]
933+155:19 glyph `
934+155:20 tight glyph (
935+155:21 tight name f
936+155:23 name value
937+155:28 tight glyph )
938+157:1 DEDENT
939+157:1 DEDENT
940+157:1 DEDENT
941+157:1 DEDENT
942+157:1 NEWLINE
943+157:1 glyph ++
944+157:4 name biff
945+157:9 glyph |=
946+157:12 name args
947+157:16 tight glyph =
948+157:17 tight glyph [
949+157:18 tight glyph (
950+157:19 tight name unit
951+157:24 tvar A
952+157:25 tight glyph )
953+157:27 glyph $-(
954+157:30 tight tvar A
955+157:32 glyph (
956+157:33 tight name unit
957+157:38 tvar B
958+157:39 tight glyph )
959+157:40 tight glyph )
960+157:41 tight glyph ]
961+158:3 INDENT
962+158:3 glyph ?-
963+158:6 name args
964+159:5 INDENT
965+159:5 glyph [
966+159:6 tight name maybe
967+159:12 name f
968+159:13 tight glyph ]
969+159:15 glyph ^-
970+159:18 glyph (
971+159:19 tight name unit
972+159:24 tvar B
973+159:25 tight glyph )
974+160:7 INDENT
975+160:7 glyph ?-
976+160:10 name maybe
977+161:9 INDENT
978+161:9 lit ~
979+161:11 lit ~
980+162:9 NEWLINE
981+162:9 glyph [
982+162:10 tight lit ~
983+162:12 name value
984+162:17 tight glyph ]
985+162:19 glyph (
986+162:20 tight name f
987+162:22 name value
988+162:27 tight glyph )
989+164:1 DEDENT
990+164:1 DEDENT
991+164:1 DEDENT
992+164:1 DEDENT
993+164:1 NEWLINE
994+164:1 glyph ++
995+164:4 name both
996+164:9 glyph |=
997+164:12 name args
998+164:16 tight glyph =
999+164:17 tight glyph [
1000+164:18 tight glyph (
1001+164:19 tight name unit
1002+164:24 tvar A
1003+164:25 tight glyph )
1004+164:27 glyph (
1005+164:28 tight name unit
1006+164:33 tvar B
1007+164:34 tight glyph )
1008+164:35 tight glyph ]
1009+165:3 INDENT
1010+165:3 glyph ?-
1011+165:6 name args
1012+166:5 INDENT
1013+166:5 glyph [
1014+166:6 tight name first
1015+166:12 name second
1016+166:18 tight glyph ]
1017+166:20 glyph ^-
1018+166:23 glyph (
1019+166:24 tight name unit
1020+166:29 glyph [
1021+166:30 tight tvar A
1022+166:32 tvar B
1023+166:33 tight glyph ]
1024+166:34 tight glyph )
1025+167:7 INDENT
1026+167:7 glyph ?-
1027+167:10 name first
1028+168:9 INDENT
1029+168:9 lit ~
1030+168:11 lit ~
1031+169:9 NEWLINE
1032+169:9 glyph [
1033+169:10 tight lit ~
1034+169:12 name a
1035+169:13 tight glyph ]
1036+170:11 INDENT
1037+170:11 glyph ?-
1038+170:14 name second
1039+171:13 INDENT
1040+171:13 lit ~
1041+171:15 lit ~
1042+172:13 NEWLINE
1043+172:13 glyph [
1044+172:14 tight lit ~
1045+172:16 name b
1046+172:17 tight glyph ]
1047+172:19 glyph `
1048+172:20 tight glyph [
1049+172:21 tight name a
1050+172:23 name b
1051+172:24 tight glyph ]
1052+174:1 DEDENT
1053+174:1 DEDENT
1054+174:1 DEDENT
1055+174:1 DEDENT
1056+174:1 DEDENT
1057+174:1 DEDENT
1058+174:1 NEWLINE
1059+174:1 glyph ++
1060+174:4 name clap
1061+174:9 glyph |=
1062+174:12 name args
1063+174:16 tight glyph =
1064+174:17 tight glyph [
1065+174:18 tight glyph (
1066+174:19 tight name unit
1067+174:24 tvar A
1068+174:25 tight glyph )
1069+174:27 glyph (
1070+174:28 tight name unit
1071+174:33 tvar A
1072+174:34 tight glyph )
1073+174:36 glyph $-(
1074+174:39 tight glyph [
1075+174:40 tight tvar A
1076+174:42 tvar A
1077+174:43 tight glyph ]
1078+174:45 tvar A
1079+174:46 tight glyph )
1080+174:47 tight glyph ]
1081+175:3 INDENT
1082+175:3 glyph ?-
1083+175:6 name args
1084+176:5 INDENT
1085+176:5 glyph [
1086+176:6 tight name first
1087+176:12 name second
1088+176:19 name combine
1089+176:26 tight glyph ]
1090+176:28 glyph ^-
1091+176:31 glyph (
1092+176:32 tight name unit
1093+176:37 tvar A
1094+176:38 tight glyph )
1095+177:7 INDENT
1096+177:7 glyph ?-
1097+177:10 name first
1098+178:9 INDENT
1099+178:9 lit ~
1100+178:11 name second
1101+179:9 NEWLINE
1102+179:9 glyph [
1103+179:10 tight lit ~
1104+179:12 name a
1105+179:13 tight glyph ]
1106+180:11 INDENT
1107+180:11 glyph ?-
1108+180:14 name second
1109+181:13 INDENT
1110+181:13 lit ~
1111+181:15 name first
1112+182:13 NEWLINE
1113+182:13 glyph [
1114+182:14 tight lit ~
1115+182:16 name b
1116+182:17 tight glyph ]
1117+182:19 glyph `
1118+182:20 tight glyph (
1119+182:21 tight name combine
1120+182:29 name a
1121+182:31 name b
1122+182:32 tight glyph )
1123+184:1 DEDENT
1124+184:1 DEDENT
1125+184:1 DEDENT
1126+184:1 DEDENT
1127+184:1 DEDENT
1128+184:1 DEDENT
1129+184:1 NEWLINE
1130+184:1 glyph ++
1131+184:4 name clef
1132+184:9 glyph |=
1133+184:12 name args
1134+184:16 tight glyph =
1135+184:17 tight glyph [
1136+184:18 tight glyph (
1137+184:19 tight name unit
1138+184:24 tvar A
1139+184:25 tight glyph )
1140+184:27 glyph (
1141+184:28 tight name unit
1142+184:33 tvar B
1143+184:34 tight glyph )
1144+184:36 glyph $-(
1145+184:39 tight glyph [
1146+184:40 tight tvar A
1147+184:42 tvar B
1148+184:43 tight glyph ]
1149+184:45 glyph (
1150+184:46 tight name unit
1151+184:51 tvar C
1152+184:52 tight glyph )
1153+184:53 tight glyph )
1154+184:54 tight glyph ]
1155+185:3 INDENT
1156+185:3 glyph ?-
1157+185:6 name args
1158+186:5 INDENT
1159+186:5 glyph [
1160+186:6 tight name first
1161+186:12 name second
1162+186:19 name combine
1163+186:26 tight glyph ]
1164+186:28 glyph ^-
1165+186:31 glyph (
1166+186:32 tight name unit
1167+186:37 tvar C
1168+186:38 tight glyph )
1169+187:7 INDENT
1170+187:7 glyph ?-
1171+187:10 name first
1172+188:9 INDENT
1173+188:9 lit ~
1174+188:11 lit ~
1175+189:9 NEWLINE
1176+189:9 glyph [
1177+189:10 tight lit ~
1178+189:12 name a
1179+189:13 tight glyph ]
1180+190:11 INDENT
1181+190:11 glyph ?-
1182+190:14 name second
1183+191:13 INDENT
1184+191:13 lit ~
1185+191:15 lit ~
1186+192:13 NEWLINE
1187+192:13 glyph [
1188+192:14 tight lit ~
1189+192:16 name b
1190+192:17 tight glyph ]
1191+192:19 glyph (
1192+192:20 tight name combine
1193+192:28 name a
1194+192:30 name b
1195+192:31 tight glyph )
1196+194:1 DEDENT
1197+194:1 DEDENT
1198+194:1 DEDENT
1199+194:1 DEDENT
1200+194:1 DEDENT
1201+194:1 DEDENT
1202+194:1 NEWLINE
1203+194:1 glyph ++
1204+194:4 name skim
1205+194:9 glyph |=
1206+194:12 name args
1207+194:16 tight glyph =
1208+194:17 tight glyph [
1209+194:18 tight glyph (
1210+194:19 tight name list
1211+194:24 tvar A
1212+194:25 tight glyph )
1213+194:27 glyph $-(
1214+194:30 tight tvar A
1215+194:32 glyph ?
1216+194:33 tight glyph )
1217+194:34 tight glyph ]
1218+195:3 INDENT
1219+195:3 glyph ?-
1220+195:6 name args
1221+196:5 INDENT
1222+196:5 glyph [
1223+196:6 tight name xs
1224+196:9 name predicate
1225+196:18 tight glyph ]
1226+197:7 INDENT
1227+197:7 glyph ?-
1228+197:10 name xs
1229+198:9 INDENT
1230+198:9 lit ~
1231+198:11 lit ~
1232+199:9 NEWLINE
1233+199:9 glyph [
1234+199:10 tight name item
1235+199:15 name rest
1236+199:19 tight glyph ]
1237+200:11 INDENT
1238+200:11 glyph ?-
1239+200:14 glyph (
1240+200:15 tight name predicate
1241+200:25 name item
1242+200:29 tight glyph )
1243+201:13 INDENT
1244+201:13 lit %.y
1245+201:17 glyph [
1246+201:18 tight name item
1247+201:23 glyph (
1248+201:24 tight name skim
1249+201:29 name rest
1250+201:34 name predicate
1251+201:43 tight glyph )
1252+201:44 tight glyph ]
1253+202:13 NEWLINE
1254+202:13 lit %.n
1255+202:17 glyph (
1256+202:18 tight name skim
1257+202:23 name rest
1258+202:28 name predicate
1259+202:37 tight glyph )
1260+204:1 DEDENT
1261+204:1 DEDENT
1262+204:1 DEDENT
1263+204:1 DEDENT
1264+204:1 DEDENT
1265+204:1 DEDENT
1266+204:1 NEWLINE
1267+204:1 glyph ++
1268+204:4 name skip
1269+204:9 glyph |=
1270+204:12 name args
1271+204:16 tight glyph =
1272+204:17 tight glyph [
1273+204:18 tight glyph (
1274+204:19 tight name list
1275+204:24 tvar A
1276+204:25 tight glyph )
1277+204:27 glyph $-(
1278+204:30 tight tvar A
1279+204:32 glyph ?
1280+204:33 tight glyph )
1281+204:34 tight glyph ]
1282+205:3 INDENT
1283+205:3 glyph ?-
1284+205:6 name args
1285+206:5 INDENT
1286+206:5 glyph [
1287+206:6 tight name xs
1288+206:9 name predicate
1289+206:18 tight glyph ]
1290+207:7 INDENT
1291+207:7 glyph ?-
1292+207:10 name xs
1293+208:9 INDENT
1294+208:9 lit ~
1295+208:11 lit ~
1296+209:9 NEWLINE
1297+209:9 glyph [
1298+209:10 tight name item
1299+209:15 name rest
1300+209:19 tight glyph ]
1301+210:11 INDENT
1302+210:11 glyph ?-
1303+210:14 glyph (
1304+210:15 tight name predicate
1305+210:25 name item
1306+210:29 tight glyph )
1307+211:13 INDENT
1308+211:13 lit %.y
1309+211:17 glyph (
1310+211:18 tight name skip
1311+211:23 name rest
1312+211:28 name predicate
1313+211:37 tight glyph )
1314+212:13 NEWLINE
1315+212:13 lit %.n
1316+212:17 glyph [
1317+212:18 tight name item
1318+212:23 glyph (
1319+212:24 tight name skip
1320+212:29 name rest
1321+212:34 name predicate
1322+212:43 tight glyph )
1323+212:44 tight glyph ]
1324+214:1 DEDENT
1325+214:1 DEDENT
1326+214:1 DEDENT
1327+214:1 DEDENT
1328+214:1 DEDENT
1329+214:1 DEDENT
1330+214:1 NEWLINE
1331+214:1 glyph ++
1332+214:4 name levy
1333+214:9 glyph |=
1334+214:12 name args
1335+214:16 tight glyph =
1336+214:17 tight glyph [
1337+214:18 tight glyph (
1338+214:19 tight name list
1339+214:24 tvar A
1340+214:25 tight glyph )
1341+214:27 glyph $-(
1342+214:30 tight tvar A
1343+214:32 glyph ?
1344+214:33 tight glyph )
1345+214:34 tight glyph ]
1346+215:3 INDENT
1347+215:3 glyph ?-
1348+215:6 name args
1349+216:5 INDENT
1350+216:5 glyph [
1351+216:6 tight name xs
1352+216:9 name predicate
1353+216:18 tight glyph ]
1354+217:7 INDENT
1355+217:7 glyph ?-
1356+217:10 name xs
1357+218:9 INDENT
1358+218:9 lit ~
1359+218:11 lit %.y
1360+219:9 NEWLINE
1361+219:9 glyph [
1362+219:10 tight name item
1363+219:15 name rest
1364+219:19 tight glyph ]
1365+220:11 INDENT
1366+220:11 glyph ?-
1367+220:14 glyph (
1368+220:15 tight name predicate
1369+220:25 name item
1370+220:29 tight glyph )
1371+221:13 INDENT
1372+221:13 lit %.y
1373+221:17 glyph (
1374+221:18 tight name levy
1375+221:23 name rest
1376+221:28 name predicate
1377+221:37 tight glyph )
1378+222:13 NEWLINE
1379+222:13 lit %.n
1380+222:17 lit %.n
1381+224:1 DEDENT
1382+224:1 DEDENT
1383+224:1 DEDENT
1384+224:1 DEDENT
1385+224:1 DEDENT
1386+224:1 DEDENT
1387+224:1 NEWLINE
1388+224:1 glyph ++
1389+224:4 name lien
1390+224:9 glyph |=
1391+224:12 name args
1392+224:16 tight glyph =
1393+224:17 tight glyph [
1394+224:18 tight glyph (
1395+224:19 tight name list
1396+224:24 tvar A
1397+224:25 tight glyph )
1398+224:27 glyph $-(
1399+224:30 tight tvar A
1400+224:32 glyph ?
1401+224:33 tight glyph )
1402+224:34 tight glyph ]
1403+225:3 INDENT
1404+225:3 glyph ?-
1405+225:6 name args
1406+226:5 INDENT
1407+226:5 glyph [
1408+226:6 tight name xs
1409+226:9 name predicate
1410+226:18 tight glyph ]
1411+227:7 INDENT
1412+227:7 glyph ?-
1413+227:10 name xs
1414+228:9 INDENT
1415+228:9 lit ~
1416+228:11 lit %.n
1417+229:9 NEWLINE
1418+229:9 glyph [
1419+229:10 tight name item
1420+229:15 name rest
1421+229:19 tight glyph ]
1422+230:11 INDENT
1423+230:11 glyph ?-
1424+230:14 glyph (
1425+230:15 tight name predicate
1426+230:25 name item
1427+230:29 tight glyph )
1428+231:13 INDENT
1429+231:13 lit %.y
1430+231:17 lit %.y
1431+232:13 NEWLINE
1432+232:13 lit %.n
1433+232:17 glyph (
1434+232:18 tight name lien
1435+232:23 name rest
1436+232:28 name predicate
1437+232:37 tight glyph )
1438+234:1 DEDENT
1439+234:1 DEDENT
1440+234:1 DEDENT
1441+234:1 DEDENT
1442+234:1 DEDENT
1443+234:1 DEDENT
1444+234:1 NEWLINE
1445+234:1 glyph ++
1446+234:4 name roll
1447+234:9 glyph |=
1448+234:12 name args
1449+234:16 tight glyph =
1450+234:17 tight glyph [
1451+234:18 tight glyph (
1452+234:19 tight name list
1453+234:24 tvar A
1454+234:25 tight glyph )
1455+234:27 tvar B
1456+234:29 glyph $-(
1457+234:32 tight glyph [
1458+234:33 tight tvar A
1459+234:35 tvar B
1460+234:36 tight glyph ]
1461+234:38 tvar B
1462+234:39 tight glyph )
1463+234:40 tight glyph ]
1464+235:3 INDENT
1465+235:3 glyph ?-
1466+235:6 name args
1467+236:5 INDENT
1468+236:5 glyph [
1469+236:6 tight name xs
1470+236:9 name start
1471+236:15 name combine
1472+236:22 tight glyph ]
1473+237:7 INDENT
1474+237:7 glyph ?-
1475+237:10 name xs
1476+238:9 INDENT
1477+238:9 lit ~
1478+238:11 name start
1479+239:9 NEWLINE
1480+239:9 glyph [
1481+239:10 tight name item
1482+239:15 name rest
1483+239:19 tight glyph ]
1484+239:21 glyph (
1485+239:22 tight name roll
1486+239:27 name rest
1487+239:32 glyph (
1488+239:33 tight name combine
1489+239:41 name item
1490+239:46 name start
1491+239:51 tight glyph )
1492+239:53 name combine
1493+239:60 tight glyph )
1494+241:1 DEDENT
1495+241:1 DEDENT
1496+241:1 DEDENT
1497+241:1 DEDENT
1498+241:1 NEWLINE
1499+241:1 glyph ++
1500+241:4 name reel
1501+241:9 glyph |=
1502+241:12 name args
1503+241:16 tight glyph =
1504+241:17 tight glyph [
1505+241:18 tight glyph (
1506+241:19 tight name list
1507+241:24 tvar A
1508+241:25 tight glyph )
1509+241:27 tvar B
1510+241:29 glyph $-(
1511+241:32 tight glyph [
1512+241:33 tight tvar A
1513+241:35 tvar B
1514+241:36 tight glyph ]
1515+241:38 tvar B
1516+241:39 tight glyph )
1517+241:40 tight glyph ]
1518+242:3 INDENT
1519+242:3 glyph ?-
1520+242:6 name args
1521+243:5 INDENT
1522+243:5 glyph [
1523+243:6 tight name xs
1524+243:9 name start
1525+243:15 name combine
1526+243:22 tight glyph ]
1527+244:7 INDENT
1528+244:7 glyph ?-
1529+244:10 name xs
1530+245:9 INDENT
1531+245:9 lit ~
1532+245:11 name start
1533+246:9 NEWLINE
1534+246:9 glyph [
1535+246:10 tight name item
1536+246:15 name rest
1537+246:19 tight glyph ]
1538+246:21 glyph (
1539+246:22 tight name combine
1540+246:30 name item
1541+246:35 glyph (
1542+246:36 tight name reel
1543+246:41 name rest
1544+246:46 name start
1545+246:52 name combine
1546+246:59 tight glyph )
1547+246:60 tight glyph )
1548+248:1 DEDENT
1549+248:1 DEDENT
1550+248:1 DEDENT
1551+248:1 DEDENT
1552+248:1 NEWLINE
1553+248:1 glyph ++
1554+248:4 name flit
1555+248:9 glyph |=
1556+248:12 name predicate
1557+248:21 tight glyph =
1558+248:22 tight glyph $-(
1559+248:25 tight tvar A
1560+248:27 glyph ?
1561+248:28 tight glyph )
1562+249:3 INDENT
1563+249:3 glyph |=
1564+249:6 name value
1565+249:11 tight glyph =
1566+249:12 tight tvar A
1567+250:5 INDENT
1568+250:5 glyph ^-
1569+250:8 glyph (
1570+250:9 tight name unit
1571+250:14 tvar A
1572+250:15 tight glyph )
1573+251:7 INDENT
1574+251:7 glyph ?-
1575+251:10 glyph (
1576+251:11 tight name predicate
1577+251:21 name value
1578+251:26 tight glyph )
1579+252:9 INDENT
1580+252:9 lit %.y
1581+252:13 glyph `
1582+252:14 tight name value
1583+253:9 NEWLINE
1584+253:9 lit %.n
1585+253:13 lit ~
1586+255:1 DEDENT
1587+255:1 DEDENT
1588+255:1 DEDENT
1589+255:1 DEDENT
1590+255:1 NEWLINE
1591+255:1 glyph ++
1592+255:4 name murn
1593+255:9 glyph |=
1594+255:12 name args
1595+255:16 tight glyph =
1596+255:17 tight glyph [
1597+255:18 tight glyph (
1598+255:19 tight name list
1599+255:24 tvar A
1600+255:25 tight glyph )
1601+255:27 glyph $-(
1602+255:30 tight tvar A
1603+255:32 glyph (
1604+255:33 tight name unit
1605+255:38 tvar B
1606+255:39 tight glyph )
1607+255:40 tight glyph )
1608+255:41 tight glyph ]
1609+256:3 INDENT
1610+256:3 glyph ?-
1611+256:6 name args
1612+257:5 INDENT
1613+257:5 glyph [
1614+257:6 tight name xs
1615+257:9 name f
1616+257:10 tight glyph ]
1617+258:7 INDENT
1618+258:7 glyph ?-
1619+258:10 name xs
1620+259:9 INDENT
1621+259:9 lit ~
1622+259:11 lit ~
1623+260:9 NEWLINE
1624+260:9 glyph [
1625+260:10 tight name item
1626+260:15 name rest
1627+260:19 tight glyph ]
1628+261:11 INDENT
1629+261:11 glyph ?-
1630+261:14 glyph (
1631+261:15 tight name f
1632+261:17 name item
1633+261:21 tight glyph )
1634+262:13 INDENT
1635+262:13 lit ~
1636+262:15 glyph (
1637+262:16 tight name murn
1638+262:21 name rest
1639+262:26 name f
16581640262:27 tight glyph )
1659−262:28 tight glyph ]
1660−263:3 INDENT
1661−263:3 glyph ?-
1662−263:6 name args
1663−264:5 INDENT
1664−264:5 glyph [
1665−264:6 tight name separator
1666−264:16 name xs
1667−264:18 tight glyph ]
1668−265:7 INDENT
1669−265:7 glyph ?-
1670−265:10 name xs
1671−266:9 INDENT
1672−266:9 lit ~
1673−266:11 lit ~
1674−267:9 NEWLINE
1675−267:9 glyph [
1676−267:10 tight name item
1677−267:15 name rest
1678−267:19 tight glyph ]
1679−268:11 INDENT
1680−268:11 glyph ?-
1681−268:14 name rest
1682−269:13 INDENT
1683−269:13 lit ~
1684−269:15 glyph [
1685−269:16 tight name item
1686−269:21 lit ~
1687−269:22 tight glyph ]
1688−270:13 NEWLINE
1689−270:13 glyph [
1690−270:14 tight name next
1691−270:19 name more
1692−270:23 tight glyph ]
1693−270:25 glyph [
1694−270:26 tight name item
1695−270:31 glyph [
1696−270:32 tight name separator
1697−270:42 glyph (
1698−270:43 tight name join
1699−270:48 name separator
1700−270:58 name rest
1701−270:62 tight glyph )
1702−270:63 tight glyph ]
1703−270:64 tight glyph ]
1704−272:1 DEDENT
1705−272:1 DEDENT
1706−272:1 DEDENT
1707−272:1 DEDENT
1708−272:1 DEDENT
1709−272:1 DEDENT
1710−272:1 NEWLINE
1711−272:1 glyph ++
1712−272:4 name snip
1713−272:9 glyph |=
1714−272:12 name xs
1715−272:14 tight glyph =
1716−272:15 tight glyph (
1717−272:16 tight name list
1718−272:21 tvar A
1719−272:22 tight glyph )
1720−273:3 INDENT
1721−273:3 glyph ?-
1722−273:6 name xs
1723−274:5 INDENT
1724−274:5 lit ~
1725−274:7 lit ~
1726−275:5 NEWLINE
1727−275:5 glyph [
1728−275:6 tight name item
1729−275:11 name rest
1730−275:15 tight glyph ]
1731−276:7 INDENT
1732−276:7 glyph ?-
1733−276:10 name rest
1734−277:9 INDENT
1735−277:9 lit ~
1736−277:11 lit ~
1737−278:9 NEWLINE
1738−278:9 glyph [
1739−278:10 tight name next
1740−278:15 name more
1741−278:19 tight glyph ]
1742−278:21 glyph [
1743−278:22 tight name item
1744−278:27 glyph (
1745−278:28 tight name snip
1746−278:33 name rest
1747−278:37 tight glyph )
1748−278:38 tight glyph ]
1749−280:1 DEDENT
1750−280:1 DEDENT
1751−280:1 DEDENT
1752−280:1 DEDENT
1753−280:1 NEWLINE
1754−280:1 glyph ++
1755−280:4 name rear
1756−280:9 glyph |=
1757−280:12 name xs
1758−280:14 tight glyph =
1759−280:15 tight glyph (
1760−280:16 tight name list
1761−280:21 tvar A
1762−280:22 tight glyph )
1763−281:3 INDENT
1764−281:3 glyph ?-
1765−281:6 name xs
1766−282:5 INDENT
1767−282:5 lit ~
1768−282:7 glyph !!
1769−283:5 NEWLINE
1770−283:5 glyph [
1771−283:6 tight name item
1772−283:11 name rest
1773−283:15 tight glyph ]
1774−284:7 INDENT
1775−284:7 glyph ?-
1776−284:10 name rest
1777−285:9 INDENT
1778−285:9 lit ~
1779−285:11 name item
1780−286:9 NEWLINE
1781−286:9 glyph [
1782−286:10 tight name next
1783−286:15 name more
1784−286:19 tight glyph ]
1785−286:21 glyph (
1786−286:22 tight name rear
1787−286:27 name rest
1788−286:31 tight glyph )
1789−286:32 DEDENT
1790−286:32 DEDENT
1791−286:32 DEDENT
1792−286:32 DEDENT
1793−286:32 NEWLINE
1641+263:13 NEWLINE
1642+263:13 glyph [
1643+263:14 tight lit ~
1644+263:16 name value
1645+263:21 tight glyph ]
1646+263:23 glyph [
1647+263:24 tight name value
1648+263:30 glyph (
1649+263:31 tight name murn
1650+263:36 name rest
1651+263:41 name f
1652+263:42 tight glyph )
1653+263:43 tight glyph ]
1654+265:1 DEDENT
1655+265:1 DEDENT
1656+265:1 DEDENT
1657+265:1 DEDENT
1658+265:1 DEDENT
1659+265:1 DEDENT
1660+265:1 NEWLINE
1661+265:1 glyph ++
1662+265:4 name join
1663+265:9 glyph |=
1664+265:12 name args
1665+265:16 tight glyph =
1666+265:17 tight glyph [
1667+265:18 tight tvar A
1668+265:20 glyph (
1669+265:21 tight name list
1670+265:26 tvar A
1671+265:27 tight glyph )
1672+265:28 tight glyph ]
1673+266:3 INDENT
1674+266:3 glyph ?-
1675+266:6 name args
1676+267:5 INDENT
1677+267:5 glyph [
1678+267:6 tight name separator
1679+267:16 name xs
1680+267:18 tight glyph ]
1681+268:7 INDENT
1682+268:7 glyph ?-
1683+268:10 name xs
1684+269:9 INDENT
1685+269:9 lit ~
1686+269:11 lit ~
1687+270:9 NEWLINE
1688+270:9 glyph [
1689+270:10 tight name item
1690+270:15 name rest
1691+270:19 tight glyph ]
1692+271:11 INDENT
1693+271:11 glyph ?-
1694+271:14 name rest
1695+272:13 INDENT
1696+272:13 lit ~
1697+272:15 glyph [
1698+272:16 tight name item
1699+272:21 lit ~
1700+272:22 tight glyph ]
1701+273:13 NEWLINE
1702+273:13 glyph [
1703+273:14 tight name next
1704+273:19 name more
1705+273:23 tight glyph ]
1706+273:25 glyph [
1707+273:26 tight name item
1708+273:31 glyph [
1709+273:32 tight name separator
1710+273:42 glyph (
1711+273:43 tight name join
1712+273:48 name separator
1713+273:58 name rest
1714+273:62 tight glyph )
1715+273:63 tight glyph ]
1716+273:64 tight glyph ]
1717+275:1 DEDENT
1718+275:1 DEDENT
1719+275:1 DEDENT
1720+275:1 DEDENT
1721+275:1 DEDENT
1722+275:1 DEDENT
1723+275:1 NEWLINE
1724+275:1 glyph ++
1725+275:4 name snip
1726+275:9 glyph |=
1727+275:12 name xs
1728+275:14 tight glyph =
1729+275:15 tight glyph (
1730+275:16 tight name list
1731+275:21 tvar A
1732+275:22 tight glyph )
1733+276:3 INDENT
1734+276:3 glyph ?-
1735+276:6 name xs
1736+277:5 INDENT
1737+277:5 lit ~
1738+277:7 lit ~
1739+278:5 NEWLINE
1740+278:5 glyph [
1741+278:6 tight name item
1742+278:11 name rest
1743+278:15 tight glyph ]
1744+279:7 INDENT
1745+279:7 glyph ?-
1746+279:10 name rest
1747+280:9 INDENT
1748+280:9 lit ~
1749+280:11 lit ~
1750+281:9 NEWLINE
1751+281:9 glyph [
1752+281:10 tight name next
1753+281:15 name more
1754+281:19 tight glyph ]
1755+281:21 glyph [
1756+281:22 tight name item
1757+281:27 glyph (
1758+281:28 tight name snip
1759+281:33 name rest
1760+281:37 tight glyph )
1761+281:38 tight glyph ]
1762+283:1 DEDENT
1763+283:1 DEDENT
1764+283:1 DEDENT
1765+283:1 DEDENT
1766+283:1 NEWLINE
1767+283:1 glyph ++
1768+283:4 name rear
1769+283:9 glyph |=
1770+283:12 name xs
1771+283:14 tight glyph =
1772+283:15 tight glyph (
1773+283:16 tight name list
1774+283:21 tvar A
1775+283:22 tight glyph )
1776+284:3 INDENT
1777+284:3 glyph ?-
1778+284:6 name xs
1779+285:5 INDENT
1780+285:5 lit ~
1781+285:7 glyph !!
1782+286:5 NEWLINE
1783+286:5 glyph [
1784+286:6 tight name item
1785+286:11 name rest
1786+286:15 tight glyph ]
1787+287:7 INDENT
1788+287:7 glyph ?-
1789+287:10 name rest
1790+288:9 INDENT
1791+288:9 lit ~
1792+288:11 name item
1793+289:9 NEWLINE
1794+289:9 glyph [
1795+289:10 tight name next
1796+289:15 name more
1797+289:19 tight glyph ]
1798+289:21 glyph (
1799+289:22 tight name rear
1800+289:27 name rest
1801+289:31 tight glyph )
1802+289:32 DEDENT
1803+289:32 DEDENT
1804+289:32 DEDENT
1805+289:32 DEDENT
1806+289:32 NEWLINE
tests/golden/prelude-unit-list-transforms/tree.txt+776−774
@@ -1,778 +1,780 @@
11(module
2− (value 2:1 same
3− (gate 2:9
4− (face 2:12 x (tvar 2:14 A))
5− (wing 2:16 x)))
6− (value 4:1 head
7− (gate 4:9
8− (face 4:12 p
9− (cell 4:14 (tvar 4:15 A) (tvar 4:17 B)))
10− (body 5:3
11− (branch 5:3
12− (wing 5:6 p)
13− (arm 6:5
14− (cell 6:5 (bind 6:6 a) (bind 6:8 b))
15− (wing 6:11 a))))))
16− (value 8:1 tail
17− (gate 8:9
18− (face 8:12 p
19− (cell 8:14 (tvar 8:15 A) (tvar 8:17 B)))
20− (body 9:3
21− (branch 9:3
22− (wing 9:6 p)
23− (arm 10:5
24− (cell 10:5 (bind 10:6 a) (bind 10:8 b))
25− (wing 10:11 b))))))
26− (value 12:1 not
27− (gate 12:8
28− (face 12:11 b (flag 12:13))
29− (body 13:3
30− (branch 13:3
31− (wing 13:6 b)
32− (arm 14:5 (lit 14:5 %.y) (lit 14:9 %.n))
33− (arm 15:5 (lit 15:5 %.n) (lit 15:9 %.y))))))
34− (mold 17:1 list
35− (generic 17:9 A
36− (union 18:3
37− (const 18:3 ~)
38− (cell 19:3
39− (face 19:4 i (tvar 19:6 A))
40− (face 19:8 t
41− (apply 19:10 list (tvar 19:16 A)))))))
42− (mold 21:1 unit
43− (generic 21:9 A
44− (union 22:3
45− (const 22:3 ~)
46− (cell 23:3
47− (const 23:4 ~)
48− (face 23:6 u (tvar 23:8 A))))))
49− (value 25:1 fall
50− (gate 25:9
51− (face 25:12 args
52− (cell 25:17
53− (apply 25:18 unit (tvar 25:24 A))
54− (tvar 25:27 A)))
55− (body 26:3
56− (branch 26:3
57− (wing 26:6 args)
58− (arm 27:5
59− (cell 27:5 (bind 27:6 maybe) (bind 27:12 fallback))
60− (body 28:7
61− (branch 28:7
62− (wing 28:10 maybe)
63− (arm 29:9 (lit 29:9 ~) (wing 29:11 fallback))
64− (arm 30:9
65− (cell 30:9 (lit 30:10 ~) (bind 30:12 value))
66− (wing 30:19 value)))))))))
67− (value 32:1 need
68− (gate 32:9
69− (face 32:12 maybe
70− (apply 32:18 unit (tvar 32:24 A)))
71− (body 33:3
72− (branch 33:3
73− (wing 33:6 maybe)
74− (arm 34:5 (lit 34:5 ~) (crash 34:7))
75− (arm 35:5
76− (cell 35:5 (lit 35:6 ~) (bind 35:8 value))
77− (wing 35:15 value))))))
78− (value 37:1 weld
79− (gate 37:9
80− (face 37:12 args
81− (cell 37:17
82− (apply 37:18 list (tvar 37:24 A))
83− (apply 37:27 list (tvar 37:33 A))))
84− (body 38:3
85− (branch 38:3
86− (wing 38:6 args)
87− (arm 39:5
88− (cell 39:5 (bind 39:6 xs) (bind 39:9 ys))
89− (body 40:7
90− (cast 40:7
91− (apply 40:10 list (tvar 40:16 A))
92− (body 41:9
93− (branch 41:9
94− (wing 41:12 xs)
95− (arm 42:11 (lit 42:11 ~) (wing 42:13 ys))
96− (arm 43:11
97− (cell 43:11 (bind 43:12 item) (bind 43:17 rest))
98− (tuple 43:23
99− (wing 43:24 item)
100− (group 43:29
101− (call 43:30 (wing 43:30 weld) (wing 43:35 rest) (wing 43:40 ys))))))))))))))
102− (value 45:1 turn
103− (gate 45:9
104− (face 45:12 args
105− (cell 45:17
106− (apply 45:18 list (tvar 45:24 A))
107− (fn 45:27 (tvar 45:30 A) (tvar 45:32 B))))
108− (body 46:3
109− (branch 46:3
110− (wing 46:6 args)
111− (arm 47:5
112− (cell 47:5 (bind 47:6 xs) (bind 47:9 f))
113− (body 48:7
114− (cast 48:7
115− (apply 48:10 list (tvar 48:16 B))
116− (body 49:9
117− (branch 49:9
118− (wing 49:12 xs)
119− (arm 50:11 (lit 50:11 ~) (lit 50:13 ~))
120− (arm 51:11
121− (cell 51:11 (bind 51:12 item) (bind 51:17 rest))
122− (tuple 51:23
123− (group 51:24
124− (call 51:25 (wing 51:25 f) (wing 51:27 item)))
125− (group 51:33
126− (call 51:34 (wing 51:34 turn) (wing 51:39 rest) (wing 51:44 f))))))))))))))
127− (mold 53:1 dime
128− (cell 53:9
129− (face 53:10 p (aura 53:12 @ta))
130− (face 53:16 q (aura 53:18 @))))
131− (mold 55:1 hair
132− (cell 55:9
133− (face 55:10 p (aura 55:12 @ud))
134− (face 55:16 q (aura 55:18 @ud))))
135− (mold 57:1 pint
136− (cell 57:9
137− (face 57:10 p
138− (cell 57:12
139− (face 57:13 p (aura 57:15 @))
140− (face 57:17 q (aura 57:19 @))))
141− (face 57:22 q
142− (cell 57:24
143− (face 57:25 p (aura 57:27 @))
144− (face 57:29 q (aura 57:31 @))))))
145− (mold 59:1 coin
146− (union 60:3
147− (cell 60:3
148− (const 60:4 %$)
149− (face 60:7 p (ref 60:9 dime)))
150− (cell 61:3
151− (const 61:4 %blob)
152− (face 61:10 p (noun 61:12)))
153− (cell 62:3
154− (const 62:4 %many)
155− (face 62:10 p
156− (apply 62:12 list (ref 62:18 coin))))))
157− (mold 64:1 pair
158− (generic 64:9 A B
159− (cell 64:18
160− (face 64:19 p (tvar 64:21 A))
161− (face 64:23 q (tvar 64:25 B)))))
162− (mold 66:1 trel
163− (generic 66:9 A B C
164− (cell 66:20
165− (face 66:21 p (tvar 66:23 A))
166− (face 66:25 q (tvar 66:27 B))
167− (face 66:29 r (tvar 66:31 C)))))
168− (mold 68:1 qual
169− (generic 68:9 A B C D
170− (cell 68:22
171− (face 68:23 p (tvar 68:25 A))
172− (face 68:27 q (tvar 68:29 B))
173− (face 68:31 r (tvar 68:33 C))
174− (face 68:35 s (tvar 68:37 D)))))
175− (mold 70:1 cord (aura 70:9 @t))
176− (mold 72:1 knot (aura 72:9 @ta))
177− (mold 74:1 tape
178− (apply 74:9 list (aura 74:15 @tD)))
179− (mold 76:1 path
180− (apply 76:9 list (ref 76:15 knot)))
181− (mold 78:1 tank
182− (union 79:3
183− (ref 79:3 cord)
184− (cell 80:3
185− (const 80:4 %leaf)
186− (face 80:10 p (ref 80:12 tape)))
187− (cell 81:3
188− (const 81:4 %palm)
189− (face 81:10 p
190− (apply 81:12 qual (ref 81:18 tape) (ref 81:23 tape) (ref 81:28 tape) (ref 81:33 tape)))
191− (face 81:39 q
192− (apply 81:41 list (ref 81:47 tank))))
193− (cell 82:3
194− (const 82:4 %rose)
195− (face 82:10 p
196− (apply 82:12 trel (ref 82:18 tape) (ref 82:23 tape) (ref 82:28 tape)))
197− (face 82:34 q
198− (apply 82:36 list (ref 82:42 tank))))))
199− (mold 84:1 nail
200− (cell 84:9
201− (face 84:10 p (ref 84:12 hair))
202− (face 84:17 q (ref 84:19 tape))))
203− (mold 86:1 edge
204− (cell 86:9
205− (face 86:10 p (ref 86:12 hair))
206− (face 86:17 q
207− (apply 86:19 unit
208− (cell 86:25
209− (face 86:26 p (noun 86:28))
210− (face 86:30 q (ref 86:32 nail)))))))
211− (mold 88:1 rule
212− (fn 88:9 (ref 88:12 nail) (ref 88:17 edge)))
213− (mold 90:1 spot
214− (cell 90:9
215− (face 90:10 p (ref 90:12 path))
216− (face 90:17 q (ref 90:19 pint))))
217− (mold 92:1 toon
218− (union 93:3
219− (cell 93:3
220− (const 93:4 %0)
221− (face 93:7 p (noun 93:9)))
222− (cell 94:3
223− (const 94:4 %1)
224− (face 94:7 p (noun 94:9)))
225− (cell 95:3
226− (const 95:4 %2)
227− (face 95:7 p
228− (apply 95:9 list (ref 95:15 tank))))))
229− (mold 97:1 like
230− (generic 97:9 A
231− (cell 97:16
232− (face 97:17 p (ref 97:19 hair))
233− (face 97:24 q
234− (apply 97:26 unit
235− (cell 97:32
236− (face 97:33 p (tvar 97:35 A))
237− (face 97:37 q (ref 97:39 nail))))))))
238− (value 99:1 wonk
239− (gate 99:9
240− (face 99:12 veq
241− (apply 99:16 like (tvar 99:22 A)))
242− (body 100:3
243− (branch 100:3
244− (wing 100:6 q.veq)
245− (arm 101:5 (lit 101:5 ~) (crash 101:7))
246− (arm 102:5
247− (cell 102:5 (lit 102:6 ~) (bind 102:8 product))
248− (wing 102:17 p.product))))))
249− (mold 104:1 lone
250− (generic 104:9 A
251− (cell 104:16
252− (face 104:17 p (tvar 104:19 A)))))
253− (mold 106:1 lest
254− (generic 106:9 A
255− (cell 106:16
256− (face 106:17 i (tvar 106:19 A))
257− (face 106:21 t
258− (apply 106:23 list (tvar 106:29 A))))))
259− (mold 108:1 pole
260− (generic 108:9 A
261− (union 109:3
262− (const 109:3 ~)
263− (cell 110:3
264− (tvar 110:4 A)
265− (apply 110:6 pole (tvar 110:12 A))))))
266− (mold 112:1 quip
267− (generic 112:9 A B
268− (cell 112:18
269− (apply 112:19 list (tvar 112:25 A))
270− (tvar 112:28 B))))
271− (mold 114:1 tree
272− (generic 114:9 A
273− (union 115:3
274− (const 115:3 ~)
275− (cell 116:3
276− (face 116:4 n (tvar 116:6 A))
277− (face 116:8 l
278− (apply 116:10 tree (tvar 116:16 A)))
279− (face 116:19 r
280− (apply 116:21 tree (tvar 116:27 A)))))))
281− (mold 118:1 each
282− (generic 118:9 A B
283− (union 119:3
2+ (jibb 1:1 internal /lib/jibb/internal)
3+ (mold 2:1 poke (ref 2:9 poke.internal))
4+ (value 5:1 same
5+ (gate 5:9
6+ (face 5:12 x (tvar 5:14 A))
7+ (wing 5:16 x)))
8+ (value 7:1 head
9+ (gate 7:9
10+ (face 7:12 p
11+ (cell 7:14 (tvar 7:15 A) (tvar 7:17 B)))
12+ (body 8:3
13+ (branch 8:3
14+ (wing 8:6 p)
15+ (arm 9:5
16+ (cell 9:5 (bind 9:6 a) (bind 9:8 b))
17+ (wing 9:11 a))))))
18+ (value 11:1 tail
19+ (gate 11:9
20+ (face 11:12 p
21+ (cell 11:14 (tvar 11:15 A) (tvar 11:17 B)))
22+ (body 12:3
23+ (branch 12:3
24+ (wing 12:6 p)
25+ (arm 13:5
26+ (cell 13:5 (bind 13:6 a) (bind 13:8 b))
27+ (wing 13:11 b))))))
28+ (value 15:1 not
29+ (gate 15:8
30+ (face 15:11 b (flag 15:13))
31+ (body 16:3
32+ (branch 16:3
33+ (wing 16:6 b)
34+ (arm 17:5 (lit 17:5 %.y) (lit 17:9 %.n))
35+ (arm 18:5 (lit 18:5 %.n) (lit 18:9 %.y))))))
36+ (mold 20:1 list
37+ (generic 20:9 A
38+ (union 21:3
39+ (const 21:3 ~)
40+ (cell 22:3
41+ (face 22:4 i (tvar 22:6 A))
42+ (face 22:8 t
43+ (apply 22:10 list (tvar 22:16 A)))))))
44+ (mold 24:1 unit
45+ (generic 24:9 A
46+ (union 25:3
47+ (const 25:3 ~)
48+ (cell 26:3
49+ (const 26:4 ~)
50+ (face 26:6 u (tvar 26:8 A))))))
51+ (value 28:1 fall
52+ (gate 28:9
53+ (face 28:12 args
54+ (cell 28:17
55+ (apply 28:18 unit (tvar 28:24 A))
56+ (tvar 28:27 A)))
57+ (body 29:3
58+ (branch 29:3
59+ (wing 29:6 args)
60+ (arm 30:5
61+ (cell 30:5 (bind 30:6 maybe) (bind 30:12 fallback))
62+ (body 31:7
63+ (branch 31:7
64+ (wing 31:10 maybe)
65+ (arm 32:9 (lit 32:9 ~) (wing 32:11 fallback))
66+ (arm 33:9
67+ (cell 33:9 (lit 33:10 ~) (bind 33:12 value))
68+ (wing 33:19 value)))))))))
69+ (value 35:1 need
70+ (gate 35:9
71+ (face 35:12 maybe
72+ (apply 35:18 unit (tvar 35:24 A)))
73+ (body 36:3
74+ (branch 36:3
75+ (wing 36:6 maybe)
76+ (arm 37:5 (lit 37:5 ~) (crash 37:7))
77+ (arm 38:5
78+ (cell 38:5 (lit 38:6 ~) (bind 38:8 value))
79+ (wing 38:15 value))))))
80+ (value 40:1 weld
81+ (gate 40:9
82+ (face 40:12 args
83+ (cell 40:17
84+ (apply 40:18 list (tvar 40:24 A))
85+ (apply 40:27 list (tvar 40:33 A))))
86+ (body 41:3
87+ (branch 41:3
88+ (wing 41:6 args)
89+ (arm 42:5
90+ (cell 42:5 (bind 42:6 xs) (bind 42:9 ys))
91+ (body 43:7
92+ (cast 43:7
93+ (apply 43:10 list (tvar 43:16 A))
94+ (body 44:9
95+ (branch 44:9
96+ (wing 44:12 xs)
97+ (arm 45:11 (lit 45:11 ~) (wing 45:13 ys))
98+ (arm 46:11
99+ (cell 46:11 (bind 46:12 item) (bind 46:17 rest))
100+ (tuple 46:23
101+ (wing 46:24 item)
102+ (group 46:29
103+ (call 46:30 (wing 46:30 weld) (wing 46:35 rest) (wing 46:40 ys))))))))))))))
104+ (value 48:1 turn
105+ (gate 48:9
106+ (face 48:12 args
107+ (cell 48:17
108+ (apply 48:18 list (tvar 48:24 A))
109+ (fn 48:27 (tvar 48:30 A) (tvar 48:32 B))))
110+ (body 49:3
111+ (branch 49:3
112+ (wing 49:6 args)
113+ (arm 50:5
114+ (cell 50:5 (bind 50:6 xs) (bind 50:9 f))
115+ (body 51:7
116+ (cast 51:7
117+ (apply 51:10 list (tvar 51:16 B))
118+ (body 52:9
119+ (branch 52:9
120+ (wing 52:12 xs)
121+ (arm 53:11 (lit 53:11 ~) (lit 53:13 ~))
122+ (arm 54:11
123+ (cell 54:11 (bind 54:12 item) (bind 54:17 rest))
124+ (tuple 54:23
125+ (group 54:24
126+ (call 54:25 (wing 54:25 f) (wing 54:27 item)))
127+ (group 54:33
128+ (call 54:34 (wing 54:34 turn) (wing 54:39 rest) (wing 54:44 f))))))))))))))
129+ (mold 56:1 dime
130+ (cell 56:9
131+ (face 56:10 p (aura 56:12 @ta))
132+ (face 56:16 q (aura 56:18 @))))
133+ (mold 58:1 hair
134+ (cell 58:9
135+ (face 58:10 p (aura 58:12 @ud))
136+ (face 58:16 q (aura 58:18 @ud))))
137+ (mold 60:1 pint
138+ (cell 60:9
139+ (face 60:10 p
140+ (cell 60:12
141+ (face 60:13 p (aura 60:15 @))
142+ (face 60:17 q (aura 60:19 @))))
143+ (face 60:22 q
144+ (cell 60:24
145+ (face 60:25 p (aura 60:27 @))
146+ (face 60:29 q (aura 60:31 @))))))
147+ (mold 62:1 coin
148+ (union 63:3
149+ (cell 63:3
150+ (const 63:4 %$)
151+ (face 63:7 p (ref 63:9 dime)))
152+ (cell 64:3
153+ (const 64:4 %blob)
154+ (face 64:10 p (noun 64:12)))
155+ (cell 65:3
156+ (const 65:4 %many)
157+ (face 65:10 p
158+ (apply 65:12 list (ref 65:18 coin))))))
159+ (mold 67:1 pair
160+ (generic 67:9 A B
161+ (cell 67:18
162+ (face 67:19 p (tvar 67:21 A))
163+ (face 67:23 q (tvar 67:25 B)))))
164+ (mold 69:1 trel
165+ (generic 69:9 A B C
166+ (cell 69:20
167+ (face 69:21 p (tvar 69:23 A))
168+ (face 69:25 q (tvar 69:27 B))
169+ (face 69:29 r (tvar 69:31 C)))))
170+ (mold 71:1 qual
171+ (generic 71:9 A B C D
172+ (cell 71:22
173+ (face 71:23 p (tvar 71:25 A))
174+ (face 71:27 q (tvar 71:29 B))
175+ (face 71:31 r (tvar 71:33 C))
176+ (face 71:35 s (tvar 71:37 D)))))
177+ (mold 73:1 cord (aura 73:9 @t))
178+ (mold 75:1 knot (aura 75:9 @ta))
179+ (mold 77:1 tape
180+ (apply 77:9 list (aura 77:15 @tD)))
181+ (mold 79:1 path
182+ (apply 79:9 list (ref 79:15 knot)))
183+ (mold 81:1 tank
184+ (union 82:3
185+ (ref 82:3 cord)
186+ (cell 83:3
187+ (const 83:4 %leaf)
188+ (face 83:10 p (ref 83:12 tape)))
189+ (cell 84:3
190+ (const 84:4 %palm)
191+ (face 84:10 p
192+ (apply 84:12 qual (ref 84:18 tape) (ref 84:23 tape) (ref 84:28 tape) (ref 84:33 tape)))
193+ (face 84:39 q
194+ (apply 84:41 list (ref 84:47 tank))))
195+ (cell 85:3
196+ (const 85:4 %rose)
197+ (face 85:10 p
198+ (apply 85:12 trel (ref 85:18 tape) (ref 85:23 tape) (ref 85:28 tape)))
199+ (face 85:34 q
200+ (apply 85:36 list (ref 85:42 tank))))))
201+ (mold 87:1 nail
202+ (cell 87:9
203+ (face 87:10 p (ref 87:12 hair))
204+ (face 87:17 q (ref 87:19 tape))))
205+ (mold 89:1 edge
206+ (cell 89:9
207+ (face 89:10 p (ref 89:12 hair))
208+ (face 89:17 q
209+ (apply 89:19 unit
210+ (cell 89:25
211+ (face 89:26 p (noun 89:28))
212+ (face 89:30 q (ref 89:32 nail)))))))
213+ (mold 91:1 rule
214+ (fn 91:9 (ref 91:12 nail) (ref 91:17 edge)))
215+ (mold 93:1 spot
216+ (cell 93:9
217+ (face 93:10 p (ref 93:12 path))
218+ (face 93:17 q (ref 93:19 pint))))
219+ (mold 95:1 toon
220+ (union 96:3
221+ (cell 96:3
222+ (const 96:4 %0)
223+ (face 96:7 p (noun 96:9)))
224+ (cell 97:3
225+ (const 97:4 %1)
226+ (face 97:7 p (noun 97:9)))
227+ (cell 98:3
228+ (const 98:4 %2)
229+ (face 98:7 p
230+ (apply 98:9 list (ref 98:15 tank))))))
231+ (mold 100:1 like
232+ (generic 100:9 A
233+ (cell 100:16
234+ (face 100:17 p (ref 100:19 hair))
235+ (face 100:24 q
236+ (apply 100:26 unit
237+ (cell 100:32
238+ (face 100:33 p (tvar 100:35 A))
239+ (face 100:37 q (ref 100:39 nail))))))))
240+ (value 102:1 wonk
241+ (gate 102:9
242+ (face 102:12 veq
243+ (apply 102:16 like (tvar 102:22 A)))
244+ (body 103:3
245+ (branch 103:3
246+ (wing 103:6 q.veq)
247+ (arm 104:5 (lit 104:5 ~) (crash 104:7))
248+ (arm 105:5
249+ (cell 105:5 (lit 105:6 ~) (bind 105:8 product))
250+ (wing 105:17 p.product))))))
251+ (mold 107:1 lone
252+ (generic 107:9 A
253+ (cell 107:16
254+ (face 107:17 p (tvar 107:19 A)))))
255+ (mold 109:1 lest
256+ (generic 109:9 A
257+ (cell 109:16
258+ (face 109:17 i (tvar 109:19 A))
259+ (face 109:21 t
260+ (apply 109:23 list (tvar 109:29 A))))))
261+ (mold 111:1 pole
262+ (generic 111:9 A
263+ (union 112:3
264+ (const 112:3 ~)
265+ (cell 113:3
266+ (tvar 113:4 A)
267+ (apply 113:6 pole (tvar 113:12 A))))))
268+ (mold 115:1 quip
269+ (generic 115:9 A B
270+ (cell 115:18
271+ (apply 115:19 list (tvar 115:25 A))
272+ (tvar 115:28 B))))
273+ (mold 117:1 tree
274+ (generic 117:9 A
275+ (union 118:3
276+ (const 118:3 ~)
284277 (cell 119:3
285− (const 119:4 %|)
286− (face 119:7 p (tvar 119:9 B)))
287− (cell 120:3
288− (const 120:4 %&)
289− (face 120:7 p (tvar 120:9 A))))))
290− (mold 122:1 bloq (aura 122:9 @))
291− (value 124:1 some
292− (gate 124:9
293− (face 124:12 item (tvar 124:17 A))
294− (unit 124:19 (wing 124:20 item))))
295− (value 126:1 lure
296− (gate 126:9
297− (face 126:12 item (tvar 126:17 A))
298− (body 127:3
299− (cast 127:3
300− (apply 127:6 list (tvar 127:12 A))
301− (tuple 127:15 (wing 127:16 item) (lit 127:21 ~))))))
302− (value 129:1 snoc
278+ (face 119:4 n (tvar 119:6 A))
279+ (face 119:8 l
280+ (apply 119:10 tree (tvar 119:16 A)))
281+ (face 119:19 r
282+ (apply 119:21 tree (tvar 119:27 A)))))))
283+ (mold 121:1 each
284+ (generic 121:9 A B
285+ (union 122:3
286+ (cell 122:3
287+ (const 122:4 %|)
288+ (face 122:7 p (tvar 122:9 B)))
289+ (cell 123:3
290+ (const 123:4 %&)
291+ (face 123:7 p (tvar 123:9 A))))))
292+ (mold 125:1 bloq (aura 125:9 @))
293+ (value 127:1 some
294+ (gate 127:9
295+ (face 127:12 item (tvar 127:17 A))
296+ (unit 127:19 (wing 127:20 item))))
297+ (value 129:1 lure
303298 (gate 129:9
304− (face 129:12 args
305− (cell 129:17
306− (apply 129:18 list (tvar 129:24 A))
307− (tvar 129:27 A)))
299+ (face 129:12 item (tvar 129:17 A))
308300 (body 130:3
309− (branch 130:3
310− (wing 130:6 args)
311− (arm 131:5
312− (cell 131:5 (bind 131:6 xs) (bind 131:9 item))
313− (group 131:15
314− (call 131:16
315− (wing 131:16 weld)
316− (wing 131:21 xs)
317− (tuple 131:24 (wing 131:25 item) (lit 131:30 ~)))))))))
318− (value 133:1 flop
319− (gate 133:9
320− (face 133:12 xs
321− (apply 133:15 list (tvar 133:21 A)))
322− (body 134:3
323− (value 134:3 reverse-into
324− (gate 134:19
325− (face 134:22 args
326− (cell 134:27
327− (apply 134:28 list (tvar 134:34 A))
328− (apply 134:37 list (tvar 134:43 A))))
329− (body 135:5
330− (branch 135:5
331− (wing 135:8 args)
332− (arm 136:7
333− (cell 136:7 (bind 136:8 rest) (bind 136:13 acc))
334− (body 137:9
335− (branch 137:9
336− (wing 137:12 rest)
337− (arm 138:11 (lit 138:11 ~) (wing 138:13 acc))
338− (arm 139:11
339− (cell 139:11 (bind 139:12 item) (bind 139:17 more))
340− (group 139:23
341− (call 139:24
342− (wing 139:24 reverse-into)
343− (wing 139:37 more)
344− (tuple 139:42 (wing 139:43 item) (wing 139:48 acc))))))))))))
345− (group 140:3
346− (call 140:4 (wing 140:4 reverse-into) (wing 140:17 xs) (lit 140:20 ~))))))
347− (value 142:1 drop
348− (gate 142:9
349− (face 142:12 maybe
350− (apply 142:18 unit (tvar 142:24 A)))
351− (body 143:3
352− (branch 143:3
353− (wing 143:6 maybe)
354− (arm 144:5 (lit 144:5 ~) (lit 144:7 ~))
355− (arm 145:5
356− (cell 145:5 (lit 145:6 ~) (bind 145:8 value))
357− (tuple 145:15 (wing 145:16 value) (lit 145:22 ~)))))))
358− (value 147:1 bind
359− (gate 147:9
360− (face 147:12 args
361− (cell 147:17
362− (apply 147:18 unit (tvar 147:24 A))
363− (fn 147:27 (tvar 147:30 A) (tvar 147:32 B))))
364− (body 148:3
365− (branch 148:3
366− (wing 148:6 args)
367− (arm 149:5
368− (cell 149:5 (bind 149:6 maybe) (bind 149:12 f))
369− (cast 149:15
370− (apply 149:18 unit (tvar 149:24 B))
371− (body 150:7
372− (branch 150:7
373− (wing 150:10 maybe)
374− (arm 151:9 (lit 151:9 ~) (lit 151:11 ~))
375− (arm 152:9
376− (cell 152:9 (lit 152:10 ~) (bind 152:12 value))
377− (unit 152:19
378− (group 152:20
379− (call 152:21 (wing 152:21 f) (wing 152:23 value)))))))))))))
380− (value 154:1 biff
381− (gate 154:9
382− (face 154:12 args
383− (cell 154:17
384− (apply 154:18 unit (tvar 154:24 A))
385− (fn 154:27
386− (tvar 154:30 A)
387− (apply 154:32 unit (tvar 154:38 B)))))
388− (body 155:3
389− (branch 155:3
390− (wing 155:6 args)
391− (arm 156:5
392− (cell 156:5 (bind 156:6 maybe) (bind 156:12 f))
393− (cast 156:15
394− (apply 156:18 unit (tvar 156:24 B))
395− (body 157:7
396− (branch 157:7
397− (wing 157:10 maybe)
398− (arm 158:9 (lit 158:9 ~) (lit 158:11 ~))
399− (arm 159:9
400− (cell 159:9 (lit 159:10 ~) (bind 159:12 value))
401− (group 159:19
402− (call 159:20 (wing 159:20 f) (wing 159:22 value))))))))))))
403− (value 161:1 both
404− (gate 161:9
405− (face 161:12 args
406− (cell 161:17
407− (apply 161:18 unit (tvar 161:24 A))
408− (apply 161:27 unit (tvar 161:33 B))))
409− (body 162:3
410− (branch 162:3
411− (wing 162:6 args)
412− (arm 163:5
413− (cell 163:5 (bind 163:6 first) (bind 163:12 second))
414− (cast 163:20
415− (apply 163:23 unit
416− (cell 163:29 (tvar 163:30 A) (tvar 163:32 B)))
417− (body 164:7
418− (branch 164:7
419− (wing 164:10 first)
420− (arm 165:9 (lit 165:9 ~) (lit 165:11 ~))
421− (arm 166:9
422− (cell 166:9 (lit 166:10 ~) (bind 166:12 a))
423− (body 167:11
424− (branch 167:11
425− (wing 167:14 second)
426− (arm 168:13 (lit 168:13 ~) (lit 168:15 ~))
427− (arm 169:13
428− (cell 169:13 (lit 169:14 ~) (bind 169:16 b))
429− (unit 169:19
430− (tuple 169:20 (wing 169:21 a) (wing 169:23 b)))))))))))))))
431− (value 171:1 clap
432− (gate 171:9
433− (face 171:12 args
434− (cell 171:17
435− (apply 171:18 unit (tvar 171:24 A))
436− (apply 171:27 unit (tvar 171:33 A))
437− (fn 171:36
438− (cell 171:39 (tvar 171:40 A) (tvar 171:42 A))
439− (tvar 171:45 A))))
440− (body 172:3
441− (branch 172:3
442− (wing 172:6 args)
443− (arm 173:5
444− (cell 173:5 (bind 173:6 first) (bind 173:12 second) (bind 173:19 combine))
445− (cast 173:28
446− (apply 173:31 unit (tvar 173:37 A))
447− (body 174:7
448− (branch 174:7
449− (wing 174:10 first)
450− (arm 175:9 (lit 175:9 ~) (wing 175:11 second))
451− (arm 176:9
452− (cell 176:9 (lit 176:10 ~) (bind 176:12 a))
453− (body 177:11
454− (branch 177:11
455− (wing 177:14 second)
456− (arm 178:13 (lit 178:13 ~) (wing 178:15 first))
457− (arm 179:13
458− (cell 179:13 (lit 179:14 ~) (bind 179:16 b))
459− (unit 179:19
460− (group 179:20
461− (call 179:21 (wing 179:21 combine) (wing 179:29 a) (wing 179:31 b))))))))))))))))
462− (value 181:1 clef
463− (gate 181:9
464− (face 181:12 args
465− (cell 181:17
466− (apply 181:18 unit (tvar 181:24 A))
467− (apply 181:27 unit (tvar 181:33 B))
468− (fn 181:36
469− (cell 181:39 (tvar 181:40 A) (tvar 181:42 B))
470− (apply 181:45 unit (tvar 181:51 C)))))
471− (body 182:3
472− (branch 182:3
473− (wing 182:6 args)
474− (arm 183:5
475− (cell 183:5 (bind 183:6 first) (bind 183:12 second) (bind 183:19 combine))
476− (cast 183:28
477− (apply 183:31 unit (tvar 183:37 C))
478− (body 184:7
479− (branch 184:7
480− (wing 184:10 first)
481− (arm 185:9 (lit 185:9 ~) (lit 185:11 ~))
482− (arm 186:9
483− (cell 186:9 (lit 186:10 ~) (bind 186:12 a))
484− (body 187:11
485− (branch 187:11
486− (wing 187:14 second)
487− (arm 188:13 (lit 188:13 ~) (lit 188:15 ~))
488− (arm 189:13
489− (cell 189:13 (lit 189:14 ~) (bind 189:16 b))
490− (group 189:19
491− (call 189:20 (wing 189:20 combine) (wing 189:28 a) (wing 189:30 b)))))))))))))))
492− (value 191:1 skim
493− (gate 191:9
494− (face 191:12 args
495− (cell 191:17
496− (apply 191:18 list (tvar 191:24 A))
497− (fn 191:27 (tvar 191:30 A) (flag 191:32))))
498− (body 192:3
499− (branch 192:3
500− (wing 192:6 args)
501− (arm 193:5
502− (cell 193:5 (bind 193:6 xs) (bind 193:9 predicate))
503− (body 194:7
504− (branch 194:7
505− (wing 194:10 xs)
506− (arm 195:9 (lit 195:9 ~) (lit 195:11 ~))
507− (arm 196:9
508− (cell 196:9 (bind 196:10 item) (bind 196:15 rest))
509− (body 197:11
510− (branch 197:11
511− (group 197:14
512− (call 197:15 (wing 197:15 predicate) (wing 197:25 item)))
513− (arm 198:13
514− (lit 198:13 %.y)
515− (tuple 198:17
516− (wing 198:18 item)
517− (group 198:23
518− (call 198:24 (wing 198:24 skim) (wing 198:29 rest) (wing 198:34 predicate)))))
519− (arm 199:13
520− (lit 199:13 %.n)
521− (group 199:17
522− (call 199:18 (wing 199:18 skim) (wing 199:23 rest) (wing 199:28 predicate))))))))))))))
523− (value 201:1 skip
524− (gate 201:9
525− (face 201:12 args
526− (cell 201:17
527− (apply 201:18 list (tvar 201:24 A))
528− (fn 201:27 (tvar 201:30 A) (flag 201:32))))
529− (body 202:3
530− (branch 202:3
531− (wing 202:6 args)
532− (arm 203:5
533− (cell 203:5 (bind 203:6 xs) (bind 203:9 predicate))
534− (body 204:7
535− (branch 204:7
536− (wing 204:10 xs)
537− (arm 205:9 (lit 205:9 ~) (lit 205:11 ~))
538− (arm 206:9
539− (cell 206:9 (bind 206:10 item) (bind 206:15 rest))
540− (body 207:11
541− (branch 207:11
542− (group 207:14
543− (call 207:15 (wing 207:15 predicate) (wing 207:25 item)))
544− (arm 208:13
545− (lit 208:13 %.y)
546− (group 208:17
547− (call 208:18 (wing 208:18 skip) (wing 208:23 rest) (wing 208:28 predicate))))
548− (arm 209:13
549− (lit 209:13 %.n)
550− (tuple 209:17
551− (wing 209:18 item)
552− (group 209:23
553− (call 209:24 (wing 209:24 skip) (wing 209:29 rest) (wing 209:34 predicate)))))))))))))))
554− (value 211:1 levy
555− (gate 211:9
556− (face 211:12 args
557− (cell 211:17
558− (apply 211:18 list (tvar 211:24 A))
559− (fn 211:27 (tvar 211:30 A) (flag 211:32))))
560− (body 212:3
561− (branch 212:3
562− (wing 212:6 args)
563− (arm 213:5
564− (cell 213:5 (bind 213:6 xs) (bind 213:9 predicate))
565− (body 214:7
566− (branch 214:7
567− (wing 214:10 xs)
568− (arm 215:9 (lit 215:9 ~) (lit 215:11 %.y))
569− (arm 216:9
570− (cell 216:9 (bind 216:10 item) (bind 216:15 rest))
571− (body 217:11
572− (branch 217:11
573− (group 217:14
574− (call 217:15 (wing 217:15 predicate) (wing 217:25 item)))
575− (arm 218:13
576− (lit 218:13 %.y)
577− (group 218:17
578− (call 218:18 (wing 218:18 levy) (wing 218:23 rest) (wing 218:28 predicate))))
579− (arm 219:13 (lit 219:13 %.n) (lit 219:17 %.n))))))))))))
580− (value 221:1 lien
581− (gate 221:9
582− (face 221:12 args
583− (cell 221:17
584− (apply 221:18 list (tvar 221:24 A))
585− (fn 221:27 (tvar 221:30 A) (flag 221:32))))
586− (body 222:3
587− (branch 222:3
588− (wing 222:6 args)
589− (arm 223:5
590− (cell 223:5 (bind 223:6 xs) (bind 223:9 predicate))
591− (body 224:7
592− (branch 224:7
593− (wing 224:10 xs)
594− (arm 225:9 (lit 225:9 ~) (lit 225:11 %.n))
595− (arm 226:9
596− (cell 226:9 (bind 226:10 item) (bind 226:15 rest))
597− (body 227:11
598− (branch 227:11
599− (group 227:14
600− (call 227:15 (wing 227:15 predicate) (wing 227:25 item)))
601− (arm 228:13 (lit 228:13 %.y) (lit 228:17 %.y))
602− (arm 229:13
603− (lit 229:13 %.n)
604− (group 229:17
605− (call 229:18 (wing 229:18 lien) (wing 229:23 rest) (wing 229:28 predicate))))))))))))))
606− (value 231:1 roll
607− (gate 231:9
608− (face 231:12 args
609− (cell 231:17
610− (apply 231:18 list (tvar 231:24 A))
611− (tvar 231:27 B)
612− (fn 231:29
613− (cell 231:32 (tvar 231:33 A) (tvar 231:35 B))
614− (tvar 231:38 B))))
615− (body 232:3
616− (branch 232:3
617− (wing 232:6 args)
618− (arm 233:5
619− (cell 233:5 (bind 233:6 xs) (bind 233:9 start) (bind 233:15 combine))
620− (body 234:7
621− (branch 234:7
622− (wing 234:10 xs)
623− (arm 235:9 (lit 235:9 ~) (wing 235:11 start))
624− (arm 236:9
625− (cell 236:9 (bind 236:10 item) (bind 236:15 rest))
626− (group 236:21
627− (call 236:22
628− (wing 236:22 roll)
629− (wing 236:27 rest)
630− (group 236:32
631− (call 236:33 (wing 236:33 combine) (wing 236:41 item) (wing 236:46 start)))
632− (wing 236:53 combine)))))))))))
633− (value 238:1 reel
634− (gate 238:9
635− (face 238:12 args
636− (cell 238:17
637− (apply 238:18 list (tvar 238:24 A))
638− (tvar 238:27 B)
639− (fn 238:29
640− (cell 238:32 (tvar 238:33 A) (tvar 238:35 B))
641− (tvar 238:38 B))))
642− (body 239:3
643− (branch 239:3
644− (wing 239:6 args)
645− (arm 240:5
646− (cell 240:5 (bind 240:6 xs) (bind 240:9 start) (bind 240:15 combine))
647− (body 241:7
648− (branch 241:7
649− (wing 241:10 xs)
650− (arm 242:9 (lit 242:9 ~) (wing 242:11 start))
651− (arm 243:9
652− (cell 243:9 (bind 243:10 item) (bind 243:15 rest))
653− (group 243:21
654− (call 243:22
655− (wing 243:22 combine)
656− (wing 243:30 item)
657− (group 243:35
658− (call 243:36 (wing 243:36 reel) (wing 243:41 rest) (wing 243:46 start) (wing 243:52 combine)))))))))))))
659− (value 245:1 flit
660− (gate 245:9
661− (face 245:12 predicate
662− (fn 245:22 (tvar 245:25 A) (flag 245:27)))
663− (body 246:3
664− (gate 246:3
665− (face 246:6 value (tvar 246:12 A))
666− (body 247:5
667− (cast 247:5
668− (apply 247:8 unit (tvar 247:14 A))
669− (body 248:7
670− (branch 248:7
671− (group 248:10
672− (call 248:11 (wing 248:11 predicate) (wing 248:21 value)))
673− (arm 249:9
674− (lit 249:9 %.y)
675− (unit 249:13 (wing 249:14 value)))
676− (arm 250:9 (lit 250:9 %.n) (lit 250:13 ~))))))))))
677− (value 252:1 murn
678− (gate 252:9
679− (face 252:12 args
680− (cell 252:17
681− (apply 252:18 list (tvar 252:24 A))
682− (fn 252:27
683− (tvar 252:30 A)
684− (apply 252:32 unit (tvar 252:38 B)))))
685− (body 253:3
686− (branch 253:3
687− (wing 253:6 args)
688− (arm 254:5
689− (cell 254:5 (bind 254:6 xs) (bind 254:9 f))
690− (body 255:7
691− (branch 255:7
692− (wing 255:10 xs)
693− (arm 256:9 (lit 256:9 ~) (lit 256:11 ~))
694− (arm 257:9
695− (cell 257:9 (bind 257:10 item) (bind 257:15 rest))
696− (body 258:11
697− (branch 258:11
698− (group 258:14
699− (call 258:15 (wing 258:15 f) (wing 258:17 item)))
700− (arm 259:13
701− (lit 259:13 ~)
702− (group 259:15
703− (call 259:16 (wing 259:16 murn) (wing 259:21 rest) (wing 259:26 f))))
704− (arm 260:13
705− (cell 260:13 (lit 260:14 ~) (bind 260:16 value))
706− (tuple 260:23
707− (wing 260:24 value)
708− (group 260:30
709− (call 260:31 (wing 260:31 murn) (wing 260:36 rest) (wing 260:41 f)))))))))))))))
710− (value 262:1 join
711− (gate 262:9
712− (face 262:12 args
713− (cell 262:17
714− (tvar 262:18 A)
715− (apply 262:20 list (tvar 262:26 A))))
716− (body 263:3
717− (branch 263:3
718− (wing 263:6 args)
719− (arm 264:5
720− (cell 264:5 (bind 264:6 separator) (bind 264:16 xs))
721− (body 265:7
722− (branch 265:7
723− (wing 265:10 xs)
724− (arm 266:9 (lit 266:9 ~) (lit 266:11 ~))
725− (arm 267:9
726− (cell 267:9 (bind 267:10 item) (bind 267:15 rest))
727− (body 268:11
728− (branch 268:11
729− (wing 268:14 rest)
730− (arm 269:13
731− (lit 269:13 ~)
732− (tuple 269:15 (wing 269:16 item) (lit 269:21 ~)))
733− (arm 270:13
734− (cell 270:13 (bind 270:14 next) (bind 270:19 more))
735− (tuple 270:25
736− (wing 270:26 item)
737− (tuple 270:31
738− (wing 270:32 separator)
739− (group 270:42
740− (call 270:43 (wing 270:43 join) (wing 270:48 separator) (wing 270:58 rest))))))))))))))))
741− (value 272:1 snip
742− (gate 272:9
743− (face 272:12 xs
744− (apply 272:15 list (tvar 272:21 A)))
745− (body 273:3
746− (branch 273:3
747− (wing 273:6 xs)
748− (arm 274:5 (lit 274:5 ~) (lit 274:7 ~))
749− (arm 275:5
750− (cell 275:5 (bind 275:6 item) (bind 275:11 rest))
751− (body 276:7
752− (branch 276:7
753− (wing 276:10 rest)
754− (arm 277:9 (lit 277:9 ~) (lit 277:11 ~))
755− (arm 278:9
756− (cell 278:9 (bind 278:10 next) (bind 278:15 more))
757− (tuple 278:21
758− (wing 278:22 item)
759− (group 278:27
760− (call 278:28 (wing 278:28 snip) (wing 278:33 rest))))))))))))
761− (value 280:1 rear
762− (gate 280:9
763− (face 280:12 xs
764− (apply 280:15 list (tvar 280:21 A)))
765− (body 281:3
766− (branch 281:3
767− (wing 281:6 xs)
768− (arm 282:5 (lit 282:5 ~) (crash 282:7))
769− (arm 283:5
770− (cell 283:5 (bind 283:6 item) (bind 283:11 rest))
771− (body 284:7
772− (branch 284:7
773− (wing 284:10 rest)
774− (arm 285:9 (lit 285:9 ~) (wing 285:11 item))
775− (arm 286:9
776− (cell 286:9 (bind 286:10 next) (bind 286:15 more))
777− (group 286:21
778− (call 286:22 (wing 286:22 rear) (wing 286:27 rest))))))))))))
301+ (cast 130:3
302+ (apply 130:6 list (tvar 130:12 A))
303+ (tuple 130:15 (wing 130:16 item) (lit 130:21 ~))))))
304+ (value 132:1 snoc
305+ (gate 132:9
306+ (face 132:12 args
307+ (cell 132:17
308+ (apply 132:18 list (tvar 132:24 A))
309+ (tvar 132:27 A)))
310+ (body 133:3
311+ (branch 133:3
312+ (wing 133:6 args)
313+ (arm 134:5
314+ (cell 134:5 (bind 134:6 xs) (bind 134:9 item))
315+ (group 134:15
316+ (call 134:16
317+ (wing 134:16 weld)
318+ (wing 134:21 xs)
319+ (tuple 134:24 (wing 134:25 item) (lit 134:30 ~)))))))))
320+ (value 136:1 flop
321+ (gate 136:9
322+ (face 136:12 xs
323+ (apply 136:15 list (tvar 136:21 A)))
324+ (body 137:3
325+ (value 137:3 reverse-into
326+ (gate 137:19
327+ (face 137:22 args
328+ (cell 137:27
329+ (apply 137:28 list (tvar 137:34 A))
330+ (apply 137:37 list (tvar 137:43 A))))
331+ (body 138:5
332+ (branch 138:5
333+ (wing 138:8 args)
334+ (arm 139:7
335+ (cell 139:7 (bind 139:8 rest) (bind 139:13 acc))
336+ (body 140:9
337+ (branch 140:9
338+ (wing 140:12 rest)
339+ (arm 141:11 (lit 141:11 ~) (wing 141:13 acc))
340+ (arm 142:11
341+ (cell 142:11 (bind 142:12 item) (bind 142:17 more))
342+ (group 142:23
343+ (call 142:24
344+ (wing 142:24 reverse-into)
345+ (wing 142:37 more)
346+ (tuple 142:42 (wing 142:43 item) (wing 142:48 acc))))))))))))
347+ (group 143:3
348+ (call 143:4 (wing 143:4 reverse-into) (wing 143:17 xs) (lit 143:20 ~))))))
349+ (value 145:1 drop
350+ (gate 145:9
351+ (face 145:12 maybe
352+ (apply 145:18 unit (tvar 145:24 A)))
353+ (body 146:3
354+ (branch 146:3
355+ (wing 146:6 maybe)
356+ (arm 147:5 (lit 147:5 ~) (lit 147:7 ~))
357+ (arm 148:5
358+ (cell 148:5 (lit 148:6 ~) (bind 148:8 value))
359+ (tuple 148:15 (wing 148:16 value) (lit 148:22 ~)))))))
360+ (value 150:1 bind
361+ (gate 150:9
362+ (face 150:12 args
363+ (cell 150:17
364+ (apply 150:18 unit (tvar 150:24 A))
365+ (fn 150:27 (tvar 150:30 A) (tvar 150:32 B))))
366+ (body 151:3
367+ (branch 151:3
368+ (wing 151:6 args)
369+ (arm 152:5
370+ (cell 152:5 (bind 152:6 maybe) (bind 152:12 f))
371+ (cast 152:15
372+ (apply 152:18 unit (tvar 152:24 B))
373+ (body 153:7
374+ (branch 153:7
375+ (wing 153:10 maybe)
376+ (arm 154:9 (lit 154:9 ~) (lit 154:11 ~))
377+ (arm 155:9
378+ (cell 155:9 (lit 155:10 ~) (bind 155:12 value))
379+ (unit 155:19
380+ (group 155:20
381+ (call 155:21 (wing 155:21 f) (wing 155:23 value)))))))))))))
382+ (value 157:1 biff
383+ (gate 157:9
384+ (face 157:12 args
385+ (cell 157:17
386+ (apply 157:18 unit (tvar 157:24 A))
387+ (fn 157:27
388+ (tvar 157:30 A)
389+ (apply 157:32 unit (tvar 157:38 B)))))
390+ (body 158:3
391+ (branch 158:3
392+ (wing 158:6 args)
393+ (arm 159:5
394+ (cell 159:5 (bind 159:6 maybe) (bind 159:12 f))
395+ (cast 159:15
396+ (apply 159:18 unit (tvar 159:24 B))
397+ (body 160:7
398+ (branch 160:7
399+ (wing 160:10 maybe)
400+ (arm 161:9 (lit 161:9 ~) (lit 161:11 ~))
401+ (arm 162:9
402+ (cell 162:9 (lit 162:10 ~) (bind 162:12 value))
403+ (group 162:19
404+ (call 162:20 (wing 162:20 f) (wing 162:22 value))))))))))))
405+ (value 164:1 both
406+ (gate 164:9
407+ (face 164:12 args
408+ (cell 164:17
409+ (apply 164:18 unit (tvar 164:24 A))
410+ (apply 164:27 unit (tvar 164:33 B))))
411+ (body 165:3
412+ (branch 165:3
413+ (wing 165:6 args)
414+ (arm 166:5
415+ (cell 166:5 (bind 166:6 first) (bind 166:12 second))
416+ (cast 166:20
417+ (apply 166:23 unit
418+ (cell 166:29 (tvar 166:30 A) (tvar 166:32 B)))
419+ (body 167:7
420+ (branch 167:7
421+ (wing 167:10 first)
422+ (arm 168:9 (lit 168:9 ~) (lit 168:11 ~))
423+ (arm 169:9
424+ (cell 169:9 (lit 169:10 ~) (bind 169:12 a))
425+ (body 170:11
426+ (branch 170:11
427+ (wing 170:14 second)
428+ (arm 171:13 (lit 171:13 ~) (lit 171:15 ~))
429+ (arm 172:13
430+ (cell 172:13 (lit 172:14 ~) (bind 172:16 b))
431+ (unit 172:19
432+ (tuple 172:20 (wing 172:21 a) (wing 172:23 b)))))))))))))))
433+ (value 174:1 clap
434+ (gate 174:9
435+ (face 174:12 args
436+ (cell 174:17
437+ (apply 174:18 unit (tvar 174:24 A))
438+ (apply 174:27 unit (tvar 174:33 A))
439+ (fn 174:36
440+ (cell 174:39 (tvar 174:40 A) (tvar 174:42 A))
441+ (tvar 174:45 A))))
442+ (body 175:3
443+ (branch 175:3
444+ (wing 175:6 args)
445+ (arm 176:5
446+ (cell 176:5 (bind 176:6 first) (bind 176:12 second) (bind 176:19 combine))
447+ (cast 176:28
448+ (apply 176:31 unit (tvar 176:37 A))
449+ (body 177:7
450+ (branch 177:7
451+ (wing 177:10 first)
452+ (arm 178:9 (lit 178:9 ~) (wing 178:11 second))
453+ (arm 179:9
454+ (cell 179:9 (lit 179:10 ~) (bind 179:12 a))
455+ (body 180:11
456+ (branch 180:11
457+ (wing 180:14 second)
458+ (arm 181:13 (lit 181:13 ~) (wing 181:15 first))
459+ (arm 182:13
460+ (cell 182:13 (lit 182:14 ~) (bind 182:16 b))
461+ (unit 182:19
462+ (group 182:20
463+ (call 182:21 (wing 182:21 combine) (wing 182:29 a) (wing 182:31 b))))))))))))))))
464+ (value 184:1 clef
465+ (gate 184:9
466+ (face 184:12 args
467+ (cell 184:17
468+ (apply 184:18 unit (tvar 184:24 A))
469+ (apply 184:27 unit (tvar 184:33 B))
470+ (fn 184:36
471+ (cell 184:39 (tvar 184:40 A) (tvar 184:42 B))
472+ (apply 184:45 unit (tvar 184:51 C)))))
473+ (body 185:3
474+ (branch 185:3
475+ (wing 185:6 args)
476+ (arm 186:5
477+ (cell 186:5 (bind 186:6 first) (bind 186:12 second) (bind 186:19 combine))
478+ (cast 186:28
479+ (apply 186:31 unit (tvar 186:37 C))
480+ (body 187:7
481+ (branch 187:7
482+ (wing 187:10 first)
483+ (arm 188:9 (lit 188:9 ~) (lit 188:11 ~))
484+ (arm 189:9
485+ (cell 189:9 (lit 189:10 ~) (bind 189:12 a))
486+ (body 190:11
487+ (branch 190:11
488+ (wing 190:14 second)
489+ (arm 191:13 (lit 191:13 ~) (lit 191:15 ~))
490+ (arm 192:13
491+ (cell 192:13 (lit 192:14 ~) (bind 192:16 b))
492+ (group 192:19
493+ (call 192:20 (wing 192:20 combine) (wing 192:28 a) (wing 192:30 b)))))))))))))))
494+ (value 194:1 skim
495+ (gate 194:9
496+ (face 194:12 args
497+ (cell 194:17
498+ (apply 194:18 list (tvar 194:24 A))
499+ (fn 194:27 (tvar 194:30 A) (flag 194:32))))
500+ (body 195:3
501+ (branch 195:3
502+ (wing 195:6 args)
503+ (arm 196:5
504+ (cell 196:5 (bind 196:6 xs) (bind 196:9 predicate))
505+ (body 197:7
506+ (branch 197:7
507+ (wing 197:10 xs)
508+ (arm 198:9 (lit 198:9 ~) (lit 198:11 ~))
509+ (arm 199:9
510+ (cell 199:9 (bind 199:10 item) (bind 199:15 rest))
511+ (body 200:11
512+ (branch 200:11
513+ (group 200:14
514+ (call 200:15 (wing 200:15 predicate) (wing 200:25 item)))
515+ (arm 201:13
516+ (lit 201:13 %.y)
517+ (tuple 201:17
518+ (wing 201:18 item)
519+ (group 201:23
520+ (call 201:24 (wing 201:24 skim) (wing 201:29 rest) (wing 201:34 predicate)))))
521+ (arm 202:13
522+ (lit 202:13 %.n)
523+ (group 202:17
524+ (call 202:18 (wing 202:18 skim) (wing 202:23 rest) (wing 202:28 predicate))))))))))))))
525+ (value 204:1 skip
526+ (gate 204:9
527+ (face 204:12 args
528+ (cell 204:17
529+ (apply 204:18 list (tvar 204:24 A))
530+ (fn 204:27 (tvar 204:30 A) (flag 204:32))))
531+ (body 205:3
532+ (branch 205:3
533+ (wing 205:6 args)
534+ (arm 206:5
535+ (cell 206:5 (bind 206:6 xs) (bind 206:9 predicate))
536+ (body 207:7
537+ (branch 207:7
538+ (wing 207:10 xs)
539+ (arm 208:9 (lit 208:9 ~) (lit 208:11 ~))
540+ (arm 209:9
541+ (cell 209:9 (bind 209:10 item) (bind 209:15 rest))
542+ (body 210:11
543+ (branch 210:11
544+ (group 210:14
545+ (call 210:15 (wing 210:15 predicate) (wing 210:25 item)))
546+ (arm 211:13
547+ (lit 211:13 %.y)
548+ (group 211:17
549+ (call 211:18 (wing 211:18 skip) (wing 211:23 rest) (wing 211:28 predicate))))
550+ (arm 212:13
551+ (lit 212:13 %.n)
552+ (tuple 212:17
553+ (wing 212:18 item)
554+ (group 212:23
555+ (call 212:24 (wing 212:24 skip) (wing 212:29 rest) (wing 212:34 predicate)))))))))))))))
556+ (value 214:1 levy
557+ (gate 214:9
558+ (face 214:12 args
559+ (cell 214:17
560+ (apply 214:18 list (tvar 214:24 A))
561+ (fn 214:27 (tvar 214:30 A) (flag 214:32))))
562+ (body 215:3
563+ (branch 215:3
564+ (wing 215:6 args)
565+ (arm 216:5
566+ (cell 216:5 (bind 216:6 xs) (bind 216:9 predicate))
567+ (body 217:7
568+ (branch 217:7
569+ (wing 217:10 xs)
570+ (arm 218:9 (lit 218:9 ~) (lit 218:11 %.y))
571+ (arm 219:9
572+ (cell 219:9 (bind 219:10 item) (bind 219:15 rest))
573+ (body 220:11
574+ (branch 220:11
575+ (group 220:14
576+ (call 220:15 (wing 220:15 predicate) (wing 220:25 item)))
577+ (arm 221:13
578+ (lit 221:13 %.y)
579+ (group 221:17
580+ (call 221:18 (wing 221:18 levy) (wing 221:23 rest) (wing 221:28 predicate))))
581+ (arm 222:13 (lit 222:13 %.n) (lit 222:17 %.n))))))))))))
582+ (value 224:1 lien
583+ (gate 224:9
584+ (face 224:12 args
585+ (cell 224:17
586+ (apply 224:18 list (tvar 224:24 A))
587+ (fn 224:27 (tvar 224:30 A) (flag 224:32))))
588+ (body 225:3
589+ (branch 225:3
590+ (wing 225:6 args)
591+ (arm 226:5
592+ (cell 226:5 (bind 226:6 xs) (bind 226:9 predicate))
593+ (body 227:7
594+ (branch 227:7
595+ (wing 227:10 xs)
596+ (arm 228:9 (lit 228:9 ~) (lit 228:11 %.n))
597+ (arm 229:9
598+ (cell 229:9 (bind 229:10 item) (bind 229:15 rest))
599+ (body 230:11
600+ (branch 230:11
601+ (group 230:14
602+ (call 230:15 (wing 230:15 predicate) (wing 230:25 item)))
603+ (arm 231:13 (lit 231:13 %.y) (lit 231:17 %.y))
604+ (arm 232:13
605+ (lit 232:13 %.n)
606+ (group 232:17
607+ (call 232:18 (wing 232:18 lien) (wing 232:23 rest) (wing 232:28 predicate))))))))))))))
608+ (value 234:1 roll
609+ (gate 234:9
610+ (face 234:12 args
611+ (cell 234:17
612+ (apply 234:18 list (tvar 234:24 A))
613+ (tvar 234:27 B)
614+ (fn 234:29
615+ (cell 234:32 (tvar 234:33 A) (tvar 234:35 B))
616+ (tvar 234:38 B))))
617+ (body 235:3
618+ (branch 235:3
619+ (wing 235:6 args)
620+ (arm 236:5
621+ (cell 236:5 (bind 236:6 xs) (bind 236:9 start) (bind 236:15 combine))
622+ (body 237:7
623+ (branch 237:7
624+ (wing 237:10 xs)
625+ (arm 238:9 (lit 238:9 ~) (wing 238:11 start))
626+ (arm 239:9
627+ (cell 239:9 (bind 239:10 item) (bind 239:15 rest))
628+ (group 239:21
629+ (call 239:22
630+ (wing 239:22 roll)
631+ (wing 239:27 rest)
632+ (group 239:32
633+ (call 239:33 (wing 239:33 combine) (wing 239:41 item) (wing 239:46 start)))
634+ (wing 239:53 combine)))))))))))
635+ (value 241:1 reel
636+ (gate 241:9
637+ (face 241:12 args
638+ (cell 241:17
639+ (apply 241:18 list (tvar 241:24 A))
640+ (tvar 241:27 B)
641+ (fn 241:29
642+ (cell 241:32 (tvar 241:33 A) (tvar 241:35 B))
643+ (tvar 241:38 B))))
644+ (body 242:3
645+ (branch 242:3
646+ (wing 242:6 args)
647+ (arm 243:5
648+ (cell 243:5 (bind 243:6 xs) (bind 243:9 start) (bind 243:15 combine))
649+ (body 244:7
650+ (branch 244:7
651+ (wing 244:10 xs)
652+ (arm 245:9 (lit 245:9 ~) (wing 245:11 start))
653+ (arm 246:9
654+ (cell 246:9 (bind 246:10 item) (bind 246:15 rest))
655+ (group 246:21
656+ (call 246:22
657+ (wing 246:22 combine)
658+ (wing 246:30 item)
659+ (group 246:35
660+ (call 246:36 (wing 246:36 reel) (wing 246:41 rest) (wing 246:46 start) (wing 246:52 combine)))))))))))))
661+ (value 248:1 flit
662+ (gate 248:9
663+ (face 248:12 predicate
664+ (fn 248:22 (tvar 248:25 A) (flag 248:27)))
665+ (body 249:3
666+ (gate 249:3
667+ (face 249:6 value (tvar 249:12 A))
668+ (body 250:5
669+ (cast 250:5
670+ (apply 250:8 unit (tvar 250:14 A))
671+ (body 251:7
672+ (branch 251:7
673+ (group 251:10
674+ (call 251:11 (wing 251:11 predicate) (wing 251:21 value)))
675+ (arm 252:9
676+ (lit 252:9 %.y)
677+ (unit 252:13 (wing 252:14 value)))
678+ (arm 253:9 (lit 253:9 %.n) (lit 253:13 ~))))))))))
679+ (value 255:1 murn
680+ (gate 255:9
681+ (face 255:12 args
682+ (cell 255:17
683+ (apply 255:18 list (tvar 255:24 A))
684+ (fn 255:27
685+ (tvar 255:30 A)
686+ (apply 255:32 unit (tvar 255:38 B)))))
687+ (body 256:3
688+ (branch 256:3
689+ (wing 256:6 args)
690+ (arm 257:5
691+ (cell 257:5 (bind 257:6 xs) (bind 257:9 f))
692+ (body 258:7
693+ (branch 258:7
694+ (wing 258:10 xs)
695+ (arm 259:9 (lit 259:9 ~) (lit 259:11 ~))
696+ (arm 260:9
697+ (cell 260:9 (bind 260:10 item) (bind 260:15 rest))
698+ (body 261:11
699+ (branch 261:11
700+ (group 261:14
701+ (call 261:15 (wing 261:15 f) (wing 261:17 item)))
702+ (arm 262:13
703+ (lit 262:13 ~)
704+ (group 262:15
705+ (call 262:16 (wing 262:16 murn) (wing 262:21 rest) (wing 262:26 f))))
706+ (arm 263:13
707+ (cell 263:13 (lit 263:14 ~) (bind 263:16 value))
708+ (tuple 263:23
709+ (wing 263:24 value)
710+ (group 263:30
711+ (call 263:31 (wing 263:31 murn) (wing 263:36 rest) (wing 263:41 f)))))))))))))))
712+ (value 265:1 join
713+ (gate 265:9
714+ (face 265:12 args
715+ (cell 265:17
716+ (tvar 265:18 A)
717+ (apply 265:20 list (tvar 265:26 A))))
718+ (body 266:3
719+ (branch 266:3
720+ (wing 266:6 args)
721+ (arm 267:5
722+ (cell 267:5 (bind 267:6 separator) (bind 267:16 xs))
723+ (body 268:7
724+ (branch 268:7
725+ (wing 268:10 xs)
726+ (arm 269:9 (lit 269:9 ~) (lit 269:11 ~))
727+ (arm 270:9
728+ (cell 270:9 (bind 270:10 item) (bind 270:15 rest))
729+ (body 271:11
730+ (branch 271:11
731+ (wing 271:14 rest)
732+ (arm 272:13
733+ (lit 272:13 ~)
734+ (tuple 272:15 (wing 272:16 item) (lit 272:21 ~)))
735+ (arm 273:13
736+ (cell 273:13 (bind 273:14 next) (bind 273:19 more))
737+ (tuple 273:25
738+ (wing 273:26 item)
739+ (tuple 273:31
740+ (wing 273:32 separator)
741+ (group 273:42
742+ (call 273:43 (wing 273:43 join) (wing 273:48 separator) (wing 273:58 rest))))))))))))))))
743+ (value 275:1 snip
744+ (gate 275:9
745+ (face 275:12 xs
746+ (apply 275:15 list (tvar 275:21 A)))
747+ (body 276:3
748+ (branch 276:3
749+ (wing 276:6 xs)
750+ (arm 277:5 (lit 277:5 ~) (lit 277:7 ~))
751+ (arm 278:5
752+ (cell 278:5 (bind 278:6 item) (bind 278:11 rest))
753+ (body 279:7
754+ (branch 279:7
755+ (wing 279:10 rest)
756+ (arm 280:9 (lit 280:9 ~) (lit 280:11 ~))
757+ (arm 281:9
758+ (cell 281:9 (bind 281:10 next) (bind 281:15 more))
759+ (tuple 281:21
760+ (wing 281:22 item)
761+ (group 281:27
762+ (call 281:28 (wing 281:28 snip) (wing 281:33 rest))))))))))))
763+ (value 283:1 rear
764+ (gate 283:9
765+ (face 283:12 xs
766+ (apply 283:15 list (tvar 283:21 A)))
767+ (body 284:3
768+ (branch 284:3
769+ (wing 284:6 xs)
770+ (arm 285:5 (lit 285:5 ~) (crash 285:7))
771+ (arm 286:5
772+ (cell 286:5 (bind 286:6 item) (bind 286:11 rest))
773+ (body 287:7
774+ (branch 287:7
775+ (wing 287:10 rest)
776+ (arm 288:9 (lit 288:9 ~) (wing 288:11 item))
777+ (arm 289:9
778+ (cell 289:9 (bind 289:10 next) (bind 289:15 more))
779+ (group 289:21
780+ (call 289:22 (wing 289:22 rear) (wing 289:27 rest))))))))))))
tests/golden/prelude-unit-list-transforms/types.txt+1
@@ -1,4 +1,5 @@
11partial inference; module not checked
2++$ poke: not checked
23++ same: $-(A A)
34++ head: $-([A B] A)
45++ tail: $-([A B] B)
tests/golden/types-scope-library-poke/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: API and store `+$ poke` lines are declarations, not molds; no name may shadow one already in scope.
2+tests: The partial checker reports uncertain API/store scope as unsupported, while definite duplicate declarations and unrelated prelude shadowing remain errors. A library mold cannot shadow the prelude poke type.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-scope-library-poke/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-scope-library-poke/path.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib/library.jibb
tests/golden/types-scope-library-poke/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ poke @t
2+++ value "ok"
tests/golden/types-scope-library-poke/tokens.txtnew file+8
@@ -0,0 +1,8 @@
1+1:1 glyph +$
2+1:4 name poke
3+1:9 aura @t
4+2:1 NEWLINE
5+2:1 glyph ++
6+2:4 name value
7+2:10 str "ok"
8+2:14 NEWLINE
tests/golden/types-scope-library-poke/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (mold 1:1 poke (aura 1:9 @t))
3+ (value 2:1 value (str 2:10 "ok")))
tests/golden/types-scope-library-poke/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-scope-root-api/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: API and store `+$ poke` lines are declarations, not molds; no name may shadow one already in scope.
2+tests: The partial checker reports uncertain API/store scope as unsupported, while definite duplicate declarations and unrelated prelude shadowing remain errors. A library mold cannot shadow the prelude poke type.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-scope-root-api/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-scope-root-api/path.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/todo.jibb
tests/golden/types-scope-root-api/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/% %todo-action
2++$ poke todo-action
tests/golden/types-scope-root-api/tokens.txtnew file+7
@@ -0,0 +1,7 @@
1+1:1 glyph /%
2+1:4 lit %todo-action
3+2:1 NEWLINE
4+2:1 glyph +$
5+2:4 name poke
6+2:9 name todo-action
7+2:20 NEWLINE
tests/golden/types-scope-root-api/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (mark 1:1 %todo-action)
3+ (mold 2:1 poke (ref 2:9 todo-action)))
tests/golden/types-scope-root-api/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module kind or scope needs unsupported inference
tests/golden/types-scope-store-duplicate/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: API and store `+$ poke` lines are declarations, not molds; no name may shadow one already in scope.
2+tests: The partial checker reports uncertain API/store scope as unsupported, while definite duplicate declarations and unrelated prelude shadowing remain errors. A library mold cannot shadow the prelude poke type.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-scope-store-duplicate/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-scope-store-duplicate/path.txtnew file+1
@@ -0,0 +1 @@
1+/ui/stores/cart.jibb
tests/golden/types-scope-store-duplicate/source.jibbnew file+3
@@ -0,0 +1,3 @@
1++$ poke @t
2++$ poke @p
3+++ main (store init update)
tests/golden/types-scope-store-duplicate/tokens.txtnew file+16
@@ -0,0 +1,16 @@
1+1:1 glyph +$
2+1:4 name poke
3+1:9 aura @t
4+2:1 NEWLINE
5+2:1 glyph +$
6+2:4 name poke
7+2:9 aura @p
8+3:1 NEWLINE
9+3:1 glyph ++
10+3:4 name main
11+3:9 glyph (
12+3:10 tight name store
13+3:16 name init
14+3:21 name update
15+3:27 tight glyph )
16+3:28 NEWLINE
tests/golden/types-scope-store-duplicate/tree.txtnew file+6
@@ -0,0 +1,6 @@
1+(module
2+ (mold 1:1 poke (aura 1:9 @t))
3+ (mold 2:1 poke (aura 2:9 @p))
4+ (value 3:1 main
5+ (group 3:9
6+ (call 3:10 (wing 3:10 store) (wing 3:16 init) (wing 3:21 update)))))
tests/golden/types-scope-store-duplicate/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-scope-store-shadow/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: API and store `+$ poke` lines are declarations, not molds; no name may shadow one already in scope.
2+tests: The partial checker reports uncertain API/store scope as unsupported, while definite duplicate declarations and unrelated prelude shadowing remain errors. A library mold cannot shadow the prelude poke type.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-scope-store-shadow/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-scope-store-shadow/path.txtnew file+1
@@ -0,0 +1 @@
1+/ui/stores/cart.jibb
tests/golden/types-scope-store-shadow/source.jibbnew file+3
@@ -0,0 +1,3 @@
1++$ poke @t
2+++ same "bad"
3+++ main (store init update)
tests/golden/types-scope-store-shadow/tokens.txtnew file+16
@@ -0,0 +1,16 @@
1+1:1 glyph +$
2+1:4 name poke
3+1:9 aura @t
4+2:1 NEWLINE
5+2:1 glyph ++
6+2:4 name same
7+2:9 str "bad"
8+3:1 NEWLINE
9+3:1 glyph ++
10+3:4 name main
11+3:9 glyph (
12+3:10 tight name store
13+3:16 name init
14+3:21 name update
15+3:27 tight glyph )
16+3:28 NEWLINE
tests/golden/types-scope-store-shadow/tree.txtnew file+6
@@ -0,0 +1,6 @@
1+(module
2+ (mold 1:1 poke (aura 1:9 @t))
3+ (value 2:1 same (str 2:9 "bad"))
4+ (value 3:1 main
5+ (group 3:9
6+ (call 3:10 (wing 3:10 store) (wing 3:16 init) (wing 3:21 update)))))
tests/golden/types-scope-store-shadow/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/lib/jibb-module-scope.hoon+3−2
@@ -2,6 +2,7 @@
22/+ jibb
33/* expected %txt /tests/type-module-scope/expected/txt
44/* real-prelude %jibb /lib/jibb/prelude/jibb
5+/* real-internal %jibb /lib/jibb/internal/jibb
56/* real-source %jibb /tests/golden/types-prelude-interface/source/jibb
67/* real-left %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
78/* real-right %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
@@ -44,9 +45,9 @@
4445 ^- @t
4546 =/ fixtures=(list [at=path source=@t])
4647 ~[[~[%ui %left %jibb] real-left] [~[%ui %right %jibb] real-right]]
47− =/ prepared (prepare-prelude:jibb real-prelude)
48+ =/ prepared (prepare-prelude-with-internal:jibb real-prelude real-internal)
4849 ?~ prepared 'real prelude preparation failed'
49− =/ wrapper (golden-types-with-prelude:jibb /tests/golden/types-prelude-interface/source/jibb real-source ~ ~ fixtures real-prelude)
50+ =/ wrapper (golden-types-with-prelude-and-internal:jibb /tests/golden/types-prelude-interface/source/jibb real-source ~ ~ fixtures real-prelude real-internal)
5051 =/ actual (golden-types-with-prepared-prelude:jibb /tests/golden/types-prelude-interface/source/jibb real-source ~ ~ fixtures prepared)
5152 ?. =(wrapper actual) 'real prelude prepared/wrapper mismatch'
5253 ?. =((to-wain:format (cat 3 actual '\0a')) real-expected) 'real prelude output differs from golden'
tests/lib/jibb-poke-bridge.hoonnew file+88
@@ -0,0 +1,88 @@
1+:: Source-backed private poke and poke-only API boundary under eval and ship.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* mark %txt /tests/type-poke/mark/txt
6+/* api %txt /tests/type-poke/api/txt
7+/* client %txt /tests/type-poke/client/txt
8+/* direct %txt /tests/type-poke/direct/txt
9+/* alias %txt /tests/type-poke/alias/txt
10+/* public %txt /tests/type-poke/public/txt
11+/* fake %txt /tests/type-poke/fake/txt
12+/* exported %txt /tests/type-poke/exported/txt
13+/* transitive %txt /tests/type-poke/transitive/txt
14+/* inner %txt /tests/type-poke/inner/txt
15+/* impostor-client %txt /tests/type-poke/impostor-client/txt
16+/* impostor %txt /tests/type-poke/impostor/txt
17+/* expected %txt /tests/type-poke/expected/txt
18+|%
19+++ text
20+ |= lines=wain
21+ ^- @t
22+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
23+++ test-poke-bridge
24+ ^- tang
25+ ?~ mark ~[leaf+"poke bridge mark fixture is missing"]
26+ ?~ api ~[leaf+"poke bridge API fixture is missing"]
27+ ?~ client ~[leaf+"poke bridge client fixture is missing"]
28+ ?~ direct ~[leaf+"poke bridge direct import fixture is missing"]
29+ ?~ alias ~[leaf+"poke bridge alias fixture is missing"]
30+ ?~ public ~[leaf+"poke bridge public fixture is missing"]
31+ ?~ fake ~[leaf+"poke bridge fake fixture is missing"]
32+ ?~ exported ~[leaf+"poke bridge export fixture is missing"]
33+ ?~ transitive ~[leaf+"poke bridge transitive fixture is missing"]
34+ ?~ inner ~[leaf+"poke bridge inner fixture is missing"]
35+ ?~ impostor-client ~[leaf+"poke bridge impostor client is missing"]
36+ ?~ impostor ~[leaf+"poke bridge impostor fixture is missing"]
37+ ?~ expected ~[leaf+"poke bridge expected output is missing"]
38+ =/ got (bridge-output prelude internal (text mark) (text api) (text client) (text direct) (text alias) (text public) (text fake) (text exported) (text transitive) (text inner) (text impostor-client) (text impostor))
39+ ?. =((to-wain:format (cat 3 got '\0a')) expected)
40+ ~[leaf+"poke bridge output differs from tests/type-poke/expected.txt"]
41+ ~
42+++ preparation-controls
43+ |= [prelude=@t internal=@t]
44+ ^- @t
45+ =/ alternate=@t (crip "+$ poke\0a [%pet name=@t]\0a %empty\0a")
46+ =/ tiny-prelude=@t (crip "/= internal /lib/jibb/internal\0a+$ poke poke.internal\0a")
47+ =/ source=@t (crip "++ zero ^- poke %empty\0a++ pet ^- poke [%pet \"cat\"]\0a++ look |= x=poke\0a ?- x\0a [%pet name] name\0a %empty \"\"\0a")
48+ =/ no-source=? ?=(~ (prepare-prelude:jibb prelude))
49+ =/ malformed=? ?=(~ (prepare-prelude-with-internal:jibb prelude (crip "+$ poke\0a")))
50+ =/ empty=? ?=(~ (prepare-prelude-with-internal:jibb prelude ''))
51+ =/ report (golden-types-with-prelude-and-internal:jibb /ui/test/jibb source ~ ~ ~ tiny-prelude alternate)
52+ (of-wain:format ~[(crip "source-less={?:(no-source "rejected" "BAD")} malformed={?:(malformed "rejected" "BAD")} empty={?:(empty "rejected" "BAD")}") report])
53+::
54+++ bridge-output
55+ |= [prelude=@t internal=@t mark=@t api=@t client=@t direct=@t alias=@t public=@t fake=@t exported=@t transitive=@t inner=@t impostor-client=@t impostor=@t]
56+ ^- @t
57+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
58+ ?~ prepared 'source-backed prelude preparation failed'
59+ =/ cor=type -:(ride -:!>(..zuse) mark)
60+ =/ mark-result=* (read-mark:jibb-import %todo-action cor)
61+ =/ marks=(list [mark=term result=*]) ~[[%todo-action mark-result]]
62+ =/ modules=(list [at=path source=@t])
63+ ~[[/ui/api/todo/jibb api] [/lib/jibb/internal/jibb internal] [/ui/internal/jibb fake] [/ui/public/jibb public] [/ui/inner/jibb inner]]
64+ =/ a (golden-types-with-prepared-prelude:jibb /ui/test/jibb client ~ marks modules prepared)
65+ =/ b (golden-types-with-prepared-prelude:jibb /ui/test/jibb direct ~ marks modules prepared)
66+ =/ c (golden-types-with-prepared-prelude:jibb /ui/test/jibb alias ~ marks modules prepared)
67+ =/ d (golden-types-with-prepared-prelude:jibb /ui/test/jibb exported ~ marks modules prepared)
68+ =/ e (golden-types-with-prepared-prelude:jibb /ui/test/jibb transitive ~ marks modules prepared)
69+ =/ missing-marks=(list [mark=term result=*]) ~
70+ =/ duplicate-marks=(list [mark=term result=*]) ~[[%todo-action mark-result] [%todo-action mark-result]]
71+ =/ f (golden-types-with-prepared-prelude:jibb /ui/test/jibb client ~ missing-marks modules prepared)
72+ =/ g (golden-types-with-prepared-prelude:jibb /ui/test/jibb client ~ duplicate-marks modules prepared)
73+ =/ extra-api=@t (crip "/% %todo-action\0a+$ poke todo-action\0a+$ paths\0a [%state /state @t]\0a")
74+ =/ extra-modules=(list [at=path source=@t]) ~[[/ui/api/todo/jibb extra-api]]
75+ =/ h (golden-types-with-prepared-prelude:jibb /ui/test/jibb client ~ marks extra-modules prepared)
76+ =/ spoof-modules=(list [at=path source=@t]) ~[[/lib/jibb/internal/jibb impostor]]
77+ =/ i (golden-types-with-prepared-prelude:jibb /ui/test/jibb impostor-client ~ ~ spoof-modules prepared)
78+ =/ no-declaration=@t (crip "+$ poke todo-action\0a")
79+ =/ no-declaration-modules=(list [at=path source=@t]) ~[[/ui/api/todo/jibb no-declaration]]
80+ =/ j (golden-types-with-prepared-prelude:jibb /ui/test/jibb client ~ marks no-declaration-modules prepared)
81+ =/ collision=@t (crip "/% %todo-action\0a+$ poke todo-action\0a++ todo-action \"bad\"\0a")
82+ =/ collision-modules=(list [at=path source=@t]) ~[[/ui/api/todo/jibb collision]]
83+ =/ k (golden-types-with-prepared-prelude:jibb /ui/test/jibb client ~ marks collision-modules prepared)
84+ =/ wrong-path-source=@t (crip "/= todo /ui/wrong/todo\0a++ test (todo-action.todo \"ok\")\0a")
85+ =/ wrong-path-modules=(list [at=path source=@t]) ~[[/ui/wrong/todo/jibb api]]
86+ =/ l (golden-types-with-prepared-prelude:jibb /ui/test/jibb wrong-path-source ~ marks wrong-path-modules prepared)
87+ (of-wain:format ~[(preparation-controls prelude internal) a b c d e f g h i j k l])
88+--
tests/lib/jibb.hoon+227−202
@@ -21,6 +21,7 @@
2121::
2222/+ jibb, jibb-import
2323/* prelude-source %jibb /lib/jibb/prelude/jibb
24+/* internal-source %jibb /lib/jibb/internal/jibb
2425/* src-1 %jibb /tests/golden/doc-core-02-update/source/jibb
2526/* tok-1 %txt /tests/golden/doc-core-02-update/tokens/txt
2627/* tre-1 %txt /tests/golden/doc-core-02-update/tree/txt
@@ -1812,170 +1813,186 @@
18121813/* tok-513 %txt /tests/golden/types-recursive-sample/tokens/txt
18131814/* tre-513 %txt /tests/golden/types-recursive-sample/tree/txt
18141815/* typ-513 %txt /tests/golden/types-recursive-sample/types/txt
1815−/* src-514 %jibb /tests/golden/types-string-interpolation/source/jibb
1816−/* tok-514 %txt /tests/golden/types-string-interpolation/tokens/txt
1817−/* tre-514 %txt /tests/golden/types-string-interpolation/tree/txt
1818−/* typ-514 %txt /tests/golden/types-string-interpolation/types/txt
1819−/* src-515 %jibb /tests/golden/types-tuple-context/source/jibb
1820−/* tok-515 %txt /tests/golden/types-tuple-context/tokens/txt
1821−/* tre-515 %txt /tests/golden/types-tuple-context/tree/txt
1822−/* typ-515 %txt /tests/golden/types-tuple-context/types/txt
1823−/* src-516 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1824−/* tok-516 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1825−/* tre-516 %txt /tests/golden/types-tuple-context-nested/tree/txt
1826−/* typ-516 %txt /tests/golden/types-tuple-context-nested/types/txt
1827−/* src-517 %jibb /tests/golden/types-union-alias/source/jibb
1828−/* tok-517 %txt /tests/golden/types-union-alias/tokens/txt
1829−/* tre-517 %txt /tests/golden/types-union-alias/tree/txt
1830−/* typ-517 %txt /tests/golden/types-union-alias/types/txt
1831−/* src-518 %jibb /tests/golden/types-union-branch-context/source/jibb
1832−/* tok-518 %txt /tests/golden/types-union-branch-context/tokens/txt
1833−/* tre-518 %txt /tests/golden/types-union-branch-context/tree/txt
1834−/* typ-518 %txt /tests/golden/types-union-branch-context/types/txt
1835−/* src-519 %jibb /tests/golden/types-union-branch-pending/source/jibb
1836−/* tok-519 %txt /tests/golden/types-union-branch-pending/tokens/txt
1837−/* tre-519 %txt /tests/golden/types-union-branch-pending/tree/txt
1838−/* typ-519 %txt /tests/golden/types-union-branch-pending/types/txt
1839−/* src-520 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1840−/* tok-520 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1841−/* tre-520 %txt /tests/golden/types-union-constructor-shape/tree/txt
1842−/* typ-520 %txt /tests/golden/types-union-constructor-shape/types/txt
1843−/* src-521 %jibb /tests/golden/types-union-context-flow/source/jibb
1844−/* tok-521 %txt /tests/golden/types-union-context-flow/tokens/txt
1845−/* tre-521 %txt /tests/golden/types-union-context-flow/tree/txt
1846−/* typ-521 %txt /tests/golden/types-union-context-flow/types/txt
1847−/* src-522 %jibb /tests/golden/types-union-finite/source/jibb
1848−/* tok-522 %txt /tests/golden/types-union-finite/tokens/txt
1849−/* tre-522 %txt /tests/golden/types-union-finite/tree/txt
1850−/* typ-522 %txt /tests/golden/types-union-finite/types/txt
1851−/* src-523 %jibb /tests/golden/types-union-finite-context/source/jibb
1852−/* tok-523 %txt /tests/golden/types-union-finite-context/tokens/txt
1853−/* tre-523 %txt /tests/golden/types-union-finite-context/tree/txt
1854−/* typ-523 %txt /tests/golden/types-union-finite-context/types/txt
1855−/* src-524 %jibb /tests/golden/types-union-finite-generic/source/jibb
1856−/* tok-524 %txt /tests/golden/types-union-finite-generic/tokens/txt
1857−/* tre-524 %txt /tests/golden/types-union-finite-generic/tree/txt
1858−/* typ-524 %txt /tests/golden/types-union-finite-generic/types/txt
1859−/* src-525 %jibb /tests/golden/types-union-finite-limit/source/jibb
1860−/* tok-525 %txt /tests/golden/types-union-finite-limit/tokens/txt
1861−/* tre-525 %txt /tests/golden/types-union-finite-limit/tree/txt
1862−/* typ-525 %txt /tests/golden/types-union-finite-limit/types/txt
1863−/* src-526 %jibb /tests/golden/types-union-import/source/jibb
1864−/* tok-526 %txt /tests/golden/types-union-import/tokens/txt
1865−/* tre-526 %txt /tests/golden/types-union-import/tree/txt
1866−/* mod-526-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1867−/* typ-526 %txt /tests/golden/types-union-import/types/txt
1868−/* mtre-526 %txt /tests/golden/types-union-import/module-trees/txt
1869−/* src-527 %jibb /tests/golden/types-union-local-pending/source/jibb
1870−/* tok-527 %txt /tests/golden/types-union-local-pending/tokens/txt
1871−/* tre-527 %txt /tests/golden/types-union-local-pending/tree/txt
1872−/* typ-527 %txt /tests/golden/types-union-local-pending/types/txt
1873−/* src-528 %jibb /tests/golden/types-union-overlap/source/jibb
1874−/* tok-528 %txt /tests/golden/types-union-overlap/tokens/txt
1875−/* tre-528 %txt /tests/golden/types-union-overlap/tree/txt
1876−/* typ-528 %txt /tests/golden/types-union-overlap/types/txt
1877−/* src-529 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1878−/* tok-529 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1879−/* tre-529 %txt /tests/golden/types-union-overlap-nested/tree/txt
1880−/* typ-529 %txt /tests/golden/types-union-overlap-nested/types/txt
1881−/* src-530 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1882−/* tok-530 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1883−/* tre-530 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1884−/* typ-530 %txt /tests/golden/types-union-pattern-result-context/types/txt
1885−/* src-531 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1886−/* tok-531 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1887−/* tre-531 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1888−/* typ-531 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1889−/* src-532 %jibb /tests/golden/types-union-patterns/source/jibb
1890−/* tok-532 %txt /tests/golden/types-union-patterns/tokens/txt
1891−/* tre-532 %txt /tests/golden/types-union-patterns/tree/txt
1892−/* typ-532 %txt /tests/golden/types-union-patterns/types/txt
1893−/* src-533 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1894−/* tok-533 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1895−/* tre-533 %txt /tests/golden/types-union-patterns-generic/tree/txt
1896−/* typ-533 %txt /tests/golden/types-union-patterns-generic/types/txt
1897−/* src-534 %jibb /tests/golden/types-union-patterns-import/source/jibb
1898−/* tok-534 %txt /tests/golden/types-union-patterns-import/tokens/txt
1899−/* tre-534 %txt /tests/golden/types-union-patterns-import/tree/txt
1900−/* mod-534-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1901−/* typ-534 %txt /tests/golden/types-union-patterns-import/types/txt
1902−/* mtre-534 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1903−/* src-535 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1904−/* tok-535 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1905−/* tre-535 %txt /tests/golden/types-union-phantom-generic/tree/txt
1906−/* typ-535 %txt /tests/golden/types-union-phantom-generic/types/txt
1907−/* src-536 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1908−/* tok-536 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1909−/* tre-536 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1910−/* mod-536-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1911−/* typ-536 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1912−/* mtre-536 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1913−/* src-537 %jibb /tests/golden/types-union-print-distinct/source/jibb
1914−/* tok-537 %txt /tests/golden/types-union-print-distinct/tokens/txt
1915−/* tre-537 %txt /tests/golden/types-union-print-distinct/tree/txt
1916−/* mod-537-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1917−/* mod-537-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1918−/* mod-537-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1919−/* typ-537 %txt /tests/golden/types-union-print-distinct/types/txt
1920−/* mtre-537 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1921−/* src-538 %jibb /tests/golden/types-union-print-escape/source/jibb
1922−/* tok-538 %txt /tests/golden/types-union-print-escape/tokens/txt
1923−/* tre-538 %txt /tests/golden/types-union-print-escape/tree/txt
1924−/* typ-538 %txt /tests/golden/types-union-print-escape/types/txt
1925−/* src-539 %jibb /tests/golden/types-union-print-local/source/jibb
1926−/* tok-539 %txt /tests/golden/types-union-print-local/tokens/txt
1927−/* tre-539 %txt /tests/golden/types-union-print-local/tree/txt
1928−/* typ-539 %txt /tests/golden/types-union-print-local/types/txt
1929−/* src-540 %jibb /tests/golden/types-union-print-nested/source/jibb
1930−/* tok-540 %txt /tests/golden/types-union-print-nested/tokens/txt
1931−/* tre-540 %txt /tests/golden/types-union-print-nested/tree/txt
1932−/* typ-540 %txt /tests/golden/types-union-print-nested/types/txt
1933−/* src-541 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1934−/* tok-541 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1935−/* tre-541 %txt /tests/golden/types-union-print-same-origin/tree/txt
1936−/* mod-541-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1937−/* typ-541 %txt /tests/golden/types-union-print-same-origin/types/txt
1938−/* mtre-541 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1939−/* src-542 %jibb /tests/golden/types-union-print-transitive/source/jibb
1940−/* tok-542 %txt /tests/golden/types-union-print-transitive/tokens/txt
1941−/* tre-542 %txt /tests/golden/types-union-print-transitive/tree/txt
1942−/* mod-542-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1943−/* mod-542-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1944−/* typ-542 %txt /tests/golden/types-union-print-transitive/types/txt
1945−/* mtre-542 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1946−/* src-543 %jibb /tests/golden/types-union-singleton/source/jibb
1947−/* tok-543 %txt /tests/golden/types-union-singleton/tokens/txt
1948−/* tre-543 %txt /tests/golden/types-union-singleton/tree/txt
1949−/* typ-543 %txt /tests/golden/types-union-singleton/types/txt
1950−/* src-544 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1951−/* tok-544 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1952−/* tre-544 %txt /tests/golden/types-union-tag-atoms/tree/txt
1953−/* typ-544 %txt /tests/golden/types-union-tag-atoms/types/txt
1954−/* src-545 %jibb /tests/golden/types-union-tags/source/jibb
1955−/* tok-545 %txt /tests/golden/types-union-tags/tokens/txt
1956−/* tre-545 %txt /tests/golden/types-union-tags/tree/txt
1957−/* typ-545 %txt /tests/golden/types-union-tags/types/txt
1958−/* src-546 %jibb /tests/golden/types-union-unresolved/source/jibb
1959−/* tok-546 %txt /tests/golden/types-union-unresolved/tokens/txt
1960−/* tre-546 %txt /tests/golden/types-union-unresolved/tree/txt
1961−/* typ-546 %txt /tests/golden/types-union-unresolved/types/txt
1962−/* src-547 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1963−/* tok-547 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1964−/* tre-547 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1965−/* typ-547 %txt /tests/golden/types-union-unresolved-flow/types/txt
1966−/* src-548 %jibb /tests/golden/types-unit-construction/source/jibb
1967−/* tok-548 %txt /tests/golden/types-unit-construction/tokens/txt
1968−/* tre-548 %txt /tests/golden/types-unit-construction/tree/txt
1969−/* typ-548 %txt /tests/golden/types-unit-construction/types/txt
1970−/* src-549 %jibb /tests/golden/types-unit-context/source/jibb
1971−/* tok-549 %txt /tests/golden/types-unit-context/tokens/txt
1972−/* tre-549 %txt /tests/golden/types-unit-context/tree/txt
1973−/* typ-549 %txt /tests/golden/types-unit-context/types/txt
1974−/* src-550 %jibb /tests/golden/types-unit-patterns/source/jibb
1975−/* tok-550 %txt /tests/golden/types-unit-patterns/tokens/txt
1976−/* tre-550 %txt /tests/golden/types-unit-patterns/tree/txt
1977−/* typ-550 %txt /tests/golden/types-unit-patterns/types/txt
1978−=/ prepared-prelude (prepare-prelude:jibb prelude-source)
1816+/* src-514 %jibb /tests/golden/types-scope-library-poke/source/jibb
1817+/* tok-514 %txt /tests/golden/types-scope-library-poke/tokens/txt
1818+/* tre-514 %txt /tests/golden/types-scope-library-poke/tree/txt
1819+/* typ-514 %txt /tests/golden/types-scope-library-poke/types/txt
1820+/* src-515 %jibb /tests/golden/types-scope-root-api/source/jibb
1821+/* tok-515 %txt /tests/golden/types-scope-root-api/tokens/txt
1822+/* tre-515 %txt /tests/golden/types-scope-root-api/tree/txt
1823+/* typ-515 %txt /tests/golden/types-scope-root-api/types/txt
1824+/* src-516 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
1825+/* tok-516 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
1826+/* tre-516 %txt /tests/golden/types-scope-store-duplicate/tree/txt
1827+/* typ-516 %txt /tests/golden/types-scope-store-duplicate/types/txt
1828+/* src-517 %jibb /tests/golden/types-scope-store-shadow/source/jibb
1829+/* tok-517 %txt /tests/golden/types-scope-store-shadow/tokens/txt
1830+/* tre-517 %txt /tests/golden/types-scope-store-shadow/tree/txt
1831+/* typ-517 %txt /tests/golden/types-scope-store-shadow/types/txt
1832+/* src-518 %jibb /tests/golden/types-string-interpolation/source/jibb
1833+/* tok-518 %txt /tests/golden/types-string-interpolation/tokens/txt
1834+/* tre-518 %txt /tests/golden/types-string-interpolation/tree/txt
1835+/* typ-518 %txt /tests/golden/types-string-interpolation/types/txt
1836+/* src-519 %jibb /tests/golden/types-tuple-context/source/jibb
1837+/* tok-519 %txt /tests/golden/types-tuple-context/tokens/txt
1838+/* tre-519 %txt /tests/golden/types-tuple-context/tree/txt
1839+/* typ-519 %txt /tests/golden/types-tuple-context/types/txt
1840+/* src-520 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1841+/* tok-520 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1842+/* tre-520 %txt /tests/golden/types-tuple-context-nested/tree/txt
1843+/* typ-520 %txt /tests/golden/types-tuple-context-nested/types/txt
1844+/* src-521 %jibb /tests/golden/types-union-alias/source/jibb
1845+/* tok-521 %txt /tests/golden/types-union-alias/tokens/txt
1846+/* tre-521 %txt /tests/golden/types-union-alias/tree/txt
1847+/* typ-521 %txt /tests/golden/types-union-alias/types/txt
1848+/* src-522 %jibb /tests/golden/types-union-branch-context/source/jibb
1849+/* tok-522 %txt /tests/golden/types-union-branch-context/tokens/txt
1850+/* tre-522 %txt /tests/golden/types-union-branch-context/tree/txt
1851+/* typ-522 %txt /tests/golden/types-union-branch-context/types/txt
1852+/* src-523 %jibb /tests/golden/types-union-branch-pending/source/jibb
1853+/* tok-523 %txt /tests/golden/types-union-branch-pending/tokens/txt
1854+/* tre-523 %txt /tests/golden/types-union-branch-pending/tree/txt
1855+/* typ-523 %txt /tests/golden/types-union-branch-pending/types/txt
1856+/* src-524 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1857+/* tok-524 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1858+/* tre-524 %txt /tests/golden/types-union-constructor-shape/tree/txt
1859+/* typ-524 %txt /tests/golden/types-union-constructor-shape/types/txt
1860+/* src-525 %jibb /tests/golden/types-union-context-flow/source/jibb
1861+/* tok-525 %txt /tests/golden/types-union-context-flow/tokens/txt
1862+/* tre-525 %txt /tests/golden/types-union-context-flow/tree/txt
1863+/* typ-525 %txt /tests/golden/types-union-context-flow/types/txt
1864+/* src-526 %jibb /tests/golden/types-union-finite/source/jibb
1865+/* tok-526 %txt /tests/golden/types-union-finite/tokens/txt
1866+/* tre-526 %txt /tests/golden/types-union-finite/tree/txt
1867+/* typ-526 %txt /tests/golden/types-union-finite/types/txt
1868+/* src-527 %jibb /tests/golden/types-union-finite-context/source/jibb
1869+/* tok-527 %txt /tests/golden/types-union-finite-context/tokens/txt
1870+/* tre-527 %txt /tests/golden/types-union-finite-context/tree/txt
1871+/* typ-527 %txt /tests/golden/types-union-finite-context/types/txt
1872+/* src-528 %jibb /tests/golden/types-union-finite-generic/source/jibb
1873+/* tok-528 %txt /tests/golden/types-union-finite-generic/tokens/txt
1874+/* tre-528 %txt /tests/golden/types-union-finite-generic/tree/txt
1875+/* typ-528 %txt /tests/golden/types-union-finite-generic/types/txt
1876+/* src-529 %jibb /tests/golden/types-union-finite-limit/source/jibb
1877+/* tok-529 %txt /tests/golden/types-union-finite-limit/tokens/txt
1878+/* tre-529 %txt /tests/golden/types-union-finite-limit/tree/txt
1879+/* typ-529 %txt /tests/golden/types-union-finite-limit/types/txt
1880+/* src-530 %jibb /tests/golden/types-union-import/source/jibb
1881+/* tok-530 %txt /tests/golden/types-union-import/tokens/txt
1882+/* tre-530 %txt /tests/golden/types-union-import/tree/txt
1883+/* mod-530-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1884+/* typ-530 %txt /tests/golden/types-union-import/types/txt
1885+/* mtre-530 %txt /tests/golden/types-union-import/module-trees/txt
1886+/* src-531 %jibb /tests/golden/types-union-local-pending/source/jibb
1887+/* tok-531 %txt /tests/golden/types-union-local-pending/tokens/txt
1888+/* tre-531 %txt /tests/golden/types-union-local-pending/tree/txt
1889+/* typ-531 %txt /tests/golden/types-union-local-pending/types/txt
1890+/* src-532 %jibb /tests/golden/types-union-overlap/source/jibb
1891+/* tok-532 %txt /tests/golden/types-union-overlap/tokens/txt
1892+/* tre-532 %txt /tests/golden/types-union-overlap/tree/txt
1893+/* typ-532 %txt /tests/golden/types-union-overlap/types/txt
1894+/* src-533 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1895+/* tok-533 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1896+/* tre-533 %txt /tests/golden/types-union-overlap-nested/tree/txt
1897+/* typ-533 %txt /tests/golden/types-union-overlap-nested/types/txt
1898+/* src-534 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1899+/* tok-534 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1900+/* tre-534 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1901+/* typ-534 %txt /tests/golden/types-union-pattern-result-context/types/txt
1902+/* src-535 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1903+/* tok-535 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1904+/* tre-535 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1905+/* typ-535 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1906+/* src-536 %jibb /tests/golden/types-union-patterns/source/jibb
1907+/* tok-536 %txt /tests/golden/types-union-patterns/tokens/txt
1908+/* tre-536 %txt /tests/golden/types-union-patterns/tree/txt
1909+/* typ-536 %txt /tests/golden/types-union-patterns/types/txt
1910+/* src-537 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1911+/* tok-537 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1912+/* tre-537 %txt /tests/golden/types-union-patterns-generic/tree/txt
1913+/* typ-537 %txt /tests/golden/types-union-patterns-generic/types/txt
1914+/* src-538 %jibb /tests/golden/types-union-patterns-import/source/jibb
1915+/* tok-538 %txt /tests/golden/types-union-patterns-import/tokens/txt
1916+/* tre-538 %txt /tests/golden/types-union-patterns-import/tree/txt
1917+/* mod-538-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1918+/* typ-538 %txt /tests/golden/types-union-patterns-import/types/txt
1919+/* mtre-538 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1920+/* src-539 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1921+/* tok-539 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1922+/* tre-539 %txt /tests/golden/types-union-phantom-generic/tree/txt
1923+/* typ-539 %txt /tests/golden/types-union-phantom-generic/types/txt
1924+/* src-540 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1925+/* tok-540 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1926+/* tre-540 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1927+/* mod-540-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1928+/* typ-540 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1929+/* mtre-540 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1930+/* src-541 %jibb /tests/golden/types-union-print-distinct/source/jibb
1931+/* tok-541 %txt /tests/golden/types-union-print-distinct/tokens/txt
1932+/* tre-541 %txt /tests/golden/types-union-print-distinct/tree/txt
1933+/* mod-541-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1934+/* mod-541-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1935+/* mod-541-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1936+/* typ-541 %txt /tests/golden/types-union-print-distinct/types/txt
1937+/* mtre-541 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1938+/* src-542 %jibb /tests/golden/types-union-print-escape/source/jibb
1939+/* tok-542 %txt /tests/golden/types-union-print-escape/tokens/txt
1940+/* tre-542 %txt /tests/golden/types-union-print-escape/tree/txt
1941+/* typ-542 %txt /tests/golden/types-union-print-escape/types/txt
1942+/* src-543 %jibb /tests/golden/types-union-print-local/source/jibb
1943+/* tok-543 %txt /tests/golden/types-union-print-local/tokens/txt
1944+/* tre-543 %txt /tests/golden/types-union-print-local/tree/txt
1945+/* typ-543 %txt /tests/golden/types-union-print-local/types/txt
1946+/* src-544 %jibb /tests/golden/types-union-print-nested/source/jibb
1947+/* tok-544 %txt /tests/golden/types-union-print-nested/tokens/txt
1948+/* tre-544 %txt /tests/golden/types-union-print-nested/tree/txt
1949+/* typ-544 %txt /tests/golden/types-union-print-nested/types/txt
1950+/* src-545 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1951+/* tok-545 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1952+/* tre-545 %txt /tests/golden/types-union-print-same-origin/tree/txt
1953+/* mod-545-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1954+/* typ-545 %txt /tests/golden/types-union-print-same-origin/types/txt
1955+/* mtre-545 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1956+/* src-546 %jibb /tests/golden/types-union-print-transitive/source/jibb
1957+/* tok-546 %txt /tests/golden/types-union-print-transitive/tokens/txt
1958+/* tre-546 %txt /tests/golden/types-union-print-transitive/tree/txt
1959+/* mod-546-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1960+/* mod-546-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1961+/* typ-546 %txt /tests/golden/types-union-print-transitive/types/txt
1962+/* mtre-546 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1963+/* src-547 %jibb /tests/golden/types-union-singleton/source/jibb
1964+/* tok-547 %txt /tests/golden/types-union-singleton/tokens/txt
1965+/* tre-547 %txt /tests/golden/types-union-singleton/tree/txt
1966+/* typ-547 %txt /tests/golden/types-union-singleton/types/txt
1967+/* src-548 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1968+/* tok-548 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1969+/* tre-548 %txt /tests/golden/types-union-tag-atoms/tree/txt
1970+/* typ-548 %txt /tests/golden/types-union-tag-atoms/types/txt
1971+/* src-549 %jibb /tests/golden/types-union-tags/source/jibb
1972+/* tok-549 %txt /tests/golden/types-union-tags/tokens/txt
1973+/* tre-549 %txt /tests/golden/types-union-tags/tree/txt
1974+/* typ-549 %txt /tests/golden/types-union-tags/types/txt
1975+/* src-550 %jibb /tests/golden/types-union-unresolved/source/jibb
1976+/* tok-550 %txt /tests/golden/types-union-unresolved/tokens/txt
1977+/* tre-550 %txt /tests/golden/types-union-unresolved/tree/txt
1978+/* typ-550 %txt /tests/golden/types-union-unresolved/types/txt
1979+/* src-551 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1980+/* tok-551 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1981+/* tre-551 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1982+/* typ-551 %txt /tests/golden/types-union-unresolved-flow/types/txt
1983+/* src-552 %jibb /tests/golden/types-unit-construction/source/jibb
1984+/* tok-552 %txt /tests/golden/types-unit-construction/tokens/txt
1985+/* tre-552 %txt /tests/golden/types-unit-construction/tree/txt
1986+/* typ-552 %txt /tests/golden/types-unit-construction/types/txt
1987+/* src-553 %jibb /tests/golden/types-unit-context/source/jibb
1988+/* tok-553 %txt /tests/golden/types-unit-context/tokens/txt
1989+/* tre-553 %txt /tests/golden/types-unit-context/tree/txt
1990+/* typ-553 %txt /tests/golden/types-unit-context/types/txt
1991+/* src-554 %jibb /tests/golden/types-unit-patterns/source/jibb
1992+/* tok-554 %txt /tests/golden/types-unit-patterns/tokens/txt
1993+/* tre-554 %txt /tests/golden/types-unit-patterns/tree/txt
1994+/* typ-554 %txt /tests/golden/types-unit-patterns/types/txt
1995+=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
19791996|%
19801997:: one arm per case
19811998::
@@ -3005,80 +3022,88 @@
30053022 (weld (check ~.types-recursive-gate src-512 `tok-512 `tre-512) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-512 `typ-512))
30063023++ test-types-recursive-sample
30073024 (weld (check ~.types-recursive-sample src-513 `tok-513 `tre-513) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-513 `typ-513))
3025+++ test-types-scope-library-poke
3026+ (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-514 `tok-514 `tre-514) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-514 `typ-514 ~ ~ ~))
3027+++ test-types-scope-root-api
3028+ (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-515 `tok-515 `tre-515) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-515 `typ-515 ~ ~ ~))
3029+++ test-types-scope-store-duplicate
3030+ (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-516 `tok-516 `tre-516) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-516 `typ-516 ~ ~ ~))
3031+++ test-types-scope-store-shadow
3032+ (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-517 `tok-517 `tre-517) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-517 `typ-517 ~ ~ ~))
30083033++ test-types-string-interpolation
3009− (weld (check ~.types-string-interpolation src-514 `tok-514 `tre-514) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-514 `typ-514 ~ ~ ~))
3034+ (weld (check ~.types-string-interpolation src-518 `tok-518 `tre-518) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-518 `typ-518 ~ ~ ~))
30103035++ test-types-tuple-context
3011− (weld (check ~.types-tuple-context src-515 `tok-515 `tre-515) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-515 `typ-515 ~ ~ ~))
3036+ (weld (check ~.types-tuple-context src-519 `tok-519 `tre-519) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-519 `typ-519 ~ ~ ~))
30123037++ test-types-tuple-context-nested
3013− (weld (check ~.types-tuple-context-nested src-516 `tok-516 `tre-516) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-516 `typ-516 ~ ~ ~))
3038+ (weld (check ~.types-tuple-context-nested src-520 `tok-520 `tre-520) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-520 `typ-520 ~ ~ ~))
30143039++ test-types-union-alias
3015− (weld (check ~.types-union-alias src-517 `tok-517 `tre-517) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-517 `typ-517))
3040+ (weld (check ~.types-union-alias src-521 `tok-521 `tre-521) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-521 `typ-521))
30163041++ test-types-union-branch-context
3017− (weld (check ~.types-union-branch-context src-518 `tok-518 `tre-518) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-518 `typ-518))
3042+ (weld (check ~.types-union-branch-context src-522 `tok-522 `tre-522) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-522 `typ-522))
30183043++ test-types-union-branch-pending
3019− (weld (check ~.types-union-branch-pending src-519 `tok-519 `tre-519) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-519 `typ-519))
3044+ (weld (check ~.types-union-branch-pending src-523 `tok-523 `tre-523) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-523 `typ-523))
30203045++ test-types-union-constructor-shape
3021− (weld (check ~.types-union-constructor-shape src-520 `tok-520 `tre-520) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-520 `typ-520))
3046+ (weld (check ~.types-union-constructor-shape src-524 `tok-524 `tre-524) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-524 `typ-524))
30223047++ test-types-union-context-flow
3023− (weld (check ~.types-union-context-flow src-521 `tok-521 `tre-521) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-521 `typ-521))
3048+ (weld (check ~.types-union-context-flow src-525 `tok-525 `tre-525) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-525 `typ-525))
30243049++ test-types-union-finite
3025− (weld (check ~.types-union-finite src-522 `tok-522 `tre-522) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-522 `typ-522 ~ ~ ~))
3050+ (weld (check ~.types-union-finite src-526 `tok-526 `tre-526) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-526 `typ-526 ~ ~ ~))
30263051++ test-types-union-finite-context
3027− (weld (check ~.types-union-finite-context src-523 `tok-523 `tre-523) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-523 `typ-523 ~ ~ ~))
3052+ (weld (check ~.types-union-finite-context src-527 `tok-527 `tre-527) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-527 `typ-527 ~ ~ ~))
30283053++ test-types-union-finite-generic
3029− (weld (check ~.types-union-finite-generic src-524 `tok-524 `tre-524) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-524 `typ-524 ~ ~ ~))
3054+ (weld (check ~.types-union-finite-generic src-528 `tok-528 `tre-528) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-528 `typ-528 ~ ~ ~))
30303055++ test-types-union-finite-limit
3031− (weld (check ~.types-union-finite-limit src-525 `tok-525 `tre-525) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-525 `typ-525 ~ ~ ~))
3056+ (weld (check ~.types-union-finite-limit src-529 `tok-529 `tre-529) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-529 `typ-529 ~ ~ ~))
30323057++ test-types-union-import
3033− (weld (weld (check ~.types-union-import src-526 `tok-526 `tre-526) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-526 `typ-526 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-526-1]])) (check-module-trees ~.types-union-import `mtre-526 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-526-1]]))
3058+ (weld (weld (check ~.types-union-import src-530 `tok-530 `tre-530) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-530 `typ-530 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-530-1]])) (check-module-trees ~.types-union-import `mtre-530 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-530-1]]))
30343059++ test-types-union-local-pending
3035− (weld (check ~.types-union-local-pending src-527 `tok-527 `tre-527) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-527 `typ-527))
3060+ (weld (check ~.types-union-local-pending src-531 `tok-531 `tre-531) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-531 `typ-531))
30363061++ test-types-union-overlap
3037− (weld (check ~.types-union-overlap src-528 `tok-528 `tre-528) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-528 `typ-528))
3062+ (weld (check ~.types-union-overlap src-532 `tok-532 `tre-532) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-532 `typ-532))
30383063++ test-types-union-overlap-nested
3039− (weld (check ~.types-union-overlap-nested src-529 `tok-529 `tre-529) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-529 `typ-529))
3064+ (weld (check ~.types-union-overlap-nested src-533 `tok-533 `tre-533) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-533 `typ-533))
30403065++ test-types-union-pattern-result-context
3041− (weld (check ~.types-union-pattern-result-context src-530 `tok-530 `tre-530) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-530 `typ-530 ~ ~ ~))
3066+ (weld (check ~.types-union-pattern-result-context src-534 `tok-534 `tre-534) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-534 `typ-534 ~ ~ ~))
30423067++ test-types-union-pattern-result-controls
3043− (weld (check ~.types-union-pattern-result-controls src-531 `tok-531 `tre-531) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-531 `typ-531 ~ ~ ~))
3068+ (weld (check ~.types-union-pattern-result-controls src-535 `tok-535 `tre-535) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-535 `typ-535 ~ ~ ~))
30443069++ test-types-union-patterns
3045− (weld (check ~.types-union-patterns src-532 `tok-532 `tre-532) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-532 `typ-532 ~ ~ ~))
3070+ (weld (check ~.types-union-patterns src-536 `tok-536 `tre-536) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-536 `typ-536 ~ ~ ~))
30463071++ test-types-union-patterns-generic
3047− (weld (check ~.types-union-patterns-generic src-533 `tok-533 `tre-533) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-533 `typ-533 ~ ~ ~))
3072+ (weld (check ~.types-union-patterns-generic src-537 `tok-537 `tre-537) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-537 `typ-537 ~ ~ ~))
30483073++ test-types-union-patterns-import
3049− (weld (weld (check ~.types-union-patterns-import src-534 `tok-534 `tre-534) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-534 `typ-534 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-534-1]])) (check-module-trees ~.types-union-patterns-import `mtre-534 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-534-1]]))
3074+ (weld (weld (check ~.types-union-patterns-import src-538 `tok-538 `tre-538) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-538 `typ-538 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-538-1]])) (check-module-trees ~.types-union-patterns-import `mtre-538 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-538-1]]))
30503075++ test-types-union-phantom-generic
3051− (weld (check ~.types-union-phantom-generic src-535 `tok-535 `tre-535) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-535 `typ-535))
3076+ (weld (check ~.types-union-phantom-generic src-539 `tok-539 `tre-539) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-539 `typ-539))
30523077++ test-types-union-print-cross-namespace
3053− (weld (weld (check ~.types-union-print-cross-namespace src-536 `tok-536 `tre-536) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-536 `typ-536 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-536-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-536 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-536-1]]))
3078+ (weld (weld (check ~.types-union-print-cross-namespace src-540 `tok-540 `tre-540) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-540 `typ-540 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-540-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-540 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-540-1]]))
30543079++ test-types-union-print-distinct
3055− (weld (weld (check ~.types-union-print-distinct src-537 `tok-537 `tre-537) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-537 `typ-537 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-537-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-537-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-537-3]])) (check-module-trees ~.types-union-print-distinct `mtre-537 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-537-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-537-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-537-3]]))
3080+ (weld (weld (check ~.types-union-print-distinct src-541 `tok-541 `tre-541) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-541 `typ-541 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-541-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-541-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-541-3]])) (check-module-trees ~.types-union-print-distinct `mtre-541 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-541-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-541-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-541-3]]))
30563081++ test-types-union-print-escape
3057− (weld (check ~.types-union-print-escape src-538 `tok-538 `tre-538) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-538 `typ-538))
3082+ (weld (check ~.types-union-print-escape src-542 `tok-542 `tre-542) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-542 `typ-542))
30583083++ test-types-union-print-local
3059− (weld (check ~.types-union-print-local src-539 `tok-539 `tre-539) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-539 `typ-539))
3084+ (weld (check ~.types-union-print-local src-543 `tok-543 `tre-543) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-543 `typ-543))
30603085++ test-types-union-print-nested
3061− (weld (check ~.types-union-print-nested src-540 `tok-540 `tre-540) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-540 `typ-540))
3086+ (weld (check ~.types-union-print-nested src-544 `tok-544 `tre-544) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-544 `typ-544))
30623087++ test-types-union-print-same-origin
3063− (weld (weld (check ~.types-union-print-same-origin src-541 `tok-541 `tre-541) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-541 `typ-541 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-541-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-541 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-541-1]]))
3088+ (weld (weld (check ~.types-union-print-same-origin src-545 `tok-545 `tre-545) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-545 `typ-545 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-545-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-545 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-545-1]]))
30643089++ test-types-union-print-transitive
3065− (weld (weld (check ~.types-union-print-transitive src-542 `tok-542 `tre-542) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-542 `typ-542 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-542-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-542-2]])) (check-module-trees ~.types-union-print-transitive `mtre-542 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-542-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-542-2]]))
3090+ (weld (weld (check ~.types-union-print-transitive src-546 `tok-546 `tre-546) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-546 `typ-546 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-546-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-546-2]])) (check-module-trees ~.types-union-print-transitive `mtre-546 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-546-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-546-2]]))
30663091++ test-types-union-singleton
3067− (weld (check ~.types-union-singleton src-543 `tok-543 `tre-543) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-543 `typ-543))
3092+ (weld (check ~.types-union-singleton src-547 `tok-547 `tre-547) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-547 `typ-547))
30683093++ test-types-union-tag-atoms
3069− (weld (check ~.types-union-tag-atoms src-544 `tok-544 `tre-544) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-544 `typ-544))
3094+ (weld (check ~.types-union-tag-atoms src-548 `tok-548 `tre-548) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-548 `typ-548))
30703095++ test-types-union-tags
3071− (weld (check ~.types-union-tags src-545 `tok-545 `tre-545) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-545 `typ-545))
3096+ (weld (check ~.types-union-tags src-549 `tok-549 `tre-549) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-549 `typ-549))
30723097++ test-types-union-unresolved
3073− (weld (check ~.types-union-unresolved src-546 `tok-546 `tre-546) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-546 `typ-546))
3098+ (weld (check ~.types-union-unresolved src-550 `tok-550 `tre-550) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-550 `typ-550))
30743099++ test-types-union-unresolved-flow
3075− (weld (check ~.types-union-unresolved-flow src-547 `tok-547 `tre-547) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-547 `typ-547))
3100+ (weld (check ~.types-union-unresolved-flow src-551 `tok-551 `tre-551) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-551 `typ-551))
30763101++ test-types-unit-construction
3077− (weld (check ~.types-unit-construction src-548 `tok-548 `tre-548) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-548 `typ-548 ~ ~ ~))
3102+ (weld (check ~.types-unit-construction src-552 `tok-552 `tre-552) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-552 `typ-552 ~ ~ ~))
30783103++ test-types-unit-context
3079− (weld (check ~.types-unit-context src-549 `tok-549 `tre-549) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-549 `typ-549 ~ ~ ~))
3104+ (weld (check ~.types-unit-context src-553 `tok-553 `tre-553) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-553 `typ-553 ~ ~ ~))
30803105++ test-types-unit-patterns
3081− (weld (check ~.types-unit-patterns src-550 `tok-550 `tre-550) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-550 `typ-550))
3106+ (weld (check ~.types-unit-patterns src-554 `tok-554 `tre-554) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-554 `typ-554))
30823107::
30833108:: +check: run golden:jibb on a case and compare both outputs
30843109::
@@ -3241,6 +3266,6 @@
32413266 =/ sources=(list [path=path source=@t])
32423267 (turn modules |=(item=[label=@t at=path source=@t] [at.item source.item]))
32433268 ?~ prepared-prelude
3244− (golden-types-with-prelude:jibb at src external mark-external sources prelude-source)
3269+ (golden-types-with-prelude-and-internal:jibb at src external mark-external sources prelude-source internal-source)
32453270 (golden-types-with-prepared-prelude:jibb at src external mark-external sources prepared-prelude)
32463271--
tests/type-import-diagnostic/about.txt+1−1
@@ -3,7 +3,7 @@ gates errors where used; unused molds are skipped. This fixture compiles a
33/sur file and a mark against zuse and passes unchanged structured reader
44results to the partial checker. Proven errors identify the Jibb use site for direct or nested record and
55function casts, cell samples, and non-generic local aliases. Ordered replay
6−stops at an unsupported prefix, cycle or shadowing failure; unions, generic
6+passes a supported noun (`*`) prefix and stops at an unsupported prefix, cycle or shadowing failure; unions, generic
77applications and transitive modules remain unsupported. Valid sibling
88definitions still infer.
99
tests/type-import-diagnostic/expected.txt+4−1
@@ -52,7 +52,10 @@ partial inference; module not checked
5252/ui/test.jibb:2:10: invalid imported mold
5353+$ alias bad.foo
5454 ^
55−++ first-unsupported: cast mold is not supported by partial inference
55+++ first-unsupported: signed and float auras cannot be imported
56+/ui/test.jibb:8:32: invalid imported mold
57+++ first-unsupported ^- [a=* b=bad.foo] !!
58+ ^
5659++ recursive-first: cast mold is not supported by partial inference
5760++ shadow: sample shadows a name
5861++ first-invalid: signed and float auras cannot be imported
tests/type-poke/about.txtnew file+7
@@ -0,0 +1,7 @@
1+The internal prelude defines poke, while the public prelude re-exports it as an
2+ordinary transparent type. A real Hoon mark is compiled and read by the importer
3+before the partial checker builds a poke-only API interface. The reports cover
4+the constructor and mark mismatch, aliases and re-exports, ordinary construction
5+and inspection, private import boundaries, unsupported or invalid API declarations,
6+and preparation failures. The report remains partial; effect lowering and runtime
7+execution are not verified.
tests/type-poke/alias.txtnew file+2
@@ -0,0 +1,2 @@
1+/= fake /ui/internal
2+++ nope |= x=poke.fake x
tests/type-poke/api.txtnew file+2
@@ -0,0 +1,2 @@
1+/% %todo-action
2++$ poke todo-action
tests/type-poke/client.txtnew file+23
@@ -0,0 +1,23 @@
1+/= todo /ui/api/todo
2++$ copy poke
3++$ double copy
4+++ good (todo-action.todo "ok")
5+++ pass |= x=poke x
6+++ pass-alias |= x=copy x
7+++ direct ^- poke [%agent %todo %todo-action "x"]
8+++ alias ^- double [%agent %todo %todo-action "x"]
9+++ getter |= x=poke payload.x
10+++ inspect |= x=poke
11+ ?- x
12+ [%agent a b c] "agent"
13+ [%store a b c] "store"
14+++ change |= x=poke x(payload="new")
15+++ cast-atom ^- poke 0
16+++ leaked |= x=copy ^- @t x
17+++ split |= x=poke
18+ ?- x
19+ [a b] a
20+++ number [(todo-action.todo "write") 1]
21+++ bad-constructor (todo-action.todo ~zod)
22+++ bad-mark ^- poke [%agent %todo 0x1f "x"]
23+++ bad-case ^- poke [%alien %todo %todo-action "x"]
tests/type-poke/direct.txtnew file+2
@@ -0,0 +1,2 @@
1+/= leak /lib/jibb/internal
2+++ nope |= x=poke.leak x
tests/type-poke/expected.txtnew file+66
@@ -0,0 +1,66 @@
1+source-less=rejected malformed=rejected empty=rejected
2+partial inference; module not checked
3+++ zero: poke
4+++ pet: poke
5+++ look: $-(poke @t)
6+partial inference; module not checked
7++$ copy: not checked
8++$ double: not checked
9+++ good: poke
10+++ pass: $-(poke poke)
11+++ pass-alias: $-(poke poke)
12+++ direct: poke
13+++ alias: poke
14+++ getter: field is not available to partial inference
15+++ inspect: $-(poke @t)
16+++ change: change target needs a known record in partial inference
17+++ cast-atom: cast constraint is not supported by partial inference
18+++ leaked: cast constraint is not supported by partial inference
19+++ split: cell pattern subject is not supported by partial inference
20+++ number: [poke @ud]
21+++ bad-constructor: call's sample and argument types do not unify
22+/ui/test.jibb:21:21: called gate
23+++ bad-constructor (todo-action.todo ~zod)
24+ ^
25+/ui/test.jibb:21:38: argument has type @p
26+++ bad-constructor (todo-action.todo ~zod)
27+ ^
28+++ bad-mark: cast mold and expression type do not unify
29+/ui/test.jibb:22:16: cast mold
30+++ bad-mark ^- poke [%agent %todo 0x1f "x"]
31+ ^
32+/ui/test.jibb:22:21: expression
33+++ bad-mark ^- poke [%agent %todo 0x1f "x"]
34+ ^
35+++ bad-case: cast mold and expression type do not unify
36+/ui/test.jibb:23:16: cast mold
37+++ bad-case ^- poke [%alien %todo %todo-action "x"]
38+ ^
39+/ui/test.jibb:23:21: expression
40+++ bad-case ^- poke [%alien %todo %todo-action "x"]
41+ ^
42+partial inference; module not checked
43+the prelude internal module is private
44+partial inference; module not checked
45+++ nope: sample mold is not supported by partial inference
46+partial inference; module not checked
47+++ pass: $-(poke poke)
48+++ fake-to-real: cast constraint is not supported by partial inference
49+++ real-to-fake: cast constraint is not supported by partial inference
50+++ match-tag: union pattern is not supported by partial inference
51+partial inference; module not checked
52+the prelude internal module is private
53+partial inference; module not checked
54+API module needs unsupported inference: /ui/api/todo/jibb
55+partial inference; module not checked
56+API module needs unsupported inference: /ui/api/todo/jibb
57+partial inference; module not checked
58+API module needs unsupported inference: /ui/api/todo/jibb
59+partial inference; module not checked
60+the prelude internal module is private
61+partial inference; module not checked
62+API module needs unsupported inference: /ui/api/todo/jibb
63+partial inference; module not checked
64+API module needs unsupported inference: /ui/api/todo/jibb
65+partial inference; module not checked
66+module has conflicting names: /ui/wrong/todo/jibb
tests/type-poke/exported.txtnew file+9
@@ -0,0 +1,9 @@
1+/= public /ui/public
2+/= fake /ui/internal
3+++ pass |= x=exposed.public ^- poke x
4+++ fake-to-real |= x=faux.fake ^- poke x
5+++ real-to-fake |= x=poke ^- faux.fake x
6+++ match-tag |= x=poke
7+ ?- x
8+ %agent "a"
9+ * "b"
tests/type-poke/fake.txtnew file+4
@@ -0,0 +1,4 @@
1++$ faux
2+ [%agent agent=@tas mark=@tas payload=@t]
3+ [%store module=@t action=@tas payload=@t]
4+++ hold |= x=faux x
tests/type-poke/impostor-client.txtnew file+2
@@ -0,0 +1,2 @@
1+/= hidden /lib/jibb/internal
2+++ leaked secret.hidden
tests/type-poke/impostor.txtnew file+1
@@ -0,0 +1 @@
1+++ secret "private"
tests/type-poke/inner.txtnew file+2
@@ -0,0 +1,2 @@
1+/= hidden /lib/jibb/internal
2++$ exported poke.hidden
tests/type-poke/mark.txtnew file+5
@@ -0,0 +1,5 @@
1+|_ a=@t
2+++ grab |% ++ noun @t --
3+++ grow |% ++ noun a --
4+++ grad %noun
5+--
tests/type-poke/public.txtnew file+2
@@ -0,0 +1,2 @@
1++$ exposed poke
2+++ carry |= x=exposed x
tests/type-poke/transitive.txtnew file+2
@@ -0,0 +1,2 @@
1+/= leaked /ui/inner
2+++ nope |= x=poke.leaked x
tools/golden+12−2
@@ -256,7 +256,7 @@ def golden_program(lib_path, cases):
256256 marks = '(import-marks marks.metadata)' if imported else '~'
257257 modules = '(turn modules.metadata |=(item=[label=@t at=path source=@t] [at.item source.item]))'
258258 types_value = ('?:(module-check.metadata ?~(prepared-prelude '
259− '(golden-types-with-prelude:lib at src %s %s %s prelude-source) '
259+ '(golden-types-with-prelude-and-internal:lib at src %s %s %s prelude-source internal-source) '
260260 '(golden-types-with-prepared-prelude:lib at src %s %s %s prepared-prelude)) %s)'
261261 % (surs, marks, modules, surs, marks, modules, types_value))
262262 types_expr = '?:(check.metadata %s \'\')' % types_value
@@ -268,12 +268,22 @@ def golden_program(lib_path, cases):
268268 parts = ue.cord_pieces(f.read())
269269 except OSError as e:
270270 raise ue.ToolError('cannot read the Jibb prelude %s: %s' % (prelude_path, e))
271+ internal_path = os.path.join(ue.ROOT, 'jibb-dev', 'lib', 'jibb', 'internal.jibb')
272+ try:
273+ with open(internal_path, 'rb') as f:
274+ internal_parts = ue.cord_pieces(f.read())
275+ except OSError as e:
276+ raise ue.ToolError('cannot read the internal Jibb prelude %s: %s' % (internal_path, e))
271277 prelude_helper = "++ prelude-source\n ^- @t\n (rap 3 `(list @t)`~[%s])\n" % (
272278 ' '.join(ue.cord_literal(p) for p in parts))
279+ prelude_helper += "++ internal-source\n ^- @t\n (rap 3 `(list @t)`~[%s])\n" % (
280+ ' '.join(ue.cord_literal(p) for p in internal_parts))
273281 prelude_expr = '(rap 3 `(list @t)`~[%s])' % (
274282 ' '.join(ue.cord_literal(p) for p in parts))
283+ internal_expr = '(rap 3 `(list @t)`~[%s])' % (
284+ ' '.join(ue.cord_literal(p) for p in internal_parts))
275285 harness = harness.replace('|^ %+ rap 3',
276− '=/ prepared-prelude (prepare-prelude:lib %s)\n|^ %%+ rap 3' % prelude_expr)
286+ '=/ prepared-prelude (prepare-prelude-with-internal:lib %s %s)\n|^ %%+ rap 3' % (prelude_expr, internal_expr))
277287 prog.add(harness.replace('{count}', str(len(cases)))
278288 .replace('{runs}', runs)
279289 .replace('{types-expr}', types_expr if any(c.want_types for c in cases) else "''")
tools/ship+3−2
@@ -1077,6 +1077,7 @@ def generate_tests(golden):
10771077 '/+ jibb, jibb-import' if has_imports or has_module_types else '/+ jibb']
10781078 if has_module_types:
10791079 lines.append('/* prelude-source %jibb /lib/jibb/prelude/jibb')
1080+ lines.append('/* internal-source %jibb /lib/jibb/internal/jibb')
10801081 arms = []
10811082 for i, ((name, folder), arm) in enumerate(
10821083 zip(cases, arm_names([c[0] for c in cases])), 1):
@@ -1166,7 +1167,7 @@ def generate_tests(golden):
11661167 call, name, expected_modules, ' '.join(module_fixtures))
11671168 arms.append('++ %s\n %s' % (arm, call))
11681169 if has_module_types:
1169− lines.append('=/ prepared-prelude (prepare-prelude:jibb prelude-source)')
1170+ lines.append('=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)')
11701171 lines.append('|%')
11711172 if arms:
11721173 lines.append(':: one arm per case')
@@ -1289,7 +1290,7 @@ def generate_tests(golden):
12891290 =/ sources=(list [path=path source=@t])
12901291 (turn modules |=(item=[label=@t at=path source=@t] [at.item source.item]))
12911292 ?~ prepared-prelude
1292− (golden-types-with-prelude:jibb at src external mark-external sources prelude-source)
1293+ (golden-types-with-prelude-and-internal:jibb at src external mark-external sources prelude-source internal-source)
12931294 (golden-types-with-prepared-prelude:jibb at src external mark-external sources prepared-prelude)
12941295'''
12951296 return '\n'.join(lines) + '\n' + TESTS_HELPERS.replace('\n--\n', '\n' + types_helper + '--\n')
tools/testdata/selftest+10−10
@@ -325,16 +325,16 @@ def check_empty_module_bundle(c, tmp):
325325 with open(os.path.join(folder, 'about.txt'), 'a') as f:
326326 f.write('expect-types: test module input\n')
327327 lib, _ = stub_with(tmp, 'module-stub.hoon', '--',
328− "++ prepare-prelude\n"
329− " |= prelude=@t\n"
328+ "++ prepare-prelude-with-internal\n"
329+ " |= [prelude=@t internal=@t]\n"
330330 " ^- (unit @t)\n"
331331 " `prelude\n"
332332 "++ golden-types-with-prepared-prelude\n"
333333 " |= [file=path src=@t surs=* marks=* modules=* prelude=(unit @t)]\n"
334334 " ^- @t\n"
335335 " ?~(prelude 'missing prelude' ?~(modules 'empty module bundle' 'unexpected modules'))\n"
336− "++ golden-types-with-prelude\n"
337− " |= [file=path src=@t surs=* marks=* modules=* prelude=@t]\n"
336+ "++ golden-types-with-prelude-and-internal\n"
337+ " |= [file=path src=@t surs=* marks=* modules=* prelude=@t internal=@t]\n"
338338 " ^- @t\n"
339339 " ?~(prelude 'missing prelude' ?~(modules 'empty module bundle' 'unexpected modules'))\n"
340340 "--")
@@ -347,20 +347,20 @@ def check_empty_module_bundle(c, tmp):
347347 c.expect(not os.path.exists(os.path.join(folder, 'module-trees.txt')),
348348 'empty bundle should not require a fixture tree output')
349349 generated = read(program)
350− c.expect(generated.count(b'(prepare-prelude:lib ') == 1 and
351− generated.find(b'|^ %+ rap') > generated.find(b'(prepare-prelude:lib '),
350+ c.expect(generated.count(b'(prepare-prelude-with-internal:lib ') == 1 and
351+ generated.find(b'|^ %+ rap') > generated.find(b'(prepare-prelude-with-internal:lib '),
352352 'prelude preparation should occur once before the case loop')
353353 fallback, _ = stub_with(tmp, 'fallback-stub.hoon', '--',
354− "++ prepare-prelude\n"
355− " |= prelude=@t\n"
354+ "++ prepare-prelude-with-internal\n"
355+ " |= [prelude=@t internal=@t]\n"
356356 " ^- (unit @t)\n"
357357 " ~\n"
358358 "++ golden-types-with-prepared-prelude\n"
359359 " |= [file=path src=@t surs=* marks=* modules=* prelude=(unit @t)]\n"
360360 " ^- @t\n"
361361 " 'unexpected prepared path'\n"
362− "++ golden-types-with-prelude\n"
363− " |= [file=path src=@t surs=* marks=* modules=* prelude=@t]\n"
362+ "++ golden-types-with-prelude-and-internal\n"
363+ " |= [file=path src=@t surs=* marks=* modules=* prelude=@t internal=@t]\n"
364364 " ^- @t\n"
365365 " 'prelude preparation failed'\n"
366366 "--")
tools/testdata/ship-selftest+3−2
@@ -171,9 +171,10 @@ def generator_checks(tmp):
171171 check('Jibb module sources are also supplied to the partial checker',
172172 '(check-module-types ~.main' in out and
173173 '/* prelude-source %jibb /lib/jibb/prelude/jibb' in out and
174− '=/ prepared-prelude (prepare-prelude:jibb prelude-source)' in out and
174+ '/* internal-source %jibb /lib/jibb/internal/jibb' in out and
175+ '=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)' in out and
175176 '(golden-types-with-prepared-prelude:jibb at src external mark-external sources prepared-prelude)' in out and
176− '(golden-types-with-prelude:jibb at src external mark-external sources prelude-source)' in out and
177+ '(golden-types-with-prelude-and-internal:jibb at src external mark-external sources prelude-source internal-source)' in out and
177178 "['/ui/card.jibb' ~[~.ui ~.card ~.jibb] mod-1-1]" in out and
178179 'src-1 `typ-1 ~ ~ ~[[' in out and '~[]' not in out, out)
179180 with open(os.path.join(folder, 'modules.txt'), 'w') as f:
tools/type-module-scope-test+2−1
@@ -12,7 +12,7 @@ fixture = root / 'tests/type-module-scope/expected.txt'
1212tests = (root / 'tests/lib/jibb-module-scope.hoon').read_text()
1313tests = tests[tests.index('\n|%\n') + 1:]
1414expression = ('=/ jibb .\n=/ expected=wain (to-wain:format expected-text)\n'
15− '=/ real-prelude=@t prelude-text\n=/ real-source=@t source-text\n'
15+ '=/ real-prelude=@t prelude-text\n=/ real-internal=@t internal-text\n=/ real-source=@t source-text\n'
1616 '=/ real-left=@t left-text\n=/ real-right=@t right-text\n'
1717 '=/ real-expected=wain (to-wain:format types-text)\n'
1818 '=/ suite\n' + tests + '\nscope-output:suite\n')
@@ -22,6 +22,7 @@ with tempfile.TemporaryDirectory(prefix='jibb-module-scope-') as tmp:
2222 result = subprocess.run([str(root / 'tools/hoon'), '--raw', '-f', str(program),
2323 '--cord', 'expected-text=' + str(fixture),
2424 '--cord', 'prelude-text=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
25+ '--cord', 'internal-text=' + str(root / 'jibb-dev/lib/jibb/internal.jibb'),
2526 '--cord', 'source-text=' + str(root / 'tests/golden/types-prelude-interface/source.jibb'),
2627 '--cord', 'left-text=' + str(root / 'tests/golden/types-prelude-interface/modules/ui/left.jibb'),
2728 '--cord', 'right-text=' + str(root / 'tests/golden/types-prelude-interface/modules/ui/right.jibb'),
tools/type-poke-testnew file+50
@@ -0,0 +1,50 @@
1+#!/usr/bin/env python3
2+"""Compare the source-backed private poke/API fixture under urbit 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-poke'
17+names = ('mark', 'api', 'client', 'direct', 'alias', 'public', 'fake',
18+ 'exported', 'transitive', 'inner', 'impostor-client', 'impostor')
19+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
20+tests = (root / 'tests/lib/jibb-poke-bridge.hoon').read_text()
21+tests = tests[tests.index('\n|%\n') + 1:]
22+expression = ('=/ jibb .\n=/ jibb-import\n' + reader +
23+ '\n=/ prelude=@t prelude-text\n=/ internal=@t internal-text\n' +
24+ ''.join('=/ ' + n + '=wain (to-wain:format ' + n + '-text)\n' for n in names) +
25+ '=/ expected=wain (to-wain:format expected-text)\n' +
26+ '=/ bridge\n' + tests +
27+ '\n(bridge-output:bridge prelude internal ' + ' '.join(n + '-text' for n in names) + ')\n')
28+with tempfile.TemporaryDirectory(prefix='jibb-type-poke-') as tmp:
29+ program = Path(tmp) / 'bridge.hoon'
30+ program.write_text(expression)
31+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
32+ '--cord', 'prelude-text=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
33+ '--cord', 'internal-text=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
34+ for name in names + ('expected',):
35+ command += ['--cord', name + '-text=' + str(fixture / (name + '.txt'))]
36+ result = subprocess.run(command, stdout=subprocess.PIPE)
37+if result.returncode:
38+ sys.exit(result.returncode)
39+expected = (fixture / 'expected.txt').read_bytes()
40+if args.update:
41+ (fixture / 'expected.txt').write_bytes(result.stdout)
42+ print('updated private poke/API bridge golden')
43+ sys.exit(0)
44+if result.stdout != expected:
45+ sys.stderr.writelines(difflib.unified_diff(
46+ expected.decode().splitlines(keepends=True),
47+ result.stdout.decode().splitlines(keepends=True),
48+ fromfile='expected.txt', tofile='actual types'))
49+ sys.exit(1)
50+print('private poke/API bridge golden passed')