on master help sign in
Infer gate-free equality constraints

Carry gate-free variables through unification, substitution, template application, canonicalization, and instantiation. Add eq and mate, constrain collection keys without restricting values, and cover nested injection, aliases, traversal limits, and independent generic names.

commit0858191ab08738c4da5c6d84f00492e629564e73 authoriko <mail@iko.soy> dateMon 2 Nov 2026, 15:19 (2 hours ago) parent4f4978f
24 files changed+3801−3130
unifiedsplit
docs/compiler.md+3−1 docs/development.md+1−1 docs/open-questions.md+3−3 docs/prelude-inventory.md+2−2 docs/status.md+4−2 jibb-dev/lib/jibb.hoon+216−38 jibb-dev/lib/jibb/internal.jibb+1 jibb-dev/lib/jibb/prelude.jibb+15 tests/golden/prelude-unit-list-transforms/about.txt+2−2 tests/golden/prelude-unit-list-transforms/source.jibb+15 tests/golden/prelude-unit-list-transforms/tokens.txt+2204−2118 tests/golden/prelude-unit-list-transforms/tree.txt+994−957 tests/golden/prelude-unit-list-transforms/types.txt+2 tests/golden/types-generic-gates/about.txt+1−1 tests/golden/types-generic-gates/source.jibb+2 tests/golden/types-generic-gates/tokens.txt+43−1 tests/golden/types-generic-gates/tree.txt+18−1 tests/golden/types-generic-gates/types.txt+2 tests/golden/types-prelude-unit-helpers/about.txt+1−1 tests/golden/types-prelude-unit-helpers/source.jibb+10 tests/golden/types-prelude-unit-helpers/tokens.txt+107−1 tests/golden/types-prelude-unit-helpers/tree.txt+57−1 tests/golden/types-prelude-unit-helpers/types.txt+34 tests/lib/jibb-gate-free-guards.hoon+64
docs/compiler.md+3−1
@@ -126,7 +126,9 @@ A call whose direct result is a known named generic union can receive a matching
126126
127127A two-item tuple with an explicit term, null or loobean head can receive payload context from a known union when every alternative is a literal-headed cell and its head noun is unique. The payload must be a direct wing-headed call, optionally grouped, with literal, wing or constructor arguments. The checker first retains the original inference if it already fits; otherwise it tries the contextual path once and fits the selected case and enclosing union. It declines this path if any substitution has a structural root, because a caller may have walked away variable provenance. Duplicate heads, opaque competitors and other shapes also stay conservative. The guard scans the substitution for each eligible tuple and may perform one extra shallow inference; it does not guarantee globally linear work. This lets an explicitly typed todo subscription body infer; it does not check an island or prove request watchability.
128128
129−`+gate-free-type` is a separate three-way proof over normalized checker types: it reports a gate-free result, a gate-bearing witness with its field path, or unknown. It tracks conservative inhabitance before reporting a gate in a cell, spends one shared node budget, and treats opaque recursion, open variables, unknown collection forms and `*` conservatively. Source-proven `qath` and the recognized list/unit representations have dedicated proofs. `+gate-free-mold-source` parses and resolves one named mold with a fresh active-root graph, retaining the complete prepared prelude, source bundle, trusted reader inputs, dependency cache and inferred mold. It caps classification at 256 nodes; parsing, import resolution and type inference are not covered by that cap. The host must canonicalize paths and bind trusted sources and reader results to their versions. API, store and private roots decline; other definitions and unused imported Hoon bindings are not fully checked. This is mold analysis, not a module, kind, island, watchability or runtime check, and it does not infer general gate-free constraints.
129+`+gate-free-type` is a separate three-way proof over normalized checker types: it reports a gate-free result, a gate-bearing witness with its field path, or unknown. It tracks conservative inhabitance before reporting a gate in a cell, spends one shared node budget, and treats opaque recursion, open variables, unknown collection forms and `*` conservatively. Source-proven `qath` and the recognized list/unit representations have dedicated proofs. `+gate-free-mold-source` parses and resolves one named mold with a fresh active-root graph, retaining the complete prepared prelude, source bundle, trusted reader inputs, dependency cache and inferred mold. It caps classification at 256 nodes; parsing, import resolution and type inference are not covered by that cap. The host must canonicalize paths and bind trusted sources and reader results to their versions. API, store and private roots decline; other definitions and unused imported Hoon bindings are not fully checked. This is mold analysis, not a module, kind, island, watchability or runtime check, and it is separate from the generalized constraint solver below.
130+
131+A dedicated `%fvar` form retains the `contains no gates` constraint inside schemes. Unification resolves and updates nested substitutions, so existing or later gate injection fails rather than bypassing the constraint; atom-constrained variables remain the stronger form. Constraint propagation covers open cells, faces, collections and unions with a 256-node bound. Canonicalization and instantiation preserve the constraint, template application validates constrained arguments, and an exhausted variable scan never chooses the unconstrained fallback. `set`, `map`, `mop`, `jar` and `jug` apply the same bounded propagation only to their key positions, leaving values independent. Public `eq` uses the private primitive interface, and generic `mate` retains the same constraint.
130132
131133A full ordinary module may export a narrow checked program `main` only as a direct, unqualified `(program init update view subs)` call with four simple wing arguments, modulo transparent grouping. The canonical prepared prelude must supply both the `program` value and mold. The ordinary source-backed program fit and all normal mold, value and request-graph checks complete first. The inferred `main` must be closed and invariantly match an instantiated `program` mold from that prelude. The initializer must have a closed gate scheme; its data and model contain no open variables and share the existing 256-node gate-free budget, with `%yes` required for both. The named subscription gate may syntactically return null through transparent casts, groups and definition-free bodies. Alternatively, after a successful request-graph merge, it may return one singleton list containing an unfaced `[%watch request]` pair whose request is a direct `case.face` call with one direct constructor callback. The face must resolve to an imported interface whose member has the exact plain derived-request scheme. Exactly one merged request evidence must match its API path and case, agree with the declaration's inner name, and appear in that interface's own graph; the interface source must equal the evidence's API source. The declaration must have no scry, diffs or path parameters. Pure or hand-built requests, helpers, aliases, re-exports, typed paths, folds, multiple subscriptions and missing or ambiguous evidence fail closed. Arbitrary or aliased mains, API/store kinds, and gates or unknowns in data/model also fail closed. This retains source and graph evidence and permits ordinary downstream imports; it neither executes the program nor implements runtime watching.
132134
docs/development.md+1−1
@@ -105,7 +105,7 @@ git clone https://github.com/urbit/tools /root/src/tools
105105| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
106106| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
107107| `tools/type-empty-test` | Checks source-backed empty molds, inhabitedness, coverage and proof budgets under eval and on the ship |
108−| `tools/type-gate-free-guards-test` | Checks bounded gate-free verdicts, inhabitation and witness paths under eval and on the ship |
108+| `tools/type-gate-free-guards-test` | Checks bounded gate-free verdicts, persistent constraints, substitution safeguards, collection keys and witness paths under eval and on the ship |
109109| `tools/type-gate-free-source-test` | Checks source-backed todo mold analysis through the real readers under eval and on the ship |
110110| `tools/type-sub-guards-test` | Checks source-backed subscription mold dependencies under eval and on the ship |
111111| `tools/type-ask-guards-test` | Runs ask origin and canonical list/unit bootstrap guards under eval and on the ship |
docs/open-questions.md+3−3
@@ -30,7 +30,7 @@ Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking i
30308. **Settled: tuples and records.** On 2026-10-30, @iko agreed that an unnamed position can unify with a faced position and take its face; two different explicit faces still conflict. The Grammar and Decisions record this rule.
31319. **Settled: values where `*` is expected.** On 2026-10-30, @iko said `*` is the noun type, not a type variable; generic positions use proper type variables. A value already known to be `@ud` can be passed where `*` is expected. The `each` and `table` signatures use `key=K`.
323210. **Settled: navigation commands.** On 2026-10-30, @iko chose separate declarations for application paths and unchecked cords, with `link-unsafe`, `image-unsafe` and `go-unsafe` for the unchecked forms. `image-unsafe` takes a sized URL record. Both navigation declarations produce `[%go url=@t]`; `go` converts the application path to a cord including the app's base path.
33−11. **Settled: stores and derived gates.** On 2026-10-30, @iko said a store's `+$ poke` is a declaration, like an API file's, not a mold; a derived name clashes with an import face; and an island watching a request whose case has a separate `scry=` path has a type error. The todo API's request is renamed `todo-by-id` so it does not clash with `/- todo`. The checker must account for the fact that a store's kind is determined by the type of `main`.
33+11. **Settled: stores and derived gates.** On 2026-11-01, @iko said a store's local `+$ poke` is an ordinary action mold and the runtime envelope is `raw-poke`; a derived name clashes with an import face; and an island watching a request whose case has a separate `scry=` path has a type error. The todo API's request is renamed `todo-by-id` so it does not clash with `/- todo`. The checker must account for the fact that a store's kind is determined by the type of `main`.
343412. **Settled: how to print a union without a name.** On 2026-10-30, @iko said to print its cases separated by spaces, as `%approve %deny`. This is print-only, not Jibb syntax.
353513. **Settled: how to print type constraints.** On 2026-10-30, @iko chose `$-([A A] A) where A is an atom` for an atom constraint and `$-([A A] ?) where A contains no gates` for a gate-free constraint. Multiple clauses are comma-separated, as `where A is an atom, B contains no gates`.
363614. **Settled: how the prelude implements foundational operations.** On 2026-10-30, @iko chose private low-level primitives in the internal prelude module, with the public foundational gates implemented in Jibb on top of them.
@@ -44,9 +44,9 @@ 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 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`.
47+24. **Settled: how the internal prelude provides `raw-poke`.** On 2026-11-01, @iko chose to define `raw-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, while derived API/store `poke` helpers return commands. This settles `raw-poke`; it does not decide the representation of `ask` or `qath`.
4848
49−25. **Settled: how the prelude provides `ask` and `qath`.** On 2026-10-31, @iko chose ordinary transparent types defined in the internal prelude and re-exported normally, as for `poke`. Callers may construct and inspect their values.
49+25. **Settled: how the prelude provides `ask` and `qath`.** On 2026-10-31, @iko chose ordinary transparent types defined in the internal prelude and re-exported normally, as for `raw-poke`. Callers may construct and inspect their values.
5050
515126. **Settled: the `step` example's `at` binder.** On 2026-10-31, @iko chose to rename the `describe` pattern binder to `sent-at`, keeping Hoon's `at` in the prelude and the no-shadowing rule.
5252
docs/prelude-inventory.md+2−2
@@ -32,7 +32,7 @@ The source-backed `gth` gate calls a compiler-supplied private comparison interf
3232
3333`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
3434
35−The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `bond`, `both`, `clap`, `clef`, `drop`, `flit` and `hunt`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation and jet recognition remain outstanding for all of them.
35+The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `bond`, `both`, `clap`, `clef`, `drop`, `flit`, `hunt` and `mate`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation and jet recognition remain outstanding for all of them.
3636
3737| Name | Hoon behavior | Jibb status |
3838| --- | --- | --- |
@@ -47,7 +47,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
4747| `flit` | Returns a gate that wraps a value only if it satisfies the predicate. | Written |
4848| `hunt` | Returns the only present unit or chooses between two present values with an ordering gate. | Written with the ordering gate first, as `(hunt ord a b)`; both ordering outcomes and absent units are inferred |
4949| `lift` | Takes a mold and a unit, then applies the mold to a present value as `bind` does. | Missing; Jibb molds are not callable values |
50−| `mate` | Returns the present unit if only one is present; when both are present it returns one if their values are equal and crashes otherwise. | Missing |
50+| `mate` | Returns the present unit if only one is present; when both are present it returns one if their values are equal and crashes otherwise. | Written over `eq`; its generic payload retains the gate-free constraint |
5151| `need` | Extracts a present value and crashes on an absent unit. | Written; inferred by the partial checker |
5252| `some` | Wraps a value in a present unit. | Written |
5353
docs/status.md+4−2
@@ -71,7 +71,9 @@ The Hoon reader's tagged-union source proof also handles `$~` default wrappers.
7171
7272The repository spec records the subsequent type-system and prelude decisions, including the chosen `like` result-mapping gate; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass Hoon `*` in supported nonrecursive molds, selected Hoon atoms, term singletons, the null singleton, the two loobean singletons and their exact fork, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds, including Tlon `notes.import-node` with list-wrapped self references, cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, including a source-proved nonrecursive union from a single Ford-imported `/sur` core, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, including source-validated named operands such as Tlon `notes.log`, 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, bare `~` fields and one level of local named tagged unions, as in real Tlon `notes`, with 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, detects missing sources and cycles, and resolves nested fields of imported values with independent scheme instantiation. The source-backed internal prelude defines `poke` and the public prelude re-exports it as a transparent type. A dedicated trusted preparation path supplies private comparison and arithmetic schemes to the Jibb-written `gth`, `add` and `dec` wrappers; ordinary imports cannot access them. The public `add` and `dec` wrappers use private arithmetic interfaces; supported inference preserves the shared atom constraint that excludes loobeans. Primitive execution, jet recognition and length remain unfinished. The partial checker resolves its supported source shape and rejects ordinary imports of the private path. An imported API with one mark and a matching direct `+$ poke` declaration can export a constructor and retain agent/mark metadata when the representation has the supported agent case. A separate partial analysis resolves supported API path declarations and their full and diff mark types, including the todo paths; it does not by itself create requests or check an API module. Ordinary imports additionally infer the supported multi-path request-gate types described above. Complete private module checking, other API shapes, request lowering, root API and kind checking, stores, complete `ask` and `pure` checking 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 includes the doc-exact generic `cmd` union; 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. Known loobean result context also propagates through supported complete branches and binder-only cell arms; binder-only arms over union subjects remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample with its origin, generic arguments and faces preserved; unnamed, pending, recursive and variable-bound cases remain unsupported. A known gate with an unresolved result variable can receive a known enclosing result type before its arguments are inferred; unknown calls and unresolved targets remain conservative. 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. A bounded dependency proof reports certain non-gate cycles through values and gates when an explicit atom or loobean result cast and simple unshadowed expressions establish the cycle. Other 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. A structured single-arm pattern also works for a known non-union cell when coverage is proven, including nested literal and wildcard positions. 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, a grouped wing or a supported shallow call, including nested cell and list positions; other partial-pattern contexts and subject forms 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. Literal singleton heads compare by runtime noun, so `|=%$` also matches explicit null- and loobean-zero-headed cases. When equal heads have disjoint payloads, the constructor selects a uniquely proven compatible payload; unknown and ambiguous candidates remain unsupported. 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 agreed shared-type `clap`; supported calls infer, while backend validation remains outstanding, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
7373
74−The prelude now writes `hunt` with the ordering gate first, matching the target Hoon's `(hunt ord a b)`. Its focused golden infers both ordering outcomes and absent units, and reports mismatched unit payloads and ordering-gate samples. Execution and jet recognition remain unverified; `mate` still requires the missing `eq` and gate-free equality constraint.
74+The prelude now writes `hunt` with the ordering gate first, matching the target Hoon's `(hunt ord a b)`. Its focused golden infers both ordering outcomes and absent units, and reports mismatched unit payloads and ordering-gate samples. Execution and jet recognition remain unverified.
75+
76+The prelude now also writes `eq` and `mate`. A dedicated constrained variable retains `A contains no gates` through nested unification, canonicalization, instantiation and imports; atom constraints remain stronger. Direct and nested gate arguments fail, while open cell, face, collection and union members receive the constraint with bounded traversal and substitution updates. `set`, `map`, `mop`, `jar` and `jug` constrain only their key positions, leaving map values independent. The shared solver guards cover existing and later gate injection, exact traversal budgets and conservative budget fallback; backend equality and crash behavior remain unverified.
7577
7678The 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`, `bond`, `lure`, `weld`, `snoc`, `turn` and `lent`. 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. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. 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. The source-only `+prepare-prelude` rejects empty, malformed, conflicting or import-bearing source; `+prepare-prelude-with-internal` also accepts the supported private internal import. Prepared values are trusted and must come unchanged from the matching preparation arm. When canonical public list or unit templates are missing or altered, independently inferred private molds remain available, while molds that depend on those templates do not. 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.
7779
@@ -112,7 +114,7 @@ What the plan asks for, and where it is:
112114Besides the plan's list:
113115
114116- 660 golden cases: 440 that parse and 220 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.
115−- The 660-case corpus passed under `urbit eval` in 107.1 s while other checks were running. The fake ship passed all 717 tests, including the source-overlap, structural-overlap, generic-union source and alias-overlap, full-module overlap, deferred-context, generic-recursion, generic-construction, generic-pattern, deferred-inference, empty-mold and cell-branch fixtures, importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face, API-evidence, request, closed-gate, todo API, constructor, sub, nested-union, gate-free and direct-gate guards and the unchanged todo report. Desk sync took 116.2 s and the ship's `-test` run took 246.2 s. The importer golden compares 221 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.
117+- The 660-case corpus passed under `urbit eval` in 108.0 s while other checks were running. The fake ship passed all 717 tests, including the source-overlap, structural-overlap, generic-union source and alias-overlap, full-module overlap, deferred-context, generic-recursion, generic-construction, generic-pattern, deferred-inference, empty-mold and cell-branch fixtures, importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face, API-evidence, request, closed-gate, todo API, constructor, sub, nested-union, gate-free and direct-gate guards and the unchanged todo report. Desk sync took 111.2 s and the ship's `-test` run took 316.7 s. The importer golden compares 221 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.
116118- `tools/testdata/selftest` (22 checks), `tools/testdata/ship-selftest` and `tools/testdata/clay-fixtures-selftest` test the tools themselves; the last checks temporary Clay fixture cleanup and signal handling without a ship.
117119- 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.
118120- 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).
jibb-dev/lib/jibb.hoon+216−38
@@ -4657,7 +4657,8 @@
46574657::
46584658+$ itype
46594659 $~ [%var 0]
4660− $% [%var id=@ud]
4660+ $% [%var id=@ud]
4661+ [%fvar id=@ud]
46614662 [%avar id=@ud]
46624663 [%rvar id=@ud]
46634664 [%nvar id=@ud]
@@ -4693,35 +4694,35 @@
46934694 |= [t=itype sub=isub]
46944695 ^- itype
46954696 ?+ -.t t
4696− %var
4697+ ?(%var %fvar)
46974698 =/ found=(unit itype) (itype-lookup id.t sub)
46984699 ?~ found t
4699− ?: &(|(?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
4700+ ?: &(|(?=(%fvar -.u.found) ?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
47004701 $(t u.found)
47014702 %avar
47024703 =/ found=(unit itype) (itype-lookup id.t sub)
47034704 ?~ found t
4704− ?: &(|(?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
4705+ ?: &(|(?=(%fvar -.u.found) ?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
47054706 $(t u.found)
47064707 %rvar
47074708 =/ found=(unit itype) (itype-lookup id.t sub)
47084709 ?~ found t
4709− ?: &(|(?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
4710+ ?: &(|(?=(%fvar -.u.found) ?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
47104711 $(t u.found)
47114712 %nvar
47124713 =/ found=(unit itype) (itype-lookup id.t sub)
47134714 ?~ found t
4714− ?: &(|(?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
4715+ ?: &(|(?=(%fvar -.u.found) ?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
47154716 $(t u.found)
47164717 %rnvar
47174718 =/ found=(unit itype) (itype-lookup id.t sub)
47184719 ?~ found t
4719− ?: &(|(?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
4720+ ?: &(|(?=(%fvar -.u.found) ?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
47204721 $(t u.found)
47214722 %tag
47224723 =/ found=(unit itype) (itype-lookup id.t sub)
47234724 ?~ found t
4724− ?: &(|(?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
4725+ ?: &(|(?=(%fvar -.u.found) ?=(%rvar -.u.found) ?=(%rnvar -.u.found)) =(id.t +.u.found)) u.found
47254726 $(t u.found)
47264727 ==
47274728::
@@ -4774,6 +4775,7 @@
47744775 ?- -.typ
47754776 %empty `[%no fuel]
47764777 ?(%atom %any-atom %flag %const %noun %avar %rvar %nvar %rnvar %fn %jrec) `[%yes fuel]
4778+ %fvar `[%unknown fuel]
47774779 %var
47784780 ?: (lien caps |=(c=icap (hole-same-variable typ (itype-walk [%var id.c] sub)))) `[%yes fuel]
47794781 `[%unknown fuel]
@@ -4813,6 +4815,7 @@
48134815 =. t (itype-walk t sub)
48144816 ?- -.t
48154817 %var =(n id.t)
4818+ %fvar =(n id.t)
48164819 %avar =(n id.t)
48174820 %rvar =(n id.t)
48184821 %nvar =(n id.t)
@@ -4867,6 +4870,12 @@
48674870 ?: ?=(%var -.b)
48684871 ?: (itype-occurs id.b a sub) ~
48694872 `[[id.b a] sub]
4873+ ?: ?=(%fvar -.a)
4874+ ?: (itype-occurs id.a b sub) ~
4875+ (itype-bind-gate-free id.a b sub)
4876+ ?: ?=(%fvar -.b)
4877+ ?: (itype-occurs id.b a sub) ~
4878+ (itype-bind-gate-free id.b a sub)
48704879 :: Arithmetic's aura variable excludes loobeans; decimal literals
48714880 :: remain defaultable until a later constraint makes them concrete.
48724881 ?: &(?=(%nvar -.a) ?=(%rvar -.b))
@@ -4925,6 +4934,69 @@
49254934 $(a tal.a, b tal.b, sub u.first)
49264935 ~
49274936::
4937++$ igf-form [typ=itype sub=isub left=@ud]
4938++$ igf-forms [types=(list itype) sub=isub left=@ud]
4939+++ itype-gate-free-forms
4940+ |= [xs=(list itype) sub=isub fuel=@ud]
4941+ ^- (unit igf-forms)
4942+ ?~ xs `[~ sub fuel]
4943+ =/ head=(unit igf-form) (itype-gate-free-form i.xs sub fuel)
4944+ ?~ head ~
4945+ =/ tail=(unit igf-forms) $(xs t.xs, sub sub.u.head, fuel left.u.head)
4946+ ?~ tail ~
4947+ `[[typ.u.head types.u.tail] sub.u.tail left.u.tail]
4948+::
4949+++ itype-gate-free-form
4950+ |= [t=itype sub=isub fuel=@ud]
4951+ ^- (unit igf-form)
4952+ ?: =(0 fuel) ~
4953+ =. fuel (dec fuel)
4954+ =. t (itype-walk t sub)
4955+ ?- -.t
4956+ %var
4957+ =/ free=itype [%fvar id.t]
4958+ `[free [[id.t free] sub] fuel]
4959+ %fvar `[t sub fuel]
4960+ ?(%atom %any-atom %flag %const %empty %avar %rvar %nvar %rnvar %jrec) `[t sub fuel]
4961+ %face
4962+ =/ body=(unit igf-form) $(t body.t, sub sub, fuel fuel)
4963+ ?~ body ~
4964+ `[[%face name.t typ.u.body] sub.u.body left.u.body]
4965+ %cell
4966+ =/ head=(unit igf-form) $(t hed.t, sub sub, fuel fuel)
4967+ ?~ head ~
4968+ =/ tail=(unit igf-form) $(t tal.t, sub sub.u.head, fuel left.u.head)
4969+ ?~ tail ~
4970+ `[[%cell typ.u.head typ.u.tail] sub.u.tail left.u.tail]
4971+ %collection
4972+ =/ args=(unit igf-forms) (itype-gate-free-forms args.t sub fuel)
4973+ ?~ args ~
4974+ `[[%collection name.t types.u.args] sub.u.args left.u.args]
4975+ %union
4976+ =/ cases=(unit igf-forms) (itype-gate-free-forms cases.t sub fuel)
4977+ ?~ cases ~
4978+ =/ args=(unit igf-forms) (itype-gate-free-forms args.t sub.u.cases left.u.cases)
4979+ ?~ args ~
4980+ `[[%union types.u.cases origin.t label.t types.u.args] sub.u.args left.u.args]
4981+ * ~
4982+ ==
4983+::
4984+++ itype-collection-keys
4985+ |= [name=term args=(list itype) sub=isub]
4986+ ^- (unit [types=(list itype) sub=isub])
4987+ ?~ args `[~ sub]
4988+ ?. |(?=(?(%set %map %mop %jar %jug) name)) `[args sub]
4989+ =/ key=(unit igf-form) (itype-gate-free-form i.args sub 256)
4990+ ?~ key ~
4991+ `[[typ.u.key t.args] sub.u.key]
4992+::
4993+++ itype-bind-gate-free
4994+ |= [n=@ud t=itype sub=isub]
4995+ ^- (unit isub)
4996+ =/ constrained=(unit igf-form) (itype-gate-free-form t sub 256)
4997+ ?~ constrained ~
4998+ `[[n typ.u.constrained] sub.u.constrained]
4999+::
49285000++ itype-unify-args
49295001 |= [as=(list itype) bs=(list itype) sub=isub]
49305002 ^- (unit isub)
@@ -4946,10 +5018,11 @@
49465018 =. t (itype-walk t sub)
49475019 ?- -.t
49485020 %var |
5021+ %fvar |
49495022 %avar |
49505023 %rvar |
49515024 %nvar |
4952− %rnvar |
5025+ %rnvar |
49535026 %atom |
49545027 %any-atom &
49555028 %flag |
@@ -5022,6 +5095,7 @@
50225095 ^- ?
50235096 ?- -.typ
50245097 %var |
5098+ %fvar |
50255099 %avar |
50265100 %rvar |
50275101 %nvar |
@@ -5129,8 +5203,8 @@
51295203 ?. =(name.a name.b) |
51305204 (itype-face-asym-collection-args args.a args.b sub)
51315205 ?: &(?=(%face -.a) ?=(%face -.b)) $(a body.a, b body.b)
5132− ?: ?=(%face -.a) !|(?=(%var -.b) ?=(%avar -.b) ?=(%rvar -.b) |(?=(%nvar -.b) ?=(%rnvar -.b)))
5133− ?: ?=(%face -.b) !|(?=(%var -.a) ?=(%avar -.a) ?=(%rvar -.a) |(?=(%nvar -.a) ?=(%rnvar -.a)))
5206+ ?: ?=(%face -.a) !|(?=(%var -.b) ?=(%fvar -.b) ?=(%avar -.b) ?=(%rvar -.b) |(?=(%nvar -.b) ?=(%rnvar -.b)))
5207+ ?: ?=(%face -.b) !|(?=(%var -.a) ?=(%fvar -.a) ?=(%avar -.a) ?=(%rvar -.a) |(?=(%nvar -.a) ?=(%rnvar -.a)))
51345208 ?: &(?=(%cell -.a) ?=(%cell -.b)) |($(a hed.a, b hed.b) $(a tal.a, b tal.b))
51355209 ?: &(?=(%fn -.a) ?=(%fn -.b)) |($(a sample.a, b sample.b) $(a product.a, b product.b))
51365210 |
@@ -5383,9 +5457,9 @@
53835457 ?: too-wide [%unknown ~]
53845458 =/ spine-checked=? |(spine-proof ?=(^ known))
53855459 =/ uncertain=?
5386− |(?=(%var -.actual) ?=(%avar -.actual) ?=(%rvar -.actual) |(?=(%nvar -.actual) ?=(%rnvar -.actual)) ?=(%var -.expected) ?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected)))
5460+ |(?=(%var -.actual) ?=(%fvar -.actual) ?=(%avar -.actual) ?=(%rvar -.actual) |(?=(%nvar -.actual) ?=(%rnvar -.actual)) ?=(%var -.expected) ?=(%fvar -.expected) ?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected)))
53875461 =/ actual-open=?
5388− |(?=(%var -.actual) ?=(%avar -.actual) ?=(%rvar -.actual) |(?=(%nvar -.actual) ?=(%rnvar -.actual)))
5462+ |(?=(%var -.actual) ?=(%fvar -.actual) ?=(%avar -.actual) ?=(%rvar -.actual) |(?=(%nvar -.actual) ?=(%rnvar -.actual)))
53895463 =. actual (itype-walk actual sub)
53905464 =. expected (itype-walk expected sub)
53915465 ?: =(actual expected) [%ok sub next]
@@ -5440,7 +5514,7 @@
54405514 ?: &(!uncertain ?=(%union -.actual) ?=(%face -.expected))
54415515 $(expected body.expected)
54425516 ?: ?=(%union -.actual) [%unknown ~]
5443− ?: &(?=(%union -.expected) |(?=(%avar -.actual) ?=(%rvar -.actual) |(?=(%nvar -.actual) ?=(%rnvar -.actual)))) [%unknown ~]
5517+ ?: &(?=(%union -.expected) |(?=(%fvar -.actual) ?=(%avar -.actual) ?=(%rvar -.actual) |(?=(%nvar -.actual) ?=(%rnvar -.actual)))) [%unknown ~]
54445518 ?: &(?=(%union -.expected) !?=(%var -.actual))
54455519 (itype-fit-cases actual cases.expected sub next)
54465520 ?: ?=(%tag -.actual)
@@ -5448,7 +5522,7 @@
54485522 =/ u=(unit isub) (itype-unify actual expected sub)
54495523 ?~ u [%bad ~]
54505524 [%ok u.u next]
5451− ?: |(?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected))) [%unknown ~]
5525+ ?: |(?=(%fvar -.expected) ?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected))) [%unknown ~]
54525526 ?: ?=(%face -.expected) $(expected body.expected)
54535527 ?: constructor.actual
54545528 ?. ?=(%fn -.expected) [%bad ~]
@@ -5476,7 +5550,7 @@
54765550 =/ u=(unit isub) (itype-unify actual expected sub)
54775551 ?~ u [%bad ~]
54785552 [%ok u.u next]
5479− ?: |(?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected))) [%unknown ~]
5553+ ?: |(?=(%fvar -.expected) ?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected))) [%unknown ~]
54805554 ?: ?=(%face -.expected) $(expected body.expected)
54815555 ?: &(?=(%collection -.expected) =(%list name.expected) =(0 val.literal.actual))
54825556 [%unknown ~]
@@ -5519,7 +5593,7 @@
55195593 =/ unified=(unit isub) (itype-unify actual expected sub)
55205594 ?~ unified [%bad ~]
55215595 [%ok u.unified next]
5522− ?: |(?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected))) [%unknown ~]
5596+ ?: |(?=(%fvar -.expected) ?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected))) [%unknown ~]
55235597 [%bad ~]
55245598 ?: &(?=(%atom -.actual) ?=(%atom -.expected))
55255599 ?: (aura-prefix aura.expected aura.actual) [%ok sub next]
@@ -5532,7 +5606,7 @@
55325606 ?: &(?=(%face -.actual) ?=(%var -.expected)) [%unknown ~]
55335607 ?: &(?=(%var -.actual) (itype-has-any-atom expected sub))
55345608 [%unknown ~]
5535− ?: |(?=(%var -.actual) ?=(%var -.expected))
5609+ ?: |(?=(%var -.actual) ?=(%var -.expected) ?=(%fvar -.expected))
55365610 =/ unified=(unit isub) (itype-unify actual expected sub)
55375611 ?~ unified
55385612 ?: |(?=(%face -.actual) ?=(%face -.expected)) [%unknown ~]
@@ -5612,6 +5686,36 @@
56125686 (itype-fit [%collection %list ~[a]] list-t ~[[0 recursive]] 1)
56135687 =? problems !?=(%unknown -.nested-fit)
56145688 ["recursive types behind substitutions should remain uncertain" problems]
5689+ =/ free=itype [%fvar 40]
5690+ =/ open-cell=itype [%cell [%var 41] [%face %x [%var 42]]]
5691+ =/ constrained=(unit isub) (itype-unify free open-cell ~)
5692+ =/ expected-cell=itype [%cell [%fvar 41] [%face %x [%fvar 42]]]
5693+ =? problems !=(constrained [~ [[40 expected-cell] [[42 [%fvar 42]] [[41 [%fvar 41]] ~]]]])
5694+ ["gate-free constraints should propagate through cells and faces" problems]
5695+ =? problems ?=(^ (itype-unify free open-cell ~[[41 [%fn txt txt]]]))
5696+ ["an existing nested gate substitution should be rejected" problems]
5697+ =/ shared-sub=isub [[42 [%fvar 42]] [[41 [%fvar 41]] ~]]
5698+ =? problems ?=(^ (itype-unify [%var 41] [%fn txt txt] shared-sub))
5699+ ["a later nested gate substitution should be rejected" problems]
5700+ =? problems ?=(^ (itype-unify free [%fn txt txt] ~))
5701+ ["a gate-free variable should reject a gate" problems]
5702+ =? problems ?=(^ (itype-unify free [%noun ~] ~))
5703+ ["a gate-free variable should reject an opaque noun" problems]
5704+ =/ atom-strong=(unit isub) (itype-unify [%avar 43] free ~)
5705+ =? problems !=(atom-strong [~ [[40 [%avar 43]] ~]])
5706+ ["the atom constraint should be stronger than gate-free" problems]
5707+ =/ free-fit=ifit (itype-fit txt free ~ 44)
5708+ =? problems !?=(%ok -.free-fit)
5709+ ["a concrete atom should fit a gate-free variable" problems]
5710+ =/ gate-fit=ifit (itype-fit [%fn txt txt] free ~ 44)
5711+ =? problems !?=(%bad -.gate-fit)
5712+ ["a gate should not fit a gate-free variable" problems]
5713+ =/ free-scheme=ischeme [[%fn free free] ~[40]]
5714+ =/ canonical-free=itype (canonical-itype typ.free-scheme vars.free-scheme)
5715+ =? problems !=(canonical-free [%fn [%fvar 0] [%fvar 0]])
5716+ ["canonicalization should retain gate-free variables" problems]
5717+ =? problems !=((show-atom-constraint canonical-free) " where A contains no gates")
5718+ ["the printer should show gate-free constraints" problems]
56155719 problems
56165720::
56175721:: The expression inference below is deliberately a fragment: bindings,
@@ -5797,6 +5901,7 @@
57975901 %noun [%unknown & fuel ~]
57985902 %empty [%yes | fuel ~]
57995903 %var [%unknown | fuel ~]
5904+ %fvar [%yes & fuel ~]
58005905 %avar [%yes & fuel ~]
58015906 %rvar [%yes & fuel ~]
58025907 %nvar [%yes & fuel ~]
@@ -5863,10 +5968,11 @@
58635968 %tag |
58645969 %const |
58655970 %var |
5971+ %fvar |
58665972 %avar |
58675973 %rvar |
58685974 %nvar |
5869− %rnvar |
5975+ %rnvar |
58705976 %atom |
58715977 %any-atom |
58725978 %flag |
@@ -5897,6 +6003,7 @@
58976003 ^- (unit @ud)
58986004 ?- -.t
58996005 %var `id.t
6006+ %fvar `id.t
59006007 %avar `id.t
59016008 %rvar `id.t
59026009 %nvar `id.t
@@ -5917,7 +6024,7 @@
59176024 ^- ?
59186025 =. t (itype-walk t sub.state)
59196026 ?- -.t
5920− ?(%var %avar %rvar %nvar %rnvar)
6027+ ?(%var %fvar %avar %rvar %nvar %rnvar)
59216028 ?: (lien caps.state |=(c=icap (hole-same-variable t (itype-walk [%var id.c] sub.state)))) &
59226029 (lien params.state |=(p=[name=@t typ=itype] (hole-same-variable t (itype-walk typ.p sub.state))))
59236030 %tag |
@@ -5969,7 +6076,7 @@
59696076 ^- ?
59706077 =. t (itype-walk t sub.state)
59716078 ?- -.t
5972− ?(%tag %nvar %rnvar %avar %rvar) !(hole-known t state)
6079+ ?(%tag %nvar %rnvar %fvar %avar %rvar) !(hole-known t state)
59736080 %union |((lien cases.t |=(c=itype (hole-uncertain c state))) (lien args.t |=(c=itype (hole-uncertain c state))))
59746081 %grec (lien args.t |=(c=itype (hole-uncertain c state)))
59756082 %collection (lien args.t |=(c=itype (hole-uncertain c state)))
@@ -5995,6 +6102,7 @@
59956102 ^- (list @ud)
59966103 ?- -.t
59976104 %var ~[id.t]
6105+ %fvar ~[id.t]
59986106 %avar ~[id.t]
59996107 %rvar ~[id.t]
60006108 %nvar ~[id.t]
@@ -6033,6 +6141,10 @@
60336141 =/ found=(unit itype) (itype-lookup id.t ren)
60346142 ?~ found t
60356143 u.found
6144+ %fvar
6145+ =/ found=(unit itype) (itype-lookup id.t ren)
6146+ ?~ found t
6147+ u.found
60366148 %avar
60376149 =/ found=(unit itype) (itype-lookup id.t ren)
60386150 ?~ found t
@@ -6074,6 +6186,7 @@
60746186 ^- ?
60756187 ?- -.t
60766188 %var |
6189+ %fvar |
60776190 %avar =(n id.t)
60786191 %rvar =(n id.t)
60796192 %nvar =(n id.t)
@@ -6099,6 +6212,7 @@
60996212 ^- ?
61006213 ?- -.t
61016214 %var |
6215+ %fvar |
61026216 %avar |
61036217 %rvar =(n id.t)
61046218 %nvar |
@@ -6123,6 +6237,28 @@
61236237:: Canonical numbering makes printed variables independent of the order
61246238:: the unifier happened to allocate intermediates.
61256239::
6240+++ itype-var-is-gate-free-fuel
6241+ |= [n=@ud t=itype fuel=@ud]
6242+ ^- ?
6243+ ?: =(0 fuel) &
6244+ =. fuel (dec fuel)
6245+ ?- -.t
6246+ %var |
6247+ %fvar =(n id.t)
6248+ %union |((lien cases.t |=(c=itype (itype-var-is-gate-free-fuel n c fuel))) (lien args.t |=(c=itype (itype-var-is-gate-free-fuel n c fuel))))
6249+ %grec (lien args.t |=(c=itype (itype-var-is-gate-free-fuel n c fuel)))
6250+ %collection (lien args.t |=(c=itype (itype-var-is-gate-free-fuel n c fuel)))
6251+ %face $(t body.t, fuel fuel)
6252+ %fn |($(t sample.t, fuel fuel) $(t product.t, fuel fuel))
6253+ %cell |($(t hed.t, fuel fuel) $(t tal.t, fuel fuel))
6254+ * |
6255+ ==
6256+::
6257+++ itype-var-is-gate-free
6258+ |= [n=@ud t=itype]
6259+ ^- ?
6260+ (itype-var-is-gate-free-fuel n t 256)
6261+::
61266262++ canonical-itype
61276263 |= [t=itype vars=(list @ud)]
61286264 ^- itype
@@ -6130,7 +6266,7 @@
61306266 =/ n=@ud 0
61316267 |-
61326268 ?~ vars (itype-rename t ren)
6133− =/ replacement=itype ?:((itype-var-is-restricted i.vars t) [%rvar n] ?:((itype-var-is-atom i.vars t) [%avar n] [%var n]))
6269+ =/ replacement=itype ?:((itype-var-is-restricted i.vars t) [%rvar n] ?:((itype-var-is-atom i.vars t) [%avar n] ?:((itype-var-is-gate-free i.vars t) [%fvar n] [%var n])))
61346270 $(vars t.vars, ren [[i.vars replacement] ren], n +(n))
61356271::
61366272++ instantiate-scheme
@@ -6141,11 +6277,11 @@
61416277 |-
61426278 ?~ vars [(itype-rename typ.scheme ren) state]
61436279 =/ replacement=itype
6144− ?:((itype-var-is-restricted i.vars typ.scheme) [%rvar next.state] ?:((itype-var-is-atom i.vars typ.scheme) [%avar next.state] [%var next.state]))
6280+ ?:((itype-var-is-restricted i.vars typ.scheme) [%rvar next.state] ?:((itype-var-is-atom i.vars typ.scheme) [%avar next.state] ?:((itype-var-is-gate-free i.vars typ.scheme) [%fvar next.state] [%var next.state])))
61456281 :: A generalized atom variable is a valid origin for re-generalizing
61466282 :: an alias, just as a sample binder is.
61476283 =/ st=istate state(next +(next.state))
6148− =? binders.st |(?=(%avar -.replacement) ?=(%rvar -.replacement)) [next.state binders.state]
6284+ =? binders.st |(?=(%fvar -.replacement) ?=(%avar -.replacement) ?=(%rvar -.replacement)) [next.state binders.state]
61496285 $(vars t.vars, ren [[i.vars replacement] ren], state st)
61506286::
61516287++ icap-lookup
@@ -6352,7 +6488,9 @@
63526488 =/ args=(unit (list itype)) (import-to-itypes +>.node)
63536489 ?~ args ~
63546490 ?. =(arity (lent u.args)) ~
6355− `[%collection name u.args]
6491+ =/ keyed=(unit [types=(list itype) sub=isub]) (itype-collection-keys name u.args ~)
6492+ ?~ keyed ~
6493+ `[%collection name types.u.keyed]
63566494 %fork
63576495 :: Hoon's ordinary ? mold is the fork of its two %f singletons.
63586496 =/ raw=* +.node
@@ -6631,15 +6769,27 @@
66316769 ?~ rest ~
66326770 `[[i.names i.args] u.rest]
66336771::
6634−++ template-apply
6635− |= [template=ischeme args=(list itype)]
6636− ^- (unit itype)
6772+++ template-apply-sub
6773+ |= [template=ischeme args=(list itype) sub=isub]
6774+ ^- (unit [typ=itype sub=isub])
66376775 =/ vars=(list @ud) vars.template
66386776 =/ ren=isub ~
66396777 |-
6640− ?~ vars ?~(args `(itype-rename typ.template ren) ~)
6778+ ?~ vars ?~(args `[(itype-rename typ.template ren) sub] ~)
66416779 ?~ args ~
6642− $(vars t.vars, args t.args, ren [[i.vars i.args] ren])
6780+ =/ replacement=(unit igf-form)
6781+ ?: (itype-var-is-gate-free i.vars typ.template)
6782+ (itype-gate-free-form i.args sub 256)
6783+ `[i.args sub 256]
6784+ ?~ replacement ~
6785+ $(vars t.vars, args t.args, ren [[i.vars typ.u.replacement] ren], sub sub.u.replacement)
6786+::
6787+++ template-apply
6788+ |= [template=ischeme args=(list itype)]
6789+ ^- (unit itype)
6790+ =/ applied=(unit [typ=itype sub=isub]) (template-apply-sub template args ~)
6791+ ?~ applied ~
6792+ `typ.u.applied
66436793::
66446794++ infer-shape-args
66456795 |= [args=(list shape) state=istate]
@@ -6909,6 +7059,17 @@
69097059 =/ args=(unit [types=(list itype) state=istate]) (infer-shape-args args.sh state)
69107060 ?~ args ~
69117061 =/ n=term i.ref.sh
7062+ =/ keyed=(unit [types=(list itype) sub=isub])
7063+ ?: ?=(^ (find-simple-mold n molds.state.u.args))
7064+ `[types.u.args sub.state.u.args]
7065+ ?~ prelude.state.u.args
7066+ (itype-collection-keys n types.u.args sub.state.u.args)
7067+ ?: ?=(^ (find-jibb-mold n u.prelude.state.u.args))
7068+ `[types.u.args sub.state.u.args]
7069+ (itype-collection-keys n types.u.args sub.state.u.args)
7070+ ?~ keyed ~
7071+ =. types.u.args types.u.keyed
7072+ =. sub.state.u.args sub.u.keyed
69127073 ?^ t.ref.sh
69137074 ?^ t.t.ref.sh ~
69147075 =/ iface=(unit ifile) (find-jibb-interface i.t.ref.sh jimports.state.u.args)
@@ -6916,9 +7077,10 @@
69167077 =/ template=(unit ischeme) (find-jibb-mold n u.iface)
69177078 ?~ template ~
69187079 ?~ vars.u.template ~
6919− =/ applied=(unit itype) (template-apply u.template types.u.args)
7080+ =/ applied=(unit [typ=itype sub=isub]) (template-apply-sub u.template types.u.args sub.state.u.args)
69207081 ?~ applied ~
6921− `[(itype-in-import u.applied u.iface i.t.ref.sh prelude.state.u.args) state.u.args]
7082+ =. sub.state.u.args sub.u.applied
7083+ `[(itype-in-import typ.u.applied u.iface i.t.ref.sh prelude.state.u.args) state.u.args]
69227084 ?: (lien active.state.u.args |=(x=term =(x n))) ~
69237085 =/ found=(unit shape) (find-simple-mold n molds.state.u.args)
69247086 ?~ found
@@ -6927,9 +7089,10 @@
69277089 =/ prelude-entry=(unit ischeme) (find-jibb-mold n u.prelude.state.u.args)
69287090 ?~ prelude-entry ~
69297091 ?~ vars.u.prelude-entry ~
6930− =/ applied=(unit itype) (template-apply u.prelude-entry types.u.args)
7092+ =/ applied=(unit [typ=itype sub=isub]) (template-apply-sub u.prelude-entry types.u.args sub.state.u.args)
69317093 ?~ applied ~
6932− `[u.applied state.u.args]
7094+ =. sub.state.u.args sub.u.applied
7095+ `[typ.u.applied state.u.args]
69337096 ?. ?=(%generic -.u.found) ~
69347097 =/ grec=(unit itype) (simple-source-generic-recursive n u.found types.u.args state.u.args)
69357098 ?^ grec `[u.grec state.u.args]
@@ -9543,6 +9706,9 @@
95439706 %var
95449707 ?: (lth id.t 26) [(add 65 id.t) ~]
95459708 "T{<id.t>}"
9709+ %fvar
9710+ ?: (lth id.t 26) [(add 65 id.t) ~]
9711+ "T{<id.t>}"
95469712 %avar
95479713 ?: (lth id.t 26) [(add 65 id.t) ~]
95489714 "T{<id.t>}"
@@ -9606,6 +9772,7 @@
96069772 %nvar &
96079773 %rnvar &
96089774 %var |
9775+ %fvar |
96099776 %avar |
96109777 %rvar |
96119778 %atom |
@@ -9629,7 +9796,7 @@
96299796 |= [label=tape typ=itype sub=isub]
96309797 ^- tape
96319798 =/ normalized=itype (itype-normalize typ sub)
9632− ?: |(?=(%var -.normalized) ?=(%avar -.normalized) ?=(%rvar -.normalized) (itype-has-nvar normalized) (itype-has-tag normalized) (itype-has-union normalized)) label
9799+ ?: |(?=(%var -.normalized) ?=(%fvar -.normalized) ?=(%avar -.normalized) ?=(%rvar -.normalized) (itype-has-nvar normalized) (itype-has-tag normalized) (itype-has-union normalized)) label
96339800 ?: (itype-has-hidden-recursive normalized) label
96349801 =/ vars=(list @ud) (unique-type-vars (itype-vars normalized))
96359802 ?: (gth (lent vars) 26) label
@@ -9650,6 +9817,7 @@
96509817 =/ ident=(unit @ud)
96519818 ?+ -.resolved ~
96529819 %var `id.resolved
9820+ %fvar `id.resolved
96539821 %avar `id.resolved
96549822 %rvar `id.resolved
96559823 ==
@@ -9665,6 +9833,7 @@
96659833 =/ ident=(unit @ud)
96669834 ?+ -.resolved ~
96679835 %var `id.resolved
9836+ %fvar `id.resolved
96689837 %avar `id.resolved
96699838 %rvar `id.resolved
96709839 ==
@@ -9680,6 +9849,7 @@
96809849 =/ ident=(unit @ud)
96819850 ?+ -.resolved ~
96829851 %var `id.resolved
9852+ %fvar `id.resolved
96839853 %avar `id.resolved
96849854 %rvar `id.resolved
96859855 ==
@@ -9696,6 +9866,7 @@
96969866 =/ ident=(unit @ud)
96979867 ?+ -.resolved ~
96989868 %var `id.resolved
9869+ %fvar `id.resolved
96999870 %avar `id.resolved
97009871 %rvar `id.resolved
97019872 ==
@@ -9722,6 +9893,7 @@
97229893 ^- ?
97239894 ?- -.t
97249895 %var |
9896+ %fvar |
97259897 %avar =(n id.t)
97269898 %rvar =(n id.t)
97279899 %nvar |
@@ -9784,6 +9956,10 @@
97849956 =/ sep=tape ?:(printed ", " " where ")
97859957 =/ clause=tape "{sep}{(show-itype [%avar i.vars] ~)} is an atom"
97869958 $(vars t.vars, printed &, out (weld out clause))
9959+ ?: (itype-var-is-gate-free i.vars t)
9960+ =/ sep=tape ?:(printed ", " " where ")
9961+ =/ clause=tape "{sep}{(show-itype [%fvar i.vars] ~)} contains no gates"
9962+ $(vars t.vars, printed &, out (weld out clause))
97879963 $(vars t.vars)
97889964::
97899965:: Build the supported part of the value environment in dependency order.
@@ -10716,7 +10892,7 @@
1071610892++ union-state-leaf
1071710893 |= t=itype
1071810894 ^- ?
10719− ?=(?(%var %avar %rvar %nvar %rnvar %atom %any-atom %flag %noun %empty %const) -.t)
10895+ ?=(?(%var %fvar %avar %rvar %nvar %rnvar %atom %any-atom %flag %noun %empty %const) -.t)
1072010896++ union-state-params-budget
1072110897 |= [params=iparams fuel=@ud]
1072210898 ^- (unit @ud)
@@ -11473,12 +11649,14 @@
1147311649 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
1147411650 =/ minus=ischeme [[%fn b b] ~[0]]
1147511651 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
11652+ =/ free=itype [%fvar 0]
11653+ =/ equal=ischeme [[%fn [%cell free free] [%flag ~]] ~[0]]
1147611654 =/ utf8=itype [%atom 'tD']
1147711655 =/ tape=itype [%collection %list ~[utf8]]
1147811656 =/ codepoints=itype [%collection %list ~[[%atom %c]]]
1147911657 =/ text-trip=ischeme [[%fn [%atom %t] tape] ~]
1148011658 =/ text-tuba=ischeme [[%fn tape codepoints] ~]
11481− [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater] [%raw-trip text-trip] [%raw-tuba text-tuba]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
11659+ [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater] [%raw-eq equal] [%raw-trip text-trip] [%raw-tuba text-tuba]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
1148211660::
1148311661++ infer-private-internal
1148411662 |= [src=@t public-source=@t]
@@ -14561,7 +14739,7 @@
1456114739 ?: =(0 fuel) ~
1456214740 =. fuel (dec fuel)
1456314741 =/ t=itype i.todo
14564− ?: ?=(?(%var %avar %rvar %nvar %rnvar %tag) -.t)
14742+ ?: ?=(?(%var %fvar %avar %rvar %nvar %rnvar %tag) -.t)
1456514743 =/ node-id=@ud ?:(?=(%tag -.t) id.t +.t)
1456614744 =/ found=(unit itype) (itype-lookup node-id sub)
1456714745 ?~ found $(todo t.todo, ids [node-id ids])
jibb-dev/lib/jibb/internal.jibb+1
@@ -9,6 +9,7 @@
99
1010:: The compiler supplies this private interface; execution is not yet implemented.
1111++ gth-atom |= args=[A A] (raw-gth.core args)
12+++ eq-data |= args=[A A] (raw-eq.core args)
1213
1314:: Application paths are knot sequences.
1415+$ qath
jibb-dev/lib/jibb/prelude.jibb+15
@@ -19,6 +19,8 @@
1919 %.y %.n
2020 %.n %.y
2121
22+++ eq |= args=[A A] (eq-data.internal args)
23+
2224+$ list |$ [A]
2325 ~
2426 [i=A t=(list A)]
@@ -211,6 +213,19 @@
211213 %.y first
212214 %.n second
213215
216+++ mate |= args=[(unit A) (unit A)]
217+ ?- args
218+ [first second] ^- (unit A)
219+ ?- second
220+ ~ first
221+ [~ b]
222+ ?- first
223+ ~ second
224+ [~ a]
225+ ?- (eq a b)
226+ %.y first
227+ %.n !!
228+
214229++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
215230 ?- args
216231 [first second combine] ^- (unit C)
tests/golden/prelude-unit-list-transforms/about.txt+2−2
@@ -1,4 +1,4 @@
1−source: Overview, Prelude: "The exported inventory includes all names from the Hoon library sections listed below, excluding the groups explicitly left out"; Hoon 2a includes `drop`, `bind`, `biff`, `flit`, `both`, `clap`, `clef` and `hunt`, and 2b includes `join`, `murn`, `rear`, `snip`, `skim`, `skip`, `levy`, `lien`, `roll` and `reel`. Folds take an explicit start.
2−tests: The complete current prelude parses, including unit-to-list conversion, unit mapping and flat mapping, a curried unit-producing filter, three ways to combine units, including `clap` with one shared value type, and `hunt` with its ordering gate first, complementary list filters, present-product mapping, joining, last-item operations, all/any predicates, and left and right folds. The filters retain the order of their selected items. It also includes the source-backed `ask` re-export and `pure` gate.
1+source: Overview, Prelude: "The exported inventory includes all names from the Hoon library sections listed below, excluding the groups explicitly left out"; Hoon 2a includes `drop`, `bind`, `biff`, `flit`, `both`, `clap`, `clef`, `hunt` and `mate`, and 2b includes `join`, `murn`, `rear`, `snip`, `skim`, `skip`, `levy`, `lien`, `roll` and `reel`. Folds take an explicit start.
2+tests: The complete current prelude parses, including unit-to-list conversion, unit mapping and flat mapping, a curried unit-producing filter, several ways to combine units, including `clap` with one shared value type, and `hunt` with its ordering gate first, complementary list filters, present-product mapping, joining, last-item operations, all/any predicates, and left and right folds. The filters retain the order of their selected items. It also includes `eq` with its generalized gate-free constraint and the source-backed `ask` re-export and `pure` gate.
33expect: parses
44expect-types: a partial inference report, not a checked module; unit and list gate typing is not complete
tests/golden/prelude-unit-list-transforms/source.jibb+15
@@ -19,6 +19,8 @@
1919 %.y %.n
2020 %.n %.y
2121
22+++ eq |= args=[A A] (eq-data.internal args)
23+
2224+$ list |$ [A]
2325 ~
2426 [i=A t=(list A)]
@@ -211,6 +213,19 @@
211213 %.y first
212214 %.n second
213215
216+++ mate |= args=[(unit A) (unit A)]
217+ ?- args
218+ [first second] ^- (unit A)
219+ ?- second
220+ ~ first
221+ [~ b]
222+ ?- first
223+ ~ second
224+ [~ a]
225+ ?- (eq a b)
226+ %.y first
227+ %.n !!
228+
214229++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
215230 ?- args
216231 [first second combine] ^- (unit C)
tests/golden/prelude-unit-list-transforms/tokens.txt+2204−2118
@@ -83,2232 +83,2318 @@
838322:1 DEDENT
848422:1 DEDENT
858522:1 NEWLINE
86−22:1 glyph +$
87−22:4 name list
88−22:9 glyph |$
89−22:12 glyph [
90−22:13 tight tvar A
91−22:14 tight glyph ]
92−23:3 INDENT
93−23:3 lit ~
94−24:3 NEWLINE
95−24:3 glyph [
96−24:4 tight name i
97−24:5 tight glyph =
98−24:6 tight tvar A
99−24:8 name t
100−24:9 tight glyph =
101−24:10 tight glyph (
102−24:11 tight name list
103−24:16 tvar A
104−24:17 tight glyph )
105−24:18 tight glyph ]
106−26:1 DEDENT
107−26:1 NEWLINE
108−26:1 glyph +$
109−26:4 name unit
110−26:9 glyph |$
111−26:12 glyph [
112−26:13 tight tvar A
113−26:14 tight glyph ]
114−27:3 INDENT
115−27:3 lit ~
116−28:3 NEWLINE
117−28:3 glyph [
118−28:4 tight lit ~
119−28:6 name u
120−28:7 tight glyph =
121−28:8 tight tvar A
122−28:9 tight glyph ]
123−30:1 DEDENT
124−30:1 NEWLINE
125−30:1 glyph ++
126−30:4 name fall
127−30:9 glyph |=
128−30:12 name args
129−30:16 tight glyph =
130−30:17 tight glyph [
131−30:18 tight glyph (
132−30:19 tight name unit
133−30:24 tvar A
134−30:25 tight glyph )
135−30:27 tvar A
136−30:28 tight glyph ]
137−31:3 INDENT
138−31:3 glyph ?-
139−31:6 name args
140−32:5 INDENT
141−32:5 glyph [
142−32:6 tight name maybe
143−32:12 name fallback
144−32:20 tight glyph ]
145−33:7 INDENT
146−33:7 glyph ?-
147−33:10 name maybe
148−34:9 INDENT
149−34:9 lit ~
150−34:11 name fallback
151−35:9 NEWLINE
152−35:9 glyph [
153−35:10 tight lit ~
154−35:12 name value
155−35:17 tight glyph ]
156−35:19 name value
157−37:1 DEDENT
158−37:1 DEDENT
159−37:1 DEDENT
160−37:1 DEDENT
161−37:1 NEWLINE
162−37:1 glyph ++
163−37:4 name need
164−37:9 glyph |=
165−37:12 name maybe
166−37:17 tight glyph =
167−37:18 tight glyph (
168−37:19 tight name unit
169−37:24 tvar A
170−37:25 tight glyph )
171−38:3 INDENT
172−38:3 glyph ?-
173−38:6 name maybe
174−39:5 INDENT
175−39:5 lit ~
176−39:7 glyph !!
177−40:5 NEWLINE
178−40:5 glyph [
179−40:6 tight lit ~
180−40:8 name value
181−40:13 tight glyph ]
182−40:15 name value
183−42:1 DEDENT
184−42:1 DEDENT
185−42:1 NEWLINE
186−42:1 glyph ++
187−42:4 name weld
188−42:9 glyph |=
189−42:12 name args
190−42:16 tight glyph =
191−42:17 tight glyph [
192−42:18 tight glyph (
193−42:19 tight name list
194−42:24 tvar A
195−42:25 tight glyph )
196−42:27 glyph (
197−42:28 tight name list
198−42:33 tvar A
199−42:34 tight glyph )
200−42:35 tight glyph ]
201−43:3 INDENT
202−43:3 glyph ?-
203−43:6 name args
204−44:5 INDENT
205−44:5 glyph [
206−44:6 tight name xs
207−44:9 name ys
208−44:11 tight glyph ]
209−45:7 INDENT
210−45:7 glyph ^-
211−45:10 glyph (
212−45:11 tight name list
213−45:16 tvar A
214−45:17 tight glyph )
215−46:9 INDENT
216−46:9 glyph ?-
217−46:12 name xs
218−47:11 INDENT
219−47:11 lit ~
220−47:13 name ys
221−48:11 NEWLINE
222−48:11 glyph [
223−48:12 tight name item
224−48:17 name rest
225−48:21 tight glyph ]
226−48:23 glyph [
227−48:24 tight name item
228−48:29 glyph (
229−48:30 tight name weld
230−48:35 name rest
231−48:40 name ys
232−48:42 tight glyph )
233−48:43 tight glyph ]
234−50:1 DEDENT
235−50:1 DEDENT
236−50:1 DEDENT
237−50:1 DEDENT
238−50:1 DEDENT
239−50:1 NEWLINE
240−50:1 glyph ++
241−50:4 name turn
242−50:9 glyph |=
243−50:12 name args
244−50:16 tight glyph =
245−50:17 tight glyph [
246−50:18 tight glyph (
247−50:19 tight name list
248−50:24 tvar A
249−50:25 tight glyph )
250−50:27 glyph $-(
251−50:30 tight tvar A
252−50:32 tvar B
253−50:33 tight glyph )
254−50:34 tight glyph ]
255−51:3 INDENT
256−51:3 glyph ?-
257−51:6 name args
258−52:5 INDENT
259−52:5 glyph [
260−52:6 tight name xs
261−52:9 name f
262−52:10 tight glyph ]
263−53:7 INDENT
264−53:7 glyph ^-
265−53:10 glyph (
266−53:11 tight name list
267−53:16 tvar B
268−53:17 tight glyph )
269−54:9 INDENT
270−54:9 glyph ?-
271−54:12 name xs
272−55:11 INDENT
273−55:11 lit ~
274−55:13 lit ~
275−56:11 NEWLINE
276−56:11 glyph [
277−56:12 tight name item
278−56:17 name rest
279−56:21 tight glyph ]
280−56:23 glyph [
281−56:24 tight glyph (
282−56:25 tight name f
283−56:27 name item
284−56:31 tight glyph )
285−56:33 glyph (
286−56:34 tight name turn
287−56:39 name rest
288−56:44 name f
289−56:45 tight glyph )
290−56:46 tight glyph ]
291−58:1 DEDENT
292−58:1 DEDENT
293−58:1 DEDENT
294−58:1 DEDENT
295−58:1 DEDENT
296−58:1 NEWLINE
297−58:1 glyph +$
298−58:4 name dime
299−58:9 glyph [
300−58:10 tight name p
301−58:11 tight glyph =
302−58:12 tight aura @ta
303−58:16 name q
304−58:17 tight glyph =
305−58:18 tight aura @
306−58:19 tight glyph ]
86+22:1 glyph ++
87+22:4 name eq
88+22:7 glyph |=
89+22:10 name args
90+22:14 tight glyph =
91+22:15 tight glyph [
92+22:16 tight tvar A
93+22:18 tvar A
94+22:19 tight glyph ]
95+22:21 glyph (
96+22:22 tight wing eq-data.internal
97+22:39 name args
98+22:43 tight glyph )
99+24:1 NEWLINE
100+24:1 glyph +$
101+24:4 name list
102+24:9 glyph |$
103+24:12 glyph [
104+24:13 tight tvar A
105+24:14 tight glyph ]
106+25:3 INDENT
107+25:3 lit ~
108+26:3 NEWLINE
109+26:3 glyph [
110+26:4 tight name i
111+26:5 tight glyph =
112+26:6 tight tvar A
113+26:8 name t
114+26:9 tight glyph =
115+26:10 tight glyph (
116+26:11 tight name list
117+26:16 tvar A
118+26:17 tight glyph )
119+26:18 tight glyph ]
120+28:1 DEDENT
121+28:1 NEWLINE
122+28:1 glyph +$
123+28:4 name unit
124+28:9 glyph |$
125+28:12 glyph [
126+28:13 tight tvar A
127+28:14 tight glyph ]
128+29:3 INDENT
129+29:3 lit ~
130+30:3 NEWLINE
131+30:3 glyph [
132+30:4 tight lit ~
133+30:6 name u
134+30:7 tight glyph =
135+30:8 tight tvar A
136+30:9 tight glyph ]
137+32:1 DEDENT
138+32:1 NEWLINE
139+32:1 glyph ++
140+32:4 name fall
141+32:9 glyph |=
142+32:12 name args
143+32:16 tight glyph =
144+32:17 tight glyph [
145+32:18 tight glyph (
146+32:19 tight name unit
147+32:24 tvar A
148+32:25 tight glyph )
149+32:27 tvar A
150+32:28 tight glyph ]
151+33:3 INDENT
152+33:3 glyph ?-
153+33:6 name args
154+34:5 INDENT
155+34:5 glyph [
156+34:6 tight name maybe
157+34:12 name fallback
158+34:20 tight glyph ]
159+35:7 INDENT
160+35:7 glyph ?-
161+35:10 name maybe
162+36:9 INDENT
163+36:9 lit ~
164+36:11 name fallback
165+37:9 NEWLINE
166+37:9 glyph [
167+37:10 tight lit ~
168+37:12 name value
169+37:17 tight glyph ]
170+37:19 name value
171+39:1 DEDENT
172+39:1 DEDENT
173+39:1 DEDENT
174+39:1 DEDENT
175+39:1 NEWLINE
176+39:1 glyph ++
177+39:4 name need
178+39:9 glyph |=
179+39:12 name maybe
180+39:17 tight glyph =
181+39:18 tight glyph (
182+39:19 tight name unit
183+39:24 tvar A
184+39:25 tight glyph )
185+40:3 INDENT
186+40:3 glyph ?-
187+40:6 name maybe
188+41:5 INDENT
189+41:5 lit ~
190+41:7 glyph !!
191+42:5 NEWLINE
192+42:5 glyph [
193+42:6 tight lit ~
194+42:8 name value
195+42:13 tight glyph ]
196+42:15 name value
197+44:1 DEDENT
198+44:1 DEDENT
199+44:1 NEWLINE
200+44:1 glyph ++
201+44:4 name weld
202+44:9 glyph |=
203+44:12 name args
204+44:16 tight glyph =
205+44:17 tight glyph [
206+44:18 tight glyph (
207+44:19 tight name list
208+44:24 tvar A
209+44:25 tight glyph )
210+44:27 glyph (
211+44:28 tight name list
212+44:33 tvar A
213+44:34 tight glyph )
214+44:35 tight glyph ]
215+45:3 INDENT
216+45:3 glyph ?-
217+45:6 name args
218+46:5 INDENT
219+46:5 glyph [
220+46:6 tight name xs
221+46:9 name ys
222+46:11 tight glyph ]
223+47:7 INDENT
224+47:7 glyph ^-
225+47:10 glyph (
226+47:11 tight name list
227+47:16 tvar A
228+47:17 tight glyph )
229+48:9 INDENT
230+48:9 glyph ?-
231+48:12 name xs
232+49:11 INDENT
233+49:11 lit ~
234+49:13 name ys
235+50:11 NEWLINE
236+50:11 glyph [
237+50:12 tight name item
238+50:17 name rest
239+50:21 tight glyph ]
240+50:23 glyph [
241+50:24 tight name item
242+50:29 glyph (
243+50:30 tight name weld
244+50:35 name rest
245+50:40 name ys
246+50:42 tight glyph )
247+50:43 tight glyph ]
248+52:1 DEDENT
249+52:1 DEDENT
250+52:1 DEDENT
251+52:1 DEDENT
252+52:1 DEDENT
253+52:1 NEWLINE
254+52:1 glyph ++
255+52:4 name turn
256+52:9 glyph |=
257+52:12 name args
258+52:16 tight glyph =
259+52:17 tight glyph [
260+52:18 tight glyph (
261+52:19 tight name list
262+52:24 tvar A
263+52:25 tight glyph )
264+52:27 glyph $-(
265+52:30 tight tvar A
266+52:32 tvar B
267+52:33 tight glyph )
268+52:34 tight glyph ]
269+53:3 INDENT
270+53:3 glyph ?-
271+53:6 name args
272+54:5 INDENT
273+54:5 glyph [
274+54:6 tight name xs
275+54:9 name f
276+54:10 tight glyph ]
277+55:7 INDENT
278+55:7 glyph ^-
279+55:10 glyph (
280+55:11 tight name list
281+55:16 tvar B
282+55:17 tight glyph )
283+56:9 INDENT
284+56:9 glyph ?-
285+56:12 name xs
286+57:11 INDENT
287+57:11 lit ~
288+57:13 lit ~
289+58:11 NEWLINE
290+58:11 glyph [
291+58:12 tight name item
292+58:17 name rest
293+58:21 tight glyph ]
294+58:23 glyph [
295+58:24 tight glyph (
296+58:25 tight name f
297+58:27 name item
298+58:31 tight glyph )
299+58:33 glyph (
300+58:34 tight name turn
301+58:39 name rest
302+58:44 name f
303+58:45 tight glyph )
304+58:46 tight glyph ]
305+60:1 DEDENT
306+60:1 DEDENT
307+60:1 DEDENT
308+60:1 DEDENT
309+60:1 DEDENT
30731060:1 NEWLINE
30831160:1 glyph +$
309−60:4 name hair
312+60:4 name dime
31031360:9 glyph [
31131460:10 tight name p
31231560:11 tight glyph =
313−60:12 tight aura @ud
316+60:12 tight aura @ta
31431760:16 name q
31531860:17 tight glyph =
316−60:18 tight aura @ud
317−60:21 tight glyph ]
319+60:18 tight aura @
320+60:19 tight glyph ]
31832162:1 NEWLINE
31932262:1 glyph +$
320−62:4 name pint
323+62:4 name hair
32132462:9 glyph [
32232562:10 tight name p
32332662:11 tight glyph =
324−62:12 tight glyph [
325−62:13 tight name p
326−62:14 tight glyph =
327−62:15 tight aura @
328−62:17 name q
329−62:18 tight glyph =
330−62:19 tight aura @
331−62:20 tight glyph ]
332−62:22 name q
333−62:23 tight glyph =
334−62:24 tight glyph [
335−62:25 tight name p
336−62:26 tight glyph =
337−62:27 tight aura @
338−62:29 name q
339−62:30 tight glyph =
340−62:31 tight aura @
341−62:32 tight glyph ]
342−62:33 tight glyph ]
327+62:12 tight aura @ud
328+62:16 name q
329+62:17 tight glyph =
330+62:18 tight aura @ud
331+62:21 tight glyph ]
34333264:1 NEWLINE
34433364:1 glyph +$
345−64:4 name coin
346−65:3 INDENT
347−65:3 glyph [
348−65:4 tight lit %$
349−65:7 name p
350−65:8 tight glyph =
351−65:9 tight name dime
352−65:13 tight glyph ]
353−66:3 NEWLINE
354−66:3 glyph [
355−66:4 tight lit %blob
356−66:10 name p
357−66:11 tight glyph =
358−66:12 tight glyph *
359−66:13 tight glyph ]
360−67:3 NEWLINE
334+64:4 name pint
335+64:9 glyph [
336+64:10 tight name p
337+64:11 tight glyph =
338+64:12 tight glyph [
339+64:13 tight name p
340+64:14 tight glyph =
341+64:15 tight aura @
342+64:17 name q
343+64:18 tight glyph =
344+64:19 tight aura @
345+64:20 tight glyph ]
346+64:22 name q
347+64:23 tight glyph =
348+64:24 tight glyph [
349+64:25 tight name p
350+64:26 tight glyph =
351+64:27 tight aura @
352+64:29 name q
353+64:30 tight glyph =
354+64:31 tight aura @
355+64:32 tight glyph ]
356+64:33 tight glyph ]
357+66:1 NEWLINE
358+66:1 glyph +$
359+66:4 name coin
360+67:3 INDENT
36136167:3 glyph [
362−67:4 tight lit %many
363−67:10 name p
364−67:11 tight glyph =
365−67:12 tight glyph (
366−67:13 tight name list
367−67:18 name coin
368−67:22 tight glyph )
369−67:23 tight glyph ]
370−69:1 DEDENT
371−69:1 NEWLINE
372−69:1 glyph +$
373−69:4 name pair
374−69:9 glyph |$
375−69:12 glyph [
376−69:13 tight tvar A
377−69:15 tvar B
378−69:16 tight glyph ]
379−69:18 glyph [
380−69:19 tight name p
381−69:20 tight glyph =
382−69:21 tight tvar A
383−69:23 name q
384−69:24 tight glyph =
385−69:25 tight tvar B
386−69:26 tight glyph ]
362+67:4 tight lit %$
363+67:7 name p
364+67:8 tight glyph =
365+67:9 tight name dime
366+67:13 tight glyph ]
367+68:3 NEWLINE
368+68:3 glyph [
369+68:4 tight lit %blob
370+68:10 name p
371+68:11 tight glyph =
372+68:12 tight glyph *
373+68:13 tight glyph ]
374+69:3 NEWLINE
375+69:3 glyph [
376+69:4 tight lit %many
377+69:10 name p
378+69:11 tight glyph =
379+69:12 tight glyph (
380+69:13 tight name list
381+69:18 name coin
382+69:22 tight glyph )
383+69:23 tight glyph ]
384+71:1 DEDENT
38738571:1 NEWLINE
38838671:1 glyph +$
389−71:4 name trel
387+71:4 name pair
39038871:9 glyph |$
39138971:12 glyph [
39239071:13 tight tvar A
39339171:15 tvar B
394−71:17 tvar C
395−71:18 tight glyph ]
396−71:20 glyph [
397−71:21 tight name p
398−71:22 tight glyph =
399−71:23 tight tvar A
400−71:25 name q
401−71:26 tight glyph =
402−71:27 tight tvar B
403−71:29 name r
404−71:30 tight glyph =
405−71:31 tight tvar C
406−71:32 tight glyph ]
392+71:16 tight glyph ]
393+71:18 glyph [
394+71:19 tight name p
395+71:20 tight glyph =
396+71:21 tight tvar A
397+71:23 name q
398+71:24 tight glyph =
399+71:25 tight tvar B
400+71:26 tight glyph ]
40740173:1 NEWLINE
40840273:1 glyph +$
409−73:4 name qual
403+73:4 name trel
41040473:9 glyph |$
41140573:12 glyph [
41240673:13 tight tvar A
41340773:15 tvar B
41440873:17 tvar C
415−73:19 tvar D
416−73:20 tight glyph ]
417−73:22 glyph [
418−73:23 tight name p
419−73:24 tight glyph =
420−73:25 tight tvar A
421−73:27 name q
422−73:28 tight glyph =
423−73:29 tight tvar B
424−73:31 name r
425−73:32 tight glyph =
426−73:33 tight tvar C
427−73:35 name s
428−73:36 tight glyph =
429−73:37 tight tvar D
430−73:38 tight glyph ]
409+73:18 tight glyph ]
410+73:20 glyph [
411+73:21 tight name p
412+73:22 tight glyph =
413+73:23 tight tvar A
414+73:25 name q
415+73:26 tight glyph =
416+73:27 tight tvar B
417+73:29 name r
418+73:30 tight glyph =
419+73:31 tight tvar C
420+73:32 tight glyph ]
43142175:1 NEWLINE
43242275:1 glyph +$
433−75:4 name cord
434−75:9 aura @t
423+75:4 name qual
424+75:9 glyph |$
425+75:12 glyph [
426+75:13 tight tvar A
427+75:15 tvar B
428+75:17 tvar C
429+75:19 tvar D
430+75:20 tight glyph ]
431+75:22 glyph [
432+75:23 tight name p
433+75:24 tight glyph =
434+75:25 tight tvar A
435+75:27 name q
436+75:28 tight glyph =
437+75:29 tight tvar B
438+75:31 name r
439+75:32 tight glyph =
440+75:33 tight tvar C
441+75:35 name s
442+75:36 tight glyph =
443+75:37 tight tvar D
444+75:38 tight glyph ]
43544577:1 NEWLINE
43644677:1 glyph +$
437−77:4 name knot
438−77:9 aura @ta
447+77:4 name cord
448+77:9 aura @t
43944979:1 NEWLINE
44045079:1 glyph +$
441−79:4 name tape
442−79:9 glyph (
443−79:10 tight name list
444−79:15 aura @tD
445−79:18 tight glyph )
451+79:4 name knot
452+79:9 aura @ta
44645381:1 NEWLINE
44745481:1 glyph +$
448−81:4 name path
455+81:4 name tape
44945681:9 glyph (
45045781:10 tight name list
451−81:15 name knot
452−81:19 tight glyph )
458+81:15 aura @tD
459+81:18 tight glyph )
45346083:1 NEWLINE
45446183:1 glyph +$
455−83:4 name tank
456−84:3 INDENT
457−84:3 name cord
458−85:3 NEWLINE
459−85:3 glyph [
460−85:4 tight lit %leaf
461−85:10 name p
462−85:11 tight glyph =
463−85:12 tight name tape
464−85:16 tight glyph ]
465−86:3 NEWLINE
466−86:3 glyph [
467−86:4 tight lit %palm
468−86:10 name p
469−86:11 tight glyph =
470−86:12 tight glyph (
471−86:13 tight name qual
472−86:18 name tape
473−86:23 name tape
474−86:28 name tape
475−86:33 name tape
476−86:37 tight glyph )
477−86:39 name q
478−86:40 tight glyph =
479−86:41 tight glyph (
480−86:42 tight name list
481−86:47 name tank
482−86:51 tight glyph )
483−86:52 tight glyph ]
462+83:4 name path
463+83:9 glyph (
464+83:10 tight name list
465+83:15 name knot
466+83:19 tight glyph )
467+85:1 NEWLINE
468+85:1 glyph +$
469+85:4 name tank
470+86:3 INDENT
471+86:3 name cord
48447287:3 NEWLINE
48547387:3 glyph [
486−87:4 tight lit %rose
474+87:4 tight lit %leaf
48747587:10 name p
48847687:11 tight glyph =
489−87:12 tight glyph (
490−87:13 tight name trel
491−87:18 name tape
492−87:23 name tape
493−87:28 name tape
494−87:32 tight glyph )
495−87:34 name q
496−87:35 tight glyph =
497−87:36 tight glyph (
498−87:37 tight name list
499−87:42 name tank
500−87:46 tight glyph )
501−87:47 tight glyph ]
502−89:1 DEDENT
503−89:1 NEWLINE
504−89:1 glyph +$
505−89:4 name nail
506−89:9 glyph [
507−89:10 tight name p
477+87:12 tight name tape
478+87:16 tight glyph ]
479+88:3 NEWLINE
480+88:3 glyph [
481+88:4 tight lit %palm
482+88:10 name p
483+88:11 tight glyph =
484+88:12 tight glyph (
485+88:13 tight name qual
486+88:18 name tape
487+88:23 name tape
488+88:28 name tape
489+88:33 name tape
490+88:37 tight glyph )
491+88:39 name q
492+88:40 tight glyph =
493+88:41 tight glyph (
494+88:42 tight name list
495+88:47 name tank
496+88:51 tight glyph )
497+88:52 tight glyph ]
498+89:3 NEWLINE
499+89:3 glyph [
500+89:4 tight lit %rose
501+89:10 name p
50850289:11 tight glyph =
509−89:12 tight name hair
510−89:17 name q
511−89:18 tight glyph =
512−89:19 tight name tape
513−89:23 tight glyph ]
503+89:12 tight glyph (
504+89:13 tight name trel
505+89:18 name tape
506+89:23 name tape
507+89:28 name tape
508+89:32 tight glyph )
509+89:34 name q
510+89:35 tight glyph =
511+89:36 tight glyph (
512+89:37 tight name list
513+89:42 name tank
514+89:46 tight glyph )
515+89:47 tight glyph ]
516+91:1 DEDENT
51451791:1 NEWLINE
51551891:1 glyph +$
516−91:4 name edge
519+91:4 name nail
51752091:9 glyph [
51852191:10 tight name p
51952291:11 tight glyph =
52052391:12 tight name hair
52152491:17 name q
52252591:18 tight glyph =
523−91:19 tight glyph (
524−91:20 tight name unit
525−91:25 glyph [
526−91:26 tight name p
527−91:27 tight glyph =
528−91:28 tight glyph *
529−91:30 name q
530−91:31 tight glyph =
531−91:32 tight name nail
532−91:36 tight glyph ]
533−91:37 tight glyph )
534−91:38 tight glyph ]
526+91:19 tight name tape
527+91:23 tight glyph ]
53552893:1 NEWLINE
53652993:1 glyph +$
537−93:4 name rule
538−93:9 glyph $-(
539−93:12 tight name nail
540−93:17 name edge
541−93:21 tight glyph )
530+93:4 name edge
531+93:9 glyph [
532+93:10 tight name p
533+93:11 tight glyph =
534+93:12 tight name hair
535+93:17 name q
536+93:18 tight glyph =
537+93:19 tight glyph (
538+93:20 tight name unit
539+93:25 glyph [
540+93:26 tight name p
541+93:27 tight glyph =
542+93:28 tight glyph *
543+93:30 name q
544+93:31 tight glyph =
545+93:32 tight name nail
546+93:36 tight glyph ]
547+93:37 tight glyph )
548+93:38 tight glyph ]
54254995:1 NEWLINE
54355095:1 glyph +$
544−95:4 name spot
545−95:9 glyph [
546−95:10 tight name p
547−95:11 tight glyph =
548−95:12 tight name path
549−95:17 name q
550−95:18 tight glyph =
551−95:19 tight name pint
552−95:23 tight glyph ]
551+95:4 name rule
552+95:9 glyph $-(
553+95:12 tight name nail
554+95:17 name edge
555+95:21 tight glyph )
55355697:1 NEWLINE
55455797:1 glyph +$
555−97:4 name toon
556−98:3 INDENT
557−98:3 glyph [
558−98:4 tight lit %0
559−98:7 name p
560−98:8 tight glyph =
561−98:9 tight glyph *
562−98:10 tight glyph ]
563−99:3 NEWLINE
564−99:3 glyph [
565−99:4 tight lit %1
566−99:7 name p
567−99:8 tight glyph =
568−99:9 tight glyph *
569−99:10 tight glyph ]
570−100:3 NEWLINE
558+97:4 name spot
559+97:9 glyph [
560+97:10 tight name p
561+97:11 tight glyph =
562+97:12 tight name path
563+97:17 name q
564+97:18 tight glyph =
565+97:19 tight name pint
566+97:23 tight glyph ]
567+99:1 NEWLINE
568+99:1 glyph +$
569+99:4 name toon
570+100:3 INDENT
571571100:3 glyph [
572−100:4 tight lit %2
572+100:4 tight lit %0
573573100:7 name p
574574100:8 tight glyph =
575−100:9 tight glyph (
576−100:10 tight name list
577−100:15 name tank
578−100:19 tight glyph )
579−100:20 tight glyph ]
580−102:1 DEDENT
581−102:1 NEWLINE
582−102:1 glyph +$
583−102:4 name like
584−102:9 glyph |$
585−102:12 glyph [
586−102:13 tight tvar A
587−102:14 tight glyph ]
588−102:16 glyph [
589−102:17 tight name p
590−102:18 tight glyph =
591−102:19 tight name hair
592−102:24 name q
593−102:25 tight glyph =
594−102:26 tight glyph (
595−102:27 tight name unit
596−102:32 glyph [
597−102:33 tight name p
598−102:34 tight glyph =
599−102:35 tight tvar A
600−102:37 name q
601−102:38 tight glyph =
602−102:39 tight name nail
603−102:43 tight glyph ]
604−102:44 tight glyph )
605−102:45 tight glyph ]
575+100:9 tight glyph *
576+100:10 tight glyph ]
577+101:3 NEWLINE
578+101:3 glyph [
579+101:4 tight lit %1
580+101:7 name p
581+101:8 tight glyph =
582+101:9 tight glyph *
583+101:10 tight glyph ]
584+102:3 NEWLINE
585+102:3 glyph [
586+102:4 tight lit %2
587+102:7 name p
588+102:8 tight glyph =
589+102:9 tight glyph (
590+102:10 tight name list
591+102:15 name tank
592+102:19 tight glyph )
593+102:20 tight glyph ]
594+104:1 DEDENT
606595104:1 NEWLINE
607−104:1 glyph ++
596+104:1 glyph +$
608597104:4 name like
609−104:9 glyph |=
598+104:9 glyph |$
610599104:12 glyph [
611−104:13 tight name f
612−104:14 tight glyph =
613−104:15 tight glyph $-(
614−104:18 tight tvar A
615−104:20 tvar B
616−104:21 tight glyph )
617−104:23 name result
618−104:29 tight glyph =
619−104:30 tight glyph (
620−104:31 tight name like
621−104:36 tvar A
622−104:37 tight glyph )
623−104:38 tight glyph ]
624−105:3 INDENT
625−105:3 glyph ++
626−105:6 name mapped
627−106:5 INDENT
628−106:5 glyph ^-
629−106:8 glyph (
630−106:9 tight name unit
631−106:14 glyph [
632−106:15 tight name p
633−106:16 tight glyph =
634−106:17 tight tvar B
635−106:19 name q
636−106:20 tight glyph =
637−106:21 tight name nail
638−106:25 tight glyph ]
639−106:26 tight glyph )
640−107:7 INDENT
641−107:7 glyph ?-
642−107:10 wing q.result
643−108:9 INDENT
644−108:9 lit ~
645−108:11 lit ~
646−109:9 NEWLINE
647−109:9 glyph [
648−109:10 tight lit ~
649−109:12 name value
650−109:17 tight glyph ]
651−109:19 glyph `
652−109:20 tight glyph [
653−109:21 tight name p
654−109:22 tight glyph =
655−109:23 tight glyph (
656−109:24 tight name f
657−109:26 wing p.value
658−109:33 tight glyph )
659−109:35 name q
660−109:36 tight glyph =
661−109:37 tight wing q.value
662−109:44 tight glyph ]
663−110:3 DEDENT
664−110:3 DEDENT
665−110:3 DEDENT
666−110:3 NEWLINE
667−110:3 glyph ^-
668−110:6 glyph (
669−110:7 tight name like
670−110:12 tvar B
671−110:13 tight glyph )
672−110:15 glyph [
673−110:16 tight name p
674−110:17 tight glyph =
675−110:18 tight wing p.result
676−110:27 name q
677−110:28 tight glyph =
678−110:29 tight name mapped
679−110:35 tight glyph ]
680−112:1 DEDENT
681−112:1 NEWLINE
682−112:1 glyph ++
683−112:4 name wonk
684−112:9 glyph |=
685−112:12 name veq
686−112:15 tight glyph =
687−112:16 tight glyph (
688−112:17 tight name like
689−112:22 tvar A
690−112:23 tight glyph )
691−113:3 INDENT
692−113:3 glyph ?-
693−113:6 wing q.veq
694−114:5 INDENT
695−114:5 lit ~
696−114:7 glyph !!
697−115:5 NEWLINE
698−115:5 glyph [
699−115:6 tight lit ~
700−115:8 name product
701−115:15 tight glyph ]
702−115:17 wing p.product
703−117:1 DEDENT
704−117:1 DEDENT
705−117:1 NEWLINE
706−117:1 glyph +$
707−117:4 name lone
708−117:9 glyph |$
709−117:12 glyph [
710−117:13 tight tvar A
711−117:14 tight glyph ]
712−117:16 glyph [
713−117:17 tight name p
714−117:18 tight glyph =
715−117:19 tight tvar A
716−117:20 tight glyph ]
600+104:13 tight tvar A
601+104:14 tight glyph ]
602+104:16 glyph [
603+104:17 tight name p
604+104:18 tight glyph =
605+104:19 tight name hair
606+104:24 name q
607+104:25 tight glyph =
608+104:26 tight glyph (
609+104:27 tight name unit
610+104:32 glyph [
611+104:33 tight name p
612+104:34 tight glyph =
613+104:35 tight tvar A
614+104:37 name q
615+104:38 tight glyph =
616+104:39 tight name nail
617+104:43 tight glyph ]
618+104:44 tight glyph )
619+104:45 tight glyph ]
620+106:1 NEWLINE
621+106:1 glyph ++
622+106:4 name like
623+106:9 glyph |=
624+106:12 glyph [
625+106:13 tight name f
626+106:14 tight glyph =
627+106:15 tight glyph $-(
628+106:18 tight tvar A
629+106:20 tvar B
630+106:21 tight glyph )
631+106:23 name result
632+106:29 tight glyph =
633+106:30 tight glyph (
634+106:31 tight name like
635+106:36 tvar A
636+106:37 tight glyph )
637+106:38 tight glyph ]
638+107:3 INDENT
639+107:3 glyph ++
640+107:6 name mapped
641+108:5 INDENT
642+108:5 glyph ^-
643+108:8 glyph (
644+108:9 tight name unit
645+108:14 glyph [
646+108:15 tight name p
647+108:16 tight glyph =
648+108:17 tight tvar B
649+108:19 name q
650+108:20 tight glyph =
651+108:21 tight name nail
652+108:25 tight glyph ]
653+108:26 tight glyph )
654+109:7 INDENT
655+109:7 glyph ?-
656+109:10 wing q.result
657+110:9 INDENT
658+110:9 lit ~
659+110:11 lit ~
660+111:9 NEWLINE
661+111:9 glyph [
662+111:10 tight lit ~
663+111:12 name value
664+111:17 tight glyph ]
665+111:19 glyph `
666+111:20 tight glyph [
667+111:21 tight name p
668+111:22 tight glyph =
669+111:23 tight glyph (
670+111:24 tight name f
671+111:26 wing p.value
672+111:33 tight glyph )
673+111:35 name q
674+111:36 tight glyph =
675+111:37 tight wing q.value
676+111:44 tight glyph ]
677+112:3 DEDENT
678+112:3 DEDENT
679+112:3 DEDENT
680+112:3 NEWLINE
681+112:3 glyph ^-
682+112:6 glyph (
683+112:7 tight name like
684+112:12 tvar B
685+112:13 tight glyph )
686+112:15 glyph [
687+112:16 tight name p
688+112:17 tight glyph =
689+112:18 tight wing p.result
690+112:27 name q
691+112:28 tight glyph =
692+112:29 tight name mapped
693+112:35 tight glyph ]
694+114:1 DEDENT
695+114:1 NEWLINE
696+114:1 glyph ++
697+114:4 name wonk
698+114:9 glyph |=
699+114:12 name veq
700+114:15 tight glyph =
701+114:16 tight glyph (
702+114:17 tight name like
703+114:22 tvar A
704+114:23 tight glyph )
705+115:3 INDENT
706+115:3 glyph ?-
707+115:6 wing q.veq
708+116:5 INDENT
709+116:5 lit ~
710+116:7 glyph !!
711+117:5 NEWLINE
712+117:5 glyph [
713+117:6 tight lit ~
714+117:8 name product
715+117:15 tight glyph ]
716+117:17 wing p.product
717+119:1 DEDENT
718+119:1 DEDENT
717719119:1 NEWLINE
718720119:1 glyph +$
719−119:4 name lest
721+119:4 name lone
720722119:9 glyph |$
721723119:12 glyph [
722724119:13 tight tvar A
723725119:14 tight glyph ]
724726119:16 glyph [
725−119:17 tight name i
727+119:17 tight name p
726728119:18 tight glyph =
727729119:19 tight tvar A
728−119:21 name t
729−119:22 tight glyph =
730−119:23 tight glyph (
731−119:24 tight name list
732−119:29 tvar A
733−119:30 tight glyph )
734−119:31 tight glyph ]
730+119:20 tight glyph ]
735731121:1 NEWLINE
736732121:1 glyph +$
737−121:4 name pole
733+121:4 name lest
738734121:9 glyph |$
739735121:12 glyph [
740736121:13 tight tvar A
741737121:14 tight glyph ]
742−122:3 INDENT
743−122:3 lit ~
744−123:3 NEWLINE
745−123:3 glyph [
746−123:4 tight tvar A
747−123:6 glyph (
748−123:7 tight name pole
749−123:12 tvar A
750−123:13 tight glyph )
738+121:16 glyph [
739+121:17 tight name i
740+121:18 tight glyph =
741+121:19 tight tvar A
742+121:21 name t
743+121:22 tight glyph =
744+121:23 tight glyph (
745+121:24 tight name list
746+121:29 tvar A
747+121:30 tight glyph )
748+121:31 tight glyph ]
749+123:1 NEWLINE
750+123:1 glyph +$
751+123:4 name pole
752+123:9 glyph |$
753+123:12 glyph [
754+123:13 tight tvar A
751755123:14 tight glyph ]
752−125:1 DEDENT
753−125:1 NEWLINE
754−125:1 glyph +$
755−125:4 name quip
756−125:9 glyph |$
757−125:12 glyph [
758−125:13 tight tvar A
759−125:15 tvar B
760−125:16 tight glyph ]
761−125:18 glyph [
762−125:19 tight glyph (
763−125:20 tight name list
764−125:25 tvar A
765−125:26 tight glyph )
766−125:28 tvar B
767−125:29 tight glyph ]
756+124:3 INDENT
757+124:3 lit ~
758+125:3 NEWLINE
759+125:3 glyph [
760+125:4 tight tvar A
761+125:6 glyph (
762+125:7 tight name pole
763+125:12 tvar A
764+125:13 tight glyph )
765+125:14 tight glyph ]
766+127:1 DEDENT
768767127:1 NEWLINE
769768127:1 glyph +$
770−127:4 name tree
769+127:4 name quip
771770127:9 glyph |$
772771127:12 glyph [
773772127:13 tight tvar A
774−127:14 tight glyph ]
775−128:3 INDENT
776−128:3 lit ~
777−129:3 NEWLINE
778−129:3 glyph [
779−129:4 tight name n
780−129:5 tight glyph =
781−129:6 tight tvar A
782−129:8 name l
783−129:9 tight glyph =
784−129:10 tight glyph (
785−129:11 tight name tree
786−129:16 tvar A
787−129:17 tight glyph )
788−129:19 name r
789−129:20 tight glyph =
790−129:21 tight glyph (
791−129:22 tight name tree
792−129:27 tvar A
793−129:28 tight glyph )
794−129:29 tight glyph ]
795−131:1 DEDENT
796−131:1 NEWLINE
797−131:1 glyph +$
798−131:4 name each
799−131:9 glyph |$
800−131:12 glyph [
801−131:13 tight tvar A
802−131:15 tvar B
803−131:16 tight glyph ]
804−132:3 INDENT
805−132:3 glyph [
806−132:4 tight lit %|
807−132:7 name p
808−132:8 tight glyph =
809−132:9 tight tvar B
810−132:10 tight glyph ]
811−133:3 NEWLINE
812−133:3 glyph [
813−133:4 tight lit %&
814−133:7 name p
815−133:8 tight glyph =
816−133:9 tight tvar A
817−133:10 tight glyph ]
818−135:1 DEDENT
819−135:1 NEWLINE
820−135:1 glyph +$
821−135:4 name bloq
822−135:9 aura @
773+127:15 tvar B
774+127:16 tight glyph ]
775+127:18 glyph [
776+127:19 tight glyph (
777+127:20 tight name list
778+127:25 tvar A
779+127:26 tight glyph )
780+127:28 tvar B
781+127:29 tight glyph ]
782+129:1 NEWLINE
783+129:1 glyph +$
784+129:4 name tree
785+129:9 glyph |$
786+129:12 glyph [
787+129:13 tight tvar A
788+129:14 tight glyph ]
789+130:3 INDENT
790+130:3 lit ~
791+131:3 NEWLINE
792+131:3 glyph [
793+131:4 tight name n
794+131:5 tight glyph =
795+131:6 tight tvar A
796+131:8 name l
797+131:9 tight glyph =
798+131:10 tight glyph (
799+131:11 tight name tree
800+131:16 tvar A
801+131:17 tight glyph )
802+131:19 name r
803+131:20 tight glyph =
804+131:21 tight glyph (
805+131:22 tight name tree
806+131:27 tvar A
807+131:28 tight glyph )
808+131:29 tight glyph ]
809+133:1 DEDENT
810+133:1 NEWLINE
811+133:1 glyph +$
812+133:4 name each
813+133:9 glyph |$
814+133:12 glyph [
815+133:13 tight tvar A
816+133:15 tvar B
817+133:16 tight glyph ]
818+134:3 INDENT
819+134:3 glyph [
820+134:4 tight lit %|
821+134:7 name p
822+134:8 tight glyph =
823+134:9 tight tvar B
824+134:10 tight glyph ]
825+135:3 NEWLINE
826+135:3 glyph [
827+135:4 tight lit %&
828+135:7 name p
829+135:8 tight glyph =
830+135:9 tight tvar A
831+135:10 tight glyph ]
832+137:1 DEDENT
823833137:1 NEWLINE
824−137:1 glyph ++
825−137:4 name some
826−137:9 glyph |=
827−137:12 name item
828−137:16 tight glyph =
829−137:17 tight tvar A
830−137:19 glyph `
831−137:20 tight name item
834+137:1 glyph +$
835+137:4 name bloq
836+137:9 aura @
832837139:1 NEWLINE
833838139:1 glyph ++
834−139:4 name lure
839+139:4 name some
835840139:9 glyph |=
836841139:12 name item
837842139:16 tight glyph =
838843139:17 tight tvar A
839−140:3 INDENT
840−140:3 glyph ^-
841−140:6 glyph (
842−140:7 tight name list
843−140:12 tvar A
844−140:13 tight glyph )
845−140:15 glyph [
846−140:16 tight name item
847−140:21 lit ~
848−140:22 tight glyph ]
849−142:1 DEDENT
850−142:1 NEWLINE
851−142:1 glyph ++
852−142:4 name snoc
853−142:9 glyph |=
854−142:12 name args
855−142:16 tight glyph =
856−142:17 tight glyph [
857−142:18 tight glyph (
858−142:19 tight name list
859−142:24 tvar A
860−142:25 tight glyph )
861−142:27 tvar A
862−142:28 tight glyph ]
863−143:3 INDENT
864−143:3 glyph ?-
865−143:6 name args
866−144:5 INDENT
867−144:5 glyph [
868−144:6 tight name xs
869−144:9 name item
870−144:13 tight glyph ]
871−144:15 glyph (
872−144:16 tight name weld
873−144:21 name xs
874−144:24 glyph [
875−144:25 tight name item
876−144:30 lit ~
877−144:31 tight glyph ]
878−144:32 tight glyph )
879−146:1 DEDENT
880−146:1 DEDENT
881−146:1 NEWLINE
882−146:1 glyph ++
883−146:4 name flop
884−146:9 glyph |=
885−146:12 name xs
886−146:14 tight glyph =
887−146:15 tight glyph (
888−146:16 tight name list
889−146:21 tvar A
890−146:22 tight glyph )
891−147:3 INDENT
892−147:3 glyph ++
893−147:6 name reverse-into
894−147:19 glyph |=
895−147:22 name args
896−147:26 tight glyph =
897−147:27 tight glyph [
898−147:28 tight glyph (
899−147:29 tight name list
900−147:34 tvar A
901−147:35 tight glyph )
902−147:37 glyph (
903−147:38 tight name list
904−147:43 tvar A
905−147:44 tight glyph )
906−147:45 tight glyph ]
907−148:5 INDENT
908−148:5 glyph ?-
909−148:8 name args
910−149:7 INDENT
911−149:7 glyph [
912−149:8 tight name rest
913−149:13 name acc
914−149:16 tight glyph ]
915−150:9 INDENT
916−150:9 glyph ?-
917−150:12 name rest
918−151:11 INDENT
919−151:11 lit ~
844+139:19 glyph `
845+139:20 tight name item
846+141:1 NEWLINE
847+141:1 glyph ++
848+141:4 name lure
849+141:9 glyph |=
850+141:12 name item
851+141:16 tight glyph =
852+141:17 tight tvar A
853+142:3 INDENT
854+142:3 glyph ^-
855+142:6 glyph (
856+142:7 tight name list
857+142:12 tvar A
858+142:13 tight glyph )
859+142:15 glyph [
860+142:16 tight name item
861+142:21 lit ~
862+142:22 tight glyph ]
863+144:1 DEDENT
864+144:1 NEWLINE
865+144:1 glyph ++
866+144:4 name snoc
867+144:9 glyph |=
868+144:12 name args
869+144:16 tight glyph =
870+144:17 tight glyph [
871+144:18 tight glyph (
872+144:19 tight name list
873+144:24 tvar A
874+144:25 tight glyph )
875+144:27 tvar A
876+144:28 tight glyph ]
877+145:3 INDENT
878+145:3 glyph ?-
879+145:6 name args
880+146:5 INDENT
881+146:5 glyph [
882+146:6 tight name xs
883+146:9 name item
884+146:13 tight glyph ]
885+146:15 glyph (
886+146:16 tight name weld
887+146:21 name xs
888+146:24 glyph [
889+146:25 tight name item
890+146:30 lit ~
891+146:31 tight glyph ]
892+146:32 tight glyph )
893+148:1 DEDENT
894+148:1 DEDENT
895+148:1 NEWLINE
896+148:1 glyph ++
897+148:4 name flop
898+148:9 glyph |=
899+148:12 name xs
900+148:14 tight glyph =
901+148:15 tight glyph (
902+148:16 tight name list
903+148:21 tvar A
904+148:22 tight glyph )
905+149:3 INDENT
906+149:3 glyph ++
907+149:6 name reverse-into
908+149:19 glyph |=
909+149:22 name args
910+149:26 tight glyph =
911+149:27 tight glyph [
912+149:28 tight glyph (
913+149:29 tight name list
914+149:34 tvar A
915+149:35 tight glyph )
916+149:37 glyph (
917+149:38 tight name list
918+149:43 tvar A
919+149:44 tight glyph )
920+149:45 tight glyph ]
921+150:5 INDENT
922+150:5 glyph ?-
923+150:8 name args
924+151:7 INDENT
925+151:7 glyph [
926+151:8 tight name rest
920927151:13 name acc
921−152:11 NEWLINE
922−152:11 glyph [
923−152:12 tight name item
924−152:17 name more
925−152:21 tight glyph ]
926−152:23 glyph (
927−152:24 tight name reverse-into
928−152:37 name more
929−152:42 glyph [
930−152:43 tight name item
931−152:48 name acc
932−152:51 tight glyph ]
933−152:52 tight glyph )
934−153:3 DEDENT
935−153:3 DEDENT
936−153:3 DEDENT
937−153:3 DEDENT
938−153:3 NEWLINE
939−153:3 glyph (
940−153:4 tight name reverse-into
941−153:17 name xs
942−153:20 lit ~
943−153:21 tight glyph )
944−155:1 DEDENT
945−155:1 NEWLINE
946−155:1 glyph ++
947−155:4 name drop
948−155:9 glyph |=
949−155:12 name maybe
950−155:17 tight glyph =
951−155:18 tight glyph (
952−155:19 tight name unit
953−155:24 tvar A
954−155:25 tight glyph )
955−156:3 INDENT
956−156:3 glyph ^-
957−156:6 glyph (
958−156:7 tight name list
959−156:12 tvar A
960−156:13 tight glyph )
961−157:5 INDENT
962−157:5 glyph ?-
963−157:8 name maybe
964−158:7 INDENT
965−158:7 lit ~
966−158:9 lit ~
967−159:7 NEWLINE
968−159:7 glyph [
969−159:8 tight lit ~
970−159:10 name value
971−159:15 tight glyph ]
972−159:17 glyph [
973−159:18 tight name value
974−159:24 lit ~
975−159:25 tight glyph ]
976−161:1 DEDENT
977−161:1 DEDENT
978−161:1 DEDENT
979−161:1 NEWLINE
980−161:1 glyph ++
981−161:4 name bond
982−161:9 glyph |=
983−161:12 name fallback
984−161:20 tight glyph =
985−161:21 tight glyph $-(
986−161:24 tight lit ~
987−161:26 tvar A
988−161:27 tight glyph )
989−162:3 INDENT
990−162:3 glyph |=
991−162:6 name maybe
992−162:11 tight glyph =
993−162:12 tight glyph (
994−162:13 tight name unit
995−162:18 tvar A
996−162:19 tight glyph )
997−163:5 INDENT
998−163:5 glyph ?-
999−163:8 name maybe
1000−164:7 INDENT
1001−164:7 lit ~
1002−164:9 glyph (
1003−164:10 tight name fallback
1004−164:19 lit ~
1005−164:20 tight glyph )
1006−165:7 NEWLINE
1007−165:7 glyph [
1008−165:8 tight lit ~
1009−165:10 name value
1010−165:15 tight glyph ]
1011−165:17 name value
1012−167:1 DEDENT
1013−167:1 DEDENT
1014−167:1 DEDENT
1015−167:1 NEWLINE
1016−167:1 glyph ++
1017−167:4 name bind
1018−167:9 glyph |=
1019−167:12 name args
1020−167:16 tight glyph =
1021−167:17 tight glyph [
1022−167:18 tight glyph (
1023−167:19 tight name unit
1024−167:24 tvar A
1025−167:25 tight glyph )
1026−167:27 glyph $-(
1027−167:30 tight tvar A
1028−167:32 tvar B
1029−167:33 tight glyph )
1030−167:34 tight glyph ]
1031−168:3 INDENT
1032−168:3 glyph ?-
1033−168:6 name args
1034−169:5 INDENT
1035−169:5 glyph [
1036−169:6 tight name maybe
1037−169:12 name f
1038−169:13 tight glyph ]
1039−169:15 glyph ^-
1040−169:18 glyph (
928+151:16 tight glyph ]
929+152:9 INDENT
930+152:9 glyph ?-
931+152:12 name rest
932+153:11 INDENT
933+153:11 lit ~
934+153:13 name acc
935+154:11 NEWLINE
936+154:11 glyph [
937+154:12 tight name item
938+154:17 name more
939+154:21 tight glyph ]
940+154:23 glyph (
941+154:24 tight name reverse-into
942+154:37 name more
943+154:42 glyph [
944+154:43 tight name item
945+154:48 name acc
946+154:51 tight glyph ]
947+154:52 tight glyph )
948+155:3 DEDENT
949+155:3 DEDENT
950+155:3 DEDENT
951+155:3 DEDENT
952+155:3 NEWLINE
953+155:3 glyph (
954+155:4 tight name reverse-into
955+155:17 name xs
956+155:20 lit ~
957+155:21 tight glyph )
958+157:1 DEDENT
959+157:1 NEWLINE
960+157:1 glyph ++
961+157:4 name drop
962+157:9 glyph |=
963+157:12 name maybe
964+157:17 tight glyph =
965+157:18 tight glyph (
966+157:19 tight name unit
967+157:24 tvar A
968+157:25 tight glyph )
969+158:3 INDENT
970+158:3 glyph ^-
971+158:6 glyph (
972+158:7 tight name list
973+158:12 tvar A
974+158:13 tight glyph )
975+159:5 INDENT
976+159:5 glyph ?-
977+159:8 name maybe
978+160:7 INDENT
979+160:7 lit ~
980+160:9 lit ~
981+161:7 NEWLINE
982+161:7 glyph [
983+161:8 tight lit ~
984+161:10 name value
985+161:15 tight glyph ]
986+161:17 glyph [
987+161:18 tight name value
988+161:24 lit ~
989+161:25 tight glyph ]
990+163:1 DEDENT
991+163:1 DEDENT
992+163:1 DEDENT
993+163:1 NEWLINE
994+163:1 glyph ++
995+163:4 name bond
996+163:9 glyph |=
997+163:12 name fallback
998+163:20 tight glyph =
999+163:21 tight glyph $-(
1000+163:24 tight lit ~
1001+163:26 tvar A
1002+163:27 tight glyph )
1003+164:3 INDENT
1004+164:3 glyph |=
1005+164:6 name maybe
1006+164:11 tight glyph =
1007+164:12 tight glyph (
1008+164:13 tight name unit
1009+164:18 tvar A
1010+164:19 tight glyph )
1011+165:5 INDENT
1012+165:5 glyph ?-
1013+165:8 name maybe
1014+166:7 INDENT
1015+166:7 lit ~
1016+166:9 glyph (
1017+166:10 tight name fallback
1018+166:19 lit ~
1019+166:20 tight glyph )
1020+167:7 NEWLINE
1021+167:7 glyph [
1022+167:8 tight lit ~
1023+167:10 name value
1024+167:15 tight glyph ]
1025+167:17 name value
1026+169:1 DEDENT
1027+169:1 DEDENT
1028+169:1 DEDENT
1029+169:1 NEWLINE
1030+169:1 glyph ++
1031+169:4 name bind
1032+169:9 glyph |=
1033+169:12 name args
1034+169:16 tight glyph =
1035+169:17 tight glyph [
1036+169:18 tight glyph (
10411037169:19 tight name unit
1042−169:24 tvar B
1038+169:24 tvar A
10431039169:25 tight glyph )
1044−170:7 INDENT
1045−170:7 glyph ?-
1046−170:10 name maybe
1047−171:9 INDENT
1048−171:9 lit ~
1049−171:11 lit ~
1050−172:9 NEWLINE
1051−172:9 glyph [
1052−172:10 tight lit ~
1053−172:12 name value
1054−172:17 tight glyph ]
1055−172:19 glyph `
1056−172:20 tight glyph (
1057−172:21 tight name f
1058−172:23 name value
1059−172:28 tight glyph )
1060−174:1 DEDENT
1061−174:1 DEDENT
1062−174:1 DEDENT
1063−174:1 DEDENT
1064−174:1 NEWLINE
1065−174:1 glyph ++
1066−174:4 name biff
1067−174:9 glyph |=
1068−174:12 name args
1069−174:16 tight glyph =
1070−174:17 tight glyph [
1071−174:18 tight glyph (
1072−174:19 tight name unit
1073−174:24 tvar A
1074−174:25 tight glyph )
1075−174:27 glyph $-(
1076−174:30 tight tvar A
1077−174:32 glyph (
1078−174:33 tight name unit
1079−174:38 tvar B
1080−174:39 tight glyph )
1081−174:40 tight glyph )
1082−174:41 tight glyph ]
1083−175:3 INDENT
1084−175:3 glyph ?-
1085−175:6 name args
1086−176:5 INDENT
1087−176:5 glyph [
1088−176:6 tight name maybe
1089−176:12 name f
1090−176:13 tight glyph ]
1091−176:15 glyph ^-
1092−176:18 glyph (
1040+169:27 glyph $-(
1041+169:30 tight tvar A
1042+169:32 tvar B
1043+169:33 tight glyph )
1044+169:34 tight glyph ]
1045+170:3 INDENT
1046+170:3 glyph ?-
1047+170:6 name args
1048+171:5 INDENT
1049+171:5 glyph [
1050+171:6 tight name maybe
1051+171:12 name f
1052+171:13 tight glyph ]
1053+171:15 glyph ^-
1054+171:18 glyph (
1055+171:19 tight name unit
1056+171:24 tvar B
1057+171:25 tight glyph )
1058+172:7 INDENT
1059+172:7 glyph ?-
1060+172:10 name maybe
1061+173:9 INDENT
1062+173:9 lit ~
1063+173:11 lit ~
1064+174:9 NEWLINE
1065+174:9 glyph [
1066+174:10 tight lit ~
1067+174:12 name value
1068+174:17 tight glyph ]
1069+174:19 glyph `
1070+174:20 tight glyph (
1071+174:21 tight name f
1072+174:23 name value
1073+174:28 tight glyph )
1074+176:1 DEDENT
1075+176:1 DEDENT
1076+176:1 DEDENT
1077+176:1 DEDENT
1078+176:1 NEWLINE
1079+176:1 glyph ++
1080+176:4 name biff
1081+176:9 glyph |=
1082+176:12 name args
1083+176:16 tight glyph =
1084+176:17 tight glyph [
1085+176:18 tight glyph (
10931086176:19 tight name unit
1094−176:24 tvar B
1087+176:24 tvar A
10951088176:25 tight glyph )
1096−177:7 INDENT
1097−177:7 glyph ?-
1098−177:10 name maybe
1099−178:9 INDENT
1100−178:9 lit ~
1101−178:11 lit ~
1102−179:9 NEWLINE
1103−179:9 glyph [
1104−179:10 tight lit ~
1105−179:12 name value
1106−179:17 tight glyph ]
1107−179:19 glyph (
1108−179:20 tight name f
1109−179:22 name value
1110−179:27 tight glyph )
1111−181:1 DEDENT
1112−181:1 DEDENT
1113−181:1 DEDENT
1114−181:1 DEDENT
1115−181:1 NEWLINE
1116−181:1 glyph ++
1117−181:4 name both
1118−181:9 glyph |=
1119−181:12 name args
1120−181:16 tight glyph =
1121−181:17 tight glyph [
1122−181:18 tight glyph (
1123−181:19 tight name unit
1124−181:24 tvar A
1125−181:25 tight glyph )
1126−181:27 glyph (
1127−181:28 tight name unit
1128−181:33 tvar B
1129−181:34 tight glyph )
1130−181:35 tight glyph ]
1131−182:3 INDENT
1132−182:3 glyph ?-
1133−182:6 name args
1134−183:5 INDENT
1135−183:5 glyph [
1136−183:6 tight name first
1137−183:12 name second
1138−183:18 tight glyph ]
1139−183:20 glyph ^-
1140−183:23 glyph (
1141−183:24 tight name unit
1142−183:29 glyph [
1143−183:30 tight tvar A
1144−183:32 tvar B
1145−183:33 tight glyph ]
1089+176:27 glyph $-(
1090+176:30 tight tvar A
1091+176:32 glyph (
1092+176:33 tight name unit
1093+176:38 tvar B
1094+176:39 tight glyph )
1095+176:40 tight glyph )
1096+176:41 tight glyph ]
1097+177:3 INDENT
1098+177:3 glyph ?-
1099+177:6 name args
1100+178:5 INDENT
1101+178:5 glyph [
1102+178:6 tight name maybe
1103+178:12 name f
1104+178:13 tight glyph ]
1105+178:15 glyph ^-
1106+178:18 glyph (
1107+178:19 tight name unit
1108+178:24 tvar B
1109+178:25 tight glyph )
1110+179:7 INDENT
1111+179:7 glyph ?-
1112+179:10 name maybe
1113+180:9 INDENT
1114+180:9 lit ~
1115+180:11 lit ~
1116+181:9 NEWLINE
1117+181:9 glyph [
1118+181:10 tight lit ~
1119+181:12 name value
1120+181:17 tight glyph ]
1121+181:19 glyph (
1122+181:20 tight name f
1123+181:22 name value
1124+181:27 tight glyph )
1125+183:1 DEDENT
1126+183:1 DEDENT
1127+183:1 DEDENT
1128+183:1 DEDENT
1129+183:1 NEWLINE
1130+183:1 glyph ++
1131+183:4 name both
1132+183:9 glyph |=
1133+183:12 name args
1134+183:16 tight glyph =
1135+183:17 tight glyph [
1136+183:18 tight glyph (
1137+183:19 tight name unit
1138+183:24 tvar A
1139+183:25 tight glyph )
1140+183:27 glyph (
1141+183:28 tight name unit
1142+183:33 tvar B
11461143183:34 tight glyph )
1147−184:7 INDENT
1148−184:7 glyph ?-
1149−184:10 name first
1150−185:9 INDENT
1151−185:9 lit ~
1152−185:11 lit ~
1153−186:9 NEWLINE
1154−186:9 glyph [
1155−186:10 tight lit ~
1156−186:12 name a
1157−186:13 tight glyph ]
1158−187:11 INDENT
1159−187:11 glyph ?-
1160−187:14 name second
1161−188:13 INDENT
1162−188:13 lit ~
1163−188:15 lit ~
1164−189:13 NEWLINE
1165−189:13 glyph [
1166−189:14 tight lit ~
1167−189:16 name b
1168−189:17 tight glyph ]
1169−189:19 glyph `
1170−189:20 tight glyph [
1171−189:21 tight name a
1172−189:23 name b
1173−189:24 tight glyph ]
1174−191:1 DEDENT
1175−191:1 DEDENT
1176−191:1 DEDENT
1177−191:1 DEDENT
1178−191:1 DEDENT
1179−191:1 DEDENT
1180−191:1 NEWLINE
1181−191:1 glyph ++
1182−191:4 name clap
1183−191:9 glyph |=
1184−191:12 name args
1185−191:16 tight glyph =
1186−191:17 tight glyph [
1187−191:18 tight glyph (
1188−191:19 tight name unit
1189−191:24 tvar A
1190−191:25 tight glyph )
1191−191:27 glyph (
1192−191:28 tight name unit
1193−191:33 tvar A
1194−191:34 tight glyph )
1195−191:36 glyph $-(
1196−191:39 tight glyph [
1197−191:40 tight tvar A
1198−191:42 tvar A
1199−191:43 tight glyph ]
1200−191:45 tvar A
1201−191:46 tight glyph )
1202−191:47 tight glyph ]
1203−192:3 INDENT
1204−192:3 glyph ?-
1205−192:6 name args
1206−193:5 INDENT
1207−193:5 glyph [
1208−193:6 tight name first
1209−193:12 name second
1210−193:19 name combine
1211−193:26 tight glyph ]
1212−193:28 glyph ^-
1213−193:31 glyph (
1214−193:32 tight name unit
1215−193:37 tvar A
1216−193:38 tight glyph )
1217−194:7 INDENT
1218−194:7 glyph ?-
1219−194:10 name first
1220−195:9 INDENT
1221−195:9 lit ~
1222−195:11 name second
1223−196:9 NEWLINE
1224−196:9 glyph [
1225−196:10 tight lit ~
1226−196:12 name a
1227−196:13 tight glyph ]
1228−197:11 INDENT
1229−197:11 glyph ?-
1230−197:14 name second
1231−198:13 INDENT
1232−198:13 lit ~
1233−198:15 name first
1234−199:13 NEWLINE
1235−199:13 glyph [
1236−199:14 tight lit ~
1237−199:16 name b
1238−199:17 tight glyph ]
1239−199:19 glyph `
1240−199:20 tight glyph (
1241−199:21 tight name combine
1242−199:29 name a
1243−199:31 name b
1244−199:32 tight glyph )
1245−201:1 DEDENT
1246−201:1 DEDENT
1247−201:1 DEDENT
1248−201:1 DEDENT
1249−201:1 DEDENT
1250−201:1 DEDENT
1251−201:1 NEWLINE
1252−201:1 glyph ++
1253−201:4 name hunt
1254−201:9 glyph |=
1255−201:12 name args
1256−201:16 tight glyph =
1257−201:17 tight glyph [
1258−201:18 tight glyph $-(
1259−201:21 tight glyph [
1260−201:22 tight tvar A
1261−201:24 tvar A
1262−201:25 tight glyph ]
1263−201:27 glyph ?
1264−201:28 tight glyph )
1265−201:30 glyph (
1266−201:31 tight name unit
1267−201:36 tvar A
1268−201:37 tight glyph )
1269−201:39 glyph (
1270−201:40 tight name unit
1271−201:45 tvar A
1272−201:46 tight glyph )
1273−201:47 tight glyph ]
1274−202:3 INDENT
1275−202:3 glyph ?-
1276−202:6 name args
1277−203:5 INDENT
1278−203:5 glyph [
1279−203:6 tight name choose
1280−203:13 name first
1281−203:19 name second
1144+183:35 tight glyph ]
1145+184:3 INDENT
1146+184:3 glyph ?-
1147+184:6 name args
1148+185:5 INDENT
1149+185:5 glyph [
1150+185:6 tight name first
1151+185:12 name second
1152+185:18 tight glyph ]
1153+185:20 glyph ^-
1154+185:23 glyph (
1155+185:24 tight name unit
1156+185:29 glyph [
1157+185:30 tight tvar A
1158+185:32 tvar B
1159+185:33 tight glyph ]
1160+185:34 tight glyph )
1161+186:7 INDENT
1162+186:7 glyph ?-
1163+186:10 name first
1164+187:9 INDENT
1165+187:9 lit ~
1166+187:11 lit ~
1167+188:9 NEWLINE
1168+188:9 glyph [
1169+188:10 tight lit ~
1170+188:12 name a
1171+188:13 tight glyph ]
1172+189:11 INDENT
1173+189:11 glyph ?-
1174+189:14 name second
1175+190:13 INDENT
1176+190:13 lit ~
1177+190:15 lit ~
1178+191:13 NEWLINE
1179+191:13 glyph [
1180+191:14 tight lit ~
1181+191:16 name b
1182+191:17 tight glyph ]
1183+191:19 glyph `
1184+191:20 tight glyph [
1185+191:21 tight name a
1186+191:23 name b
1187+191:24 tight glyph ]
1188+193:1 DEDENT
1189+193:1 DEDENT
1190+193:1 DEDENT
1191+193:1 DEDENT
1192+193:1 DEDENT
1193+193:1 DEDENT
1194+193:1 NEWLINE
1195+193:1 glyph ++
1196+193:4 name clap
1197+193:9 glyph |=
1198+193:12 name args
1199+193:16 tight glyph =
1200+193:17 tight glyph [
1201+193:18 tight glyph (
1202+193:19 tight name unit
1203+193:24 tvar A
1204+193:25 tight glyph )
1205+193:27 glyph (
1206+193:28 tight name unit
1207+193:33 tvar A
1208+193:34 tight glyph )
1209+193:36 glyph $-(
1210+193:39 tight glyph [
1211+193:40 tight tvar A
1212+193:42 tvar A
1213+193:43 tight glyph ]
1214+193:45 tvar A
1215+193:46 tight glyph )
1216+193:47 tight glyph ]
1217+194:3 INDENT
1218+194:3 glyph ?-
1219+194:6 name args
1220+195:5 INDENT
1221+195:5 glyph [
1222+195:6 tight name first
1223+195:12 name second
1224+195:19 name combine
1225+195:26 tight glyph ]
1226+195:28 glyph ^-
1227+195:31 glyph (
1228+195:32 tight name unit
1229+195:37 tvar A
1230+195:38 tight glyph )
1231+196:7 INDENT
1232+196:7 glyph ?-
1233+196:10 name first
1234+197:9 INDENT
1235+197:9 lit ~
1236+197:11 name second
1237+198:9 NEWLINE
1238+198:9 glyph [
1239+198:10 tight lit ~
1240+198:12 name a
1241+198:13 tight glyph ]
1242+199:11 INDENT
1243+199:11 glyph ?-
1244+199:14 name second
1245+200:13 INDENT
1246+200:13 lit ~
1247+200:15 name first
1248+201:13 NEWLINE
1249+201:13 glyph [
1250+201:14 tight lit ~
1251+201:16 name b
1252+201:17 tight glyph ]
1253+201:19 glyph `
1254+201:20 tight glyph (
1255+201:21 tight name combine
1256+201:29 name a
1257+201:31 name b
1258+201:32 tight glyph )
1259+203:1 DEDENT
1260+203:1 DEDENT
1261+203:1 DEDENT
1262+203:1 DEDENT
1263+203:1 DEDENT
1264+203:1 DEDENT
1265+203:1 NEWLINE
1266+203:1 glyph ++
1267+203:4 name hunt
1268+203:9 glyph |=
1269+203:12 name args
1270+203:16 tight glyph =
1271+203:17 tight glyph [
1272+203:18 tight glyph $-(
1273+203:21 tight glyph [
1274+203:22 tight tvar A
1275+203:24 tvar A
12821276203:25 tight glyph ]
1283−203:27 glyph ^-
1277+203:27 glyph ?
1278+203:28 tight glyph )
12841279203:30 glyph (
12851280203:31 tight name unit
12861281203:36 tvar A
12871282203:37 tight glyph )
1288−204:7 INDENT
1289−204:7 glyph ?-
1290−204:10 name first
1291−205:9 INDENT
1292−205:9 lit ~
1293−205:11 name second
1294−206:9 NEWLINE
1295−206:9 glyph [
1296−206:10 tight lit ~
1297−206:12 name a
1298−206:13 tight glyph ]
1299−207:11 INDENT
1300−207:11 glyph ?-
1301−207:14 name second
1302−208:13 INDENT
1303−208:13 lit ~
1304−208:15 name first
1305−209:13 NEWLINE
1306−209:13 glyph [
1307−209:14 tight lit ~
1308−209:16 name b
1309−209:17 tight glyph ]
1310−210:15 INDENT
1311−210:15 glyph ?-
1312−210:18 glyph (
1313−210:19 tight name choose
1314−210:26 name a
1315−210:28 name b
1316−210:29 tight glyph )
1317−211:17 INDENT
1318−211:17 lit %.y
1319−211:21 name first
1320−212:17 NEWLINE
1321−212:17 lit %.n
1322−212:21 name second
1323−214:1 DEDENT
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 DEDENT
1331−214:1 NEWLINE
1332−214:1 glyph ++
1333−214:4 name clef
1334−214:9 glyph |=
1335−214:12 name args
1336−214:16 tight glyph =
1337−214:17 tight glyph [
1338−214:18 tight glyph (
1339−214:19 tight name unit
1340−214:24 tvar A
1341−214:25 tight glyph )
1342−214:27 glyph (
1343−214:28 tight name unit
1344−214:33 tvar B
1345−214:34 tight glyph )
1346−214:36 glyph $-(
1347−214:39 tight glyph [
1348−214:40 tight tvar A
1349−214:42 tvar B
1350−214:43 tight glyph ]
1351−214:45 glyph (
1352−214:46 tight name unit
1353−214:51 tvar C
1354−214:52 tight glyph )
1355−214:53 tight glyph )
1356−214:54 tight glyph ]
1357−215:3 INDENT
1358−215:3 glyph ?-
1359−215:6 name args
1360−216:5 INDENT
1361−216:5 glyph [
1362−216:6 tight name first
1363−216:12 name second
1364−216:19 name combine
1365−216:26 tight glyph ]
1366−216:28 glyph ^-
1367−216:31 glyph (
1368−216:32 tight name unit
1369−216:37 tvar C
1370−216:38 tight glyph )
1371−217:7 INDENT
1372−217:7 glyph ?-
1373−217:10 name first
1374−218:9 INDENT
1375−218:9 lit ~
1376−218:11 lit ~
1377−219:9 NEWLINE
1378−219:9 glyph [
1379−219:10 tight lit ~
1380−219:12 name a
1381−219:13 tight glyph ]
1382−220:11 INDENT
1383−220:11 glyph ?-
1384−220:14 name second
1385−221:13 INDENT
1386−221:13 lit ~
1387−221:15 lit ~
1388−222:13 NEWLINE
1389−222:13 glyph [
1390−222:14 tight lit ~
1391−222:16 name b
1392−222:17 tight glyph ]
1393−222:19 glyph (
1394−222:20 tight name combine
1395−222:28 name a
1396−222:30 name b
1397−222:31 tight glyph )
1398−224:1 DEDENT
1399−224:1 DEDENT
1400−224:1 DEDENT
1401−224:1 DEDENT
1402−224:1 DEDENT
1403−224:1 DEDENT
1404−224:1 NEWLINE
1405−224:1 glyph ++
1406−224:4 name skim
1407−224:9 glyph |=
1408−224:12 name args
1409−224:16 tight glyph =
1410−224:17 tight glyph [
1411−224:18 tight glyph (
1412−224:19 tight name list
1413−224:24 tvar A
1414−224:25 tight glyph )
1415−224:27 glyph $-(
1416−224:30 tight tvar A
1417−224:32 glyph ?
1418−224:33 tight glyph )
1419−224:34 tight glyph ]
1420−225:3 INDENT
1421−225:3 glyph ?-
1422−225:6 name args
1423−226:5 INDENT
1424−226:5 glyph [
1425−226:6 tight name xs
1426−226:9 name predicate
1427−226:18 tight glyph ]
1428−226:20 glyph ^-
1429−226:23 glyph (
1430−226:24 tight name list
1431−226:29 tvar A
1432−226:30 tight glyph )
1433−227:9 INDENT
1434−227:9 glyph ?-
1435−227:12 name xs
1436−228:11 INDENT
1437−228:11 lit ~
1438−228:13 lit ~
1439−229:11 NEWLINE
1440−229:11 glyph [
1441−229:12 tight name item
1442−229:17 name rest
1443−229:21 tight glyph ]
1444−230:13 INDENT
1445−230:13 glyph ?-
1446−230:16 glyph (
1447−230:17 tight name predicate
1448−230:27 name item
1449−230:31 tight glyph )
1450−231:15 INDENT
1451−231:15 lit %.y
1452−231:19 glyph [
1453−231:20 tight name item
1454−231:25 glyph (
1455−231:26 tight name skim
1456−231:31 name rest
1457−231:36 name predicate
1458−231:45 tight glyph )
1459−231:46 tight glyph ]
1460−232:15 NEWLINE
1461−232:15 lit %.n
1462−232:19 glyph (
1463−232:20 tight name skim
1464−232:25 name rest
1465−232:30 name predicate
1466−232:39 tight glyph )
1467−234:1 DEDENT
1468−234:1 DEDENT
1469−234:1 DEDENT
1470−234:1 DEDENT
1471−234:1 DEDENT
1472−234:1 DEDENT
1473−234:1 NEWLINE
1474−234:1 glyph ++
1475−234:4 name skip
1476−234:9 glyph |=
1477−234:12 name args
1478−234:16 tight glyph =
1479−234:17 tight glyph [
1480−234:18 tight glyph (
1481−234:19 tight name list
1482−234:24 tvar A
1483−234:25 tight glyph )
1484−234:27 glyph $-(
1485−234:30 tight tvar A
1486−234:32 glyph ?
1487−234:33 tight glyph )
1488−234:34 tight glyph ]
1489−235:3 INDENT
1490−235:3 glyph ?-
1491−235:6 name args
1492−236:5 INDENT
1493−236:5 glyph [
1494−236:6 tight name xs
1495−236:9 name predicate
1496−236:18 tight glyph ]
1497−236:20 glyph ^-
1498−236:23 glyph (
1499−236:24 tight name list
1500−236:29 tvar A
1501−236:30 tight glyph )
1502−237:9 INDENT
1503−237:9 glyph ?-
1504−237:12 name xs
1505−238:11 INDENT
1506−238:11 lit ~
1507−238:13 lit ~
1508−239:11 NEWLINE
1509−239:11 glyph [
1510−239:12 tight name item
1511−239:17 name rest
1512−239:21 tight glyph ]
1513−240:13 INDENT
1514−240:13 glyph ?-
1515−240:16 glyph (
1516−240:17 tight name predicate
1517−240:27 name item
1518−240:31 tight glyph )
1519−241:15 INDENT
1520−241:15 lit %.y
1521−241:19 glyph (
1522−241:20 tight name skip
1523−241:25 name rest
1524−241:30 name predicate
1525−241:39 tight glyph )
1526−242:15 NEWLINE
1527−242:15 lit %.n
1528−242:19 glyph [
1529−242:20 tight name item
1530−242:25 glyph (
1531−242:26 tight name skip
1532−242:31 name rest
1533−242:36 name predicate
1534−242:45 tight glyph )
1535−242:46 tight glyph ]
1536−244:1 DEDENT
1537−244:1 DEDENT
1538−244:1 DEDENT
1539−244:1 DEDENT
1540−244:1 DEDENT
1541−244:1 DEDENT
1542−244:1 NEWLINE
1543−244:1 glyph ++
1544−244:4 name levy
1545−244:9 glyph |=
1546−244:12 name args
1547−244:16 tight glyph =
1548−244:17 tight glyph [
1549−244:18 tight glyph (
1550−244:19 tight name list
1551−244:24 tvar A
1552−244:25 tight glyph )
1553−244:27 glyph $-(
1554−244:30 tight tvar A
1555−244:32 glyph ?
1556−244:33 tight glyph )
1557−244:34 tight glyph ]
1558−245:3 INDENT
1559−245:3 glyph ^-
1560−245:6 glyph ?
1561−246:5 INDENT
1562−246:5 glyph ?-
1563−246:8 name args
1564−247:7 INDENT
1565−247:7 glyph [
1566−247:8 tight name xs
1567−247:11 name predicate
1568−247:20 tight glyph ]
1569−248:9 INDENT
1570−248:9 glyph ?-
1571−248:12 name xs
1572−249:11 INDENT
1573−249:11 lit ~
1574−249:13 lit %.y
1575−250:11 NEWLINE
1576−250:11 glyph [
1577−250:12 tight name item
1578−250:17 name rest
1579−250:21 tight glyph ]
1580−251:13 INDENT
1581−251:13 glyph ?-
1582−251:16 glyph (
1583−251:17 tight name predicate
1584−251:27 name item
1585−251:31 tight glyph )
1586−252:15 INDENT
1587−252:15 lit %.y
1588−252:19 glyph (
1589−252:20 tight name levy
1590−252:25 name rest
1591−252:30 name predicate
1592−252:39 tight glyph )
1593−253:15 NEWLINE
1594−253:15 lit %.n
1595−253:19 lit %.n
1596−255:1 DEDENT
1597−255:1 DEDENT
1598−255:1 DEDENT
1599−255:1 DEDENT
1600−255:1 DEDENT
1601−255:1 DEDENT
1602−255:1 DEDENT
1603−255:1 NEWLINE
1604−255:1 glyph ++
1605−255:4 name lien
1606−255:9 glyph |=
1607−255:12 name args
1608−255:16 tight glyph =
1609−255:17 tight glyph [
1610−255:18 tight glyph (
1611−255:19 tight name list
1612−255:24 tvar A
1613−255:25 tight glyph )
1614−255:27 glyph $-(
1615−255:30 tight tvar A
1616−255:32 glyph ?
1617−255:33 tight glyph )
1618−255:34 tight glyph ]
1619−256:3 INDENT
1620−256:3 glyph ^-
1621−256:6 glyph ?
1622−257:5 INDENT
1623−257:5 glyph ?-
1624−257:8 name args
1625−258:7 INDENT
1626−258:7 glyph [
1627−258:8 tight name xs
1628−258:11 name predicate
1629−258:20 tight glyph ]
1630−259:9 INDENT
1631−259:9 glyph ?-
1632−259:12 name xs
1633−260:11 INDENT
1634−260:11 lit ~
1635−260:13 lit %.n
1636−261:11 NEWLINE
1637−261:11 glyph [
1638−261:12 tight name item
1639−261:17 name rest
1640−261:21 tight glyph ]
1641−262:13 INDENT
1642−262:13 glyph ?-
1643−262:16 glyph (
1644−262:17 tight name predicate
1645−262:27 name item
1646−262:31 tight glyph )
1647−263:15 INDENT
1648−263:15 lit %.y
1649−263:19 lit %.y
1650−264:15 NEWLINE
1651−264:15 lit %.n
1652−264:19 glyph (
1653−264:20 tight name lien
1654−264:25 name rest
1655−264:30 name predicate
1656−264:39 tight glyph )
1657−266:1 DEDENT
1658−266:1 DEDENT
1659−266:1 DEDENT
1660−266:1 DEDENT
1661−266:1 DEDENT
1662−266:1 DEDENT
1663−266:1 DEDENT
1664−266:1 NEWLINE
1665−266:1 glyph ++
1666−266:4 name roll
1667−266:9 glyph |=
1668−266:12 name args
1669−266:16 tight glyph =
1670−266:17 tight glyph [
1671−266:18 tight glyph (
1672−266:19 tight name list
1673−266:24 tvar A
1674−266:25 tight glyph )
1675−266:27 tvar B
1676−266:29 glyph $-(
1677−266:32 tight glyph [
1678−266:33 tight tvar A
1679−266:35 tvar B
1680−266:36 tight glyph ]
1681−266:38 tvar B
1682−266:39 tight glyph )
1683−266:40 tight glyph ]
1684−267:3 INDENT
1685−267:3 glyph ?-
1686−267:6 name args
1687−268:5 INDENT
1688−268:5 glyph [
1689−268:6 tight name xs
1690−268:9 name start
1691−268:15 name combine
1692−268:22 tight glyph ]
1693−269:7 INDENT
1694−269:7 glyph ?-
1695−269:10 name xs
1696−270:9 INDENT
1697−270:9 lit ~
1698−270:11 name start
1699−271:9 NEWLINE
1700−271:9 glyph [
1701−271:10 tight name item
1702−271:15 name rest
1703−271:19 tight glyph ]
1704−271:21 glyph (
1705−271:22 tight name roll
1706−271:27 name rest
1707−271:32 glyph (
1708−271:33 tight name combine
1709−271:41 name item
1710−271:46 name start
1711−271:51 tight glyph )
1712−271:53 name combine
1713−271:60 tight glyph )
1714−273:1 DEDENT
1715−273:1 DEDENT
1716−273:1 DEDENT
1717−273:1 DEDENT
1718−273:1 NEWLINE
1719−273:1 glyph ++
1720−273:4 name reel
1721−273:9 glyph |=
1722−273:12 name args
1723−273:16 tight glyph =
1724−273:17 tight glyph [
1725−273:18 tight glyph (
1726−273:19 tight name list
1727−273:24 tvar A
1728−273:25 tight glyph )
1729−273:27 tvar B
1730−273:29 glyph $-(
1731−273:32 tight glyph [
1732−273:33 tight tvar A
1733−273:35 tvar B
1734−273:36 tight glyph ]
1735−273:38 tvar B
1736−273:39 tight glyph )
1737−273:40 tight glyph ]
1738−274:3 INDENT
1739−274:3 glyph ?-
1740−274:6 name args
1741−275:5 INDENT
1742−275:5 glyph [
1743−275:6 tight name xs
1744−275:9 name start
1745−275:15 name combine
1746−275:22 tight glyph ]
1747−276:7 INDENT
1748−276:7 glyph ?-
1749−276:10 name xs
1750−277:9 INDENT
1751−277:9 lit ~
1752−277:11 name start
1753−278:9 NEWLINE
1754−278:9 glyph [
1755−278:10 tight name item
1756−278:15 name rest
1757−278:19 tight glyph ]
1758−278:21 glyph (
1759−278:22 tight name combine
1760−278:30 name item
1761−278:35 glyph (
1762−278:36 tight name reel
1763−278:41 name rest
1764−278:46 name start
1765−278:52 name combine
1766−278:59 tight glyph )
1767−278:60 tight glyph )
1768−280:1 DEDENT
1769−280:1 DEDENT
1770−280:1 DEDENT
1771−280:1 DEDENT
1772−280:1 NEWLINE
1773−280:1 glyph ++
1774−280:4 name flit
1775−280:9 glyph |=
1776−280:12 name predicate
1777−280:21 tight glyph =
1778−280:22 tight glyph $-(
1779−280:25 tight tvar A
1780−280:27 glyph ?
1781−280:28 tight glyph )
1782−281:3 INDENT
1783−281:3 glyph |=
1784−281:6 name value
1785−281:11 tight glyph =
1786−281:12 tight tvar A
1787−282:5 INDENT
1788−282:5 glyph ^-
1789−282:8 glyph (
1790−282:9 tight name unit
1791−282:14 tvar A
1792−282:15 tight glyph )
1793−283:7 INDENT
1794−283:7 glyph ?-
1795−283:10 glyph (
1796−283:11 tight name predicate
1797−283:21 name value
1798−283:26 tight glyph )
1799−284:9 INDENT
1800−284:9 lit %.y
1801−284:13 glyph `
1802−284:14 tight name value
1803−285:9 NEWLINE
1804−285:9 lit %.n
1805−285:13 lit ~
1806−287:1 DEDENT
1807−287:1 DEDENT
1808−287:1 DEDENT
1809−287:1 DEDENT
1810−287:1 NEWLINE
1811−287:1 glyph ++
1812−287:4 name murn
1813−287:9 glyph |=
1814−287:12 name args
1815−287:16 tight glyph =
1816−287:17 tight glyph [
1817−287:18 tight glyph (
1818−287:19 tight name list
1819−287:24 tvar A
1820−287:25 tight glyph )
1821−287:27 glyph $-(
1822−287:30 tight tvar A
1823−287:32 glyph (
1824−287:33 tight name unit
1825−287:38 tvar B
1826−287:39 tight glyph )
1827−287:40 tight glyph )
1828−287:41 tight glyph ]
1829−288:3 INDENT
1830−288:3 glyph ?-
1831−288:6 name args
1832−289:5 INDENT
1833−289:5 glyph [
1834−289:6 tight name xs
1835−289:9 name f
1836−289:10 tight glyph ]
1837−289:12 glyph ^-
1838−289:15 glyph (
1839−289:16 tight name list
1840−289:21 tvar B
1841−289:22 tight glyph )
1842−290:9 INDENT
1843−290:9 glyph ?-
1844−290:12 name xs
1845−291:11 INDENT
1846−291:11 lit ~
1847−291:13 lit ~
1848−292:11 NEWLINE
1849−292:11 glyph [
1850−292:12 tight name item
1851−292:17 name rest
1852−292:21 tight glyph ]
1853−293:13 INDENT
1854−293:13 glyph ?-
1855−293:16 glyph (
1856−293:17 tight name f
1857−293:19 name item
1858−293:23 tight glyph )
1859−294:15 INDENT
1860−294:15 lit ~
1861−294:17 glyph (
1862−294:18 tight name murn
1863−294:23 name rest
1864−294:28 name f
1865−294:29 tight glyph )
1866−295:15 NEWLINE
1867−295:15 glyph [
1868−295:16 tight lit ~
1869−295:18 name value
1870−295:23 tight glyph ]
1871−295:25 glyph [
1872−295:26 tight name value
1873−295:32 glyph (
1874−295:33 tight name murn
1875−295:38 name rest
1876−295:43 name f
1877−295:44 tight glyph )
1878−295:45 tight glyph ]
1879−297:1 DEDENT
1880−297:1 DEDENT
1881−297:1 DEDENT
1882−297:1 DEDENT
1883−297:1 DEDENT
1884−297:1 DEDENT
1885−297:1 NEWLINE
1886−297:1 glyph ++
1887−297:4 name join
1888−297:9 glyph |=
1889−297:12 name args
1890−297:16 tight glyph =
1891−297:17 tight glyph [
1892−297:18 tight tvar A
1893−297:20 glyph (
1894−297:21 tight name list
1895−297:26 tvar A
1896−297:27 tight glyph )
1897−297:28 tight glyph ]
1898−298:3 INDENT
1899−298:3 glyph ?-
1900−298:6 name args
1901−299:5 INDENT
1902−299:5 glyph [
1903−299:6 tight name separator
1904−299:16 name xs
1905−299:18 tight glyph ]
1906−299:20 glyph ^-
1907−299:23 glyph (
1908−299:24 tight name list
1909−299:29 tvar A
1910−299:30 tight glyph )
1911−300:9 INDENT
1912−300:9 glyph ?-
1913−300:12 name xs
1914−301:11 INDENT
1915−301:11 lit ~
1916−301:13 lit ~
1917−302:11 NEWLINE
1918−302:11 glyph [
1919−302:12 tight name item
1920−302:17 name rest
1921−302:21 tight glyph ]
1922−303:13 INDENT
1923−303:13 glyph ?-
1924−303:16 name rest
1925−304:15 INDENT
1926−304:15 lit ~
1927−304:17 glyph [
1928−304:18 tight name item
1929−304:23 lit ~
1930−304:24 tight glyph ]
1931−305:15 NEWLINE
1932−305:15 glyph [
1933−305:16 tight name next
1934−305:21 name more
1935−305:25 tight glyph ]
1936−305:27 glyph [
1937−305:28 tight name item
1938−305:33 glyph [
1939−305:34 tight name separator
1940−305:44 glyph (
1941−305:45 tight name join
1942−305:50 name separator
1943−305:60 name rest
1944−305:64 tight glyph )
1945−305:65 tight glyph ]
1946−305:66 tight glyph ]
1947−307:1 DEDENT
1948−307:1 DEDENT
1949−307:1 DEDENT
1950−307:1 DEDENT
1951−307:1 DEDENT
1952−307:1 DEDENT
1953−307:1 NEWLINE
1954−307:1 glyph ++
1955−307:4 name snip
1956−307:9 glyph |=
1957−307:12 name xs
1958−307:14 tight glyph =
1959−307:15 tight glyph (
1960−307:16 tight name list
1961−307:21 tvar A
1962−307:22 tight glyph )
1963−308:3 INDENT
1964−308:3 glyph ^-
1965−308:6 glyph (
1966−308:7 tight name list
1967−308:12 tvar A
1968−308:13 tight glyph )
1969−309:5 INDENT
1970−309:5 glyph ?-
1971−309:8 name xs
1972−310:7 INDENT
1973−310:7 lit ~
1974−310:9 lit ~
1975−311:7 NEWLINE
1976−311:7 glyph [
1977−311:8 tight name item
1978−311:13 name rest
1979−311:17 tight glyph ]
1980−312:9 INDENT
1981−312:9 glyph ?-
1982−312:12 name rest
1983−313:11 INDENT
1984−313:11 lit ~
1985−313:13 lit ~
1986−314:11 NEWLINE
1987−314:11 glyph [
1988−314:12 tight name next
1989−314:17 name more
1990−314:21 tight glyph ]
1991−314:23 glyph [
1992−314:24 tight name item
1993−314:29 glyph (
1994−314:30 tight name snip
1995−314:35 name rest
1996−314:39 tight glyph )
1997−314:40 tight glyph ]
1998−316:1 DEDENT
1999−316:1 DEDENT
2000−316:1 DEDENT
2001−316:1 DEDENT
2002−316:1 DEDENT
2003−316:1 NEWLINE
2004−316:1 glyph ++
2005−316:4 name rear
2006−316:9 glyph |=
2007−316:12 name xs
2008−316:14 tight glyph =
2009−316:15 tight glyph (
2010−316:16 tight name list
2011−316:21 tvar A
2012−316:22 tight glyph )
2013−317:3 INDENT
2014−317:3 glyph ?-
2015−317:6 name xs
2016−318:5 INDENT
2017−318:5 lit ~
2018−318:7 glyph !!
2019−319:5 NEWLINE
2020−319:5 glyph [
2021−319:6 tight name item
2022−319:11 name rest
2023−319:15 tight glyph ]
2024−320:7 INDENT
2025−320:7 glyph ?-
2026−320:10 name rest
2027−321:9 INDENT
2028−321:9 lit ~
2029−321:11 name item
2030−322:9 NEWLINE
2031−322:9 glyph [
2032−322:10 tight name next
2033−322:15 name more
2034−322:19 tight glyph ]
2035−322:21 glyph (
2036−322:22 tight name rear
2037−322:27 name rest
2038−322:31 tight glyph )
2039−324:1 DEDENT
2040−324:1 DEDENT
2041−324:1 DEDENT
2042−324:1 DEDENT
2043−324:1 NEWLINE
2044−324:1 glyph ++
2045−324:4 name cork
2046−324:9 glyph |=
2047−324:12 name gates
2048−324:17 tight glyph =
2049−324:18 tight glyph [
2050−324:19 tight glyph $-(
2051−324:22 tight tvar A
2052−324:24 tvar B
2053−324:25 tight glyph )
2054−324:27 glyph $-(
2055−324:30 tight tvar B
2056−324:32 tvar C
2057−324:33 tight glyph )
2058−324:34 tight glyph ]
2059−325:3 INDENT
2060−325:3 glyph ?-
2061−325:6 name gates
2062−326:5 INDENT
2063−326:5 glyph [
2064−326:6 tight name f
2065−326:8 name g
2066−326:9 tight glyph ]
2067−326:11 glyph |=
2068−326:14 name x
2069−326:15 tight glyph =
2070−326:16 tight tvar A
2071−326:18 glyph (
2072−326:19 tight name g
2073−326:21 glyph (
2074−326:22 tight name f
2075−326:24 name x
2076−326:25 tight glyph )
2077−326:26 tight glyph )
2078−328:1 DEDENT
2079−328:1 DEDENT
2080−328:1 NEWLINE
2081−328:1 glyph ++
2082−328:4 name corl
2083−328:9 glyph |=
2084−328:12 name gates
2085−328:17 tight glyph =
2086−328:18 tight glyph [
2087−328:19 tight glyph $-(
2088−328:22 tight tvar B
2089−328:24 tvar C
2090−328:25 tight glyph )
2091−328:27 glyph $-(
2092−328:30 tight tvar A
2093−328:32 tvar B
2094−328:33 tight glyph )
2095−328:34 tight glyph ]
2096−329:3 INDENT
2097−329:3 glyph ?-
2098−329:6 name gates
2099−330:5 INDENT
2100−330:5 glyph [
2101−330:6 tight name f
2102−330:8 name g
2103−330:9 tight glyph ]
2104−330:11 glyph |=
2105−330:14 name x
2106−330:15 tight glyph =
2107−330:16 tight tvar A
2108−330:18 glyph (
2109−330:19 tight name f
2110−330:21 glyph (
2111−330:22 tight name g
2112−330:24 name x
2113−330:25 tight glyph )
2114−330:26 tight glyph )
2115−332:1 DEDENT
2116−332:1 DEDENT
2117−332:1 NEWLINE
2118−332:1 glyph ++
2119−332:4 name cury
2120−332:9 glyph |=
2121−332:12 name args
2122−332:16 tight glyph =
2123−332:17 tight glyph [
2124−332:18 tight glyph $-(
2125−332:21 tight glyph [
2126−332:22 tight tvar A
2127−332:24 tvar B
2128−332:25 tight glyph ]
2129−332:27 tvar C
2130−332:28 tight glyph )
2131−332:30 tvar A
2132−332:31 tight glyph ]
2133−333:3 INDENT
2134−333:3 glyph ?-
2135−333:6 name args
2136−334:5 INDENT
1283+203:39 glyph (
1284+203:40 tight name unit
1285+203:45 tvar A
1286+203:46 tight glyph )
1287+203:47 tight glyph ]
1288+204:3 INDENT
1289+204:3 glyph ?-
1290+204:6 name args
1291+205:5 INDENT
1292+205:5 glyph [
1293+205:6 tight name choose
1294+205:13 name first
1295+205:19 name second
1296+205:25 tight glyph ]
1297+205:27 glyph ^-
1298+205:30 glyph (
1299+205:31 tight name unit
1300+205:36 tvar A
1301+205:37 tight glyph )
1302+206:7 INDENT
1303+206:7 glyph ?-
1304+206:10 name first
1305+207:9 INDENT
1306+207:9 lit ~
1307+207:11 name second
1308+208:9 NEWLINE
1309+208:9 glyph [
1310+208:10 tight lit ~
1311+208:12 name a
1312+208:13 tight glyph ]
1313+209:11 INDENT
1314+209:11 glyph ?-
1315+209:14 name second
1316+210:13 INDENT
1317+210:13 lit ~
1318+210:15 name first
1319+211:13 NEWLINE
1320+211:13 glyph [
1321+211:14 tight lit ~
1322+211:16 name b
1323+211:17 tight glyph ]
1324+212:15 INDENT
1325+212:15 glyph ?-
1326+212:18 glyph (
1327+212:19 tight name choose
1328+212:26 name a
1329+212:28 name b
1330+212:29 tight glyph )
1331+213:17 INDENT
1332+213:17 lit %.y
1333+213:21 name first
1334+214:17 NEWLINE
1335+214:17 lit %.n
1336+214:21 name second
1337+216:1 DEDENT
1338+216:1 DEDENT
1339+216:1 DEDENT
1340+216:1 DEDENT
1341+216:1 DEDENT
1342+216:1 DEDENT
1343+216:1 DEDENT
1344+216:1 DEDENT
1345+216:1 NEWLINE
1346+216:1 glyph ++
1347+216:4 name mate
1348+216:9 glyph |=
1349+216:12 name args
1350+216:16 tight glyph =
1351+216:17 tight glyph [
1352+216:18 tight glyph (
1353+216:19 tight name unit
1354+216:24 tvar A
1355+216:25 tight glyph )
1356+216:27 glyph (
1357+216:28 tight name unit
1358+216:33 tvar A
1359+216:34 tight glyph )
1360+216:35 tight glyph ]
1361+217:3 INDENT
1362+217:3 glyph ?-
1363+217:6 name args
1364+218:5 INDENT
1365+218:5 glyph [
1366+218:6 tight name first
1367+218:12 name second
1368+218:18 tight glyph ]
1369+218:20 glyph ^-
1370+218:23 glyph (
1371+218:24 tight name unit
1372+218:29 tvar A
1373+218:30 tight glyph )
1374+219:7 INDENT
1375+219:7 glyph ?-
1376+219:10 name second
1377+220:9 INDENT
1378+220:9 lit ~
1379+220:11 name first
1380+221:9 NEWLINE
1381+221:9 glyph [
1382+221:10 tight lit ~
1383+221:12 name b
1384+221:13 tight glyph ]
1385+222:11 INDENT
1386+222:11 glyph ?-
1387+222:14 name first
1388+223:13 INDENT
1389+223:13 lit ~
1390+223:15 name second
1391+224:13 NEWLINE
1392+224:13 glyph [
1393+224:14 tight lit ~
1394+224:16 name a
1395+224:17 tight glyph ]
1396+225:15 INDENT
1397+225:15 glyph ?-
1398+225:18 glyph (
1399+225:19 tight name eq
1400+225:22 name a
1401+225:24 name b
1402+225:25 tight glyph )
1403+226:17 INDENT
1404+226:17 lit %.y
1405+226:21 name first
1406+227:17 NEWLINE
1407+227:17 lit %.n
1408+227:21 glyph !!
1409+229:1 DEDENT
1410+229:1 DEDENT
1411+229:1 DEDENT
1412+229:1 DEDENT
1413+229:1 DEDENT
1414+229:1 DEDENT
1415+229:1 DEDENT
1416+229:1 DEDENT
1417+229:1 NEWLINE
1418+229:1 glyph ++
1419+229:4 name clef
1420+229:9 glyph |=
1421+229:12 name args
1422+229:16 tight glyph =
1423+229:17 tight glyph [
1424+229:18 tight glyph (
1425+229:19 tight name unit
1426+229:24 tvar A
1427+229:25 tight glyph )
1428+229:27 glyph (
1429+229:28 tight name unit
1430+229:33 tvar B
1431+229:34 tight glyph )
1432+229:36 glyph $-(
1433+229:39 tight glyph [
1434+229:40 tight tvar A
1435+229:42 tvar B
1436+229:43 tight glyph ]
1437+229:45 glyph (
1438+229:46 tight name unit
1439+229:51 tvar C
1440+229:52 tight glyph )
1441+229:53 tight glyph )
1442+229:54 tight glyph ]
1443+230:3 INDENT
1444+230:3 glyph ?-
1445+230:6 name args
1446+231:5 INDENT
1447+231:5 glyph [
1448+231:6 tight name first
1449+231:12 name second
1450+231:19 name combine
1451+231:26 tight glyph ]
1452+231:28 glyph ^-
1453+231:31 glyph (
1454+231:32 tight name unit
1455+231:37 tvar C
1456+231:38 tight glyph )
1457+232:7 INDENT
1458+232:7 glyph ?-
1459+232:10 name first
1460+233:9 INDENT
1461+233:9 lit ~
1462+233:11 lit ~
1463+234:9 NEWLINE
1464+234:9 glyph [
1465+234:10 tight lit ~
1466+234:12 name a
1467+234:13 tight glyph ]
1468+235:11 INDENT
1469+235:11 glyph ?-
1470+235:14 name second
1471+236:13 INDENT
1472+236:13 lit ~
1473+236:15 lit ~
1474+237:13 NEWLINE
1475+237:13 glyph [
1476+237:14 tight lit ~
1477+237:16 name b
1478+237:17 tight glyph ]
1479+237:19 glyph (
1480+237:20 tight name combine
1481+237:28 name a
1482+237:30 name b
1483+237:31 tight glyph )
1484+239:1 DEDENT
1485+239:1 DEDENT
1486+239:1 DEDENT
1487+239:1 DEDENT
1488+239:1 DEDENT
1489+239:1 DEDENT
1490+239:1 NEWLINE
1491+239:1 glyph ++
1492+239:4 name skim
1493+239:9 glyph |=
1494+239:12 name args
1495+239:16 tight glyph =
1496+239:17 tight glyph [
1497+239:18 tight glyph (
1498+239:19 tight name list
1499+239:24 tvar A
1500+239:25 tight glyph )
1501+239:27 glyph $-(
1502+239:30 tight tvar A
1503+239:32 glyph ?
1504+239:33 tight glyph )
1505+239:34 tight glyph ]
1506+240:3 INDENT
1507+240:3 glyph ?-
1508+240:6 name args
1509+241:5 INDENT
1510+241:5 glyph [
1511+241:6 tight name xs
1512+241:9 name predicate
1513+241:18 tight glyph ]
1514+241:20 glyph ^-
1515+241:23 glyph (
1516+241:24 tight name list
1517+241:29 tvar A
1518+241:30 tight glyph )
1519+242:9 INDENT
1520+242:9 glyph ?-
1521+242:12 name xs
1522+243:11 INDENT
1523+243:11 lit ~
1524+243:13 lit ~
1525+244:11 NEWLINE
1526+244:11 glyph [
1527+244:12 tight name item
1528+244:17 name rest
1529+244:21 tight glyph ]
1530+245:13 INDENT
1531+245:13 glyph ?-
1532+245:16 glyph (
1533+245:17 tight name predicate
1534+245:27 name item
1535+245:31 tight glyph )
1536+246:15 INDENT
1537+246:15 lit %.y
1538+246:19 glyph [
1539+246:20 tight name item
1540+246:25 glyph (
1541+246:26 tight name skim
1542+246:31 name rest
1543+246:36 name predicate
1544+246:45 tight glyph )
1545+246:46 tight glyph ]
1546+247:15 NEWLINE
1547+247:15 lit %.n
1548+247:19 glyph (
1549+247:20 tight name skim
1550+247:25 name rest
1551+247:30 name predicate
1552+247:39 tight glyph )
1553+249:1 DEDENT
1554+249:1 DEDENT
1555+249:1 DEDENT
1556+249:1 DEDENT
1557+249:1 DEDENT
1558+249:1 DEDENT
1559+249:1 NEWLINE
1560+249:1 glyph ++
1561+249:4 name skip
1562+249:9 glyph |=
1563+249:12 name args
1564+249:16 tight glyph =
1565+249:17 tight glyph [
1566+249:18 tight glyph (
1567+249:19 tight name list
1568+249:24 tvar A
1569+249:25 tight glyph )
1570+249:27 glyph $-(
1571+249:30 tight tvar A
1572+249:32 glyph ?
1573+249:33 tight glyph )
1574+249:34 tight glyph ]
1575+250:3 INDENT
1576+250:3 glyph ?-
1577+250:6 name args
1578+251:5 INDENT
1579+251:5 glyph [
1580+251:6 tight name xs
1581+251:9 name predicate
1582+251:18 tight glyph ]
1583+251:20 glyph ^-
1584+251:23 glyph (
1585+251:24 tight name list
1586+251:29 tvar A
1587+251:30 tight glyph )
1588+252:9 INDENT
1589+252:9 glyph ?-
1590+252:12 name xs
1591+253:11 INDENT
1592+253:11 lit ~
1593+253:13 lit ~
1594+254:11 NEWLINE
1595+254:11 glyph [
1596+254:12 tight name item
1597+254:17 name rest
1598+254:21 tight glyph ]
1599+255:13 INDENT
1600+255:13 glyph ?-
1601+255:16 glyph (
1602+255:17 tight name predicate
1603+255:27 name item
1604+255:31 tight glyph )
1605+256:15 INDENT
1606+256:15 lit %.y
1607+256:19 glyph (
1608+256:20 tight name skip
1609+256:25 name rest
1610+256:30 name predicate
1611+256:39 tight glyph )
1612+257:15 NEWLINE
1613+257:15 lit %.n
1614+257:19 glyph [
1615+257:20 tight name item
1616+257:25 glyph (
1617+257:26 tight name skip
1618+257:31 name rest
1619+257:36 name predicate
1620+257:45 tight glyph )
1621+257:46 tight glyph ]
1622+259:1 DEDENT
1623+259:1 DEDENT
1624+259:1 DEDENT
1625+259:1 DEDENT
1626+259:1 DEDENT
1627+259:1 DEDENT
1628+259:1 NEWLINE
1629+259:1 glyph ++
1630+259:4 name levy
1631+259:9 glyph |=
1632+259:12 name args
1633+259:16 tight glyph =
1634+259:17 tight glyph [
1635+259:18 tight glyph (
1636+259:19 tight name list
1637+259:24 tvar A
1638+259:25 tight glyph )
1639+259:27 glyph $-(
1640+259:30 tight tvar A
1641+259:32 glyph ?
1642+259:33 tight glyph )
1643+259:34 tight glyph ]
1644+260:3 INDENT
1645+260:3 glyph ^-
1646+260:6 glyph ?
1647+261:5 INDENT
1648+261:5 glyph ?-
1649+261:8 name args
1650+262:7 INDENT
1651+262:7 glyph [
1652+262:8 tight name xs
1653+262:11 name predicate
1654+262:20 tight glyph ]
1655+263:9 INDENT
1656+263:9 glyph ?-
1657+263:12 name xs
1658+264:11 INDENT
1659+264:11 lit ~
1660+264:13 lit %.y
1661+265:11 NEWLINE
1662+265:11 glyph [
1663+265:12 tight name item
1664+265:17 name rest
1665+265:21 tight glyph ]
1666+266:13 INDENT
1667+266:13 glyph ?-
1668+266:16 glyph (
1669+266:17 tight name predicate
1670+266:27 name item
1671+266:31 tight glyph )
1672+267:15 INDENT
1673+267:15 lit %.y
1674+267:19 glyph (
1675+267:20 tight name levy
1676+267:25 name rest
1677+267:30 name predicate
1678+267:39 tight glyph )
1679+268:15 NEWLINE
1680+268:15 lit %.n
1681+268:19 lit %.n
1682+270:1 DEDENT
1683+270:1 DEDENT
1684+270:1 DEDENT
1685+270:1 DEDENT
1686+270:1 DEDENT
1687+270:1 DEDENT
1688+270:1 DEDENT
1689+270:1 NEWLINE
1690+270:1 glyph ++
1691+270:4 name lien
1692+270:9 glyph |=
1693+270:12 name args
1694+270:16 tight glyph =
1695+270:17 tight glyph [
1696+270:18 tight glyph (
1697+270:19 tight name list
1698+270:24 tvar A
1699+270:25 tight glyph )
1700+270:27 glyph $-(
1701+270:30 tight tvar A
1702+270:32 glyph ?
1703+270:33 tight glyph )
1704+270:34 tight glyph ]
1705+271:3 INDENT
1706+271:3 glyph ^-
1707+271:6 glyph ?
1708+272:5 INDENT
1709+272:5 glyph ?-
1710+272:8 name args
1711+273:7 INDENT
1712+273:7 glyph [
1713+273:8 tight name xs
1714+273:11 name predicate
1715+273:20 tight glyph ]
1716+274:9 INDENT
1717+274:9 glyph ?-
1718+274:12 name xs
1719+275:11 INDENT
1720+275:11 lit ~
1721+275:13 lit %.n
1722+276:11 NEWLINE
1723+276:11 glyph [
1724+276:12 tight name item
1725+276:17 name rest
1726+276:21 tight glyph ]
1727+277:13 INDENT
1728+277:13 glyph ?-
1729+277:16 glyph (
1730+277:17 tight name predicate
1731+277:27 name item
1732+277:31 tight glyph )
1733+278:15 INDENT
1734+278:15 lit %.y
1735+278:19 lit %.y
1736+279:15 NEWLINE
1737+279:15 lit %.n
1738+279:19 glyph (
1739+279:20 tight name lien
1740+279:25 name rest
1741+279:30 name predicate
1742+279:39 tight glyph )
1743+281:1 DEDENT
1744+281:1 DEDENT
1745+281:1 DEDENT
1746+281:1 DEDENT
1747+281:1 DEDENT
1748+281:1 DEDENT
1749+281:1 DEDENT
1750+281:1 NEWLINE
1751+281:1 glyph ++
1752+281:4 name roll
1753+281:9 glyph |=
1754+281:12 name args
1755+281:16 tight glyph =
1756+281:17 tight glyph [
1757+281:18 tight glyph (
1758+281:19 tight name list
1759+281:24 tvar A
1760+281:25 tight glyph )
1761+281:27 tvar B
1762+281:29 glyph $-(
1763+281:32 tight glyph [
1764+281:33 tight tvar A
1765+281:35 tvar B
1766+281:36 tight glyph ]
1767+281:38 tvar B
1768+281:39 tight glyph )
1769+281:40 tight glyph ]
1770+282:3 INDENT
1771+282:3 glyph ?-
1772+282:6 name args
1773+283:5 INDENT
1774+283:5 glyph [
1775+283:6 tight name xs
1776+283:9 name start
1777+283:15 name combine
1778+283:22 tight glyph ]
1779+284:7 INDENT
1780+284:7 glyph ?-
1781+284:10 name xs
1782+285:9 INDENT
1783+285:9 lit ~
1784+285:11 name start
1785+286:9 NEWLINE
1786+286:9 glyph [
1787+286:10 tight name item
1788+286:15 name rest
1789+286:19 tight glyph ]
1790+286:21 glyph (
1791+286:22 tight name roll
1792+286:27 name rest
1793+286:32 glyph (
1794+286:33 tight name combine
1795+286:41 name item
1796+286:46 name start
1797+286:51 tight glyph )
1798+286:53 name combine
1799+286:60 tight glyph )
1800+288:1 DEDENT
1801+288:1 DEDENT
1802+288:1 DEDENT
1803+288:1 DEDENT
1804+288:1 NEWLINE
1805+288:1 glyph ++
1806+288:4 name reel
1807+288:9 glyph |=
1808+288:12 name args
1809+288:16 tight glyph =
1810+288:17 tight glyph [
1811+288:18 tight glyph (
1812+288:19 tight name list
1813+288:24 tvar A
1814+288:25 tight glyph )
1815+288:27 tvar B
1816+288:29 glyph $-(
1817+288:32 tight glyph [
1818+288:33 tight tvar A
1819+288:35 tvar B
1820+288:36 tight glyph ]
1821+288:38 tvar B
1822+288:39 tight glyph )
1823+288:40 tight glyph ]
1824+289:3 INDENT
1825+289:3 glyph ?-
1826+289:6 name args
1827+290:5 INDENT
1828+290:5 glyph [
1829+290:6 tight name xs
1830+290:9 name start
1831+290:15 name combine
1832+290:22 tight glyph ]
1833+291:7 INDENT
1834+291:7 glyph ?-
1835+291:10 name xs
1836+292:9 INDENT
1837+292:9 lit ~
1838+292:11 name start
1839+293:9 NEWLINE
1840+293:9 glyph [
1841+293:10 tight name item
1842+293:15 name rest
1843+293:19 tight glyph ]
1844+293:21 glyph (
1845+293:22 tight name combine
1846+293:30 name item
1847+293:35 glyph (
1848+293:36 tight name reel
1849+293:41 name rest
1850+293:46 name start
1851+293:52 name combine
1852+293:59 tight glyph )
1853+293:60 tight glyph )
1854+295:1 DEDENT
1855+295:1 DEDENT
1856+295:1 DEDENT
1857+295:1 DEDENT
1858+295:1 NEWLINE
1859+295:1 glyph ++
1860+295:4 name flit
1861+295:9 glyph |=
1862+295:12 name predicate
1863+295:21 tight glyph =
1864+295:22 tight glyph $-(
1865+295:25 tight tvar A
1866+295:27 glyph ?
1867+295:28 tight glyph )
1868+296:3 INDENT
1869+296:3 glyph |=
1870+296:6 name value
1871+296:11 tight glyph =
1872+296:12 tight tvar A
1873+297:5 INDENT
1874+297:5 glyph ^-
1875+297:8 glyph (
1876+297:9 tight name unit
1877+297:14 tvar A
1878+297:15 tight glyph )
1879+298:7 INDENT
1880+298:7 glyph ?-
1881+298:10 glyph (
1882+298:11 tight name predicate
1883+298:21 name value
1884+298:26 tight glyph )
1885+299:9 INDENT
1886+299:9 lit %.y
1887+299:13 glyph `
1888+299:14 tight name value
1889+300:9 NEWLINE
1890+300:9 lit %.n
1891+300:13 lit ~
1892+302:1 DEDENT
1893+302:1 DEDENT
1894+302:1 DEDENT
1895+302:1 DEDENT
1896+302:1 NEWLINE
1897+302:1 glyph ++
1898+302:4 name murn
1899+302:9 glyph |=
1900+302:12 name args
1901+302:16 tight glyph =
1902+302:17 tight glyph [
1903+302:18 tight glyph (
1904+302:19 tight name list
1905+302:24 tvar A
1906+302:25 tight glyph )
1907+302:27 glyph $-(
1908+302:30 tight tvar A
1909+302:32 glyph (
1910+302:33 tight name unit
1911+302:38 tvar B
1912+302:39 tight glyph )
1913+302:40 tight glyph )
1914+302:41 tight glyph ]
1915+303:3 INDENT
1916+303:3 glyph ?-
1917+303:6 name args
1918+304:5 INDENT
1919+304:5 glyph [
1920+304:6 tight name xs
1921+304:9 name f
1922+304:10 tight glyph ]
1923+304:12 glyph ^-
1924+304:15 glyph (
1925+304:16 tight name list
1926+304:21 tvar B
1927+304:22 tight glyph )
1928+305:9 INDENT
1929+305:9 glyph ?-
1930+305:12 name xs
1931+306:11 INDENT
1932+306:11 lit ~
1933+306:13 lit ~
1934+307:11 NEWLINE
1935+307:11 glyph [
1936+307:12 tight name item
1937+307:17 name rest
1938+307:21 tight glyph ]
1939+308:13 INDENT
1940+308:13 glyph ?-
1941+308:16 glyph (
1942+308:17 tight name f
1943+308:19 name item
1944+308:23 tight glyph )
1945+309:15 INDENT
1946+309:15 lit ~
1947+309:17 glyph (
1948+309:18 tight name murn
1949+309:23 name rest
1950+309:28 name f
1951+309:29 tight glyph )
1952+310:15 NEWLINE
1953+310:15 glyph [
1954+310:16 tight lit ~
1955+310:18 name value
1956+310:23 tight glyph ]
1957+310:25 glyph [
1958+310:26 tight name value
1959+310:32 glyph (
1960+310:33 tight name murn
1961+310:38 name rest
1962+310:43 name f
1963+310:44 tight glyph )
1964+310:45 tight glyph ]
1965+312:1 DEDENT
1966+312:1 DEDENT
1967+312:1 DEDENT
1968+312:1 DEDENT
1969+312:1 DEDENT
1970+312:1 DEDENT
1971+312:1 NEWLINE
1972+312:1 glyph ++
1973+312:4 name join
1974+312:9 glyph |=
1975+312:12 name args
1976+312:16 tight glyph =
1977+312:17 tight glyph [
1978+312:18 tight tvar A
1979+312:20 glyph (
1980+312:21 tight name list
1981+312:26 tvar A
1982+312:27 tight glyph )
1983+312:28 tight glyph ]
1984+313:3 INDENT
1985+313:3 glyph ?-
1986+313:6 name args
1987+314:5 INDENT
1988+314:5 glyph [
1989+314:6 tight name separator
1990+314:16 name xs
1991+314:18 tight glyph ]
1992+314:20 glyph ^-
1993+314:23 glyph (
1994+314:24 tight name list
1995+314:29 tvar A
1996+314:30 tight glyph )
1997+315:9 INDENT
1998+315:9 glyph ?-
1999+315:12 name xs
2000+316:11 INDENT
2001+316:11 lit ~
2002+316:13 lit ~
2003+317:11 NEWLINE
2004+317:11 glyph [
2005+317:12 tight name item
2006+317:17 name rest
2007+317:21 tight glyph ]
2008+318:13 INDENT
2009+318:13 glyph ?-
2010+318:16 name rest
2011+319:15 INDENT
2012+319:15 lit ~
2013+319:17 glyph [
2014+319:18 tight name item
2015+319:23 lit ~
2016+319:24 tight glyph ]
2017+320:15 NEWLINE
2018+320:15 glyph [
2019+320:16 tight name next
2020+320:21 name more
2021+320:25 tight glyph ]
2022+320:27 glyph [
2023+320:28 tight name item
2024+320:33 glyph [
2025+320:34 tight name separator
2026+320:44 glyph (
2027+320:45 tight name join
2028+320:50 name separator
2029+320:60 name rest
2030+320:64 tight glyph )
2031+320:65 tight glyph ]
2032+320:66 tight glyph ]
2033+322:1 DEDENT
2034+322:1 DEDENT
2035+322:1 DEDENT
2036+322:1 DEDENT
2037+322:1 DEDENT
2038+322:1 DEDENT
2039+322:1 NEWLINE
2040+322:1 glyph ++
2041+322:4 name snip
2042+322:9 glyph |=
2043+322:12 name xs
2044+322:14 tight glyph =
2045+322:15 tight glyph (
2046+322:16 tight name list
2047+322:21 tvar A
2048+322:22 tight glyph )
2049+323:3 INDENT
2050+323:3 glyph ^-
2051+323:6 glyph (
2052+323:7 tight name list
2053+323:12 tvar A
2054+323:13 tight glyph )
2055+324:5 INDENT
2056+324:5 glyph ?-
2057+324:8 name xs
2058+325:7 INDENT
2059+325:7 lit ~
2060+325:9 lit ~
2061+326:7 NEWLINE
2062+326:7 glyph [
2063+326:8 tight name item
2064+326:13 name rest
2065+326:17 tight glyph ]
2066+327:9 INDENT
2067+327:9 glyph ?-
2068+327:12 name rest
2069+328:11 INDENT
2070+328:11 lit ~
2071+328:13 lit ~
2072+329:11 NEWLINE
2073+329:11 glyph [
2074+329:12 tight name next
2075+329:17 name more
2076+329:21 tight glyph ]
2077+329:23 glyph [
2078+329:24 tight name item
2079+329:29 glyph (
2080+329:30 tight name snip
2081+329:35 name rest
2082+329:39 tight glyph )
2083+329:40 tight glyph ]
2084+331:1 DEDENT
2085+331:1 DEDENT
2086+331:1 DEDENT
2087+331:1 DEDENT
2088+331:1 DEDENT
2089+331:1 NEWLINE
2090+331:1 glyph ++
2091+331:4 name rear
2092+331:9 glyph |=
2093+331:12 name xs
2094+331:14 tight glyph =
2095+331:15 tight glyph (
2096+331:16 tight name list
2097+331:21 tvar A
2098+331:22 tight glyph )
2099+332:3 INDENT
2100+332:3 glyph ?-
2101+332:6 name xs
2102+333:5 INDENT
2103+333:5 lit ~
2104+333:7 glyph !!
2105+334:5 NEWLINE
21372106334:5 glyph [
2138−334:6 tight name f
2139−334:8 name a
2140−334:9 tight glyph ]
2141−334:11 glyph |=
2142−334:14 name b
2143−334:15 tight glyph =
2144−334:16 tight tvar B
2145−334:18 glyph (
2146−334:19 tight name f
2147−334:21 name a
2148−334:23 name b
2149−334:24 tight glyph )
2150−336:1 DEDENT
2151−336:1 DEDENT
2152−336:1 NEWLINE
2153−336:1 glyph ++
2154−336:4 name curr
2155−336:9 glyph |=
2156−336:12 name args
2157−336:16 tight glyph =
2158−336:17 tight glyph [
2159−336:18 tight glyph $-(
2160−336:21 tight glyph [
2161−336:22 tight tvar A
2162−336:24 tvar B
2163−336:25 tight glyph ]
2164−336:27 tvar C
2165−336:28 tight glyph )
2166−336:30 tvar B
2167−336:31 tight glyph ]
2168−337:3 INDENT
2169−337:3 glyph ?-
2170−337:6 name args
2171−338:5 INDENT
2172−338:5 glyph [
2173−338:6 tight name f
2174−338:8 name b
2175−338:9 tight glyph ]
2176−338:11 glyph |=
2177−338:14 name a
2178−338:15 tight glyph =
2179−338:16 tight tvar A
2180−338:18 glyph (
2181−338:19 tight name f
2182−338:21 name a
2183−338:23 name b
2184−338:24 tight glyph )
2185−340:1 DEDENT
2186−340:1 DEDENT
2187−340:1 NEWLINE
2188−340:1 glyph +$
2189−340:4 name cmd
2190−340:8 glyph |$
2191−340:11 glyph [
2192−340:12 tight tvar M
2193−340:13 tight glyph ]
2194−341:3 INDENT
2195−341:3 glyph [
2196−341:4 tight lit %poke
2197−341:10 name p
2198−341:11 tight glyph =
2199−341:12 tight name raw-poke
2200−341:21 name reply
2201−341:26 tight glyph =
2202−341:27 tight glyph $-(
2203−341:30 tight glyph (
2204−341:31 tight name unit
2205−341:36 aura @t
2206−341:38 tight glyph )
2207−341:40 tvar M
2208−341:41 tight glyph )
2209−341:42 tight glyph ]
2210−342:3 NEWLINE
2211−342:3 glyph [
2212−342:4 tight lit %go
2213−342:8 name url
2214−342:11 tight glyph =
2215−342:12 tight aura @t
2216−342:14 tight glyph ]
2217−343:3 NEWLINE
2218−343:3 glyph [
2219−343:4 tight lit %wait
2220−343:10 name gap
2221−343:13 tight glyph =
2222−343:14 tight aura @dr
2223−343:18 name msg
2224−343:21 tight glyph =
2225−343:22 tight tvar M
2226−343:23 tight glyph ]
2227−344:3 NEWLINE
2228−344:3 glyph [
2229−344:4 tight lit %now
2230−344:9 name reply
2231−344:14 tight glyph =
2232−344:15 tight glyph $-(
2233−344:18 tight aura @da
2234−344:22 tvar M
2235−344:23 tight glyph )
2236−344:24 tight glyph ]
2237−345:3 NEWLINE
2238−345:3 glyph [
2239−345:4 tight lit %who
2240−345:9 name reply
2241−345:14 tight glyph =
2242−345:15 tight glyph $-(
2243−345:18 tight aura @p
2244−345:21 tvar M
2245−345:22 tight glyph )
2246−345:23 tight glyph ]
2107+334:6 tight name item
2108+334:11 name rest
2109+334:15 tight glyph ]
2110+335:7 INDENT
2111+335:7 glyph ?-
2112+335:10 name rest
2113+336:9 INDENT
2114+336:9 lit ~
2115+336:11 name item
2116+337:9 NEWLINE
2117+337:9 glyph [
2118+337:10 tight name next
2119+337:15 name more
2120+337:19 tight glyph ]
2121+337:21 glyph (
2122+337:22 tight name rear
2123+337:27 name rest
2124+337:31 tight glyph )
2125+339:1 DEDENT
2126+339:1 DEDENT
2127+339:1 DEDENT
2128+339:1 DEDENT
2129+339:1 NEWLINE
2130+339:1 glyph ++
2131+339:4 name cork
2132+339:9 glyph |=
2133+339:12 name gates
2134+339:17 tight glyph =
2135+339:18 tight glyph [
2136+339:19 tight glyph $-(
2137+339:22 tight tvar A
2138+339:24 tvar B
2139+339:25 tight glyph )
2140+339:27 glyph $-(
2141+339:30 tight tvar B
2142+339:32 tvar C
2143+339:33 tight glyph )
2144+339:34 tight glyph ]
2145+340:3 INDENT
2146+340:3 glyph ?-
2147+340:6 name gates
2148+341:5 INDENT
2149+341:5 glyph [
2150+341:6 tight name f
2151+341:8 name g
2152+341:9 tight glyph ]
2153+341:11 glyph |=
2154+341:14 name x
2155+341:15 tight glyph =
2156+341:16 tight tvar A
2157+341:18 glyph (
2158+341:19 tight name g
2159+341:21 glyph (
2160+341:22 tight name f
2161+341:24 name x
2162+341:25 tight glyph )
2163+341:26 tight glyph )
2164+343:1 DEDENT
2165+343:1 DEDENT
2166+343:1 NEWLINE
2167+343:1 glyph ++
2168+343:4 name corl
2169+343:9 glyph |=
2170+343:12 name gates
2171+343:17 tight glyph =
2172+343:18 tight glyph [
2173+343:19 tight glyph $-(
2174+343:22 tight tvar B
2175+343:24 tvar C
2176+343:25 tight glyph )
2177+343:27 glyph $-(
2178+343:30 tight tvar A
2179+343:32 tvar B
2180+343:33 tight glyph )
2181+343:34 tight glyph ]
2182+344:3 INDENT
2183+344:3 glyph ?-
2184+344:6 name gates
2185+345:5 INDENT
2186+345:5 glyph [
2187+345:6 tight name f
2188+345:8 name g
2189+345:9 tight glyph ]
2190+345:11 glyph |=
2191+345:14 name x
2192+345:15 tight glyph =
2193+345:16 tight tvar A
2194+345:18 glyph (
2195+345:19 tight name f
2196+345:21 glyph (
2197+345:22 tight name g
2198+345:24 name x
2199+345:25 tight glyph )
2200+345:26 tight glyph )
2201+347:1 DEDENT
22472202347:1 DEDENT
22482203347:1 NEWLINE
22492204347:1 glyph ++
2250−347:4 name gth
2251−347:8 glyph |=
2252−347:11 name args
2253−347:15 tight glyph =
2254−347:16 tight glyph [
2255−347:17 tight tvar A
2256−347:19 tvar A
2257−347:20 tight glyph ]
2258−347:22 glyph (
2259−347:23 tight wing gth-atom.internal
2260−347:41 name args
2261−347:45 tight glyph )
2262−348:1 NEWLINE
2263−348:1 glyph ++
2264−348:4 name add
2265−348:8 glyph |=
2266−348:11 name args
2267−348:15 tight glyph =
2268−348:16 tight glyph [
2269−348:17 tight tvar A
2270−348:19 tvar A
2271−348:20 tight glyph ]
2272−348:22 glyph (
2273−348:23 tight wing add-atom.internal
2274−348:41 name args
2275−348:45 tight glyph )
2276−349:1 NEWLINE
2277−349:1 glyph ++
2278−349:4 name dec
2279−349:8 glyph |=
2280−349:11 name atom
2205+347:4 name cury
2206+347:9 glyph |=
2207+347:12 name args
2208+347:16 tight glyph =
2209+347:17 tight glyph [
2210+347:18 tight glyph $-(
2211+347:21 tight glyph [
2212+347:22 tight tvar A
2213+347:24 tvar B
2214+347:25 tight glyph ]
2215+347:27 tvar C
2216+347:28 tight glyph )
2217+347:30 tvar A
2218+347:31 tight glyph ]
2219+348:3 INDENT
2220+348:3 glyph ?-
2221+348:6 name args
2222+349:5 INDENT
2223+349:5 glyph [
2224+349:6 tight name f
2225+349:8 name a
2226+349:9 tight glyph ]
2227+349:11 glyph |=
2228+349:14 name b
22812229349:15 tight glyph =
2282−349:16 tight tvar A
2230+349:16 tight tvar B
22832231349:18 glyph (
2284−349:19 tight wing dec-atom.internal
2285−349:37 name atom
2286−349:41 tight glyph )
2232+349:19 tight name f
2233+349:21 name a
2234+349:23 name b
2235+349:24 tight glyph )
2236+351:1 DEDENT
2237+351:1 DEDENT
22872238351:1 NEWLINE
2288−351:1 glyph +$
2289−351:4 name ask
2290−351:8 glyph |$
2291−351:11 glyph [
2292−351:12 tight tvar M
2293−351:13 tight glyph ]
2294−351:15 glyph (
2295−351:16 tight wing ask.internal
2296−351:29 tvar M
2297−351:30 tight glyph )
2298−352:1 NEWLINE
2299−352:1 glyph ++
2300−352:4 name pure
2301−352:9 glyph |=
2302−352:12 name x
2303−352:13 tight glyph =
2304−352:14 tight tvar M
2305−352:16 glyph ^-
2306−352:19 glyph (
2307−352:20 tight name ask
2308−352:24 tvar M
2309−352:25 tight glyph )
2310−352:27 glyph [
2311−352:28 tight lit %pure
2312−352:34 name x
2313−352:35 tight glyph ]
2314−352:36 NEWLINE
2239+351:1 glyph ++
2240+351:4 name curr
2241+351:9 glyph |=
2242+351:12 name args
2243+351:16 tight glyph =
2244+351:17 tight glyph [
2245+351:18 tight glyph $-(
2246+351:21 tight glyph [
2247+351:22 tight tvar A
2248+351:24 tvar B
2249+351:25 tight glyph ]
2250+351:27 tvar C
2251+351:28 tight glyph )
2252+351:30 tvar B
2253+351:31 tight glyph ]
2254+352:3 INDENT
2255+352:3 glyph ?-
2256+352:6 name args
2257+353:5 INDENT
2258+353:5 glyph [
2259+353:6 tight name f
2260+353:8 name b
2261+353:9 tight glyph ]
2262+353:11 glyph |=
2263+353:14 name a
2264+353:15 tight glyph =
2265+353:16 tight tvar A
2266+353:18 glyph (
2267+353:19 tight name f
2268+353:21 name a
2269+353:23 name b
2270+353:24 tight glyph )
2271+355:1 DEDENT
2272+355:1 DEDENT
2273+355:1 NEWLINE
2274+355:1 glyph +$
2275+355:4 name cmd
2276+355:8 glyph |$
2277+355:11 glyph [
2278+355:12 tight tvar M
2279+355:13 tight glyph ]
2280+356:3 INDENT
2281+356:3 glyph [
2282+356:4 tight lit %poke
2283+356:10 name p
2284+356:11 tight glyph =
2285+356:12 tight name raw-poke
2286+356:21 name reply
2287+356:26 tight glyph =
2288+356:27 tight glyph $-(
2289+356:30 tight glyph (
2290+356:31 tight name unit
2291+356:36 aura @t
2292+356:38 tight glyph )
2293+356:40 tvar M
2294+356:41 tight glyph )
2295+356:42 tight glyph ]
2296+357:3 NEWLINE
2297+357:3 glyph [
2298+357:4 tight lit %go
2299+357:8 name url
2300+357:11 tight glyph =
2301+357:12 tight aura @t
2302+357:14 tight glyph ]
2303+358:3 NEWLINE
2304+358:3 glyph [
2305+358:4 tight lit %wait
2306+358:10 name gap
2307+358:13 tight glyph =
2308+358:14 tight aura @dr
2309+358:18 name msg
2310+358:21 tight glyph =
2311+358:22 tight tvar M
2312+358:23 tight glyph ]
2313+359:3 NEWLINE
2314+359:3 glyph [
2315+359:4 tight lit %now
2316+359:9 name reply
2317+359:14 tight glyph =
2318+359:15 tight glyph $-(
2319+359:18 tight aura @da
2320+359:22 tvar M
2321+359:23 tight glyph )
2322+359:24 tight glyph ]
2323+360:3 NEWLINE
2324+360:3 glyph [
2325+360:4 tight lit %who
2326+360:9 name reply
2327+360:14 tight glyph =
2328+360:15 tight glyph $-(
2329+360:18 tight aura @p
2330+360:21 tvar M
2331+360:22 tight glyph )
2332+360:23 tight glyph ]
2333+362:1 DEDENT
2334+362:1 NEWLINE
2335+362:1 glyph ++
2336+362:4 name gth
2337+362:8 glyph |=
2338+362:11 name args
2339+362:15 tight glyph =
2340+362:16 tight glyph [
2341+362:17 tight tvar A
2342+362:19 tvar A
2343+362:20 tight glyph ]
2344+362:22 glyph (
2345+362:23 tight wing gth-atom.internal
2346+362:41 name args
2347+362:45 tight glyph )
2348+363:1 NEWLINE
2349+363:1 glyph ++
2350+363:4 name add
2351+363:8 glyph |=
2352+363:11 name args
2353+363:15 tight glyph =
2354+363:16 tight glyph [
2355+363:17 tight tvar A
2356+363:19 tvar A
2357+363:20 tight glyph ]
2358+363:22 glyph (
2359+363:23 tight wing add-atom.internal
2360+363:41 name args
2361+363:45 tight glyph )
2362+364:1 NEWLINE
2363+364:1 glyph ++
2364+364:4 name dec
2365+364:8 glyph |=
2366+364:11 name atom
2367+364:15 tight glyph =
2368+364:16 tight tvar A
2369+364:18 glyph (
2370+364:19 tight wing dec-atom.internal
2371+364:37 name atom
2372+364:41 tight glyph )
2373+366:1 NEWLINE
2374+366:1 glyph +$
2375+366:4 name ask
2376+366:8 glyph |$
2377+366:11 glyph [
2378+366:12 tight tvar M
2379+366:13 tight glyph ]
2380+366:15 glyph (
2381+366:16 tight wing ask.internal
2382+366:29 tvar M
2383+366:30 tight glyph )
2384+367:1 NEWLINE
2385+367:1 glyph ++
2386+367:4 name pure
2387+367:9 glyph |=
2388+367:12 name x
2389+367:13 tight glyph =
2390+367:14 tight tvar M
2391+367:16 glyph ^-
2392+367:19 glyph (
2393+367:20 tight name ask
2394+367:24 tvar M
2395+367:25 tight glyph )
2396+367:27 glyph [
2397+367:28 tight lit %pure
2398+367:34 name x
2399+367:35 tight glyph ]
2400+367:36 NEWLINE
tests/golden/prelude-unit-list-transforms/tree.txt+994−957
@@ -34,973 +34,1010 @@
3434 (wing 18:6 b)
3535 (arm 19:5 (lit 19:5 %.y) (lit 19:9 %.n))
3636 (arm 20:5 (lit 20:5 %.n) (lit 20:9 %.y))))))
37− (mold 22:1 list
38− (generic 22:9 A
39− (union 23:3
40− (const 23:3 ~)
41− (cell 24:3
42− (face 24:4 i (tvar 24:6 A))
43− (face 24:8 t
44− (apply 24:10 list (tvar 24:16 A)))))))
45− (mold 26:1 unit
46− (generic 26:9 A
47− (union 27:3
48− (const 27:3 ~)
49− (cell 28:3
50− (const 28:4 ~)
51− (face 28:6 u (tvar 28:8 A))))))
52− (value 30:1 fall
53− (gate 30:9
54− (face 30:12 args
55− (cell 30:17
56− (apply 30:18 unit (tvar 30:24 A))
57− (tvar 30:27 A)))
58− (body 31:3
59− (branch 31:3
60− (wing 31:6 args)
61− (arm 32:5
62− (cell 32:5 (bind 32:6 maybe) (bind 32:12 fallback))
63− (body 33:7
64− (branch 33:7
65− (wing 33:10 maybe)
66− (arm 34:9 (lit 34:9 ~) (wing 34:11 fallback))
67− (arm 35:9
68− (cell 35:9 (lit 35:10 ~) (bind 35:12 value))
69− (wing 35:19 value)))))))))
70− (value 37:1 need
71− (gate 37:9
72− (face 37:12 maybe
73− (apply 37:18 unit (tvar 37:24 A)))
74− (body 38:3
75− (branch 38:3
76− (wing 38:6 maybe)
77− (arm 39:5 (lit 39:5 ~) (crash 39:7))
78− (arm 40:5
79− (cell 40:5 (lit 40:6 ~) (bind 40:8 value))
80− (wing 40:15 value))))))
81− (value 42:1 weld
82− (gate 42:9
83− (face 42:12 args
84− (cell 42:17
85− (apply 42:18 list (tvar 42:24 A))
86− (apply 42:27 list (tvar 42:33 A))))
87− (body 43:3
88− (branch 43:3
89− (wing 43:6 args)
90− (arm 44:5
91− (cell 44:5 (bind 44:6 xs) (bind 44:9 ys))
92− (body 45:7
93− (cast 45:7
94− (apply 45:10 list (tvar 45:16 A))
95− (body 46:9
96− (branch 46:9
97− (wing 46:12 xs)
98− (arm 47:11 (lit 47:11 ~) (wing 47:13 ys))
99− (arm 48:11
100− (cell 48:11 (bind 48:12 item) (bind 48:17 rest))
101− (tuple 48:23
102− (wing 48:24 item)
103− (group 48:29
104− (call 48:30 (wing 48:30 weld) (wing 48:35 rest) (wing 48:40 ys))))))))))))))
105− (value 50:1 turn
106− (gate 50:9
107− (face 50:12 args
108− (cell 50:17
109− (apply 50:18 list (tvar 50:24 A))
110− (fn 50:27 (tvar 50:30 A) (tvar 50:32 B))))
111− (body 51:3
112− (branch 51:3
113− (wing 51:6 args)
114− (arm 52:5
115− (cell 52:5 (bind 52:6 xs) (bind 52:9 f))
116− (body 53:7
117− (cast 53:7
118− (apply 53:10 list (tvar 53:16 B))
119− (body 54:9
120− (branch 54:9
121− (wing 54:12 xs)
122− (arm 55:11 (lit 55:11 ~) (lit 55:13 ~))
123− (arm 56:11
124− (cell 56:11 (bind 56:12 item) (bind 56:17 rest))
125− (tuple 56:23
126− (group 56:24
127− (call 56:25 (wing 56:25 f) (wing 56:27 item)))
128− (group 56:33
129− (call 56:34 (wing 56:34 turn) (wing 56:39 rest) (wing 56:44 f))))))))))))))
130− (mold 58:1 dime
131− (cell 58:9
132− (face 58:10 p (aura 58:12 @ta))
133− (face 58:16 q (aura 58:18 @))))
134− (mold 60:1 hair
37+ (value 22:1 eq
38+ (gate 22:7
39+ (face 22:10 args
40+ (cell 22:15 (tvar 22:16 A) (tvar 22:18 A)))
41+ (group 22:21
42+ (call 22:22 (wing 22:22 eq-data.internal) (wing 22:39 args)))))
43+ (mold 24:1 list
44+ (generic 24:9 A
45+ (union 25:3
46+ (const 25:3 ~)
47+ (cell 26:3
48+ (face 26:4 i (tvar 26:6 A))
49+ (face 26:8 t
50+ (apply 26:10 list (tvar 26:16 A)))))))
51+ (mold 28:1 unit
52+ (generic 28:9 A
53+ (union 29:3
54+ (const 29:3 ~)
55+ (cell 30:3
56+ (const 30:4 ~)
57+ (face 30:6 u (tvar 30:8 A))))))
58+ (value 32:1 fall
59+ (gate 32:9
60+ (face 32:12 args
61+ (cell 32:17
62+ (apply 32:18 unit (tvar 32:24 A))
63+ (tvar 32:27 A)))
64+ (body 33:3
65+ (branch 33:3
66+ (wing 33:6 args)
67+ (arm 34:5
68+ (cell 34:5 (bind 34:6 maybe) (bind 34:12 fallback))
69+ (body 35:7
70+ (branch 35:7
71+ (wing 35:10 maybe)
72+ (arm 36:9 (lit 36:9 ~) (wing 36:11 fallback))
73+ (arm 37:9
74+ (cell 37:9 (lit 37:10 ~) (bind 37:12 value))
75+ (wing 37:19 value)))))))))
76+ (value 39:1 need
77+ (gate 39:9
78+ (face 39:12 maybe
79+ (apply 39:18 unit (tvar 39:24 A)))
80+ (body 40:3
81+ (branch 40:3
82+ (wing 40:6 maybe)
83+ (arm 41:5 (lit 41:5 ~) (crash 41:7))
84+ (arm 42:5
85+ (cell 42:5 (lit 42:6 ~) (bind 42:8 value))
86+ (wing 42:15 value))))))
87+ (value 44:1 weld
88+ (gate 44:9
89+ (face 44:12 args
90+ (cell 44:17
91+ (apply 44:18 list (tvar 44:24 A))
92+ (apply 44:27 list (tvar 44:33 A))))
93+ (body 45:3
94+ (branch 45:3
95+ (wing 45:6 args)
96+ (arm 46:5
97+ (cell 46:5 (bind 46:6 xs) (bind 46:9 ys))
98+ (body 47:7
99+ (cast 47:7
100+ (apply 47:10 list (tvar 47:16 A))
101+ (body 48:9
102+ (branch 48:9
103+ (wing 48:12 xs)
104+ (arm 49:11 (lit 49:11 ~) (wing 49:13 ys))
105+ (arm 50:11
106+ (cell 50:11 (bind 50:12 item) (bind 50:17 rest))
107+ (tuple 50:23
108+ (wing 50:24 item)
109+ (group 50:29
110+ (call 50:30 (wing 50:30 weld) (wing 50:35 rest) (wing 50:40 ys))))))))))))))
111+ (value 52:1 turn
112+ (gate 52:9
113+ (face 52:12 args
114+ (cell 52:17
115+ (apply 52:18 list (tvar 52:24 A))
116+ (fn 52:27 (tvar 52:30 A) (tvar 52:32 B))))
117+ (body 53:3
118+ (branch 53:3
119+ (wing 53:6 args)
120+ (arm 54:5
121+ (cell 54:5 (bind 54:6 xs) (bind 54:9 f))
122+ (body 55:7
123+ (cast 55:7
124+ (apply 55:10 list (tvar 55:16 B))
125+ (body 56:9
126+ (branch 56:9
127+ (wing 56:12 xs)
128+ (arm 57:11 (lit 57:11 ~) (lit 57:13 ~))
129+ (arm 58:11
130+ (cell 58:11 (bind 58:12 item) (bind 58:17 rest))
131+ (tuple 58:23
132+ (group 58:24
133+ (call 58:25 (wing 58:25 f) (wing 58:27 item)))
134+ (group 58:33
135+ (call 58:34 (wing 58:34 turn) (wing 58:39 rest) (wing 58:44 f))))))))))))))
136+ (mold 60:1 dime
135137 (cell 60:9
136− (face 60:10 p (aura 60:12 @ud))
137− (face 60:16 q (aura 60:18 @ud))))
138− (mold 62:1 pint
138+ (face 60:10 p (aura 60:12 @ta))
139+ (face 60:16 q (aura 60:18 @))))
140+ (mold 62:1 hair
139141 (cell 62:9
140− (face 62:10 p
141− (cell 62:12
142− (face 62:13 p (aura 62:15 @))
143− (face 62:17 q (aura 62:19 @))))
144− (face 62:22 q
145− (cell 62:24
146− (face 62:25 p (aura 62:27 @))
147− (face 62:29 q (aura 62:31 @))))))
148− (mold 64:1 coin
149− (union 65:3
150− (cell 65:3
151− (const 65:4 %$)
152− (face 65:7 p (ref 65:9 dime)))
153− (cell 66:3
154− (const 66:4 %blob)
155− (face 66:10 p (noun 66:12)))
142+ (face 62:10 p (aura 62:12 @ud))
143+ (face 62:16 q (aura 62:18 @ud))))
144+ (mold 64:1 pint
145+ (cell 64:9
146+ (face 64:10 p
147+ (cell 64:12
148+ (face 64:13 p (aura 64:15 @))
149+ (face 64:17 q (aura 64:19 @))))
150+ (face 64:22 q
151+ (cell 64:24
152+ (face 64:25 p (aura 64:27 @))
153+ (face 64:29 q (aura 64:31 @))))))
154+ (mold 66:1 coin
155+ (union 67:3
156156 (cell 67:3
157− (const 67:4 %many)
158− (face 67:10 p
159− (apply 67:12 list (ref 67:18 coin))))))
160− (mold 69:1 pair
161− (generic 69:9 A B
162− (cell 69:18
163− (face 69:19 p (tvar 69:21 A))
164− (face 69:23 q (tvar 69:25 B)))))
165− (mold 71:1 trel
166− (generic 71:9 A B C
167− (cell 71:20
168− (face 71:21 p (tvar 71:23 A))
169− (face 71:25 q (tvar 71:27 B))
170− (face 71:29 r (tvar 71:31 C)))))
171− (mold 73:1 qual
172− (generic 73:9 A B C D
173− (cell 73:22
174− (face 73:23 p (tvar 73:25 A))
175− (face 73:27 q (tvar 73:29 B))
176− (face 73:31 r (tvar 73:33 C))
177− (face 73:35 s (tvar 73:37 D)))))
178− (mold 75:1 cord (aura 75:9 @t))
179− (mold 77:1 knot (aura 77:9 @ta))
180− (mold 79:1 tape
181− (apply 79:9 list (aura 79:15 @tD)))
182− (mold 81:1 path
183− (apply 81:9 list (ref 81:15 knot)))
184− (mold 83:1 tank
185− (union 84:3
186− (ref 84:3 cord)
187− (cell 85:3
188− (const 85:4 %leaf)
189− (face 85:10 p (ref 85:12 tape)))
190− (cell 86:3
191− (const 86:4 %palm)
192− (face 86:10 p
193− (apply 86:12 qual (ref 86:18 tape) (ref 86:23 tape) (ref 86:28 tape) (ref 86:33 tape)))
194− (face 86:39 q
195− (apply 86:41 list (ref 86:47 tank))))
157+ (const 67:4 %$)
158+ (face 67:7 p (ref 67:9 dime)))
159+ (cell 68:3
160+ (const 68:4 %blob)
161+ (face 68:10 p (noun 68:12)))
162+ (cell 69:3
163+ (const 69:4 %many)
164+ (face 69:10 p
165+ (apply 69:12 list (ref 69:18 coin))))))
166+ (mold 71:1 pair
167+ (generic 71:9 A B
168+ (cell 71:18
169+ (face 71:19 p (tvar 71:21 A))
170+ (face 71:23 q (tvar 71:25 B)))))
171+ (mold 73:1 trel
172+ (generic 73:9 A B C
173+ (cell 73:20
174+ (face 73:21 p (tvar 73:23 A))
175+ (face 73:25 q (tvar 73:27 B))
176+ (face 73:29 r (tvar 73:31 C)))))
177+ (mold 75:1 qual
178+ (generic 75:9 A B C D
179+ (cell 75:22
180+ (face 75:23 p (tvar 75:25 A))
181+ (face 75:27 q (tvar 75:29 B))
182+ (face 75:31 r (tvar 75:33 C))
183+ (face 75:35 s (tvar 75:37 D)))))
184+ (mold 77:1 cord (aura 77:9 @t))
185+ (mold 79:1 knot (aura 79:9 @ta))
186+ (mold 81:1 tape
187+ (apply 81:9 list (aura 81:15 @tD)))
188+ (mold 83:1 path
189+ (apply 83:9 list (ref 83:15 knot)))
190+ (mold 85:1 tank
191+ (union 86:3
192+ (ref 86:3 cord)
196193 (cell 87:3
197− (const 87:4 %rose)
198− (face 87:10 p
199− (apply 87:12 trel (ref 87:18 tape) (ref 87:23 tape) (ref 87:28 tape)))
200− (face 87:34 q
201− (apply 87:36 list (ref 87:42 tank))))))
202− (mold 89:1 nail
203− (cell 89:9
204− (face 89:10 p (ref 89:12 hair))
205− (face 89:17 q (ref 89:19 tape))))
206− (mold 91:1 edge
194+ (const 87:4 %leaf)
195+ (face 87:10 p (ref 87:12 tape)))
196+ (cell 88:3
197+ (const 88:4 %palm)
198+ (face 88:10 p
199+ (apply 88:12 qual (ref 88:18 tape) (ref 88:23 tape) (ref 88:28 tape) (ref 88:33 tape)))
200+ (face 88:39 q
201+ (apply 88:41 list (ref 88:47 tank))))
202+ (cell 89:3
203+ (const 89:4 %rose)
204+ (face 89:10 p
205+ (apply 89:12 trel (ref 89:18 tape) (ref 89:23 tape) (ref 89:28 tape)))
206+ (face 89:34 q
207+ (apply 89:36 list (ref 89:42 tank))))))
208+ (mold 91:1 nail
207209 (cell 91:9
208210 (face 91:10 p (ref 91:12 hair))
209− (face 91:17 q
210− (apply 91:19 unit
211− (cell 91:25
212− (face 91:26 p (noun 91:28))
213− (face 91:30 q (ref 91:32 nail)))))))
214− (mold 93:1 rule
215− (fn 93:9 (ref 93:12 nail) (ref 93:17 edge)))
216− (mold 95:1 spot
217− (cell 95:9
218− (face 95:10 p (ref 95:12 path))
219− (face 95:17 q (ref 95:19 pint))))
220− (mold 97:1 toon
221− (union 98:3
222− (cell 98:3
223− (const 98:4 %0)
224− (face 98:7 p (noun 98:9)))
225− (cell 99:3
226− (const 99:4 %1)
227− (face 99:7 p (noun 99:9)))
211+ (face 91:17 q (ref 91:19 tape))))
212+ (mold 93:1 edge
213+ (cell 93:9
214+ (face 93:10 p (ref 93:12 hair))
215+ (face 93:17 q
216+ (apply 93:19 unit
217+ (cell 93:25
218+ (face 93:26 p (noun 93:28))
219+ (face 93:30 q (ref 93:32 nail)))))))
220+ (mold 95:1 rule
221+ (fn 95:9 (ref 95:12 nail) (ref 95:17 edge)))
222+ (mold 97:1 spot
223+ (cell 97:9
224+ (face 97:10 p (ref 97:12 path))
225+ (face 97:17 q (ref 97:19 pint))))
226+ (mold 99:1 toon
227+ (union 100:3
228228 (cell 100:3
229− (const 100:4 %2)
230− (face 100:7 p
231− (apply 100:9 list (ref 100:15 tank))))))
232− (mold 102:1 like
233− (generic 102:9 A
234− (cell 102:16
235− (face 102:17 p (ref 102:19 hair))
236− (face 102:24 q
237− (apply 102:26 unit
238− (cell 102:32
239− (face 102:33 p (tvar 102:35 A))
240− (face 102:37 q (ref 102:39 nail))))))))
241− (value 104:1 like
242− (gate 104:9
243− (cell 104:12
244− (face 104:13 f
245− (fn 104:15 (tvar 104:18 A) (tvar 104:20 B)))
246− (face 104:23 result
247− (apply 104:30 like (tvar 104:36 A))))
248− (body 105:3
249− (value 105:3 mapped
250− (body 106:5
251− (cast 106:5
252− (apply 106:8 unit
253− (cell 106:14
254− (face 106:15 p (tvar 106:17 B))
255− (face 106:19 q (ref 106:21 nail))))
256− (body 107:7
257− (branch 107:7
258− (wing 107:10 q.result)
259− (arm 108:9 (lit 108:9 ~) (lit 108:11 ~))
260− (arm 109:9
261− (cell 109:9 (lit 109:10 ~) (bind 109:12 value))
262− (unit 109:19
263− (tuple 109:20
264− (face 109:21 p
265− (group 109:23
266− (call 109:24 (wing 109:24 f) (wing 109:26 p.value))))
267− (face 109:35 q (wing 109:37 q.value))))))))))
268− (cast 110:3
269− (apply 110:6 like (tvar 110:12 B))
270− (tuple 110:15
271− (face 110:16 p (wing 110:18 p.result))
272− (face 110:27 q (wing 110:29 mapped)))))))
273− (value 112:1 wonk
274− (gate 112:9
275− (face 112:12 veq
276− (apply 112:16 like (tvar 112:22 A)))
277− (body 113:3
278− (branch 113:3
279− (wing 113:6 q.veq)
280− (arm 114:5 (lit 114:5 ~) (crash 114:7))
281− (arm 115:5
282− (cell 115:5 (lit 115:6 ~) (bind 115:8 product))
283− (wing 115:17 p.product))))))
284− (mold 117:1 lone
285− (generic 117:9 A
286− (cell 117:16
287− (face 117:17 p (tvar 117:19 A)))))
288− (mold 119:1 lest
229+ (const 100:4 %0)
230+ (face 100:7 p (noun 100:9)))
231+ (cell 101:3
232+ (const 101:4 %1)
233+ (face 101:7 p (noun 101:9)))
234+ (cell 102:3
235+ (const 102:4 %2)
236+ (face 102:7 p
237+ (apply 102:9 list (ref 102:15 tank))))))
238+ (mold 104:1 like
239+ (generic 104:9 A
240+ (cell 104:16
241+ (face 104:17 p (ref 104:19 hair))
242+ (face 104:24 q
243+ (apply 104:26 unit
244+ (cell 104:32
245+ (face 104:33 p (tvar 104:35 A))
246+ (face 104:37 q (ref 104:39 nail))))))))
247+ (value 106:1 like
248+ (gate 106:9
249+ (cell 106:12
250+ (face 106:13 f
251+ (fn 106:15 (tvar 106:18 A) (tvar 106:20 B)))
252+ (face 106:23 result
253+ (apply 106:30 like (tvar 106:36 A))))
254+ (body 107:3
255+ (value 107:3 mapped
256+ (body 108:5
257+ (cast 108:5
258+ (apply 108:8 unit
259+ (cell 108:14
260+ (face 108:15 p (tvar 108:17 B))
261+ (face 108:19 q (ref 108:21 nail))))
262+ (body 109:7
263+ (branch 109:7
264+ (wing 109:10 q.result)
265+ (arm 110:9 (lit 110:9 ~) (lit 110:11 ~))
266+ (arm 111:9
267+ (cell 111:9 (lit 111:10 ~) (bind 111:12 value))
268+ (unit 111:19
269+ (tuple 111:20
270+ (face 111:21 p
271+ (group 111:23
272+ (call 111:24 (wing 111:24 f) (wing 111:26 p.value))))
273+ (face 111:35 q (wing 111:37 q.value))))))))))
274+ (cast 112:3
275+ (apply 112:6 like (tvar 112:12 B))
276+ (tuple 112:15
277+ (face 112:16 p (wing 112:18 p.result))
278+ (face 112:27 q (wing 112:29 mapped)))))))
279+ (value 114:1 wonk
280+ (gate 114:9
281+ (face 114:12 veq
282+ (apply 114:16 like (tvar 114:22 A)))
283+ (body 115:3
284+ (branch 115:3
285+ (wing 115:6 q.veq)
286+ (arm 116:5 (lit 116:5 ~) (crash 116:7))
287+ (arm 117:5
288+ (cell 117:5 (lit 117:6 ~) (bind 117:8 product))
289+ (wing 117:17 p.product))))))
290+ (mold 119:1 lone
289291 (generic 119:9 A
290292 (cell 119:16
291− (face 119:17 i (tvar 119:19 A))
292− (face 119:21 t
293− (apply 119:23 list (tvar 119:29 A))))))
294− (mold 121:1 pole
293+ (face 119:17 p (tvar 119:19 A)))))
294+ (mold 121:1 lest
295295 (generic 121:9 A
296− (union 122:3
297− (const 122:3 ~)
298− (cell 123:3
299− (tvar 123:4 A)
300− (apply 123:6 pole (tvar 123:12 A))))))
301− (mold 125:1 quip
302− (generic 125:9 A B
303− (cell 125:18
304− (apply 125:19 list (tvar 125:25 A))
305− (tvar 125:28 B))))
306− (mold 127:1 tree
307− (generic 127:9 A
308− (union 128:3
309− (const 128:3 ~)
310− (cell 129:3
311− (face 129:4 n (tvar 129:6 A))
312− (face 129:8 l
313− (apply 129:10 tree (tvar 129:16 A)))
314− (face 129:19 r
315− (apply 129:21 tree (tvar 129:27 A)))))))
316− (mold 131:1 each
317− (generic 131:9 A B
318− (union 132:3
319− (cell 132:3
320− (const 132:4 %|)
321− (face 132:7 p (tvar 132:9 B)))
322− (cell 133:3
323− (const 133:4 %&)
324− (face 133:7 p (tvar 133:9 A))))))
325− (mold 135:1 bloq (aura 135:9 @))
326− (value 137:1 some
327− (gate 137:9
328− (face 137:12 item (tvar 137:17 A))
329− (unit 137:19 (wing 137:20 item))))
330− (value 139:1 lure
296+ (cell 121:16
297+ (face 121:17 i (tvar 121:19 A))
298+ (face 121:21 t
299+ (apply 121:23 list (tvar 121:29 A))))))
300+ (mold 123:1 pole
301+ (generic 123:9 A
302+ (union 124:3
303+ (const 124:3 ~)
304+ (cell 125:3
305+ (tvar 125:4 A)
306+ (apply 125:6 pole (tvar 125:12 A))))))
307+ (mold 127:1 quip
308+ (generic 127:9 A B
309+ (cell 127:18
310+ (apply 127:19 list (tvar 127:25 A))
311+ (tvar 127:28 B))))
312+ (mold 129:1 tree
313+ (generic 129:9 A
314+ (union 130:3
315+ (const 130:3 ~)
316+ (cell 131:3
317+ (face 131:4 n (tvar 131:6 A))
318+ (face 131:8 l
319+ (apply 131:10 tree (tvar 131:16 A)))
320+ (face 131:19 r
321+ (apply 131:21 tree (tvar 131:27 A)))))))
322+ (mold 133:1 each
323+ (generic 133:9 A B
324+ (union 134:3
325+ (cell 134:3
326+ (const 134:4 %|)
327+ (face 134:7 p (tvar 134:9 B)))
328+ (cell 135:3
329+ (const 135:4 %&)
330+ (face 135:7 p (tvar 135:9 A))))))
331+ (mold 137:1 bloq (aura 137:9 @))
332+ (value 139:1 some
331333 (gate 139:9
332334 (face 139:12 item (tvar 139:17 A))
333− (body 140:3
334− (cast 140:3
335− (apply 140:6 list (tvar 140:12 A))
336− (tuple 140:15 (wing 140:16 item) (lit 140:21 ~))))))
337− (value 142:1 snoc
338− (gate 142:9
339− (face 142:12 args
340− (cell 142:17
341− (apply 142:18 list (tvar 142:24 A))
342− (tvar 142:27 A)))
343− (body 143:3
344− (branch 143:3
345− (wing 143:6 args)
346− (arm 144:5
347− (cell 144:5 (bind 144:6 xs) (bind 144:9 item))
348− (group 144:15
349− (call 144:16
350− (wing 144:16 weld)
351− (wing 144:21 xs)
352− (tuple 144:24 (wing 144:25 item) (lit 144:30 ~)))))))))
353− (value 146:1 flop
354− (gate 146:9
355− (face 146:12 xs
356− (apply 146:15 list (tvar 146:21 A)))
357− (body 147:3
358− (value 147:3 reverse-into
359− (gate 147:19
360− (face 147:22 args
361− (cell 147:27
362− (apply 147:28 list (tvar 147:34 A))
363− (apply 147:37 list (tvar 147:43 A))))
364− (body 148:5
365− (branch 148:5
366− (wing 148:8 args)
367− (arm 149:7
368− (cell 149:7 (bind 149:8 rest) (bind 149:13 acc))
369− (body 150:9
370− (branch 150:9
371− (wing 150:12 rest)
372− (arm 151:11 (lit 151:11 ~) (wing 151:13 acc))
373− (arm 152:11
374− (cell 152:11 (bind 152:12 item) (bind 152:17 more))
375− (group 152:23
376− (call 152:24
377− (wing 152:24 reverse-into)
378− (wing 152:37 more)
379− (tuple 152:42 (wing 152:43 item) (wing 152:48 acc))))))))))))
380− (group 153:3
381− (call 153:4 (wing 153:4 reverse-into) (wing 153:17 xs) (lit 153:20 ~))))))
382− (value 155:1 drop
383− (gate 155:9
384− (face 155:12 maybe
385− (apply 155:18 unit (tvar 155:24 A)))
386− (body 156:3
387− (cast 156:3
388− (apply 156:6 list (tvar 156:12 A))
389− (body 157:5
390− (branch 157:5
391− (wing 157:8 maybe)
392− (arm 158:7 (lit 158:7 ~) (lit 158:9 ~))
393− (arm 159:7
394− (cell 159:7 (lit 159:8 ~) (bind 159:10 value))
395− (tuple 159:17 (wing 159:18 value) (lit 159:24 ~)))))))))
396− (value 161:1 bond
397− (gate 161:9
398− (face 161:12 fallback
399− (fn 161:21 (const 161:24 ~) (tvar 161:26 A)))
400− (body 162:3
401− (gate 162:3
402− (face 162:6 maybe
403− (apply 162:12 unit (tvar 162:18 A)))
404− (body 163:5
405− (branch 163:5
406− (wing 163:8 maybe)
407− (arm 164:7
408− (lit 164:7 ~)
409− (group 164:9
410− (call 164:10 (wing 164:10 fallback) (lit 164:19 ~))))
411− (arm 165:7
412− (cell 165:7 (lit 165:8 ~) (bind 165:10 value))
413− (wing 165:17 value))))))))
414− (value 167:1 bind
415− (gate 167:9
416− (face 167:12 args
417− (cell 167:17
418− (apply 167:18 unit (tvar 167:24 A))
419− (fn 167:27 (tvar 167:30 A) (tvar 167:32 B))))
420− (body 168:3
421− (branch 168:3
422− (wing 168:6 args)
423− (arm 169:5
424− (cell 169:5 (bind 169:6 maybe) (bind 169:12 f))
425− (cast 169:15
426− (apply 169:18 unit (tvar 169:24 B))
427− (body 170:7
428− (branch 170:7
429− (wing 170:10 maybe)
430− (arm 171:9 (lit 171:9 ~) (lit 171:11 ~))
431− (arm 172:9
432− (cell 172:9 (lit 172:10 ~) (bind 172:12 value))
433− (unit 172:19
434− (group 172:20
435− (call 172:21 (wing 172:21 f) (wing 172:23 value)))))))))))))
436− (value 174:1 biff
437− (gate 174:9
438− (face 174:12 args
439− (cell 174:17
440− (apply 174:18 unit (tvar 174:24 A))
441− (fn 174:27
442− (tvar 174:30 A)
443− (apply 174:32 unit (tvar 174:38 B)))))
444− (body 175:3
445− (branch 175:3
446− (wing 175:6 args)
447− (arm 176:5
448− (cell 176:5 (bind 176:6 maybe) (bind 176:12 f))
449− (cast 176:15
450− (apply 176:18 unit (tvar 176:24 B))
451− (body 177:7
452− (branch 177:7
453− (wing 177:10 maybe)
454− (arm 178:9 (lit 178:9 ~) (lit 178:11 ~))
455− (arm 179:9
456− (cell 179:9 (lit 179:10 ~) (bind 179:12 value))
457− (group 179:19
458− (call 179:20 (wing 179:20 f) (wing 179:22 value))))))))))))
459− (value 181:1 both
460− (gate 181:9
461− (face 181:12 args
462− (cell 181:17
463− (apply 181:18 unit (tvar 181:24 A))
464− (apply 181:27 unit (tvar 181:33 B))))
465− (body 182:3
466− (branch 182:3
467− (wing 182:6 args)
468− (arm 183:5
469− (cell 183:5 (bind 183:6 first) (bind 183:12 second))
470− (cast 183:20
471− (apply 183:23 unit
472− (cell 183:29 (tvar 183:30 A) (tvar 183:32 B)))
473− (body 184:7
474− (branch 184:7
475− (wing 184:10 first)
476− (arm 185:9 (lit 185:9 ~) (lit 185:11 ~))
477− (arm 186:9
478− (cell 186:9 (lit 186:10 ~) (bind 186:12 a))
479− (body 187:11
480− (branch 187:11
481− (wing 187:14 second)
482− (arm 188:13 (lit 188:13 ~) (lit 188:15 ~))
483− (arm 189:13
484− (cell 189:13 (lit 189:14 ~) (bind 189:16 b))
485− (unit 189:19
486− (tuple 189:20 (wing 189:21 a) (wing 189:23 b)))))))))))))))
487− (value 191:1 clap
488− (gate 191:9
489− (face 191:12 args
490− (cell 191:17
491− (apply 191:18 unit (tvar 191:24 A))
492− (apply 191:27 unit (tvar 191:33 A))
493− (fn 191:36
494− (cell 191:39 (tvar 191:40 A) (tvar 191:42 A))
495− (tvar 191:45 A))))
496− (body 192:3
497− (branch 192:3
498− (wing 192:6 args)
499− (arm 193:5
500− (cell 193:5 (bind 193:6 first) (bind 193:12 second) (bind 193:19 combine))
501− (cast 193:28
502− (apply 193:31 unit (tvar 193:37 A))
503− (body 194:7
504− (branch 194:7
505− (wing 194:10 first)
506− (arm 195:9 (lit 195:9 ~) (wing 195:11 second))
507− (arm 196:9
508− (cell 196:9 (lit 196:10 ~) (bind 196:12 a))
509− (body 197:11
510− (branch 197:11
511− (wing 197:14 second)
512− (arm 198:13 (lit 198:13 ~) (wing 198:15 first))
513− (arm 199:13
514− (cell 199:13 (lit 199:14 ~) (bind 199:16 b))
515− (unit 199:19
516− (group 199:20
517− (call 199:21 (wing 199:21 combine) (wing 199:29 a) (wing 199:31 b))))))))))))))))
518− (value 201:1 hunt
519− (gate 201:9
520− (face 201:12 args
521− (cell 201:17
522− (fn 201:18
523− (cell 201:21 (tvar 201:22 A) (tvar 201:24 A))
524− (flag 201:27))
525− (apply 201:30 unit (tvar 201:36 A))
526− (apply 201:39 unit (tvar 201:45 A))))
527− (body 202:3
528− (branch 202:3
529− (wing 202:6 args)
530− (arm 203:5
531− (cell 203:5 (bind 203:6 choose) (bind 203:13 first) (bind 203:19 second))
532− (cast 203:27
533− (apply 203:30 unit (tvar 203:36 A))
534− (body 204:7
535− (branch 204:7
536− (wing 204:10 first)
537− (arm 205:9 (lit 205:9 ~) (wing 205:11 second))
538− (arm 206:9
539− (cell 206:9 (lit 206:10 ~) (bind 206:12 a))
540− (body 207:11
541− (branch 207:11
542− (wing 207:14 second)
543− (arm 208:13 (lit 208:13 ~) (wing 208:15 first))
544− (arm 209:13
545− (cell 209:13 (lit 209:14 ~) (bind 209:16 b))
546− (body 210:15
547− (branch 210:15
548− (group 210:18
549− (call 210:19 (wing 210:19 choose) (wing 210:26 a) (wing 210:28 b)))
550− (arm 211:17 (lit 211:17 %.y) (wing 211:21 first))
551− (arm 212:17 (lit 212:17 %.n) (wing 212:21 second))))))))))))))))
552− (value 214:1 clef
553− (gate 214:9
554− (face 214:12 args
555− (cell 214:17
556− (apply 214:18 unit (tvar 214:24 A))
557− (apply 214:27 unit (tvar 214:33 B))
558− (fn 214:36
559− (cell 214:39 (tvar 214:40 A) (tvar 214:42 B))
560− (apply 214:45 unit (tvar 214:51 C)))))
561− (body 215:3
562− (branch 215:3
563− (wing 215:6 args)
564− (arm 216:5
565− (cell 216:5 (bind 216:6 first) (bind 216:12 second) (bind 216:19 combine))
566− (cast 216:28
567− (apply 216:31 unit (tvar 216:37 C))
568− (body 217:7
569− (branch 217:7
570− (wing 217:10 first)
571− (arm 218:9 (lit 218:9 ~) (lit 218:11 ~))
572− (arm 219:9
573− (cell 219:9 (lit 219:10 ~) (bind 219:12 a))
574− (body 220:11
575− (branch 220:11
576− (wing 220:14 second)
577− (arm 221:13 (lit 221:13 ~) (lit 221:15 ~))
578− (arm 222:13
579− (cell 222:13 (lit 222:14 ~) (bind 222:16 b))
580− (group 222:19
581− (call 222:20 (wing 222:20 combine) (wing 222:28 a) (wing 222:30 b)))))))))))))))
582− (value 224:1 skim
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− (cast 226:20
594− (apply 226:23 list (tvar 226:29 A))
595− (body 227:9
596− (branch 227:9
597− (wing 227:12 xs)
598− (arm 228:11 (lit 228:11 ~) (lit 228:13 ~))
599− (arm 229:11
600− (cell 229:11 (bind 229:12 item) (bind 229:17 rest))
601− (body 230:13
602− (branch 230:13
603− (group 230:16
604− (call 230:17 (wing 230:17 predicate) (wing 230:27 item)))
605− (arm 231:15
606− (lit 231:15 %.y)
607− (tuple 231:19
608− (wing 231:20 item)
609− (group 231:25
610− (call 231:26 (wing 231:26 skim) (wing 231:31 rest) (wing 231:36 predicate)))))
611− (arm 232:15
612− (lit 232:15 %.n)
613− (group 232:19
614− (call 232:20 (wing 232:20 skim) (wing 232:25 rest) (wing 232:30 predicate)))))))))))))))
615− (value 234:1 skip
616− (gate 234:9
617− (face 234:12 args
618− (cell 234:17
619− (apply 234:18 list (tvar 234:24 A))
620− (fn 234:27 (tvar 234:30 A) (flag 234:32))))
621− (body 235:3
622− (branch 235:3
623− (wing 235:6 args)
624− (arm 236:5
625− (cell 236:5 (bind 236:6 xs) (bind 236:9 predicate))
626− (cast 236:20
627− (apply 236:23 list (tvar 236:29 A))
628− (body 237:9
629− (branch 237:9
630− (wing 237:12 xs)
631− (arm 238:11 (lit 238:11 ~) (lit 238:13 ~))
632− (arm 239:11
633− (cell 239:11 (bind 239:12 item) (bind 239:17 rest))
634− (body 240:13
635− (branch 240:13
636− (group 240:16
637− (call 240:17 (wing 240:17 predicate) (wing 240:27 item)))
638− (arm 241:15
639− (lit 241:15 %.y)
640− (group 241:19
641− (call 241:20 (wing 241:20 skip) (wing 241:25 rest) (wing 241:30 predicate))))
642− (arm 242:15
643− (lit 242:15 %.n)
644− (tuple 242:19
645− (wing 242:20 item)
646− (group 242:25
647− (call 242:26 (wing 242:26 skip) (wing 242:31 rest) (wing 242:36 predicate))))))))))))))))
648− (value 244:1 levy
649− (gate 244:9
650− (face 244:12 args
651− (cell 244:17
652− (apply 244:18 list (tvar 244:24 A))
653− (fn 244:27 (tvar 244:30 A) (flag 244:32))))
654− (body 245:3
655− (cast 245:3
656− (flag 245:6)
657− (body 246:5
658− (branch 246:5
659− (wing 246:8 args)
660− (arm 247:7
661− (cell 247:7 (bind 247:8 xs) (bind 247:11 predicate))
662− (body 248:9
663− (branch 248:9
664− (wing 248:12 xs)
665− (arm 249:11 (lit 249:11 ~) (lit 249:13 %.y))
666− (arm 250:11
667− (cell 250:11 (bind 250:12 item) (bind 250:17 rest))
668− (body 251:13
669− (branch 251:13
670− (group 251:16
671− (call 251:17 (wing 251:17 predicate) (wing 251:27 item)))
672− (arm 252:15
673− (lit 252:15 %.y)
674− (group 252:19
675− (call 252:20 (wing 252:20 levy) (wing 252:25 rest) (wing 252:30 predicate))))
676− (arm 253:15 (lit 253:15 %.n) (lit 253:19 %.n))))))))))))))
677− (value 255:1 lien
678− (gate 255:9
679− (face 255:12 args
680− (cell 255:17
681− (apply 255:18 list (tvar 255:24 A))
682− (fn 255:27 (tvar 255:30 A) (flag 255:32))))
683− (body 256:3
684− (cast 256:3
685− (flag 256:6)
686− (body 257:5
687− (branch 257:5
688− (wing 257:8 args)
689− (arm 258:7
690− (cell 258:7 (bind 258:8 xs) (bind 258:11 predicate))
691− (body 259:9
692− (branch 259:9
693− (wing 259:12 xs)
694− (arm 260:11 (lit 260:11 ~) (lit 260:13 %.n))
695− (arm 261:11
696− (cell 261:11 (bind 261:12 item) (bind 261:17 rest))
697− (body 262:13
698− (branch 262:13
699− (group 262:16
700− (call 262:17 (wing 262:17 predicate) (wing 262:27 item)))
701− (arm 263:15 (lit 263:15 %.y) (lit 263:19 %.y))
702− (arm 264:15
703− (lit 264:15 %.n)
704− (group 264:19
705− (call 264:20 (wing 264:20 lien) (wing 264:25 rest) (wing 264:30 predicate))))))))))))))))
706− (value 266:1 roll
707− (gate 266:9
708− (face 266:12 args
709− (cell 266:17
710− (apply 266:18 list (tvar 266:24 A))
711− (tvar 266:27 B)
712− (fn 266:29
713− (cell 266:32 (tvar 266:33 A) (tvar 266:35 B))
714− (tvar 266:38 B))))
715− (body 267:3
716− (branch 267:3
717− (wing 267:6 args)
718− (arm 268:5
719− (cell 268:5 (bind 268:6 xs) (bind 268:9 start) (bind 268:15 combine))
720− (body 269:7
721− (branch 269:7
722− (wing 269:10 xs)
723− (arm 270:9 (lit 270:9 ~) (wing 270:11 start))
724− (arm 271:9
725− (cell 271:9 (bind 271:10 item) (bind 271:15 rest))
726− (group 271:21
727− (call 271:22
728− (wing 271:22 roll)
729− (wing 271:27 rest)
730− (group 271:32
731− (call 271:33 (wing 271:33 combine) (wing 271:41 item) (wing 271:46 start)))
732− (wing 271:53 combine)))))))))))
733− (value 273:1 reel
734− (gate 273:9
735− (face 273:12 args
736− (cell 273:17
737− (apply 273:18 list (tvar 273:24 A))
738− (tvar 273:27 B)
739− (fn 273:29
740− (cell 273:32 (tvar 273:33 A) (tvar 273:35 B))
741− (tvar 273:38 B))))
742− (body 274:3
743− (branch 274:3
744− (wing 274:6 args)
745− (arm 275:5
746− (cell 275:5 (bind 275:6 xs) (bind 275:9 start) (bind 275:15 combine))
747− (body 276:7
748− (branch 276:7
749− (wing 276:10 xs)
750− (arm 277:9 (lit 277:9 ~) (wing 277:11 start))
751− (arm 278:9
752− (cell 278:9 (bind 278:10 item) (bind 278:15 rest))
753− (group 278:21
754− (call 278:22
755− (wing 278:22 combine)
756− (wing 278:30 item)
757− (group 278:35
758− (call 278:36 (wing 278:36 reel) (wing 278:41 rest) (wing 278:46 start) (wing 278:52 combine)))))))))))))
759− (value 280:1 flit
760− (gate 280:9
761− (face 280:12 predicate
762− (fn 280:22 (tvar 280:25 A) (flag 280:27)))
763− (body 281:3
764− (gate 281:3
765− (face 281:6 value (tvar 281:12 A))
766− (body 282:5
767− (cast 282:5
768− (apply 282:8 unit (tvar 282:14 A))
769− (body 283:7
770− (branch 283:7
771− (group 283:10
772− (call 283:11 (wing 283:11 predicate) (wing 283:21 value)))
773− (arm 284:9
774− (lit 284:9 %.y)
775− (unit 284:13 (wing 284:14 value)))
776− (arm 285:9 (lit 285:9 %.n) (lit 285:13 ~))))))))))
777− (value 287:1 murn
778− (gate 287:9
779− (face 287:12 args
780− (cell 287:17
781− (apply 287:18 list (tvar 287:24 A))
782− (fn 287:27
783− (tvar 287:30 A)
784− (apply 287:32 unit (tvar 287:38 B)))))
785− (body 288:3
786− (branch 288:3
787− (wing 288:6 args)
788− (arm 289:5
789− (cell 289:5 (bind 289:6 xs) (bind 289:9 f))
790− (cast 289:12
791− (apply 289:15 list (tvar 289:21 B))
792− (body 290:9
793− (branch 290:9
794− (wing 290:12 xs)
795− (arm 291:11 (lit 291:11 ~) (lit 291:13 ~))
796− (arm 292:11
797− (cell 292:11 (bind 292:12 item) (bind 292:17 rest))
798− (body 293:13
799− (branch 293:13
800− (group 293:16
801− (call 293:17 (wing 293:17 f) (wing 293:19 item)))
802− (arm 294:15
803− (lit 294:15 ~)
804− (group 294:17
805− (call 294:18 (wing 294:18 murn) (wing 294:23 rest) (wing 294:28 f))))
806− (arm 295:15
807− (cell 295:15 (lit 295:16 ~) (bind 295:18 value))
808− (tuple 295:25
809− (wing 295:26 value)
810− (group 295:32
811− (call 295:33 (wing 295:33 murn) (wing 295:38 rest) (wing 295:43 f))))))))))))))))
812− (value 297:1 join
813− (gate 297:9
814− (face 297:12 args
815− (cell 297:17
816− (tvar 297:18 A)
817− (apply 297:20 list (tvar 297:26 A))))
818− (body 298:3
819− (branch 298:3
820− (wing 298:6 args)
821− (arm 299:5
822− (cell 299:5 (bind 299:6 separator) (bind 299:16 xs))
823− (cast 299:20
824− (apply 299:23 list (tvar 299:29 A))
825− (body 300:9
826− (branch 300:9
827− (wing 300:12 xs)
828− (arm 301:11 (lit 301:11 ~) (lit 301:13 ~))
829− (arm 302:11
830− (cell 302:11 (bind 302:12 item) (bind 302:17 rest))
831− (body 303:13
832− (branch 303:13
833− (wing 303:16 rest)
834− (arm 304:15
835− (lit 304:15 ~)
836− (tuple 304:17 (wing 304:18 item) (lit 304:23 ~)))
837− (arm 305:15
838− (cell 305:15 (bind 305:16 next) (bind 305:21 more))
839− (tuple 305:27
840− (wing 305:28 item)
841− (tuple 305:33
842− (wing 305:34 separator)
843− (group 305:44
844− (call 305:45 (wing 305:45 join) (wing 305:50 separator) (wing 305:60 rest)))))))))))))))))
845− (value 307:1 snip
846− (gate 307:9
847− (face 307:12 xs
848− (apply 307:15 list (tvar 307:21 A)))
849− (body 308:3
850− (cast 308:3
851− (apply 308:6 list (tvar 308:12 A))
852− (body 309:5
853− (branch 309:5
854− (wing 309:8 xs)
855− (arm 310:7 (lit 310:7 ~) (lit 310:9 ~))
856− (arm 311:7
857− (cell 311:7 (bind 311:8 item) (bind 311:13 rest))
858− (body 312:9
859− (branch 312:9
860− (wing 312:12 rest)
861− (arm 313:11 (lit 313:11 ~) (lit 313:13 ~))
862− (arm 314:11
863− (cell 314:11 (bind 314:12 next) (bind 314:17 more))
864− (tuple 314:23
865− (wing 314:24 item)
866− (group 314:29
867− (call 314:30 (wing 314:30 snip) (wing 314:35 rest))))))))))))))
868− (value 316:1 rear
869− (gate 316:9
870− (face 316:12 xs
871− (apply 316:15 list (tvar 316:21 A)))
872− (body 317:3
873− (branch 317:3
874− (wing 317:6 xs)
875− (arm 318:5 (lit 318:5 ~) (crash 318:7))
876− (arm 319:5
877− (cell 319:5 (bind 319:6 item) (bind 319:11 rest))
878− (body 320:7
879− (branch 320:7
880− (wing 320:10 rest)
881− (arm 321:9 (lit 321:9 ~) (wing 321:11 item))
882− (arm 322:9
883− (cell 322:9 (bind 322:10 next) (bind 322:15 more))
884− (group 322:21
885− (call 322:22 (wing 322:22 rear) (wing 322:27 rest)))))))))))
886− (value 324:1 cork
887− (gate 324:9
888− (face 324:12 gates
889− (cell 324:18
890− (fn 324:19 (tvar 324:22 A) (tvar 324:24 B))
891− (fn 324:27 (tvar 324:30 B) (tvar 324:32 C))))
892− (body 325:3
893− (branch 325:3
894− (wing 325:6 gates)
895− (arm 326:5
896− (cell 326:5 (bind 326:6 f) (bind 326:8 g))
897− (gate 326:11
898− (face 326:14 x (tvar 326:16 A))
899− (group 326:18
900− (call 326:19
901− (wing 326:19 g)
902− (group 326:21
903− (call 326:22 (wing 326:22 f) (wing 326:24 x)))))))))))
904− (value 328:1 corl
905− (gate 328:9
906− (face 328:12 gates
907− (cell 328:18
908− (fn 328:19 (tvar 328:22 B) (tvar 328:24 C))
909− (fn 328:27 (tvar 328:30 A) (tvar 328:32 B))))
910− (body 329:3
911− (branch 329:3
912− (wing 329:6 gates)
913− (arm 330:5
914− (cell 330:5 (bind 330:6 f) (bind 330:8 g))
915− (gate 330:11
916− (face 330:14 x (tvar 330:16 A))
917− (group 330:18
918− (call 330:19
919− (wing 330:19 f)
920− (group 330:21
921− (call 330:22 (wing 330:22 g) (wing 330:24 x)))))))))))
922− (value 332:1 cury
923− (gate 332:9
924− (face 332:12 args
925− (cell 332:17
926− (fn 332:18
927− (cell 332:21 (tvar 332:22 A) (tvar 332:24 B))
928− (tvar 332:27 C))
929− (tvar 332:30 A)))
930− (body 333:3
931− (branch 333:3
932− (wing 333:6 args)
335+ (unit 139:19 (wing 139:20 item))))
336+ (value 141:1 lure
337+ (gate 141:9
338+ (face 141:12 item (tvar 141:17 A))
339+ (body 142:3
340+ (cast 142:3
341+ (apply 142:6 list (tvar 142:12 A))
342+ (tuple 142:15 (wing 142:16 item) (lit 142:21 ~))))))
343+ (value 144:1 snoc
344+ (gate 144:9
345+ (face 144:12 args
346+ (cell 144:17
347+ (apply 144:18 list (tvar 144:24 A))
348+ (tvar 144:27 A)))
349+ (body 145:3
350+ (branch 145:3
351+ (wing 145:6 args)
352+ (arm 146:5
353+ (cell 146:5 (bind 146:6 xs) (bind 146:9 item))
354+ (group 146:15
355+ (call 146:16
356+ (wing 146:16 weld)
357+ (wing 146:21 xs)
358+ (tuple 146:24 (wing 146:25 item) (lit 146:30 ~)))))))))
359+ (value 148:1 flop
360+ (gate 148:9
361+ (face 148:12 xs
362+ (apply 148:15 list (tvar 148:21 A)))
363+ (body 149:3
364+ (value 149:3 reverse-into
365+ (gate 149:19
366+ (face 149:22 args
367+ (cell 149:27
368+ (apply 149:28 list (tvar 149:34 A))
369+ (apply 149:37 list (tvar 149:43 A))))
370+ (body 150:5
371+ (branch 150:5
372+ (wing 150:8 args)
373+ (arm 151:7
374+ (cell 151:7 (bind 151:8 rest) (bind 151:13 acc))
375+ (body 152:9
376+ (branch 152:9
377+ (wing 152:12 rest)
378+ (arm 153:11 (lit 153:11 ~) (wing 153:13 acc))
379+ (arm 154:11
380+ (cell 154:11 (bind 154:12 item) (bind 154:17 more))
381+ (group 154:23
382+ (call 154:24
383+ (wing 154:24 reverse-into)
384+ (wing 154:37 more)
385+ (tuple 154:42 (wing 154:43 item) (wing 154:48 acc))))))))))))
386+ (group 155:3
387+ (call 155:4 (wing 155:4 reverse-into) (wing 155:17 xs) (lit 155:20 ~))))))
388+ (value 157:1 drop
389+ (gate 157:9
390+ (face 157:12 maybe
391+ (apply 157:18 unit (tvar 157:24 A)))
392+ (body 158:3
393+ (cast 158:3
394+ (apply 158:6 list (tvar 158:12 A))
395+ (body 159:5
396+ (branch 159:5
397+ (wing 159:8 maybe)
398+ (arm 160:7 (lit 160:7 ~) (lit 160:9 ~))
399+ (arm 161:7
400+ (cell 161:7 (lit 161:8 ~) (bind 161:10 value))
401+ (tuple 161:17 (wing 161:18 value) (lit 161:24 ~)))))))))
402+ (value 163:1 bond
403+ (gate 163:9
404+ (face 163:12 fallback
405+ (fn 163:21 (const 163:24 ~) (tvar 163:26 A)))
406+ (body 164:3
407+ (gate 164:3
408+ (face 164:6 maybe
409+ (apply 164:12 unit (tvar 164:18 A)))
410+ (body 165:5
411+ (branch 165:5
412+ (wing 165:8 maybe)
413+ (arm 166:7
414+ (lit 166:7 ~)
415+ (group 166:9
416+ (call 166:10 (wing 166:10 fallback) (lit 166:19 ~))))
417+ (arm 167:7
418+ (cell 167:7 (lit 167:8 ~) (bind 167:10 value))
419+ (wing 167:17 value))))))))
420+ (value 169:1 bind
421+ (gate 169:9
422+ (face 169:12 args
423+ (cell 169:17
424+ (apply 169:18 unit (tvar 169:24 A))
425+ (fn 169:27 (tvar 169:30 A) (tvar 169:32 B))))
426+ (body 170:3
427+ (branch 170:3
428+ (wing 170:6 args)
429+ (arm 171:5
430+ (cell 171:5 (bind 171:6 maybe) (bind 171:12 f))
431+ (cast 171:15
432+ (apply 171:18 unit (tvar 171:24 B))
433+ (body 172:7
434+ (branch 172:7
435+ (wing 172:10 maybe)
436+ (arm 173:9 (lit 173:9 ~) (lit 173:11 ~))
437+ (arm 174:9
438+ (cell 174:9 (lit 174:10 ~) (bind 174:12 value))
439+ (unit 174:19
440+ (group 174:20
441+ (call 174:21 (wing 174:21 f) (wing 174:23 value)))))))))))))
442+ (value 176:1 biff
443+ (gate 176:9
444+ (face 176:12 args
445+ (cell 176:17
446+ (apply 176:18 unit (tvar 176:24 A))
447+ (fn 176:27
448+ (tvar 176:30 A)
449+ (apply 176:32 unit (tvar 176:38 B)))))
450+ (body 177:3
451+ (branch 177:3
452+ (wing 177:6 args)
453+ (arm 178:5
454+ (cell 178:5 (bind 178:6 maybe) (bind 178:12 f))
455+ (cast 178:15
456+ (apply 178:18 unit (tvar 178:24 B))
457+ (body 179:7
458+ (branch 179:7
459+ (wing 179:10 maybe)
460+ (arm 180:9 (lit 180:9 ~) (lit 180:11 ~))
461+ (arm 181:9
462+ (cell 181:9 (lit 181:10 ~) (bind 181:12 value))
463+ (group 181:19
464+ (call 181:20 (wing 181:20 f) (wing 181:22 value))))))))))))
465+ (value 183:1 both
466+ (gate 183:9
467+ (face 183:12 args
468+ (cell 183:17
469+ (apply 183:18 unit (tvar 183:24 A))
470+ (apply 183:27 unit (tvar 183:33 B))))
471+ (body 184:3
472+ (branch 184:3
473+ (wing 184:6 args)
474+ (arm 185:5
475+ (cell 185:5 (bind 185:6 first) (bind 185:12 second))
476+ (cast 185:20
477+ (apply 185:23 unit
478+ (cell 185:29 (tvar 185:30 A) (tvar 185:32 B)))
479+ (body 186:7
480+ (branch 186:7
481+ (wing 186:10 first)
482+ (arm 187:9 (lit 187:9 ~) (lit 187:11 ~))
483+ (arm 188:9
484+ (cell 188:9 (lit 188:10 ~) (bind 188:12 a))
485+ (body 189:11
486+ (branch 189:11
487+ (wing 189:14 second)
488+ (arm 190:13 (lit 190:13 ~) (lit 190:15 ~))
489+ (arm 191:13
490+ (cell 191:13 (lit 191:14 ~) (bind 191:16 b))
491+ (unit 191:19
492+ (tuple 191:20 (wing 191:21 a) (wing 191:23 b)))))))))))))))
493+ (value 193:1 clap
494+ (gate 193:9
495+ (face 193:12 args
496+ (cell 193:17
497+ (apply 193:18 unit (tvar 193:24 A))
498+ (apply 193:27 unit (tvar 193:33 A))
499+ (fn 193:36
500+ (cell 193:39 (tvar 193:40 A) (tvar 193:42 A))
501+ (tvar 193:45 A))))
502+ (body 194:3
503+ (branch 194:3
504+ (wing 194:6 args)
505+ (arm 195:5
506+ (cell 195:5 (bind 195:6 first) (bind 195:12 second) (bind 195:19 combine))
507+ (cast 195:28
508+ (apply 195:31 unit (tvar 195:37 A))
509+ (body 196:7
510+ (branch 196:7
511+ (wing 196:10 first)
512+ (arm 197:9 (lit 197:9 ~) (wing 197:11 second))
513+ (arm 198:9
514+ (cell 198:9 (lit 198:10 ~) (bind 198:12 a))
515+ (body 199:11
516+ (branch 199:11
517+ (wing 199:14 second)
518+ (arm 200:13 (lit 200:13 ~) (wing 200:15 first))
519+ (arm 201:13
520+ (cell 201:13 (lit 201:14 ~) (bind 201:16 b))
521+ (unit 201:19
522+ (group 201:20
523+ (call 201:21 (wing 201:21 combine) (wing 201:29 a) (wing 201:31 b))))))))))))))))
524+ (value 203:1 hunt
525+ (gate 203:9
526+ (face 203:12 args
527+ (cell 203:17
528+ (fn 203:18
529+ (cell 203:21 (tvar 203:22 A) (tvar 203:24 A))
530+ (flag 203:27))
531+ (apply 203:30 unit (tvar 203:36 A))
532+ (apply 203:39 unit (tvar 203:45 A))))
533+ (body 204:3
534+ (branch 204:3
535+ (wing 204:6 args)
536+ (arm 205:5
537+ (cell 205:5 (bind 205:6 choose) (bind 205:13 first) (bind 205:19 second))
538+ (cast 205:27
539+ (apply 205:30 unit (tvar 205:36 A))
540+ (body 206:7
541+ (branch 206:7
542+ (wing 206:10 first)
543+ (arm 207:9 (lit 207:9 ~) (wing 207:11 second))
544+ (arm 208:9
545+ (cell 208:9 (lit 208:10 ~) (bind 208:12 a))
546+ (body 209:11
547+ (branch 209:11
548+ (wing 209:14 second)
549+ (arm 210:13 (lit 210:13 ~) (wing 210:15 first))
550+ (arm 211:13
551+ (cell 211:13 (lit 211:14 ~) (bind 211:16 b))
552+ (body 212:15
553+ (branch 212:15
554+ (group 212:18
555+ (call 212:19 (wing 212:19 choose) (wing 212:26 a) (wing 212:28 b)))
556+ (arm 213:17 (lit 213:17 %.y) (wing 213:21 first))
557+ (arm 214:17 (lit 214:17 %.n) (wing 214:21 second))))))))))))))))
558+ (value 216:1 mate
559+ (gate 216:9
560+ (face 216:12 args
561+ (cell 216:17
562+ (apply 216:18 unit (tvar 216:24 A))
563+ (apply 216:27 unit (tvar 216:33 A))))
564+ (body 217:3
565+ (branch 217:3
566+ (wing 217:6 args)
567+ (arm 218:5
568+ (cell 218:5 (bind 218:6 first) (bind 218:12 second))
569+ (cast 218:20
570+ (apply 218:23 unit (tvar 218:29 A))
571+ (body 219:7
572+ (branch 219:7
573+ (wing 219:10 second)
574+ (arm 220:9 (lit 220:9 ~) (wing 220:11 first))
575+ (arm 221:9
576+ (cell 221:9 (lit 221:10 ~) (bind 221:12 b))
577+ (body 222:11
578+ (branch 222:11
579+ (wing 222:14 first)
580+ (arm 223:13 (lit 223:13 ~) (wing 223:15 second))
581+ (arm 224:13
582+ (cell 224:13 (lit 224:14 ~) (bind 224:16 a))
583+ (body 225:15
584+ (branch 225:15
585+ (group 225:18
586+ (call 225:19 (wing 225:19 eq) (wing 225:22 a) (wing 225:24 b)))
587+ (arm 226:17 (lit 226:17 %.y) (wing 226:21 first))
588+ (arm 227:17 (lit 227:17 %.n) (crash 227:21))))))))))))))))
589+ (value 229:1 clef
590+ (gate 229:9
591+ (face 229:12 args
592+ (cell 229:17
593+ (apply 229:18 unit (tvar 229:24 A))
594+ (apply 229:27 unit (tvar 229:33 B))
595+ (fn 229:36
596+ (cell 229:39 (tvar 229:40 A) (tvar 229:42 B))
597+ (apply 229:45 unit (tvar 229:51 C)))))
598+ (body 230:3
599+ (branch 230:3
600+ (wing 230:6 args)
601+ (arm 231:5
602+ (cell 231:5 (bind 231:6 first) (bind 231:12 second) (bind 231:19 combine))
603+ (cast 231:28
604+ (apply 231:31 unit (tvar 231:37 C))
605+ (body 232:7
606+ (branch 232:7
607+ (wing 232:10 first)
608+ (arm 233:9 (lit 233:9 ~) (lit 233:11 ~))
609+ (arm 234:9
610+ (cell 234:9 (lit 234:10 ~) (bind 234:12 a))
611+ (body 235:11
612+ (branch 235:11
613+ (wing 235:14 second)
614+ (arm 236:13 (lit 236:13 ~) (lit 236:15 ~))
615+ (arm 237:13
616+ (cell 237:13 (lit 237:14 ~) (bind 237:16 b))
617+ (group 237:19
618+ (call 237:20 (wing 237:20 combine) (wing 237:28 a) (wing 237:30 b)))))))))))))))
619+ (value 239:1 skim
620+ (gate 239:9
621+ (face 239:12 args
622+ (cell 239:17
623+ (apply 239:18 list (tvar 239:24 A))
624+ (fn 239:27 (tvar 239:30 A) (flag 239:32))))
625+ (body 240:3
626+ (branch 240:3
627+ (wing 240:6 args)
628+ (arm 241:5
629+ (cell 241:5 (bind 241:6 xs) (bind 241:9 predicate))
630+ (cast 241:20
631+ (apply 241:23 list (tvar 241:29 A))
632+ (body 242:9
633+ (branch 242:9
634+ (wing 242:12 xs)
635+ (arm 243:11 (lit 243:11 ~) (lit 243:13 ~))
636+ (arm 244:11
637+ (cell 244:11 (bind 244:12 item) (bind 244:17 rest))
638+ (body 245:13
639+ (branch 245:13
640+ (group 245:16
641+ (call 245:17 (wing 245:17 predicate) (wing 245:27 item)))
642+ (arm 246:15
643+ (lit 246:15 %.y)
644+ (tuple 246:19
645+ (wing 246:20 item)
646+ (group 246:25
647+ (call 246:26 (wing 246:26 skim) (wing 246:31 rest) (wing 246:36 predicate)))))
648+ (arm 247:15
649+ (lit 247:15 %.n)
650+ (group 247:19
651+ (call 247:20 (wing 247:20 skim) (wing 247:25 rest) (wing 247:30 predicate)))))))))))))))
652+ (value 249:1 skip
653+ (gate 249:9
654+ (face 249:12 args
655+ (cell 249:17
656+ (apply 249:18 list (tvar 249:24 A))
657+ (fn 249:27 (tvar 249:30 A) (flag 249:32))))
658+ (body 250:3
659+ (branch 250:3
660+ (wing 250:6 args)
661+ (arm 251:5
662+ (cell 251:5 (bind 251:6 xs) (bind 251:9 predicate))
663+ (cast 251:20
664+ (apply 251:23 list (tvar 251:29 A))
665+ (body 252:9
666+ (branch 252:9
667+ (wing 252:12 xs)
668+ (arm 253:11 (lit 253:11 ~) (lit 253:13 ~))
669+ (arm 254:11
670+ (cell 254:11 (bind 254:12 item) (bind 254:17 rest))
671+ (body 255:13
672+ (branch 255:13
673+ (group 255:16
674+ (call 255:17 (wing 255:17 predicate) (wing 255:27 item)))
675+ (arm 256:15
676+ (lit 256:15 %.y)
677+ (group 256:19
678+ (call 256:20 (wing 256:20 skip) (wing 256:25 rest) (wing 256:30 predicate))))
679+ (arm 257:15
680+ (lit 257:15 %.n)
681+ (tuple 257:19
682+ (wing 257:20 item)
683+ (group 257:25
684+ (call 257:26 (wing 257:26 skip) (wing 257:31 rest) (wing 257:36 predicate))))))))))))))))
685+ (value 259:1 levy
686+ (gate 259:9
687+ (face 259:12 args
688+ (cell 259:17
689+ (apply 259:18 list (tvar 259:24 A))
690+ (fn 259:27 (tvar 259:30 A) (flag 259:32))))
691+ (body 260:3
692+ (cast 260:3
693+ (flag 260:6)
694+ (body 261:5
695+ (branch 261:5
696+ (wing 261:8 args)
697+ (arm 262:7
698+ (cell 262:7 (bind 262:8 xs) (bind 262:11 predicate))
699+ (body 263:9
700+ (branch 263:9
701+ (wing 263:12 xs)
702+ (arm 264:11 (lit 264:11 ~) (lit 264:13 %.y))
703+ (arm 265:11
704+ (cell 265:11 (bind 265:12 item) (bind 265:17 rest))
705+ (body 266:13
706+ (branch 266:13
707+ (group 266:16
708+ (call 266:17 (wing 266:17 predicate) (wing 266:27 item)))
709+ (arm 267:15
710+ (lit 267:15 %.y)
711+ (group 267:19
712+ (call 267:20 (wing 267:20 levy) (wing 267:25 rest) (wing 267:30 predicate))))
713+ (arm 268:15 (lit 268:15 %.n) (lit 268:19 %.n))))))))))))))
714+ (value 270:1 lien
715+ (gate 270:9
716+ (face 270:12 args
717+ (cell 270:17
718+ (apply 270:18 list (tvar 270:24 A))
719+ (fn 270:27 (tvar 270:30 A) (flag 270:32))))
720+ (body 271:3
721+ (cast 271:3
722+ (flag 271:6)
723+ (body 272:5
724+ (branch 272:5
725+ (wing 272:8 args)
726+ (arm 273:7
727+ (cell 273:7 (bind 273:8 xs) (bind 273:11 predicate))
728+ (body 274:9
729+ (branch 274:9
730+ (wing 274:12 xs)
731+ (arm 275:11 (lit 275:11 ~) (lit 275:13 %.n))
732+ (arm 276:11
733+ (cell 276:11 (bind 276:12 item) (bind 276:17 rest))
734+ (body 277:13
735+ (branch 277:13
736+ (group 277:16
737+ (call 277:17 (wing 277:17 predicate) (wing 277:27 item)))
738+ (arm 278:15 (lit 278:15 %.y) (lit 278:19 %.y))
739+ (arm 279:15
740+ (lit 279:15 %.n)
741+ (group 279:19
742+ (call 279:20 (wing 279:20 lien) (wing 279:25 rest) (wing 279:30 predicate))))))))))))))))
743+ (value 281:1 roll
744+ (gate 281:9
745+ (face 281:12 args
746+ (cell 281:17
747+ (apply 281:18 list (tvar 281:24 A))
748+ (tvar 281:27 B)
749+ (fn 281:29
750+ (cell 281:32 (tvar 281:33 A) (tvar 281:35 B))
751+ (tvar 281:38 B))))
752+ (body 282:3
753+ (branch 282:3
754+ (wing 282:6 args)
755+ (arm 283:5
756+ (cell 283:5 (bind 283:6 xs) (bind 283:9 start) (bind 283:15 combine))
757+ (body 284:7
758+ (branch 284:7
759+ (wing 284:10 xs)
760+ (arm 285:9 (lit 285:9 ~) (wing 285:11 start))
761+ (arm 286:9
762+ (cell 286:9 (bind 286:10 item) (bind 286:15 rest))
763+ (group 286:21
764+ (call 286:22
765+ (wing 286:22 roll)
766+ (wing 286:27 rest)
767+ (group 286:32
768+ (call 286:33 (wing 286:33 combine) (wing 286:41 item) (wing 286:46 start)))
769+ (wing 286:53 combine)))))))))))
770+ (value 288:1 reel
771+ (gate 288:9
772+ (face 288:12 args
773+ (cell 288:17
774+ (apply 288:18 list (tvar 288:24 A))
775+ (tvar 288:27 B)
776+ (fn 288:29
777+ (cell 288:32 (tvar 288:33 A) (tvar 288:35 B))
778+ (tvar 288:38 B))))
779+ (body 289:3
780+ (branch 289:3
781+ (wing 289:6 args)
782+ (arm 290:5
783+ (cell 290:5 (bind 290:6 xs) (bind 290:9 start) (bind 290:15 combine))
784+ (body 291:7
785+ (branch 291:7
786+ (wing 291:10 xs)
787+ (arm 292:9 (lit 292:9 ~) (wing 292:11 start))
788+ (arm 293:9
789+ (cell 293:9 (bind 293:10 item) (bind 293:15 rest))
790+ (group 293:21
791+ (call 293:22
792+ (wing 293:22 combine)
793+ (wing 293:30 item)
794+ (group 293:35
795+ (call 293:36 (wing 293:36 reel) (wing 293:41 rest) (wing 293:46 start) (wing 293:52 combine)))))))))))))
796+ (value 295:1 flit
797+ (gate 295:9
798+ (face 295:12 predicate
799+ (fn 295:22 (tvar 295:25 A) (flag 295:27)))
800+ (body 296:3
801+ (gate 296:3
802+ (face 296:6 value (tvar 296:12 A))
803+ (body 297:5
804+ (cast 297:5
805+ (apply 297:8 unit (tvar 297:14 A))
806+ (body 298:7
807+ (branch 298:7
808+ (group 298:10
809+ (call 298:11 (wing 298:11 predicate) (wing 298:21 value)))
810+ (arm 299:9
811+ (lit 299:9 %.y)
812+ (unit 299:13 (wing 299:14 value)))
813+ (arm 300:9 (lit 300:9 %.n) (lit 300:13 ~))))))))))
814+ (value 302:1 murn
815+ (gate 302:9
816+ (face 302:12 args
817+ (cell 302:17
818+ (apply 302:18 list (tvar 302:24 A))
819+ (fn 302:27
820+ (tvar 302:30 A)
821+ (apply 302:32 unit (tvar 302:38 B)))))
822+ (body 303:3
823+ (branch 303:3
824+ (wing 303:6 args)
825+ (arm 304:5
826+ (cell 304:5 (bind 304:6 xs) (bind 304:9 f))
827+ (cast 304:12
828+ (apply 304:15 list (tvar 304:21 B))
829+ (body 305:9
830+ (branch 305:9
831+ (wing 305:12 xs)
832+ (arm 306:11 (lit 306:11 ~) (lit 306:13 ~))
833+ (arm 307:11
834+ (cell 307:11 (bind 307:12 item) (bind 307:17 rest))
835+ (body 308:13
836+ (branch 308:13
837+ (group 308:16
838+ (call 308:17 (wing 308:17 f) (wing 308:19 item)))
839+ (arm 309:15
840+ (lit 309:15 ~)
841+ (group 309:17
842+ (call 309:18 (wing 309:18 murn) (wing 309:23 rest) (wing 309:28 f))))
843+ (arm 310:15
844+ (cell 310:15 (lit 310:16 ~) (bind 310:18 value))
845+ (tuple 310:25
846+ (wing 310:26 value)
847+ (group 310:32
848+ (call 310:33 (wing 310:33 murn) (wing 310:38 rest) (wing 310:43 f))))))))))))))))
849+ (value 312:1 join
850+ (gate 312:9
851+ (face 312:12 args
852+ (cell 312:17
853+ (tvar 312:18 A)
854+ (apply 312:20 list (tvar 312:26 A))))
855+ (body 313:3
856+ (branch 313:3
857+ (wing 313:6 args)
858+ (arm 314:5
859+ (cell 314:5 (bind 314:6 separator) (bind 314:16 xs))
860+ (cast 314:20
861+ (apply 314:23 list (tvar 314:29 A))
862+ (body 315:9
863+ (branch 315:9
864+ (wing 315:12 xs)
865+ (arm 316:11 (lit 316:11 ~) (lit 316:13 ~))
866+ (arm 317:11
867+ (cell 317:11 (bind 317:12 item) (bind 317:17 rest))
868+ (body 318:13
869+ (branch 318:13
870+ (wing 318:16 rest)
871+ (arm 319:15
872+ (lit 319:15 ~)
873+ (tuple 319:17 (wing 319:18 item) (lit 319:23 ~)))
874+ (arm 320:15
875+ (cell 320:15 (bind 320:16 next) (bind 320:21 more))
876+ (tuple 320:27
877+ (wing 320:28 item)
878+ (tuple 320:33
879+ (wing 320:34 separator)
880+ (group 320:44
881+ (call 320:45 (wing 320:45 join) (wing 320:50 separator) (wing 320:60 rest)))))))))))))))))
882+ (value 322:1 snip
883+ (gate 322:9
884+ (face 322:12 xs
885+ (apply 322:15 list (tvar 322:21 A)))
886+ (body 323:3
887+ (cast 323:3
888+ (apply 323:6 list (tvar 323:12 A))
889+ (body 324:5
890+ (branch 324:5
891+ (wing 324:8 xs)
892+ (arm 325:7 (lit 325:7 ~) (lit 325:9 ~))
893+ (arm 326:7
894+ (cell 326:7 (bind 326:8 item) (bind 326:13 rest))
895+ (body 327:9
896+ (branch 327:9
897+ (wing 327:12 rest)
898+ (arm 328:11 (lit 328:11 ~) (lit 328:13 ~))
899+ (arm 329:11
900+ (cell 329:11 (bind 329:12 next) (bind 329:17 more))
901+ (tuple 329:23
902+ (wing 329:24 item)
903+ (group 329:29
904+ (call 329:30 (wing 329:30 snip) (wing 329:35 rest))))))))))))))
905+ (value 331:1 rear
906+ (gate 331:9
907+ (face 331:12 xs
908+ (apply 331:15 list (tvar 331:21 A)))
909+ (body 332:3
910+ (branch 332:3
911+ (wing 332:6 xs)
912+ (arm 333:5 (lit 333:5 ~) (crash 333:7))
933913 (arm 334:5
934− (cell 334:5 (bind 334:6 f) (bind 334:8 a))
935− (gate 334:11
936− (face 334:14 b (tvar 334:16 B))
937− (group 334:18
938− (call 334:19 (wing 334:19 f) (wing 334:21 a) (wing 334:23 b)))))))))
939− (value 336:1 curr
940− (gate 336:9
941− (face 336:12 args
942− (cell 336:17
943− (fn 336:18
944− (cell 336:21 (tvar 336:22 A) (tvar 336:24 B))
945− (tvar 336:27 C))
946− (tvar 336:30 B)))
947− (body 337:3
948− (branch 337:3
949− (wing 337:6 args)
950− (arm 338:5
951− (cell 338:5 (bind 338:6 f) (bind 338:8 b))
952− (gate 338:11
953− (face 338:14 a (tvar 338:16 A))
954− (group 338:18
955− (call 338:19 (wing 338:19 f) (wing 338:21 a) (wing 338:23 b)))))))))
956− (mold 340:1 cmd
957− (generic 340:8 M
958− (union 341:3
959− (cell 341:3
960− (const 341:4 %poke)
961− (face 341:10 p (ref 341:12 raw-poke))
962− (face 341:21 reply
963− (fn 341:27
964− (apply 341:30 unit (aura 341:36 @t))
965− (tvar 341:40 M))))
966− (cell 342:3
967− (const 342:4 %go)
968− (face 342:8 url (aura 342:12 @t)))
969− (cell 343:3
970− (const 343:4 %wait)
971− (face 343:10 gap (aura 343:14 @dr))
972− (face 343:18 msg (tvar 343:22 M)))
973− (cell 344:3
974− (const 344:4 %now)
975− (face 344:9 reply
976− (fn 344:15 (aura 344:18 @da) (tvar 344:22 M))))
977− (cell 345:3
978− (const 345:4 %who)
979− (face 345:9 reply
980− (fn 345:15 (aura 345:18 @p) (tvar 345:21 M)))))))
981− (value 347:1 gth
982− (gate 347:8
983− (face 347:11 args
984− (cell 347:16 (tvar 347:17 A) (tvar 347:19 A)))
985− (group 347:22
986− (call 347:23 (wing 347:23 gth-atom.internal) (wing 347:41 args)))))
987− (value 348:1 add
988− (gate 348:8
989− (face 348:11 args
990− (cell 348:16 (tvar 348:17 A) (tvar 348:19 A)))
991− (group 348:22
992− (call 348:23 (wing 348:23 add-atom.internal) (wing 348:41 args)))))
993− (value 349:1 dec
994− (gate 349:8
995− (face 349:11 atom (tvar 349:16 A))
996− (group 349:18
997− (call 349:19 (wing 349:19 dec-atom.internal) (wing 349:37 atom)))))
998− (mold 351:1 ask
999− (generic 351:8 M
1000− (apply 351:15 ask.internal (tvar 351:29 M))))
1001− (value 352:1 pure
1002− (gate 352:9
1003− (face 352:12 x (tvar 352:14 M))
1004− (cast 352:16
1005− (apply 352:19 ask (tvar 352:24 M))
1006− (tuple 352:27 (lit 352:28 %pure) (wing 352:34 x))))))
914+ (cell 334:5 (bind 334:6 item) (bind 334:11 rest))
915+ (body 335:7
916+ (branch 335:7
917+ (wing 335:10 rest)
918+ (arm 336:9 (lit 336:9 ~) (wing 336:11 item))
919+ (arm 337:9
920+ (cell 337:9 (bind 337:10 next) (bind 337:15 more))
921+ (group 337:21
922+ (call 337:22 (wing 337:22 rear) (wing 337:27 rest)))))))))))
923+ (value 339:1 cork
924+ (gate 339:9
925+ (face 339:12 gates
926+ (cell 339:18
927+ (fn 339:19 (tvar 339:22 A) (tvar 339:24 B))
928+ (fn 339:27 (tvar 339:30 B) (tvar 339:32 C))))
929+ (body 340:3
930+ (branch 340:3
931+ (wing 340:6 gates)
932+ (arm 341:5
933+ (cell 341:5 (bind 341:6 f) (bind 341:8 g))
934+ (gate 341:11
935+ (face 341:14 x (tvar 341:16 A))
936+ (group 341:18
937+ (call 341:19
938+ (wing 341:19 g)
939+ (group 341:21
940+ (call 341:22 (wing 341:22 f) (wing 341:24 x)))))))))))
941+ (value 343:1 corl
942+ (gate 343:9
943+ (face 343:12 gates
944+ (cell 343:18
945+ (fn 343:19 (tvar 343:22 B) (tvar 343:24 C))
946+ (fn 343:27 (tvar 343:30 A) (tvar 343:32 B))))
947+ (body 344:3
948+ (branch 344:3
949+ (wing 344:6 gates)
950+ (arm 345:5
951+ (cell 345:5 (bind 345:6 f) (bind 345:8 g))
952+ (gate 345:11
953+ (face 345:14 x (tvar 345:16 A))
954+ (group 345:18
955+ (call 345:19
956+ (wing 345:19 f)
957+ (group 345:21
958+ (call 345:22 (wing 345:22 g) (wing 345:24 x)))))))))))
959+ (value 347:1 cury
960+ (gate 347:9
961+ (face 347:12 args
962+ (cell 347:17
963+ (fn 347:18
964+ (cell 347:21 (tvar 347:22 A) (tvar 347:24 B))
965+ (tvar 347:27 C))
966+ (tvar 347:30 A)))
967+ (body 348:3
968+ (branch 348:3
969+ (wing 348:6 args)
970+ (arm 349:5
971+ (cell 349:5 (bind 349:6 f) (bind 349:8 a))
972+ (gate 349:11
973+ (face 349:14 b (tvar 349:16 B))
974+ (group 349:18
975+ (call 349:19 (wing 349:19 f) (wing 349:21 a) (wing 349:23 b)))))))))
976+ (value 351:1 curr
977+ (gate 351:9
978+ (face 351:12 args
979+ (cell 351:17
980+ (fn 351:18
981+ (cell 351:21 (tvar 351:22 A) (tvar 351:24 B))
982+ (tvar 351:27 C))
983+ (tvar 351:30 B)))
984+ (body 352:3
985+ (branch 352:3
986+ (wing 352:6 args)
987+ (arm 353:5
988+ (cell 353:5 (bind 353:6 f) (bind 353:8 b))
989+ (gate 353:11
990+ (face 353:14 a (tvar 353:16 A))
991+ (group 353:18
992+ (call 353:19 (wing 353:19 f) (wing 353:21 a) (wing 353:23 b)))))))))
993+ (mold 355:1 cmd
994+ (generic 355:8 M
995+ (union 356:3
996+ (cell 356:3
997+ (const 356:4 %poke)
998+ (face 356:10 p (ref 356:12 raw-poke))
999+ (face 356:21 reply
1000+ (fn 356:27
1001+ (apply 356:30 unit (aura 356:36 @t))
1002+ (tvar 356:40 M))))
1003+ (cell 357:3
1004+ (const 357:4 %go)
1005+ (face 357:8 url (aura 357:12 @t)))
1006+ (cell 358:3
1007+ (const 358:4 %wait)
1008+ (face 358:10 gap (aura 358:14 @dr))
1009+ (face 358:18 msg (tvar 358:22 M)))
1010+ (cell 359:3
1011+ (const 359:4 %now)
1012+ (face 359:9 reply
1013+ (fn 359:15 (aura 359:18 @da) (tvar 359:22 M))))
1014+ (cell 360:3
1015+ (const 360:4 %who)
1016+ (face 360:9 reply
1017+ (fn 360:15 (aura 360:18 @p) (tvar 360:21 M)))))))
1018+ (value 362:1 gth
1019+ (gate 362:8
1020+ (face 362:11 args
1021+ (cell 362:16 (tvar 362:17 A) (tvar 362:19 A)))
1022+ (group 362:22
1023+ (call 362:23 (wing 362:23 gth-atom.internal) (wing 362:41 args)))))
1024+ (value 363:1 add
1025+ (gate 363:8
1026+ (face 363:11 args
1027+ (cell 363:16 (tvar 363:17 A) (tvar 363:19 A)))
1028+ (group 363:22
1029+ (call 363:23 (wing 363:23 add-atom.internal) (wing 363:41 args)))))
1030+ (value 364:1 dec
1031+ (gate 364:8
1032+ (face 364:11 atom (tvar 364:16 A))
1033+ (group 364:18
1034+ (call 364:19 (wing 364:19 dec-atom.internal) (wing 364:37 atom)))))
1035+ (mold 366:1 ask
1036+ (generic 366:8 M
1037+ (apply 366:15 ask.internal (tvar 366:29 M))))
1038+ (value 367:1 pure
1039+ (gate 367:9
1040+ (face 367:12 x (tvar 367:14 M))
1041+ (cast 367:16
1042+ (apply 367:19 ask (tvar 367:24 M))
1043+ (tuple 367:27 (lit 367:28 %pure) (wing 367:34 x))))))
tests/golden/prelude-unit-list-transforms/types.txt+2
@@ -5,6 +5,7 @@ partial inference; module not checked
55++ head: $-([A B] A)
66++ tail: $-([A B] B)
77++ not: $-(? ?)
8+++ eq: field access is not supported by partial inference
89+$ list: cases proven disjoint; mold not checked
910+$ unit: cases proven disjoint; mold not checked
1011++ fall: $-([(unit A) A] A)
@@ -49,6 +50,7 @@ partial inference; module not checked
4950++ both: unit construction needs the standard prelude in partial inference
5051++ clap: unit construction needs the standard prelude in partial inference
5152++ hunt: $-([$-([A A] ?) [(unit A) (unit A)]] (unit A))
53+++ mate: name is not available to partial inference
5254++ clef: $-([(unit A) [(unit B) $-([A B] (unit C))]] (unit C))
5355++ skim: sample mold is not supported by partial inference
5456++ skip: sample mold is not supported by partial inference
tests/golden/types-generic-gates/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Molds: "Generic molds" are defined with `|$` after a `+$` name; type variables are capitals.
2−tests: Nonrecursive generic gate and two-parameter record molds retain independent parameter types.
2+tests: Nonrecursive generic gate and two-parameter record molds retain independent parameter types; a user mold named `map` does not acquire the collection key constraint.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-generic-gates/source.jibb+2
@@ -2,3 +2,5 @@
22+$ duo |$ [A B] [left=A right=B]
33++ gate ^- (mapper @t @t) |= x=@t x
44++ pair ^- (duo @t @p) [left="hi" right=~zod]
5++$ map |$ [A B] [first=A second=B]
6+++ named-map ^- (map $-(@t @t) @t) [first=(|= x=@t x) second="ok"]
tests/golden/types-generic-gates/tokens.txt+43−1
@@ -56,4 +56,46 @@
56564:40 tight glyph =
57574:41 tight lit ~zod
58584:45 tight glyph ]
59−4:46 NEWLINE
59+5:1 NEWLINE
60+5:1 glyph +$
61+5:4 name map
62+5:8 glyph |$
63+5:11 glyph [
64+5:12 tight tvar A
65+5:14 tvar B
66+5:15 tight glyph ]
67+5:17 glyph [
68+5:18 tight name first
69+5:23 tight glyph =
70+5:24 tight tvar A
71+5:26 name second
72+5:32 tight glyph =
73+5:33 tight tvar B
74+5:34 tight glyph ]
75+6:1 NEWLINE
76+6:1 glyph ++
77+6:4 name named-map
78+6:14 glyph ^-
79+6:17 glyph (
80+6:18 tight name map
81+6:22 glyph $-(
82+6:25 tight aura @t
83+6:28 aura @t
84+6:30 tight glyph )
85+6:32 aura @t
86+6:34 tight glyph )
87+6:36 glyph [
88+6:37 tight name first
89+6:42 tight glyph =
90+6:43 tight glyph (
91+6:44 tight glyph |=
92+6:47 name x
93+6:48 tight glyph =
94+6:49 tight aura @t
95+6:52 name x
96+6:53 tight glyph )
97+6:55 name second
98+6:61 tight glyph =
99+6:62 tight str "ok"
100+6:66 tight glyph ]
101+6:67 NEWLINE
tests/golden/types-generic-gates/tree.txt+18−1
@@ -18,4 +18,21 @@
1818 (apply 4:12 duo (aura 4:17 @t) (aura 4:20 @p))
1919 (tuple 4:24
2020 (face 4:25 left (str 4:30 "hi"))
21− (face 4:35 right (lit 4:41 ~zod))))))
21+ (face 4:35 right (lit 4:41 ~zod)))))
22+ (mold 5:1 map
23+ (generic 5:8 A B
24+ (cell 5:17
25+ (face 5:18 first (tvar 5:24 A))
26+ (face 5:26 second (tvar 5:33 B)))))
27+ (value 6:1 named-map
28+ (cast 6:14
29+ (apply 6:17 map
30+ (fn 6:22 (aura 6:25 @t) (aura 6:28 @t))
31+ (aura 6:32 @t))
32+ (tuple 6:36
33+ (face 6:37 first
34+ (group 6:43
35+ (gate 6:44
36+ (face 6:47 x (aura 6:49 @t))
37+ (wing 6:52 x))))
38+ (face 6:55 second (str 6:62 "ok"))))))
tests/golden/types-generic-gates/types.txt+2
@@ -3,3 +3,5 @@ partial inference; module not checked
33+$ duo: not checked
44++ gate: $-(@t @t)
55++ pair: [left=@t right=@p]
6++$ map: not checked
7+++ named-map: [first=$-(@t @t) second=@t]
tests/golden/types-prelude-unit-helpers/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Overview, Prelude: Hoon standard-library gates are regrouped into the prelude, with Jibb implementations.
2−tests: The actual prelude exposes bind, biff, both, clap, clef, flit and hunt with independently instantiated unit payloads. Hunt covers both ordering outcomes and absent units, with its ordering gate first as in Hoon. A mismatched gate argument reports both sites, an incompatible clef gate stays unsupported, and an unrelated tag stays pending.
2+tests: The actual prelude exposes bind, biff, both, clap, clef, flit, hunt, eq and mate with independently instantiated unit payloads. Hunt covers both ordering outcomes and absent units, with its ordering gate first as in Hoon. Equality and mate preserve the gate-free constraint through generic schemes and reject direct or nested gate payloads. A mismatched gate argument reports both sites, an incompatible clef gate stays unsupported, and an unrelated tag stays pending.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-prelude-unit-helpers/source.jibb+10
@@ -19,3 +19,13 @@
1919++ hunt-right (hunt |=(p=[@t @t] %.n) `"a" ~)
2020++ hunt-bad (hunt |=(p=[@t @t] %.y) `"a" `~zod)
2121++ hunt-gate-bad (hunt |=(p=[@t @p] %.y) `"a" `"b")
22+++ eq-cell (eq [1 "a"] [1 "a"])
23+++ eq-gate (eq same same)
24+++ eq-nested-gate (eq [1 same] [1 same])
25+++ eq-open |= x=A (eq x x)
26+++ mate-same (mate `"hi" `"hi")
27+++ mate-left (mate ~ `"hi")
28+++ mate-right (mate `"hi" ~)
29+++ mate-crash (mate `"hi" `"there")
30+++ mate-gate (mate `same `same)
31+++ mate-bad (mate `"hi" `~zod)
tests/golden/types-prelude-unit-helpers/tokens.txt+107−1
@@ -318,4 +318,110 @@
31831821:47 glyph `
31931921:48 tight str "b"
32032021:51 tight glyph )
321−21:52 NEWLINE
321+22:1 NEWLINE
322+22:1 glyph ++
323+22:4 name eq-cell
324+22:12 glyph (
325+22:13 tight name eq
326+22:16 glyph [
327+22:17 tight lit 1
328+22:19 str "a"
329+22:22 tight glyph ]
330+22:24 glyph [
331+22:25 tight lit 1
332+22:27 str "a"
333+22:30 tight glyph ]
334+22:31 tight glyph )
335+23:1 NEWLINE
336+23:1 glyph ++
337+23:4 name eq-gate
338+23:12 glyph (
339+23:13 tight name eq
340+23:16 name same
341+23:21 name same
342+23:25 tight glyph )
343+24:1 NEWLINE
344+24:1 glyph ++
345+24:4 name eq-nested-gate
346+24:19 glyph (
347+24:20 tight name eq
348+24:23 glyph [
349+24:24 tight lit 1
350+24:26 name same
351+24:30 tight glyph ]
352+24:32 glyph [
353+24:33 tight lit 1
354+24:35 name same
355+24:39 tight glyph ]
356+24:40 tight glyph )
357+25:1 NEWLINE
358+25:1 glyph ++
359+25:4 name eq-open
360+25:12 glyph |=
361+25:15 name x
362+25:16 tight glyph =
363+25:17 tight tvar A
364+25:19 glyph (
365+25:20 tight name eq
366+25:23 name x
367+25:25 name x
368+25:26 tight glyph )
369+26:1 NEWLINE
370+26:1 glyph ++
371+26:4 name mate-same
372+26:14 glyph (
373+26:15 tight name mate
374+26:20 glyph `
375+26:21 tight str "hi"
376+26:26 glyph `
377+26:27 tight str "hi"
378+26:31 tight glyph )
379+27:1 NEWLINE
380+27:1 glyph ++
381+27:4 name mate-left
382+27:14 glyph (
383+27:15 tight name mate
384+27:20 lit ~
385+27:22 glyph `
386+27:23 tight str "hi"
387+27:27 tight glyph )
388+28:1 NEWLINE
389+28:1 glyph ++
390+28:4 name mate-right
391+28:15 glyph (
392+28:16 tight name mate
393+28:21 glyph `
394+28:22 tight str "hi"
395+28:27 lit ~
396+28:28 tight glyph )
397+29:1 NEWLINE
398+29:1 glyph ++
399+29:4 name mate-crash
400+29:15 glyph (
401+29:16 tight name mate
402+29:21 glyph `
403+29:22 tight str "hi"
404+29:27 glyph `
405+29:28 tight str "there"
406+29:35 tight glyph )
407+30:1 NEWLINE
408+30:1 glyph ++
409+30:4 name mate-gate
410+30:14 glyph (
411+30:15 tight name mate
412+30:20 glyph `
413+30:21 tight name same
414+30:26 glyph `
415+30:27 tight name same
416+30:31 tight glyph )
417+31:1 NEWLINE
418+31:1 glyph ++
419+31:4 name mate-bad
420+31:13 glyph (
421+31:14 tight name mate
422+31:19 glyph `
423+31:20 tight str "hi"
424+31:25 glyph `
425+31:26 tight lit ~zod
426+31:30 tight glyph )
427+31:31 NEWLINE
tests/golden/types-prelude-unit-helpers/tree.txt+57−1
@@ -172,4 +172,60 @@
172172 (cell 21:29 (aura 21:30 @t) (aura 21:33 @p)))
173173 (lit 21:37 %.y))
174174 (unit 21:42 (str 21:43 "a"))
175− (unit 21:47 (str 21:48 "b"))))))
175+ (unit 21:47 (str 21:48 "b")))))
176+ (value 22:1 eq-cell
177+ (group 22:12
178+ (call 22:13
179+ (wing 22:13 eq)
180+ (tuple 22:16 (lit 22:17 1) (str 22:19 "a"))
181+ (tuple 22:24 (lit 22:25 1) (str 22:27 "a")))))
182+ (value 23:1 eq-gate
183+ (group 23:12
184+ (call 23:13 (wing 23:13 eq) (wing 23:16 same) (wing 23:21 same))))
185+ (value 24:1 eq-nested-gate
186+ (group 24:19
187+ (call 24:20
188+ (wing 24:20 eq)
189+ (tuple 24:23 (lit 24:24 1) (wing 24:26 same))
190+ (tuple 24:32 (lit 24:33 1) (wing 24:35 same)))))
191+ (value 25:1 eq-open
192+ (gate 25:12
193+ (face 25:15 x (tvar 25:17 A))
194+ (group 25:19
195+ (call 25:20 (wing 25:20 eq) (wing 25:23 x) (wing 25:25 x)))))
196+ (value 26:1 mate-same
197+ (group 26:14
198+ (call 26:15
199+ (wing 26:15 mate)
200+ (unit 26:20 (str 26:21 "hi"))
201+ (unit 26:26 (str 26:27 "hi")))))
202+ (value 27:1 mate-left
203+ (group 27:14
204+ (call 27:15
205+ (wing 27:15 mate)
206+ (lit 27:20 ~)
207+ (unit 27:22 (str 27:23 "hi")))))
208+ (value 28:1 mate-right
209+ (group 28:15
210+ (call 28:16
211+ (wing 28:16 mate)
212+ (unit 28:21 (str 28:22 "hi"))
213+ (lit 28:27 ~))))
214+ (value 29:1 mate-crash
215+ (group 29:15
216+ (call 29:16
217+ (wing 29:16 mate)
218+ (unit 29:21 (str 29:22 "hi"))
219+ (unit 29:27 (str 29:28 "there")))))
220+ (value 30:1 mate-gate
221+ (group 30:14
222+ (call 30:15
223+ (wing 30:15 mate)
224+ (unit 30:20 (wing 30:21 same))
225+ (unit 30:26 (wing 30:27 same)))))
226+ (value 31:1 mate-bad
227+ (group 31:13
228+ (call 31:14
229+ (wing 31:14 mate)
230+ (unit 31:19 (str 31:20 "hi"))
231+ (unit 31:25 (lit 31:26 ~zod))))))
tests/golden/types-prelude-unit-helpers/types.txt+34
@@ -42,3 +42,37 @@ partial inference; module not checked
4242/tests/golden/types-prelude-unit-helpers/source.jibb:21:24: argument has type $-([@t @p] ?)
4343++ hunt-gate-bad (hunt |=(p=[@t @p] %.y) `"a" `"b")
4444 ^
45+++ eq-cell: ?
46+++ eq-gate: call's sample and argument types do not unify
47+/tests/golden/types-prelude-unit-helpers/source.jibb:23:13: called gate has type $-([A A] ?) where A contains no gates
48+++ eq-gate (eq same same)
49+ ^
50+/tests/golden/types-prelude-unit-helpers/source.jibb:23:16: argument has type $-(A A)
51+++ eq-gate (eq same same)
52+ ^
53+++ eq-nested-gate: call's sample and argument types do not unify
54+/tests/golden/types-prelude-unit-helpers/source.jibb:24:20: called gate has type $-([A A] ?) where A contains no gates
55+++ eq-nested-gate (eq [1 same] [1 same])
56+ ^
57+/tests/golden/types-prelude-unit-helpers/source.jibb:24:23: argument
58+++ eq-nested-gate (eq [1 same] [1 same])
59+ ^
60+++ eq-open: $-(A ?) where A contains no gates
61+++ mate-same: (unit @t)
62+++ mate-left: (unit @t)
63+++ mate-right: (unit @t)
64+++ mate-crash: (unit @t)
65+++ mate-gate: unit payload does not fit its expected type
66+/tests/golden/types-prelude-unit-helpers/source.jibb:30:15: expected unit payload
67+++ mate-gate (mate `same `same)
68+ ^
69+/tests/golden/types-prelude-unit-helpers/source.jibb:30:21: payload has type $-(A A)
70+++ mate-gate (mate `same `same)
71+ ^
72+++ mate-bad: unit payload does not fit its expected type
73+/tests/golden/types-prelude-unit-helpers/source.jibb:31:14: expected unit payload has type @t
74+++ mate-bad (mate `"hi" `~zod)
75+ ^
76+/tests/golden/types-prelude-unit-helpers/source.jibb:31:26: payload has type @p
77+++ mate-bad (mate `"hi" `~zod)
78+ ^
tests/lib/jibb-gate-free-guards.hoon+64
@@ -18,6 +18,7 @@
1818 ['flag' flag 8 %yes]
1919 ['atom variable' [%avar 0] 8 %yes]
2020 ['open variable' var 8 %unknown]
21+ ['gate-free variable' [%fvar 0] 8 %yes]
2122 ['noun' noun 8 %unknown]
2223 ['raw gate' gate 8 %no]
2324 ['data item' item 30 %yes]
@@ -59,6 +60,54 @@
5960 =? errors !=(path.b `~[[%item ~]]) ['list path incorrect' errors]
6061 =/ c=igate-free:jibb (gate-free-type:jibb model 100 ~)
6162 =? errors ?=(^ path.c) ['gate-free result carries witness path' errors]
63+ =/ scheme=ischeme:jibb [[%fn [%fvar 40] [%fvar 40]] ~[40]]
64+ =/ initial=istate:jibb *istate:jibb
65+ =/ instantiated=[typ=itype:jibb state=istate:jibb]
66+ (instantiate-scheme:jibb scheme initial(next 50))
67+ =? errors !=(typ.instantiated [%fn [%fvar 50] [%fvar 50]])
68+ ['instantiation lost the gate-free constraint' errors]
69+ =? errors !=(next.state.instantiated 51)
70+ ['gate-free instantiation did not advance the fresh counter' errors]
71+ =? errors !(lien binders.state.instantiated |=(n=@ud =(n 50)))
72+ ['gate-free instantiation lost binder provenance' errors]
73+ =/ keyed=(unit [types=(list itype:jibb) sub=isub:jibb])
74+ (itype-collection-keys:jibb %map ~[[%var 60] gate] ~)
75+ =/ expected-keys=(list itype:jibb) ~[[%fvar 60] gate]
76+ =/ expected-key-sub=isub:jibb ~[[60 [%fvar 60]]]
77+ =? errors !=(keyed [~ [expected-keys expected-key-sub]])
78+ ['map key constraint or independent value changed' errors]
79+ =/ set-key=(unit [types=(list itype:jibb) sub=isub:jibb])
80+ (itype-collection-keys:jibb %set ~[[%cell [%var 61] [%var 62]]] ~)
81+ =/ expected-set=(list itype:jibb) ~[[%cell [%fvar 61] [%fvar 62]]]
82+ =/ expected-set-sub=isub:jibb ~[[62 [%fvar 62]] [61 [%fvar 61]]]
83+ =? errors !=(set-key [~ [expected-set expected-set-sub]])
84+ ['nested set key variables were not constrained' errors]
85+ =? errors ?=(^ (itype-collection-keys:jibb %map ~[gate atom] ~))
86+ ['a gate-bearing map key was accepted' errors]
87+ =? errors ?=(^ (itype-collection-keys:jibb %set ~[[%cell atom gate]] ~))
88+ ['a nested gate-bearing set key was accepted' errors]
89+ =? errors ?=(^ (itype-collection-keys:jibb %map ~[[%var 63] atom] ~[[63 gate]]))
90+ ['an existing gate substitution bypassed a map key' errors]
91+ =? errors ?=(^ (itype-unify:jibb [%var 60] gate expected-key-sub))
92+ ['a later gate substitution bypassed a map key' errors]
93+ =/ map-template=ischeme:jibb
94+ [[%collection %map ~[[%fvar 70] [%var 71]]] ~[70 71]]
95+ =? errors ?=(^ (template-apply:jibb map-template ~[gate atom]))
96+ ['template application accepted a gate map key' errors]
97+ =/ applied=(unit itype:jibb)
98+ (template-apply:jibb map-template ~[[%var 72] gate])
99+ =/ expected-applied=itype:jibb
100+ [%collection %map ~[[%fvar 72] gate]]
101+ =? errors !=(applied [~ expected-applied])
102+ ['template application lost key constraint or changed value' errors]
103+ =/ existing-sub=isub:jibb ~[[72 gate]]
104+ =? errors ?=(^ (template-apply-sub:jibb map-template ~[[%var 72] atom] existing-sub))
105+ ['an existing gate substitution bypassed template validation' errors]
106+ =/ applied-sub=(unit [typ=itype:jibb sub=isub:jibb])
107+ (template-apply-sub:jibb map-template ~[[%var 72] gate] ~)
108+ =/ expected-applied-sub=isub:jibb ~[[72 [%fvar 72]]]
109+ =? errors !=(applied-sub [~ [expected-applied expected-applied-sub]])
110+ ['template application did not retain the key substitution' errors]
62111 :: The explicit budget is shared across the entire normalized type.
63112 =/ deep
64113 |= depth=@ud
@@ -71,6 +120,21 @@
71120 =/ exceeds=igate-free:jibb (gate-free-type:jibb (deep 256) 256 ~)
72121 =? errors !=(%yes verdict.fits) ['256 node budget rejected exact fit' errors]
73122 =? errors !=(%unknown verdict.exceeds) ['257 node budget did not fail closed' errors]
123+ =/ formed-fit=(unit igf-form:jibb) (itype-gate-free-form:jibb (deep 255) ~ 256)
124+ =/ formed-exceeds=(unit igf-form:jibb) (itype-gate-free-form:jibb (deep 256) ~ 256)
125+ =? errors ?=(~ formed-fit) ['256 node constraint rejected exact fit' errors]
126+ =? errors ?=(^ formed-exceeds) ['257 node constraint did not fail closed' errors]
127+ =/ deep-free
128+ |= depth=@ud
129+ ^- itype:jibb
130+ =/ out=itype:jibb [%fvar 0]
131+ |-
132+ ?: =(0 depth) out
133+ $(depth (dec depth), out [%face %nested out])
134+ =? errors !(itype-var-is-gate-free:jibb 0 (deep-free 255))
135+ ['256 node variable scan rejected exact fit' errors]
136+ =? errors !(itype-var-is-gate-free:jibb 0 (deep-free 256))
137+ ['257 node variable scan dropped the constraint' errors]
74138 =/ errors (skim errors |=(x=@t !=(x '')))
75139 (turn errors trip)
76140++ test-gate-free-guards