on master help sign in
Infer gate-free equality constraints
0858191iko
docs/compiler.md+3−1
@@ -126,7 +126,9 @@ A call whose direct result is a known named generic union can receive a matching
126
126
127A 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.
127A 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.
128
128
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.
130
132
131A 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.
133A 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.
132
134
docs/development.md+1−1
@@ -105,7 +105,7 @@ git clone https://github.com/urbit/tools /root/src/tools
105| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
105| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
106| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
106| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
107| `tools/type-empty-test` | Checks source-backed empty molds, inhabitedness, coverage and proof budgets under eval and on the ship |
107| `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 |
109| `tools/type-gate-free-source-test` | Checks source-backed todo mold analysis through the real readers under eval and on the ship |
109| `tools/type-gate-free-source-test` | Checks source-backed todo mold analysis through the real readers under eval and on the ship |
110| `tools/type-sub-guards-test` | Checks source-backed subscription mold dependencies under eval and on the ship |
110| `tools/type-sub-guards-test` | Checks source-backed subscription mold dependencies under eval and on the ship |
111| `tools/type-ask-guards-test` | Runs ask origin and canonical list/unit bootstrap guards under eval and on the ship |
111| `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
308. **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.
308. **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.
319. **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`.
319. **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`.
3210. **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.
3210. **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`.
3412. **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.
3412. **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.
3513. **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`.
3513. **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`.
3614. **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.
3614. **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
4422. **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.
4422. **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.
4523. **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.
4523. **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.
46
46
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`.
48
48
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.
50
50
5126. **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.
5126. **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.
52
52
docs/prelude-inventory.md+2−2
@@ -32,7 +32,7 @@ The source-backed `gth` gate calls a compiler-supplied private comparison interf
32
32
33`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
33`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
34
34
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.
36
36
37| Name | Hoon behavior | Jibb status |
37| Name | Hoon behavior | Jibb status |
38| --- | --- | --- |
38| --- | --- | --- |
@@ -47,7 +47,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
47| `flit` | Returns a gate that wraps a value only if it satisfies the predicate. | Written |
47| `flit` | Returns a gate that wraps a value only if it satisfies the predicate. | Written |
48| `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 |
48| `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 |
49| `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 |
49| `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 |
51| `need` | Extracts a present value and crashes on an absent unit. | Written; inferred by the partial checker |
51| `need` | Extracts a present value and crashes on an absent unit. | Written; inferred by the partial checker |
52| `some` | Wraps a value in a present unit. | Written |
52| `some` | Wraps a value in a present unit. | Written |
53
53
docs/status.md+4−2
@@ -71,7 +71,9 @@ The Hoon reader's tagged-union source proof also handles `$~` default wrappers.
71
71
72The 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.
72The 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.
73
73
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.
75
77
76The 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.
78The 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.
77
79
@@ -112,7 +114,7 @@ What the plan asks for, and where it is:
112Besides the plan's list:
114Besides the plan's list:
113
115
114- 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.
116- 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.
116- `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.
118- `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.
117- 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.
119- 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.
118- 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).
120- 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 @@
4657::
4657::
4658+$ itype
4658+$ itype
4659 $~ [%var 0]
4659 $~ [%var 0]
4660− $% [%var id=@ud]
4660+ $% [%var id=@ud]
4661+ [%fvar id=@ud]
4661 [%avar id=@ud]
4662 [%avar id=@ud]
4662 [%rvar id=@ud]
4663 [%rvar id=@ud]
4663 [%nvar id=@ud]
4664 [%nvar id=@ud]
@@ -4693,35 +4694,35 @@
4693 |= [t=itype sub=isub]
4694 |= [t=itype sub=isub]
4694 ^- itype
4695 ^- itype
4695 ?+ -.t t
4696 ?+ -.t t
4696− %var
4697+ ?(%var %fvar)
4697 =/ found=(unit itype) (itype-lookup id.t sub)
4698 =/ found=(unit itype) (itype-lookup id.t sub)
4698 ?~ found t
4699 ?~ 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
4700 $(t u.found)
4701 $(t u.found)
4701 %avar
4702 %avar
4702 =/ found=(unit itype) (itype-lookup id.t sub)
4703 =/ found=(unit itype) (itype-lookup id.t sub)
4703 ?~ found t
4704 ?~ 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
4705 $(t u.found)
4706 $(t u.found)
4706 %rvar
4707 %rvar
4707 =/ found=(unit itype) (itype-lookup id.t sub)
4708 =/ found=(unit itype) (itype-lookup id.t sub)
4708 ?~ found t
4709 ?~ 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
4710 $(t u.found)
4711 $(t u.found)
4711 %nvar
4712 %nvar
4712 =/ found=(unit itype) (itype-lookup id.t sub)
4713 =/ found=(unit itype) (itype-lookup id.t sub)
4713 ?~ found t
4714 ?~ 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
4715 $(t u.found)
4716 $(t u.found)
4716 %rnvar
4717 %rnvar
4717 =/ found=(unit itype) (itype-lookup id.t sub)
4718 =/ found=(unit itype) (itype-lookup id.t sub)
4718 ?~ found t
4719 ?~ 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
4720 $(t u.found)
4721 $(t u.found)
4721 %tag
4722 %tag
4722 =/ found=(unit itype) (itype-lookup id.t sub)
4723 =/ found=(unit itype) (itype-lookup id.t sub)
4723 ?~ found t
4724 ?~ 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
4725 $(t u.found)
4726 $(t u.found)
4726 ==
4727 ==
4727::
4728::
@@ -4774,6 +4775,7 @@
4774 ?- -.typ
4775 ?- -.typ
4775 %empty `[%no fuel]
4776 %empty `[%no fuel]
4776 ?(%atom %any-atom %flag %const %noun %avar %rvar %nvar %rnvar %fn %jrec) `[%yes fuel]
4777 ?(%atom %any-atom %flag %const %noun %avar %rvar %nvar %rnvar %fn %jrec) `[%yes fuel]
4778+ %fvar `[%unknown fuel]
4777 %var
4779 %var
4778 ?: (lien caps |=(c=icap (hole-same-variable typ (itype-walk [%var id.c] sub)))) `[%yes fuel]
4780 ?: (lien caps |=(c=icap (hole-same-variable typ (itype-walk [%var id.c] sub)))) `[%yes fuel]
4779 `[%unknown fuel]
4781 `[%unknown fuel]
@@ -4813,6 +4815,7 @@
4813 =. t (itype-walk t sub)
4815 =. t (itype-walk t sub)
4814 ?- -.t
4816 ?- -.t
4815 %var =(n id.t)
4817 %var =(n id.t)
4818+ %fvar =(n id.t)
4816 %avar =(n id.t)
4819 %avar =(n id.t)
4817 %rvar =(n id.t)
4820 %rvar =(n id.t)
4818 %nvar =(n id.t)
4821 %nvar =(n id.t)
@@ -4867,6 +4870,12 @@
4867 ?: ?=(%var -.b)
4870 ?: ?=(%var -.b)
4868 ?: (itype-occurs id.b a sub) ~
4871 ?: (itype-occurs id.b a sub) ~
4869 `[[id.b a] sub]
4872 `[[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)
4870 :: Arithmetic's aura variable excludes loobeans; decimal literals
4879 :: Arithmetic's aura variable excludes loobeans; decimal literals
4871 :: remain defaultable until a later constraint makes them concrete.
4880 :: remain defaultable until a later constraint makes them concrete.
4872 ?: &(?=(%nvar -.a) ?=(%rvar -.b))
4881 ?: &(?=(%nvar -.a) ?=(%rvar -.b))
@@ -4925,6 +4934,69 @@
4925 $(a tal.a, b tal.b, sub u.first)
4934 $(a tal.a, b tal.b, sub u.first)
4926 ~
4935 ~
4927::
4936::
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+::
4928++ itype-unify-args
5000++ itype-unify-args
4929 |= [as=(list itype) bs=(list itype) sub=isub]
5001 |= [as=(list itype) bs=(list itype) sub=isub]
4930 ^- (unit isub)
5002 ^- (unit isub)
@@ -4946,10 +5018,11 @@
4946 =. t (itype-walk t sub)
5018 =. t (itype-walk t sub)
4947 ?- -.t
5019 ?- -.t
4948 %var |
5020 %var |
5021+ %fvar |
4949 %avar |
5022 %avar |
4950 %rvar |
5023 %rvar |
4951 %nvar |
5024 %nvar |
4952− %rnvar |
5025+ %rnvar |
4953 %atom |
5026 %atom |
4954 %any-atom &
5027 %any-atom &
4955 %flag |
5028 %flag |
@@ -5022,6 +5095,7 @@
5022 ^- ?
5095 ^- ?
5023 ?- -.typ
5096 ?- -.typ
5024 %var |
5097 %var |
5098+ %fvar |
5025 %avar |
5099 %avar |
5026 %rvar |
5100 %rvar |
5027 %nvar |
5101 %nvar |
@@ -5129,8 +5203,8 @@
5129 ?. =(name.a name.b) |
5203 ?. =(name.a name.b) |
5130 (itype-face-asym-collection-args args.a args.b sub)
5204 (itype-face-asym-collection-args args.a args.b sub)
5131 ?: &(?=(%face -.a) ?=(%face -.b)) $(a body.a, b body.b)
5205 ?: &(?=(%face -.a) ?=(%face -.b)) $(a body.a, b body.b)
5132− ?: ?=(%face -.a) !|(?=(%var -.b) ?=(%avar -.b) ?=(%rvar -.b) |(?=(%nvar -.b) ?=(%rnvar -.b)))
5206+ ?: ?=(%face -.a) !|(?=(%var -.b) ?=(%fvar -.b) ?=(%avar -.b) ?=(%rvar -.b) |(?=(%nvar -.b) ?=(%rnvar -.b)))
5133− ?: ?=(%face -.b) !|(?=(%var -.a) ?=(%avar -.a) ?=(%rvar -.a) |(?=(%nvar -.a) ?=(%rnvar -.a)))
5207+ ?: ?=(%face -.b) !|(?=(%var -.a) ?=(%fvar -.a) ?=(%avar -.a) ?=(%rvar -.a) |(?=(%nvar -.a) ?=(%rnvar -.a)))
5134 ?: &(?=(%cell -.a) ?=(%cell -.b)) |($(a hed.a, b hed.b) $(a tal.a, b tal.b))
5208 ?: &(?=(%cell -.a) ?=(%cell -.b)) |($(a hed.a, b hed.b) $(a tal.a, b tal.b))
5135 ?: &(?=(%fn -.a) ?=(%fn -.b)) |($(a sample.a, b sample.b) $(a product.a, b product.b))
5209 ?: &(?=(%fn -.a) ?=(%fn -.b)) |($(a sample.a, b sample.b) $(a product.a, b product.b))
5136 |
5210 |
@@ -5383,9 +5457,9 @@
5383 ?: too-wide [%unknown ~]
5457 ?: too-wide [%unknown ~]
5384 =/ spine-checked=? |(spine-proof ?=(^ known))
5458 =/ spine-checked=? |(spine-proof ?=(^ known))
5385 =/ uncertain=?
5459 =/ 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)))
5387 =/ actual-open=?
5461 =/ 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)))
5389 =. actual (itype-walk actual sub)
5463 =. actual (itype-walk actual sub)
5390 =. expected (itype-walk expected sub)
5464 =. expected (itype-walk expected sub)
5391 ?: =(actual expected) [%ok sub next]
5465 ?: =(actual expected) [%ok sub next]
@@ -5440,7 +5514,7 @@
5440 ?: &(!uncertain ?=(%union -.actual) ?=(%face -.expected))
5514 ?: &(!uncertain ?=(%union -.actual) ?=(%face -.expected))
5441 $(expected body.expected)
5515 $(expected body.expected)
5442 ?: ?=(%union -.actual) [%unknown ~]
5516 ?: ?=(%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 ~]
5444 ?: &(?=(%union -.expected) !?=(%var -.actual))
5518 ?: &(?=(%union -.expected) !?=(%var -.actual))
5445 (itype-fit-cases actual cases.expected sub next)
5519 (itype-fit-cases actual cases.expected sub next)
5446 ?: ?=(%tag -.actual)
5520 ?: ?=(%tag -.actual)
@@ -5448,7 +5522,7 @@
5448 =/ u=(unit isub) (itype-unify actual expected sub)
5522 =/ u=(unit isub) (itype-unify actual expected sub)
5449 ?~ u [%bad ~]
5523 ?~ u [%bad ~]
5450 [%ok u.u next]
5524 [%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 ~]
5452 ?: ?=(%face -.expected) $(expected body.expected)
5526 ?: ?=(%face -.expected) $(expected body.expected)
5453 ?: constructor.actual
5527 ?: constructor.actual
5454 ?. ?=(%fn -.expected) [%bad ~]
5528 ?. ?=(%fn -.expected) [%bad ~]
@@ -5476,7 +5550,7 @@
5476 =/ u=(unit isub) (itype-unify actual expected sub)
5550 =/ u=(unit isub) (itype-unify actual expected sub)
5477 ?~ u [%bad ~]
5551 ?~ u [%bad ~]
5478 [%ok u.u next]
5552 [%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 ~]
5480 ?: ?=(%face -.expected) $(expected body.expected)
5554 ?: ?=(%face -.expected) $(expected body.expected)
5481 ?: &(?=(%collection -.expected) =(%list name.expected) =(0 val.literal.actual))
5555 ?: &(?=(%collection -.expected) =(%list name.expected) =(0 val.literal.actual))
5482 [%unknown ~]
5556 [%unknown ~]
@@ -5519,7 +5593,7 @@
5519 =/ unified=(unit isub) (itype-unify actual expected sub)
5593 =/ unified=(unit isub) (itype-unify actual expected sub)
5520 ?~ unified [%bad ~]
5594 ?~ unified [%bad ~]
5521 [%ok u.unified next]
5595 [%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 ~]
5523 [%bad ~]
5597 [%bad ~]
5524 ?: &(?=(%atom -.actual) ?=(%atom -.expected))
5598 ?: &(?=(%atom -.actual) ?=(%atom -.expected))
5525 ?: (aura-prefix aura.expected aura.actual) [%ok sub next]
5599 ?: (aura-prefix aura.expected aura.actual) [%ok sub next]
@@ -5532,7 +5606,7 @@
5532 ?: &(?=(%face -.actual) ?=(%var -.expected)) [%unknown ~]
5606 ?: &(?=(%face -.actual) ?=(%var -.expected)) [%unknown ~]
5533 ?: &(?=(%var -.actual) (itype-has-any-atom expected sub))
5607 ?: &(?=(%var -.actual) (itype-has-any-atom expected sub))
5534 [%unknown ~]
5608 [%unknown ~]
5535− ?: |(?=(%var -.actual) ?=(%var -.expected))
5609+ ?: |(?=(%var -.actual) ?=(%var -.expected) ?=(%fvar -.expected))
5536 =/ unified=(unit isub) (itype-unify actual expected sub)
5610 =/ unified=(unit isub) (itype-unify actual expected sub)
5537 ?~ unified
5611 ?~ unified
5538 ?: |(?=(%face -.actual) ?=(%face -.expected)) [%unknown ~]
5612 ?: |(?=(%face -.actual) ?=(%face -.expected)) [%unknown ~]
@@ -5612,6 +5686,36 @@
5612 (itype-fit [%collection %list ~[a]] list-t ~[[0 recursive]] 1)
5686 (itype-fit [%collection %list ~[a]] list-t ~[[0 recursive]] 1)
5613 =? problems !?=(%unknown -.nested-fit)
5687 =? problems !?=(%unknown -.nested-fit)
5614 ["recursive types behind substitutions should remain uncertain" problems]
5688 ["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]
5615 problems
5719 problems
5616::
5720::
5617:: The expression inference below is deliberately a fragment: bindings,
5721:: The expression inference below is deliberately a fragment: bindings,
@@ -5797,6 +5901,7 @@
5797 %noun [%unknown & fuel ~]
5901 %noun [%unknown & fuel ~]
5798 %empty [%yes | fuel ~]
5902 %empty [%yes | fuel ~]
5799 %var [%unknown | fuel ~]
5903 %var [%unknown | fuel ~]
5904+ %fvar [%yes & fuel ~]
5800 %avar [%yes & fuel ~]
5905 %avar [%yes & fuel ~]
5801 %rvar [%yes & fuel ~]
5906 %rvar [%yes & fuel ~]
5802 %nvar [%yes & fuel ~]
5907 %nvar [%yes & fuel ~]
@@ -5863,10 +5968,11 @@
5863 %tag |
5968 %tag |
5864 %const |
5969 %const |
5865 %var |
5970 %var |
5971+ %fvar |
5866 %avar |
5972 %avar |
5867 %rvar |
5973 %rvar |
5868 %nvar |
5974 %nvar |
5869− %rnvar |
5975+ %rnvar |
5870 %atom |
5976 %atom |
5871 %any-atom |
5977 %any-atom |
5872 %flag |
5978 %flag |
@@ -5897,6 +6003,7 @@
5897 ^- (unit @ud)
6003 ^- (unit @ud)
5898 ?- -.t
6004 ?- -.t
5899 %var `id.t
6005 %var `id.t
6006+ %fvar `id.t
5900 %avar `id.t
6007 %avar `id.t
5901 %rvar `id.t
6008 %rvar `id.t
5902 %nvar `id.t
6009 %nvar `id.t
@@ -5917,7 +6024,7 @@
5917 ^- ?
6024 ^- ?
5918 =. t (itype-walk t sub.state)
6025 =. t (itype-walk t sub.state)
5919 ?- -.t
6026 ?- -.t
5920− ?(%var %avar %rvar %nvar %rnvar)
6027+ ?(%var %fvar %avar %rvar %nvar %rnvar)
5921 ?: (lien caps.state |=(c=icap (hole-same-variable t (itype-walk [%var id.c] sub.state)))) &
6028 ?: (lien caps.state |=(c=icap (hole-same-variable t (itype-walk [%var id.c] sub.state)))) &
5922 (lien params.state |=(p=[name=@t typ=itype] (hole-same-variable t (itype-walk typ.p sub.state))))
6029 (lien params.state |=(p=[name=@t typ=itype] (hole-same-variable t (itype-walk typ.p sub.state))))
5923 %tag |
6030 %tag |
@@ -5969,7 +6076,7 @@
5969 ^- ?
6076 ^- ?
5970 =. t (itype-walk t sub.state)
6077 =. t (itype-walk t sub.state)
5971 ?- -.t
6078 ?- -.t
5972− ?(%tag %nvar %rnvar %avar %rvar) !(hole-known t state)
6079+ ?(%tag %nvar %rnvar %fvar %avar %rvar) !(hole-known t state)
5973 %union |((lien cases.t |=(c=itype (hole-uncertain c state))) (lien args.t |=(c=itype (hole-uncertain c state))))
6080 %union |((lien cases.t |=(c=itype (hole-uncertain c state))) (lien args.t |=(c=itype (hole-uncertain c state))))
5974 %grec (lien args.t |=(c=itype (hole-uncertain c state)))
6081 %grec (lien args.t |=(c=itype (hole-uncertain c state)))
5975 %collection (lien args.t |=(c=itype (hole-uncertain c state)))
6082 %collection (lien args.t |=(c=itype (hole-uncertain c state)))
@@ -5995,6 +6102,7 @@
5995 ^- (list @ud)
6102 ^- (list @ud)
5996 ?- -.t
6103 ?- -.t
5997 %var ~[id.t]
6104 %var ~[id.t]
6105+ %fvar ~[id.t]
5998 %avar ~[id.t]
6106 %avar ~[id.t]
5999 %rvar ~[id.t]
6107 %rvar ~[id.t]
6000 %nvar ~[id.t]
6108 %nvar ~[id.t]
@@ -6033,6 +6141,10 @@
6033 =/ found=(unit itype) (itype-lookup id.t ren)
6141 =/ found=(unit itype) (itype-lookup id.t ren)
6034 ?~ found t
6142 ?~ found t
6035 u.found
6143 u.found
6144+ %fvar
6145+ =/ found=(unit itype) (itype-lookup id.t ren)
6146+ ?~ found t
6147+ u.found
6036 %avar
6148 %avar
6037 =/ found=(unit itype) (itype-lookup id.t ren)
6149 =/ found=(unit itype) (itype-lookup id.t ren)
6038 ?~ found t
6150 ?~ found t
@@ -6074,6 +6186,7 @@
6074 ^- ?
6186 ^- ?
6075 ?- -.t
6187 ?- -.t
6076 %var |
6188 %var |
6189+ %fvar |
6077 %avar =(n id.t)
6190 %avar =(n id.t)
6078 %rvar =(n id.t)
6191 %rvar =(n id.t)
6079 %nvar =(n id.t)
6192 %nvar =(n id.t)
@@ -6099,6 +6212,7 @@
6099 ^- ?
6212 ^- ?
6100 ?- -.t
6213 ?- -.t
6101 %var |
6214 %var |
6215+ %fvar |
6102 %avar |
6216 %avar |
6103 %rvar =(n id.t)
6217 %rvar =(n id.t)
6104 %nvar |
6218 %nvar |
@@ -6123,6 +6237,28 @@
6123:: Canonical numbering makes printed variables independent of the order
6237:: Canonical numbering makes printed variables independent of the order
6124:: the unifier happened to allocate intermediates.
6238:: the unifier happened to allocate intermediates.
6125::
6239::
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+::
6126++ canonical-itype
6262++ canonical-itype
6127 |= [t=itype vars=(list @ud)]
6263 |= [t=itype vars=(list @ud)]
6128 ^- itype
6264 ^- itype
@@ -6130,7 +6266,7 @@
6130 =/ n=@ud 0
6266 =/ n=@ud 0
6131 |-
6267 |-
6132 ?~ vars (itype-rename t ren)
6268 ?~ 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])))
6134 $(vars t.vars, ren [[i.vars replacement] ren], n +(n))
6270 $(vars t.vars, ren [[i.vars replacement] ren], n +(n))
6135::
6271::
6136++ instantiate-scheme
6272++ instantiate-scheme
@@ -6141,11 +6277,11 @@
6141 |-
6277 |-
6142 ?~ vars [(itype-rename typ.scheme ren) state]
6278 ?~ vars [(itype-rename typ.scheme ren) state]
6143 =/ replacement=itype
6279 =/ 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])))
6145 :: A generalized atom variable is a valid origin for re-generalizing
6281 :: A generalized atom variable is a valid origin for re-generalizing
6146 :: an alias, just as a sample binder is.
6282 :: an alias, just as a sample binder is.
6147 =/ st=istate state(next +(next.state))
6283 =/ 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]
6149 $(vars t.vars, ren [[i.vars replacement] ren], state st)
6285 $(vars t.vars, ren [[i.vars replacement] ren], state st)
6150::
6286::
6151++ icap-lookup
6287++ icap-lookup
@@ -6352,7 +6488,9 @@
6352 =/ args=(unit (list itype)) (import-to-itypes +>.node)
6488 =/ args=(unit (list itype)) (import-to-itypes +>.node)
6353 ?~ args ~
6489 ?~ args ~
6354 ?. =(arity (lent u.args)) ~
6490 ?. =(arity (lent u.args)) ~
6491+ =/ keyed=(unit [types=(list itype) sub=isub]) (itype-collection-keys name u.args ~)
6492+ ?~ keyed ~
6355− `[%collection name u.args]
6493+ `[%collection name types.u.keyed]
6356 %fork
6494 %fork
6357 :: Hoon's ordinary ? mold is the fork of its two %f singletons.
6495 :: Hoon's ordinary ? mold is the fork of its two %f singletons.
6358 =/ raw=* +.node
6496 =/ raw=* +.node
@@ -6631,15 +6769,27 @@
6631 ?~ rest ~
6769 ?~ rest ~
6632 `[[i.names i.args] u.rest]
6770 `[[i.names i.args] u.rest]
6633::
6771::
6634−++ template-apply
6772+++ template-apply-sub
6635− |= [template=ischeme args=(list itype)]
6773+ |= [template=ischeme args=(list itype) sub=isub]
6636− ^- (unit itype)
6774+ ^- (unit [typ=itype sub=isub])
6637 =/ vars=(list @ud) vars.template
6775 =/ vars=(list @ud) vars.template
6638 =/ ren=isub ~
6776 =/ ren=isub ~
6639 |-
6777 |-
6640− ?~ vars ?~(args `(itype-rename typ.template ren) ~)
6778+ ?~ vars ?~(args `[(itype-rename typ.template ren) sub] ~)
6641 ?~ args ~
6779 ?~ args ~
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 ~
6642− $(vars t.vars, args t.args, ren [[i.vars i.args] ren])
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
6643::
6793::
6644++ infer-shape-args
6794++ infer-shape-args
6645 |= [args=(list shape) state=istate]
6795 |= [args=(list shape) state=istate]
@@ -6909,6 +7059,17 @@
6909 =/ args=(unit [types=(list itype) state=istate]) (infer-shape-args args.sh state)
7059 =/ args=(unit [types=(list itype) state=istate]) (infer-shape-args args.sh state)
6910 ?~ args ~
7060 ?~ args ~
6911 =/ n=term i.ref.sh
7061 =/ 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
6912 ?^ t.ref.sh
7073 ?^ t.ref.sh
6913 ?^ t.t.ref.sh ~
7074 ?^ t.t.ref.sh ~
6914 =/ iface=(unit ifile) (find-jibb-interface i.t.ref.sh jimports.state.u.args)
7075 =/ iface=(unit ifile) (find-jibb-interface i.t.ref.sh jimports.state.u.args)
@@ -6916,9 +7077,10 @@
6916 =/ template=(unit ischeme) (find-jibb-mold n u.iface)
7077 =/ template=(unit ischeme) (find-jibb-mold n u.iface)
6917 ?~ template ~
7078 ?~ template ~
6918 ?~ vars.u.template ~
7079 ?~ 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)
6920 ?~ applied ~
7081 ?~ applied ~
7082+ =. sub.state.u.args sub.u.applied
6921− `[(itype-in-import u.applied u.iface i.t.ref.sh prelude.state.u.args) state.u.args]
7083+ `[(itype-in-import typ.u.applied u.iface i.t.ref.sh prelude.state.u.args) state.u.args]
6922 ?: (lien active.state.u.args |=(x=term =(x n))) ~
7084 ?: (lien active.state.u.args |=(x=term =(x n))) ~
6923 =/ found=(unit shape) (find-simple-mold n molds.state.u.args)
7085 =/ found=(unit shape) (find-simple-mold n molds.state.u.args)
6924 ?~ found
7086 ?~ found
@@ -6927,9 +7089,10 @@
6927 =/ prelude-entry=(unit ischeme) (find-jibb-mold n u.prelude.state.u.args)
7089 =/ prelude-entry=(unit ischeme) (find-jibb-mold n u.prelude.state.u.args)
6928 ?~ prelude-entry ~
7090 ?~ prelude-entry ~
6929 ?~ vars.u.prelude-entry ~
7091 ?~ 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)
6931 ?~ applied ~
7093 ?~ applied ~
7094+ =. sub.state.u.args sub.u.applied
6932− `[u.applied state.u.args]
7095+ `[typ.u.applied state.u.args]
6933 ?. ?=(%generic -.u.found) ~
7096 ?. ?=(%generic -.u.found) ~
6934 =/ grec=(unit itype) (simple-source-generic-recursive n u.found types.u.args state.u.args)
7097 =/ grec=(unit itype) (simple-source-generic-recursive n u.found types.u.args state.u.args)
6935 ?^ grec `[u.grec state.u.args]
7098 ?^ grec `[u.grec state.u.args]
@@ -9543,6 +9706,9 @@
9543 %var
9706 %var
9544 ?: (lth id.t 26) [(add 65 id.t) ~]
9707 ?: (lth id.t 26) [(add 65 id.t) ~]
9545 "T{<id.t>}"
9708 "T{<id.t>}"
9709+ %fvar
9710+ ?: (lth id.t 26) [(add 65 id.t) ~]
9711+ "T{<id.t>}"
9546 %avar
9712 %avar
9547 ?: (lth id.t 26) [(add 65 id.t) ~]
9713 ?: (lth id.t 26) [(add 65 id.t) ~]
9548 "T{<id.t>}"
9714 "T{<id.t>}"
@@ -9606,6 +9772,7 @@
9606 %nvar &
9772 %nvar &
9607 %rnvar &
9773 %rnvar &
9608 %var |
9774 %var |
9775+ %fvar |
9609 %avar |
9776 %avar |
9610 %rvar |
9777 %rvar |
9611 %atom |
9778 %atom |
@@ -9629,7 +9796,7 @@
9629 |= [label=tape typ=itype sub=isub]
9796 |= [label=tape typ=itype sub=isub]
9630 ^- tape
9797 ^- tape
9631 =/ normalized=itype (itype-normalize typ sub)
9798 =/ 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
9633 ?: (itype-has-hidden-recursive normalized) label
9800 ?: (itype-has-hidden-recursive normalized) label
9634 =/ vars=(list @ud) (unique-type-vars (itype-vars normalized))
9801 =/ vars=(list @ud) (unique-type-vars (itype-vars normalized))
9635 ?: (gth (lent vars) 26) label
9802 ?: (gth (lent vars) 26) label
@@ -9650,6 +9817,7 @@
9650 =/ ident=(unit @ud)
9817 =/ ident=(unit @ud)
9651 ?+ -.resolved ~
9818 ?+ -.resolved ~
9652 %var `id.resolved
9819 %var `id.resolved
9820+ %fvar `id.resolved
9653 %avar `id.resolved
9821 %avar `id.resolved
9654 %rvar `id.resolved
9822 %rvar `id.resolved
9655 ==
9823 ==
@@ -9665,6 +9833,7 @@
9665 =/ ident=(unit @ud)
9833 =/ ident=(unit @ud)
9666 ?+ -.resolved ~
9834 ?+ -.resolved ~
9667 %var `id.resolved
9835 %var `id.resolved
9836+ %fvar `id.resolved
9668 %avar `id.resolved
9837 %avar `id.resolved
9669 %rvar `id.resolved
9838 %rvar `id.resolved
9670 ==
9839 ==
@@ -9680,6 +9849,7 @@
9680 =/ ident=(unit @ud)
9849 =/ ident=(unit @ud)
9681 ?+ -.resolved ~
9850 ?+ -.resolved ~
9682 %var `id.resolved
9851 %var `id.resolved
9852+ %fvar `id.resolved
9683 %avar `id.resolved
9853 %avar `id.resolved
9684 %rvar `id.resolved
9854 %rvar `id.resolved
9685 ==
9855 ==
@@ -9696,6 +9866,7 @@
9696 =/ ident=(unit @ud)
9866 =/ ident=(unit @ud)
9697 ?+ -.resolved ~
9867 ?+ -.resolved ~
9698 %var `id.resolved
9868 %var `id.resolved
9869+ %fvar `id.resolved
9699 %avar `id.resolved
9870 %avar `id.resolved
9700 %rvar `id.resolved
9871 %rvar `id.resolved
9701 ==
9872 ==
@@ -9722,6 +9893,7 @@
9722 ^- ?
9893 ^- ?
9723 ?- -.t
9894 ?- -.t
9724 %var |
9895 %var |
9896+ %fvar |
9725 %avar =(n id.t)
9897 %avar =(n id.t)
9726 %rvar =(n id.t)
9898 %rvar =(n id.t)
9727 %nvar |
9899 %nvar |
@@ -9784,6 +9956,10 @@
9784 =/ sep=tape ?:(printed ", " " where ")
9956 =/ sep=tape ?:(printed ", " " where ")
9785 =/ clause=tape "{sep}{(show-itype [%avar i.vars] ~)} is an atom"
9957 =/ clause=tape "{sep}{(show-itype [%avar i.vars] ~)} is an atom"
9786 $(vars t.vars, printed &, out (weld out clause))
9958 $(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))
9787 $(vars t.vars)
9963 $(vars t.vars)
9788::
9964::
9789:: Build the supported part of the value environment in dependency order.
9965:: Build the supported part of the value environment in dependency order.
@@ -10716,7 +10892,7 @@
10716++ union-state-leaf
10892++ union-state-leaf
10717 |= t=itype
10893 |= t=itype
10718 ^- ?
10894 ^- ?
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)
10720++ union-state-params-budget
10896++ union-state-params-budget
10721 |= [params=iparams fuel=@ud]
10897 |= [params=iparams fuel=@ud]
10722 ^- (unit @ud)
10898 ^- (unit @ud)
@@ -11473,12 +11649,14 @@
11473 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
11649 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
11474 =/ minus=ischeme [[%fn b b] ~[0]]
11650 =/ minus=ischeme [[%fn b b] ~[0]]
11475 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
11651 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
11652+ =/ free=itype [%fvar 0]
11653+ =/ equal=ischeme [[%fn [%cell free free] [%flag ~]] ~[0]]
11476 =/ utf8=itype [%atom 'tD']
11654 =/ utf8=itype [%atom 'tD']
11477 =/ tape=itype [%collection %list ~[utf8]]
11655 =/ tape=itype [%collection %list ~[utf8]]
11478 =/ codepoints=itype [%collection %list ~[[%atom %c]]]
11656 =/ codepoints=itype [%collection %list ~[[%atom %c]]]
11479 =/ text-trip=ischeme [[%fn [%atom %t] tape] ~]
11657 =/ text-trip=ischeme [[%fn [%atom %t] tape] ~]
11480 =/ text-tuba=ischeme [[%fn tape codepoints] ~]
11658 =/ 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 ~ ~ ~ ~ ~]
11482::
11660::
11483++ infer-private-internal
11661++ infer-private-internal
11484 |= [src=@t public-source=@t]
11662 |= [src=@t public-source=@t]
@@ -14561,7 +14739,7 @@
14561 ?: =(0 fuel) ~
14739 ?: =(0 fuel) ~
14562 =. fuel (dec fuel)
14740 =. fuel (dec fuel)
14563 =/ t=itype i.todo
14741 =/ t=itype i.todo
14564− ?: ?=(?(%var %avar %rvar %nvar %rnvar %tag) -.t)
14742+ ?: ?=(?(%var %fvar %avar %rvar %nvar %rnvar %tag) -.t)
14565 =/ node-id=@ud ?:(?=(%tag -.t) id.t +.t)
14743 =/ node-id=@ud ?:(?=(%tag -.t) id.t +.t)
14566 =/ found=(unit itype) (itype-lookup node-id sub)
14744 =/ found=(unit itype) (itype-lookup node-id sub)
14567 ?~ found $(todo t.todo, ids [node-id ids])
14745 ?~ found $(todo t.todo, ids [node-id ids])
jibb-dev/lib/jibb/internal.jibb+1
@@ -9,6 +9,7 @@
9
9
10:: The compiler supplies this private interface; execution is not yet implemented.
10:: The compiler supplies this private interface; execution is not yet implemented.
11++ gth-atom |= args=[A A] (raw-gth.core args)
11++ gth-atom |= args=[A A] (raw-gth.core args)
12+++ eq-data |= args=[A A] (raw-eq.core args)
12
13
13:: Application paths are knot sequences.
14:: Application paths are knot sequences.
14+$ qath
15+$ qath
jibb-dev/lib/jibb/prelude.jibb+15
@@ -19,6 +19,8 @@
19 %.y %.n
19 %.y %.n
20 %.n %.y
20 %.n %.y
21
21
22+++ eq |= args=[A A] (eq-data.internal args)
23+
22+$ list |$ [A]
24+$ list |$ [A]
23 ~
25 ~
24 [i=A t=(list A)]
26 [i=A t=(list A)]
@@ -211,6 +213,19 @@
211 %.y first
213 %.y first
212 %.n second
214 %.n second
213
215
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+
214++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
229++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
215 ?- args
230 ?- args
216 [first second combine] ^- (unit C)
231 [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.
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, 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.
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.
3expect: parses
3expect: parses
4expect-types: a partial inference report, not a checked module; unit and list gate typing is not complete
4expect-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 @@
19 %.y %.n
19 %.y %.n
20 %.n %.y
20 %.n %.y
21
21
22+++ eq |= args=[A A] (eq-data.internal args)
23+
22+$ list |$ [A]
24+$ list |$ [A]
23 ~
25 ~
24 [i=A t=(list A)]
26 [i=A t=(list A)]
@@ -211,6 +213,19 @@
211 %.y first
213 %.y first
212 %.n second
214 %.n second
213
215
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+
214++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
229++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
215 ?- args
230 ?- args
216 [first second combine] ^- (unit C)
231 [first second combine] ^- (unit C)
tests/golden/prelude-unit-list-transforms/tokens.txt+2204−2118
@@ -83,2232 +83,2318 @@
8322:1 DEDENT
8322:1 DEDENT
8422:1 DEDENT
8422:1 DEDENT
8522:1 NEWLINE
8522:1 NEWLINE
86−22:1 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 +$
87−22:4 name list
101+24:4 name list
88−22:9 glyph |$
102+24:9 glyph |$
89−22:12 glyph [
103+24:12 glyph [
90−22:13 tight tvar A
104+24:13 tight tvar A
91−22:14 tight glyph ]
105+24:14 tight glyph ]
92−23:3 INDENT
106+25:3 INDENT
93−23:3 lit ~
107+25:3 lit ~
94−24:3 NEWLINE
108+26:3 NEWLINE
95−24:3 glyph [
109+26:3 glyph [
96−24:4 tight name i
110+26:4 tight name i
97−24:5 tight glyph =
111+26:5 tight glyph =
98−24:6 tight tvar A
112+26:6 tight tvar A
99−24:8 name t
113+26:8 name t
100−24:9 tight glyph =
114+26:9 tight glyph =
101−24:10 tight glyph (
115+26:10 tight glyph (
102−24:11 tight name list
116+26:11 tight name list
103−24:16 tvar A
117+26:16 tvar A
104−24:17 tight glyph )
118+26:17 tight glyph )
105−24:18 tight glyph ]
119+26:18 tight glyph ]
106−26:1 DEDENT
120+28:1 DEDENT
107−26:1 NEWLINE
121+28:1 NEWLINE
108−26:1 glyph +$
122+28:1 glyph +$
109−26:4 name unit
123+28:4 name unit
110−26:9 glyph |$
124+28:9 glyph |$
111−26:12 glyph [
125+28:12 glyph [
112−26:13 tight tvar A
126+28:13 tight tvar A
113−26:14 tight glyph ]
127+28:14 tight glyph ]
114−27:3 INDENT
128+29:3 INDENT
115−27:3 lit ~
129+29:3 lit ~
116−28:3 NEWLINE
130+30:3 NEWLINE
117−28:3 glyph [
131+30:3 glyph [
118−28:4 tight lit ~
132+30:4 tight lit ~
119−28:6 name u
133+30:6 name u
120−28:7 tight glyph =
134+30:7 tight glyph =
121−28:8 tight tvar A
135+30:8 tight tvar A
122−28:9 tight glyph ]
136+30:9 tight glyph ]
123−30:1 DEDENT
137+32:1 DEDENT
124−30:1 NEWLINE
138+32:1 NEWLINE
125−30:1 glyph ++
139+32:1 glyph ++
126−30:4 name fall
140+32:4 name fall
127−30:9 glyph |=
141+32:9 glyph |=
128−30:12 name args
142+32:12 name args
129−30:16 tight glyph =
143+32:16 tight glyph =
130−30:17 tight glyph [
144+32:17 tight glyph [
131−30:18 tight glyph (
145+32:18 tight glyph (
132−30:19 tight name unit
146+32:19 tight name unit
133−30:24 tvar A
147+32:24 tvar A
134−30:25 tight glyph )
148+32:25 tight glyph )
135−30:27 tvar A
149+32:27 tvar A
136−30:28 tight glyph ]
150+32:28 tight glyph ]
137−31:3 INDENT
151+33:3 INDENT
138−31:3 glyph ?-
152+33:3 glyph ?-
139−31:6 name args
153+33:6 name args
140−32:5 INDENT
154+34:5 INDENT
141−32:5 glyph [
155+34:5 glyph [
142−32:6 tight name maybe
156+34:6 tight name maybe
143−32:12 name fallback
157+34:12 name fallback
144−32:20 tight glyph ]
158+34:20 tight glyph ]
145−33:7 INDENT
159+35:7 INDENT
146−33:7 glyph ?-
160+35:7 glyph ?-
147−33:10 name maybe
161+35:10 name maybe
148−34:9 INDENT
162+36:9 INDENT
149−34:9 lit ~
163+36:9 lit ~
150−34:11 name fallback
164+36:11 name fallback
151−35:9 NEWLINE
165+37:9 NEWLINE
152−35:9 glyph [
166+37:9 glyph [
153−35:10 tight lit ~
167+37:10 tight lit ~
154−35:12 name value
168+37:12 name value
155−35:17 tight glyph ]
169+37:17 tight glyph ]
156−35:19 name value
170+37:19 name value
157−37:1 DEDENT
171+39:1 DEDENT
158−37:1 DEDENT
172+39:1 DEDENT
159−37:1 DEDENT
173+39:1 DEDENT
160−37:1 DEDENT
174+39:1 DEDENT
161−37:1 NEWLINE
175+39:1 NEWLINE
162−37:1 glyph ++
176+39:1 glyph ++
163−37:4 name need
177+39:4 name need
164−37:9 glyph |=
178+39:9 glyph |=
165−37:12 name maybe
179+39:12 name maybe
166−37:17 tight glyph =
180+39:17 tight glyph =
167−37:18 tight glyph (
181+39:18 tight glyph (
168−37:19 tight name unit
182+39:19 tight name unit
169−37:24 tvar A
183+39:24 tvar A
170−37:25 tight glyph )
184+39:25 tight glyph )
171−38:3 INDENT
185+40:3 INDENT
172−38:3 glyph ?-
186+40:3 glyph ?-
173−38:6 name maybe
187+40:6 name maybe
174−39:5 INDENT
188+41:5 INDENT
175−39:5 lit ~
189+41:5 lit ~
176−39:7 glyph !!
190+41:7 glyph !!
177−40:5 NEWLINE
191+42:5 NEWLINE
178−40:5 glyph [
192+42:5 glyph [
179−40:6 tight lit ~
193+42:6 tight lit ~
180−40:8 name value
194+42:8 name value
181−40:13 tight glyph ]
195+42:13 tight glyph ]
182−40:15 name value
196+42:15 name value
183−42:1 DEDENT
197+44:1 DEDENT
184−42:1 DEDENT
198+44:1 DEDENT
185−42:1 NEWLINE
199+44:1 NEWLINE
186−42:1 glyph ++
200+44:1 glyph ++
187−42:4 name weld
201+44:4 name weld
188−42:9 glyph |=
202+44:9 glyph |=
189−42:12 name args
203+44:12 name args
190−42:16 tight glyph =
204+44:16 tight glyph =
191−42:17 tight glyph [
205+44:17 tight glyph [
192−42:18 tight glyph (
206+44:18 tight glyph (
193−42:19 tight name list
207+44:19 tight name list
194−42:24 tvar A
208+44:24 tvar A
195−42:25 tight glyph )
209+44:25 tight glyph )
196−42:27 glyph (
210+44:27 glyph (
197−42:28 tight name list
211+44:28 tight name list
198−42:33 tvar A
212+44:33 tvar A
199−42:34 tight glyph )
213+44:34 tight glyph )
200−42:35 tight glyph ]
214+44:35 tight glyph ]
201−43:3 INDENT
215+45:3 INDENT
202−43:3 glyph ?-
216+45:3 glyph ?-
203−43:6 name args
217+45:6 name args
204−44:5 INDENT
218+46:5 INDENT
205−44:5 glyph [
219+46:5 glyph [
206−44:6 tight name xs
220+46:6 tight name xs
207−44:9 name ys
221+46:9 name ys
208−44:11 tight glyph ]
222+46:11 tight glyph ]
209−45:7 INDENT
223+47:7 INDENT
210−45:7 glyph ^-
224+47:7 glyph ^-
211−45:10 glyph (
225+47:10 glyph (
212−45:11 tight name list
226+47:11 tight name list
213−45:16 tvar A
227+47:16 tvar A
214−45:17 tight glyph )
228+47:17 tight glyph )
215−46:9 INDENT
229+48:9 INDENT
216−46:9 glyph ?-
230+48:9 glyph ?-
217−46:12 name xs
231+48:12 name xs
218−47:11 INDENT
232+49:11 INDENT
219−47:11 lit ~
233+49:11 lit ~
220−47:13 name ys
234+49:13 name ys
221−48:11 NEWLINE
235+50:11 NEWLINE
222−48:11 glyph [
236+50:11 glyph [
223−48:12 tight name item
237+50:12 tight name item
224−48:17 name rest
238+50:17 name rest
225−48:21 tight glyph ]
239+50:21 tight glyph ]
226−48:23 glyph [
240+50:23 glyph [
227−48:24 tight name item
241+50:24 tight name item
228−48:29 glyph (
242+50:29 glyph (
229−48:30 tight name weld
243+50:30 tight name weld
230−48:35 name rest
244+50:35 name rest
231−48:40 name ys
245+50:40 name ys
232−48:42 tight glyph )
246+50:42 tight glyph )
233−48:43 tight glyph ]
247+50:43 tight glyph ]
234−50:1 DEDENT
248+52:1 DEDENT
235−50:1 DEDENT
249+52:1 DEDENT
236−50:1 DEDENT
250+52:1 DEDENT
237−50:1 DEDENT
251+52:1 DEDENT
238−50:1 DEDENT
252+52:1 DEDENT
239−50:1 NEWLINE
253+52:1 NEWLINE
240−50:1 glyph ++
254+52:1 glyph ++
241−50:4 name turn
255+52:4 name turn
242−50:9 glyph |=
256+52:9 glyph |=
243−50:12 name args
257+52:12 name args
244−50:16 tight glyph =
258+52:16 tight glyph =
245−50:17 tight glyph [
259+52:17 tight glyph [
246−50:18 tight glyph (
260+52:18 tight glyph (
247−50:19 tight name list
261+52:19 tight name list
248−50:24 tvar A
262+52:24 tvar A
249−50:25 tight glyph )
263+52:25 tight glyph )
250−50:27 glyph $-(
264+52:27 glyph $-(
251−50:30 tight tvar A
265+52:30 tight tvar A
252−50:32 tvar B
266+52:32 tvar B
253−50:33 tight glyph )
267+52:33 tight glyph )
254−50:34 tight glyph ]
268+52:34 tight glyph ]
255−51:3 INDENT
269+53:3 INDENT
256−51:3 glyph ?-
270+53:3 glyph ?-
257−51:6 name args
271+53:6 name args
258−52:5 INDENT
272+54:5 INDENT
259−52:5 glyph [
273+54:5 glyph [
260−52:6 tight name xs
274+54:6 tight name xs
261−52:9 name f
275+54:9 name f
262−52:10 tight glyph ]
276+54:10 tight glyph ]
263−53:7 INDENT
277+55:7 INDENT
264−53:7 glyph ^-
278+55:7 glyph ^-
265−53:10 glyph (
279+55:10 glyph (
266−53:11 tight name list
280+55:11 tight name list
267−53:16 tvar B
281+55:16 tvar B
268−53:17 tight glyph )
282+55:17 tight glyph )
269−54:9 INDENT
283+56:9 INDENT
270−54:9 glyph ?-
284+56:9 glyph ?-
271−54:12 name xs
285+56:12 name xs
272−55:11 INDENT
286+57:11 INDENT
273−55:11 lit ~
287+57:11 lit ~
274−55:13 lit ~
288+57:13 lit ~
275−56:11 NEWLINE
289+58:11 NEWLINE
276−56:11 glyph [
290+58:11 glyph [
277−56:12 tight name item
291+58:12 tight name item
278−56:17 name rest
292+58:17 name rest
279−56:21 tight glyph ]
293+58:21 tight glyph ]
280−56:23 glyph [
294+58:23 glyph [
281−56:24 tight glyph (
295+58:24 tight glyph (
282−56:25 tight name f
296+58:25 tight name f
283−56:27 name item
297+58:27 name item
284−56:31 tight glyph )
298+58:31 tight glyph )
285−56:33 glyph (
299+58:33 glyph (
286−56:34 tight name turn
300+58:34 tight name turn
287−56:39 name rest
301+58:39 name rest
288−56:44 name f
302+58:44 name f
289−56:45 tight glyph )
303+58:45 tight glyph )
290−56:46 tight glyph ]
304+58:46 tight glyph ]
291−58:1 DEDENT
305+60:1 DEDENT
292−58:1 DEDENT
306+60:1 DEDENT
293−58:1 DEDENT
307+60:1 DEDENT
294−58:1 DEDENT
308+60:1 DEDENT
295−58:1 DEDENT
309+60: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 ]
30760:1 NEWLINE
31060:1 NEWLINE
30860:1 glyph +$
31160:1 glyph +$
309−60:4 name hair
312+60:4 name dime
31060:9 glyph [
31360:9 glyph [
31160:10 tight name p
31460:10 tight name p
31260:11 tight glyph =
31560:11 tight glyph =
313−60:12 tight aura @ud
316+60:12 tight aura @ta
31460:16 name q
31760:16 name q
31560:17 tight glyph =
31860:17 tight glyph =
316−60:18 tight aura @ud
319+60:18 tight aura @
317−60:21 tight glyph ]
320+60:19 tight glyph ]
31862:1 NEWLINE
32162:1 NEWLINE
31962:1 glyph +$
32262:1 glyph +$
320−62:4 name pint
323+62:4 name hair
32162:9 glyph [
32462:9 glyph [
32262:10 tight name p
32562:10 tight name p
32362:11 tight glyph =
32662:11 tight glyph =
324−62:12 tight glyph [
327+62:12 tight aura @ud
325−62:13 tight name p
328+62:16 name q
326−62:14 tight glyph =
329+62:17 tight glyph =
327−62:15 tight aura @
328−62:17 name q
329−62:18 tight glyph =
330+62:18 tight aura @ud
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 ]
331+62:21 tight glyph ]
34364:1 NEWLINE
33264:1 NEWLINE
34464:1 glyph +$
33364:1 glyph +$
345−64:4 name coin
334+64:4 name pint
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 ]
335+64:9 glyph [
353−66:3 NEWLINE
354−66:3 glyph [
355−66:4 tight lit %blob
356−66:10 name p
336+64:10 tight name p
357−66:11 tight glyph =
337+64:11 tight glyph =
358−66:12 tight glyph *
338+64:12 tight glyph [
359−66:13 tight glyph ]
339+64:13 tight name p
360−67:3 NEWLINE
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
36167:3 glyph [
36167:3 glyph [
362−67:4 tight lit %many
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
363−67:10 name p
377+69:10 name p
364−67:11 tight glyph =
378+69:11 tight glyph =
365−67:12 tight glyph (
379+69:12 tight glyph (
366−67:13 tight name list
380+69:13 tight name list
367−67:18 name coin
381+69:18 name coin
368−67:22 tight glyph )
382+69:22 tight glyph )
369−67:23 tight glyph ]
383+69:23 tight glyph ]
370−69:1 DEDENT
384+71: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 ]
38771:1 NEWLINE
38571:1 NEWLINE
38871:1 glyph +$
38671:1 glyph +$
389−71:4 name trel
387+71:4 name pair
39071:9 glyph |$
38871:9 glyph |$
39171:12 glyph [
38971:12 glyph [
39271:13 tight tvar A
39071:13 tight tvar A
39371:15 tvar B
39171:15 tvar B
394−71:17 tvar C
392+71:16 tight glyph ]
395−71:18 tight glyph ]
396−71:20 glyph [
393+71:18 glyph [
397−71:21 tight name p
394+71:19 tight name p
398−71:22 tight glyph =
395+71:20 tight glyph =
399−71:23 tight tvar A
396+71:21 tight tvar A
400−71:25 name q
397+71:23 name q
401−71:26 tight glyph =
398+71:24 tight glyph =
402−71:27 tight tvar B
399+71:25 tight tvar B
403−71:29 name r
404−71:30 tight glyph =
405−71:31 tight tvar C
406−71:32 tight glyph ]
400+71:26 tight glyph ]
40773:1 NEWLINE
40173:1 NEWLINE
40873:1 glyph +$
40273:1 glyph +$
409−73:4 name qual
403+73:4 name trel
41073:9 glyph |$
40473:9 glyph |$
41173:12 glyph [
40573:12 glyph [
41273:13 tight tvar A
40673:13 tight tvar A
41373:15 tvar B
40773:15 tvar B
41473:17 tvar C
40873:17 tvar C
415−73:19 tvar D
409+73:18 tight glyph ]
416−73:20 tight glyph ]
417−73:22 glyph [
410+73:20 glyph [
411+73:21 tight name p
412+73:22 tight glyph =
418−73:23 tight name p
413+73:23 tight tvar A
419−73:24 tight glyph =
420−73:25 tight tvar A
421−73:27 name q
414+73:25 name q
422−73:28 tight glyph =
415+73:26 tight glyph =
423−73:29 tight tvar B
416+73:27 tight tvar B
424−73:31 name r
417+73:29 name r
425−73:32 tight glyph =
418+73:30 tight glyph =
426−73:33 tight tvar C
419+73:31 tight tvar C
427−73:35 name s
428−73:36 tight glyph =
429−73:37 tight tvar D
430−73:38 tight glyph ]
420+73:32 tight glyph ]
43175:1 NEWLINE
42175:1 NEWLINE
43275:1 glyph +$
42275:1 glyph +$
433−75:4 name cord
423+75:4 name qual
434−75:9 aura @t
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 ]
43577:1 NEWLINE
44577:1 NEWLINE
43677:1 glyph +$
44677:1 glyph +$
437−77:4 name knot
447+77:4 name cord
438−77:9 aura @ta
448+77:9 aura @t
43979:1 NEWLINE
44979:1 NEWLINE
44079:1 glyph +$
45079:1 glyph +$
441−79:4 name tape
451+79:4 name knot
442−79:9 glyph (
443−79:10 tight name list
444−79:15 aura @tD
452+79:9 aura @ta
445−79:18 tight glyph )
44681:1 NEWLINE
45381:1 NEWLINE
44781:1 glyph +$
45481:1 glyph +$
448−81:4 name path
455+81:4 name tape
44981:9 glyph (
45681:9 glyph (
45081:10 tight name list
45781:10 tight name list
451−81:15 name knot
458+81:15 aura @tD
452−81:19 tight glyph )
459+81:18 tight glyph )
45383:1 NEWLINE
46083:1 NEWLINE
45483:1 glyph +$
46183:1 glyph +$
455−83:4 name tank
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
456−84:3 INDENT
470+86:3 INDENT
457−84:3 name cord
471+86: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 ]
48487:3 NEWLINE
47287:3 NEWLINE
48587:3 glyph [
47387:3 glyph [
486−87:4 tight lit %rose
474+87:4 tight lit %leaf
48787:10 name p
47587:10 name p
48887:11 tight glyph =
47687:11 tight glyph =
489−87:12 tight glyph (
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 (
490−87:13 tight name trel
485+88:13 tight name qual
491−87:18 name tape
486+88:18 name tape
492−87:23 name tape
487+88:23 name tape
493−87:28 name tape
488+88:28 name tape
489+88:33 name tape
494−87:32 tight glyph )
490+88:37 tight glyph )
495−87:34 name q
491+88:39 name q
496−87:35 tight glyph =
492+88:40 tight glyph =
497−87:36 tight glyph (
493+88:41 tight glyph (
498−87:37 tight name list
494+88:42 tight name list
499−87:42 name tank
495+88:47 name tank
500−87:46 tight glyph )
501−87:47 tight glyph ]
496+88:51 tight glyph )
502−89:1 DEDENT
497+88:52 tight glyph ]
503−89:1 NEWLINE
498+89:3 NEWLINE
504−89:1 glyph +$
499+89:3 glyph [
505−89:4 name nail
500+89:4 tight lit %rose
506−89:9 glyph [
507−89:10 tight name p
501+89:10 name p
50889:11 tight glyph =
50289:11 tight glyph =
509−89:12 tight name hair
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 )
510−89:17 name q
509+89:34 name q
511−89:18 tight glyph =
510+89:35 tight glyph =
512−89:19 tight name tape
511+89:36 tight glyph (
512+89:37 tight name list
513+89:42 name tank
514+89:46 tight glyph )
513−89:23 tight glyph ]
515+89:47 tight glyph ]
516+91:1 DEDENT
51491:1 NEWLINE
51791:1 NEWLINE
51591:1 glyph +$
51891:1 glyph +$
516−91:4 name edge
519+91:4 name nail
51791:9 glyph [
52091:9 glyph [
51891:10 tight name p
52191:10 tight name p
51991:11 tight glyph =
52291:11 tight glyph =
52091:12 tight name hair
52391:12 tight name hair
52191:17 name q
52491:17 name q
52291:18 tight glyph =
52591:18 tight glyph =
523−91:19 tight glyph (
526+91:19 tight name tape
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 ]
527+91:23 tight glyph ]
53593:1 NEWLINE
52893:1 NEWLINE
53693:1 glyph +$
52993:1 glyph +$
537−93:4 name rule
530+93:4 name edge
538−93:9 glyph $-(
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 =
539−93:12 tight name nail
545+93:32 tight name nail
540−93:17 name edge
546+93:36 tight glyph ]
541−93:21 tight glyph )
547+93:37 tight glyph )
548+93:38 tight glyph ]
54295:1 NEWLINE
54995:1 NEWLINE
54395:1 glyph +$
55095:1 glyph +$
544−95:4 name spot
551+95:4 name rule
545−95:9 glyph [
552+95:9 glyph $-(
546−95:10 tight name p
547−95:11 tight glyph =
548−95:12 tight name path
553+95:12 tight name nail
549−95:17 name q
554+95:17 name edge
550−95:18 tight glyph =
555+95:21 tight glyph )
551−95:19 tight name pint
552−95:23 tight glyph ]
55397:1 NEWLINE
55697:1 NEWLINE
55497:1 glyph +$
55797:1 glyph +$
555−97:4 name toon
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
556−98:3 INDENT
570+100: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
571100:3 glyph [
571100:3 glyph [
572−100:4 tight lit %2
572+100:4 tight lit %0
573100:7 name p
573100:7 name p
574100:8 tight glyph =
574100:8 tight glyph =
575−100:9 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 (
576−100:10 tight name list
590+102:10 tight name list
577−100:15 name tank
591+102:15 name tank
578−100:19 tight glyph )
592+102:19 tight glyph )
579−100:20 tight glyph ]
593+102:20 tight glyph ]
580−102:1 DEDENT
594+104: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 ]
606104:1 NEWLINE
595104:1 NEWLINE
607−104:1 glyph ++
596+104:1 glyph +$
608104:4 name like
597104:4 name like
609−104:9 glyph |=
598+104:9 glyph |$
610104:12 glyph [
599104:12 glyph [
611−104:13 tight name f
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
612−104:14 tight glyph =
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 =
613−104:15 tight glyph $-(
627+106:15 tight glyph $-(
614−104:18 tight tvar A
628+106:18 tight tvar A
615−104:20 tvar B
629+106:20 tvar B
616−104:21 tight glyph )
630+106:21 tight glyph )
617−104:23 name result
631+106:23 name result
618−104:29 tight glyph =
632+106:29 tight glyph =
619−104:30 tight glyph (
633+106:30 tight glyph (
620−104:31 tight name like
634+106:31 tight name like
621−104:36 tvar A
635+106:36 tvar A
622−104:37 tight glyph )
636+106:37 tight glyph )
623−104:38 tight glyph ]
637+106:38 tight glyph ]
624−105:3 INDENT
638+107:3 INDENT
625−105:3 glyph ++
639+107:3 glyph ++
626−105:6 name mapped
640+107:6 name mapped
627−106:5 INDENT
641+108:5 INDENT
628−106:5 glyph ^-
642+108:5 glyph ^-
629−106:8 glyph (
643+108:8 glyph (
630−106:9 tight name unit
644+108:9 tight name unit
631−106:14 glyph [
645+108:14 glyph [
632−106:15 tight name p
646+108:15 tight name p
633−106:16 tight glyph =
647+108:16 tight glyph =
634−106:17 tight tvar B
648+108:17 tight tvar B
635−106:19 name q
649+108:19 name q
636−106:20 tight glyph =
650+108:20 tight glyph =
637−106:21 tight name nail
651+108:21 tight name nail
638−106:25 tight glyph ]
652+108:25 tight glyph ]
639−106:26 tight glyph )
653+108:26 tight glyph )
640−107:7 INDENT
654+109:7 INDENT
641−107:7 glyph ?-
655+109:7 glyph ?-
642−107:10 wing q.result
656+109:10 wing q.result
643−108:9 INDENT
657+110:9 INDENT
644−108:9 lit ~
658+110:9 lit ~
645−108:11 lit ~
659+110:11 lit ~
646−109:9 NEWLINE
660+111:9 NEWLINE
647−109:9 glyph [
661+111:9 glyph [
648−109:10 tight lit ~
662+111:10 tight lit ~
649−109:12 name value
663+111:12 name value
650−109:17 tight glyph ]
664+111:17 tight glyph ]
651−109:19 glyph `
665+111:19 glyph `
652−109:20 tight glyph [
666+111:20 tight glyph [
653−109:21 tight name p
667+111:21 tight name p
654−109:22 tight glyph =
668+111:22 tight glyph =
655−109:23 tight glyph (
669+111:23 tight glyph (
656−109:24 tight name f
670+111:24 tight name f
657−109:26 wing p.value
671+111:26 wing p.value
658−109:33 tight glyph )
672+111:33 tight glyph )
659−109:35 name q
673+111:35 name q
660−109:36 tight glyph =
674+111:36 tight glyph =
661−109:37 tight wing q.value
675+111:37 tight wing q.value
662−109:44 tight glyph ]
676+111:44 tight glyph ]
663−110:3 DEDENT
677+112:3 DEDENT
664−110:3 DEDENT
678+112:3 DEDENT
665−110:3 DEDENT
679+112:3 DEDENT
666−110:3 NEWLINE
680+112:3 NEWLINE
667−110:3 glyph ^-
681+112:3 glyph ^-
668−110:6 glyph (
682+112:6 glyph (
669−110:7 tight name like
683+112:7 tight name like
670−110:12 tvar B
684+112:12 tvar B
671−110:13 tight glyph )
685+112:13 tight glyph )
672−110:15 glyph [
686+112:15 glyph [
673−110:16 tight name p
687+112:16 tight name p
674−110:17 tight glyph =
688+112:17 tight glyph =
675−110:18 tight wing p.result
689+112:18 tight wing p.result
676−110:27 name q
690+112:27 name q
677−110:28 tight glyph =
691+112:28 tight glyph =
678−110:29 tight name mapped
692+112:29 tight name mapped
679−110:35 tight glyph ]
693+112:35 tight glyph ]
680−112:1 DEDENT
694+114:1 DEDENT
681−112:1 NEWLINE
695+114:1 NEWLINE
682−112:1 glyph ++
696+114:1 glyph ++
683−112:4 name wonk
697+114:4 name wonk
684−112:9 glyph |=
698+114:9 glyph |=
685−112:12 name veq
699+114:12 name veq
686−112:15 tight glyph =
700+114:15 tight glyph =
687−112:16 tight glyph (
701+114:16 tight glyph (
688−112:17 tight name like
702+114:17 tight name like
689−112:22 tvar A
703+114:22 tvar A
690−112:23 tight glyph )
704+114:23 tight glyph )
691−113:3 INDENT
705+115:3 INDENT
692−113:3 glyph ?-
706+115:3 glyph ?-
693−113:6 wing q.veq
707+115:6 wing q.veq
694−114:5 INDENT
708+116:5 INDENT
695−114:5 lit ~
709+116:5 lit ~
696−114:7 glyph !!
710+116:7 glyph !!
697−115:5 NEWLINE
711+117:5 NEWLINE
698−115:5 glyph [
712+117:5 glyph [
699−115:6 tight lit ~
713+117:6 tight lit ~
700−115:8 name product
714+117:8 name product
701−115:15 tight glyph ]
715+117:15 tight glyph ]
702−115:17 wing p.product
716+117:17 wing p.product
703−117:1 DEDENT
717+119:1 DEDENT
704−117:1 DEDENT
718+119: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 ]
717119:1 NEWLINE
719119:1 NEWLINE
718119:1 glyph +$
720119:1 glyph +$
719−119:4 name lest
721+119:4 name lone
720119:9 glyph |$
722119:9 glyph |$
721119:12 glyph [
723119:12 glyph [
722119:13 tight tvar A
724119:13 tight tvar A
723119:14 tight glyph ]
725119:14 tight glyph ]
724119:16 glyph [
726119:16 glyph [
725−119:17 tight name i
727+119:17 tight name p
726119:18 tight glyph =
728119:18 tight glyph =
727119:19 tight tvar A
729119: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 ]
735121:1 NEWLINE
731121:1 NEWLINE
736121:1 glyph +$
732121:1 glyph +$
737−121:4 name pole
733+121:4 name lest
738121:9 glyph |$
734121:9 glyph |$
739121:12 glyph [
735121:12 glyph [
740121:13 tight tvar A
736121:13 tight tvar A
741121:14 tight glyph ]
737121:14 tight glyph ]
742−122:3 INDENT
738+121:16 glyph [
743−122:3 lit ~
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 ]
744−123:3 NEWLINE
749+123:1 NEWLINE
745−123:3 glyph [
750+123:1 glyph +$
746−123:4 tight tvar A
747−123:6 glyph (
748−123:7 tight name pole
751+123:4 name pole
749−123:12 tvar A
752+123:9 glyph |$
753+123:12 glyph [
750−123:13 tight glyph )
754+123:13 tight tvar A
751123:14 tight glyph ]
755123:14 tight glyph ]
752−125:1 DEDENT
756+124:3 INDENT
757+124:3 lit ~
753−125:1 NEWLINE
758+125:3 NEWLINE
754−125:1 glyph +$
759+125:3 glyph [
755−125:4 name quip
760+125:4 tight tvar A
756−125:9 glyph |$
761+125:6 glyph (
762+125:7 tight name pole
757−125:12 glyph [
763+125:12 tvar A
758−125:13 tight tvar A
764+125:13 tight glyph )
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 ]
765+125:14 tight glyph ]
766+127:1 DEDENT
768127:1 NEWLINE
767127:1 NEWLINE
769127:1 glyph +$
768127:1 glyph +$
770−127:4 name tree
769+127:4 name quip
771127:9 glyph |$
770127:9 glyph |$
772127:12 glyph [
771127:12 glyph [
773127:13 tight tvar A
772127:13 tight tvar A
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
774−127:14 tight glyph ]
788+129:14 tight glyph ]
775−128:3 INDENT
789+130:3 INDENT
776−128:3 lit ~
790+130:3 lit ~
777−129:3 NEWLINE
791+131:3 NEWLINE
778−129:3 glyph [
792+131:3 glyph [
779−129:4 tight name n
793+131:4 tight name n
780−129:5 tight glyph =
794+131:5 tight glyph =
781−129:6 tight tvar A
795+131:6 tight tvar A
782−129:8 name l
796+131:8 name l
783−129:9 tight glyph =
797+131:9 tight glyph =
784−129:10 tight glyph (
798+131:10 tight glyph (
785−129:11 tight name tree
799+131:11 tight name tree
786−129:16 tvar A
800+131:16 tvar A
787−129:17 tight glyph )
801+131:17 tight glyph )
788−129:19 name r
802+131:19 name r
789−129:20 tight glyph =
803+131:20 tight glyph =
790−129:21 tight glyph (
804+131:21 tight glyph (
791−129:22 tight name tree
805+131:22 tight name tree
792−129:27 tvar A
806+131:27 tvar A
793−129:28 tight glyph )
807+131:28 tight glyph )
794−129:29 tight glyph ]
808+131:29 tight glyph ]
795−131:1 DEDENT
809+133:1 DEDENT
796−131:1 NEWLINE
810+133:1 NEWLINE
797−131:1 glyph +$
811+133:1 glyph +$
798−131:4 name each
812+133:4 name each
799−131:9 glyph |$
813+133:9 glyph |$
800−131:12 glyph [
814+133:12 glyph [
801−131:13 tight tvar A
815+133:13 tight tvar A
802−131:15 tvar B
816+133:15 tvar B
803−131:16 tight glyph ]
817+133:16 tight glyph ]
804−132:3 INDENT
818+134:3 INDENT
805−132:3 glyph [
819+134:3 glyph [
806−132:4 tight lit %|
820+134:4 tight lit %|
807−132:7 name p
821+134:7 name p
808−132:8 tight glyph =
822+134:8 tight glyph =
809−132:9 tight tvar B
823+134:9 tight tvar B
810−132:10 tight glyph ]
824+134:10 tight glyph ]
811−133:3 NEWLINE
825+135:3 NEWLINE
812−133:3 glyph [
826+135:3 glyph [
813−133:4 tight lit %&
827+135:4 tight lit %&
814−133:7 name p
828+135:7 name p
815−133:8 tight glyph =
829+135:8 tight glyph =
816−133:9 tight tvar A
830+135:9 tight tvar A
817−133:10 tight glyph ]
831+135:10 tight glyph ]
818−135:1 DEDENT
832+137:1 DEDENT
819−135:1 NEWLINE
820−135:1 glyph +$
821−135:4 name bloq
822−135:9 aura @
823137:1 NEWLINE
833137:1 NEWLINE
824−137:1 glyph ++
834+137:1 glyph +$
825−137:4 name some
835+137:4 name bloq
826−137:9 glyph |=
836+137:9 aura @
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
832139:1 NEWLINE
837139:1 NEWLINE
833139:1 glyph ++
838139:1 glyph ++
834−139:4 name lure
839+139:4 name some
835139:9 glyph |=
840139:9 glyph |=
836139:12 name item
841139:12 name item
837139:16 tight glyph =
842139:16 tight glyph =
838139:17 tight tvar A
843139:17 tight tvar A
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
839−140:3 INDENT
853+142:3 INDENT
840−140:3 glyph ^-
854+142:3 glyph ^-
841−140:6 glyph (
855+142:6 glyph (
842−140:7 tight name list
856+142:7 tight name list
843−140:12 tvar A
857+142:12 tvar A
844−140:13 tight glyph )
858+142:13 tight glyph )
845−140:15 glyph [
859+142:15 glyph [
846−140:16 tight name item
860+142:16 tight name item
847−140:21 lit ~
861+142:21 lit ~
848−140:22 tight glyph ]
862+142:22 tight glyph ]
849−142:1 DEDENT
863+144:1 DEDENT
850−142:1 NEWLINE
864+144:1 NEWLINE
851−142:1 glyph ++
865+144:1 glyph ++
852−142:4 name snoc
866+144:4 name snoc
853−142:9 glyph |=
867+144:9 glyph |=
854−142:12 name args
868+144:12 name args
855−142:16 tight glyph =
869+144:16 tight glyph =
856−142:17 tight glyph [
870+144:17 tight glyph [
857−142:18 tight glyph (
871+144:18 tight glyph (
858−142:19 tight name list
872+144:19 tight name list
859−142:24 tvar A
873+144:24 tvar A
860−142:25 tight glyph )
874+144:25 tight glyph )
861−142:27 tvar A
875+144:27 tvar A
862−142:28 tight glyph ]
876+144:28 tight glyph ]
863−143:3 INDENT
877+145:3 INDENT
864−143:3 glyph ?-
878+145:3 glyph ?-
865−143:6 name args
879+145:6 name args
866−144:5 INDENT
880+146:5 INDENT
867−144:5 glyph [
881+146:5 glyph [
868−144:6 tight name xs
882+146:6 tight name xs
869−144:9 name item
883+146:9 name item
870−144:13 tight glyph ]
884+146:13 tight glyph ]
871−144:15 glyph (
885+146:15 glyph (
872−144:16 tight name weld
886+146:16 tight name weld
873−144:21 name xs
887+146:21 name xs
874−144:24 glyph [
888+146:24 glyph [
875−144:25 tight name item
889+146:25 tight name item
876−144:30 lit ~
890+146:30 lit ~
877−144:31 tight glyph ]
891+146:31 tight glyph ]
878−144:32 tight glyph )
892+146:32 tight glyph )
879−146:1 DEDENT
893+148:1 DEDENT
880−146:1 DEDENT
894+148:1 DEDENT
881−146:1 NEWLINE
895+148:1 NEWLINE
882−146:1 glyph ++
896+148:1 glyph ++
883−146:4 name flop
897+148:4 name flop
884−146:9 glyph |=
898+148:9 glyph |=
885−146:12 name xs
899+148:12 name xs
886−146:14 tight glyph =
900+148:14 tight glyph =
887−146:15 tight glyph (
901+148:15 tight glyph (
888−146:16 tight name list
902+148:16 tight name list
889−146:21 tvar A
903+148:21 tvar A
890−146:22 tight glyph )
904+148:22 tight glyph )
891−147:3 INDENT
905+149:3 INDENT
892−147:3 glyph ++
906+149:3 glyph ++
893−147:6 name reverse-into
907+149:6 name reverse-into
894−147:19 glyph |=
908+149:19 glyph |=
895−147:22 name args
909+149:22 name args
896−147:26 tight glyph =
910+149:26 tight glyph =
897−147:27 tight glyph [
911+149:27 tight glyph [
898−147:28 tight glyph (
912+149:28 tight glyph (
899−147:29 tight name list
913+149:29 tight name list
900−147:34 tvar A
914+149:34 tvar A
901−147:35 tight glyph )
915+149:35 tight glyph )
902−147:37 glyph (
916+149:37 glyph (
903−147:38 tight name list
917+149:38 tight name list
904−147:43 tvar A
918+149:43 tvar A
905−147:44 tight glyph )
919+149:44 tight glyph )
906−147:45 tight glyph ]
920+149:45 tight glyph ]
907−148:5 INDENT
921+150:5 INDENT
908−148:5 glyph ?-
922+150:5 glyph ?-
909−148:8 name args
923+150:8 name args
910−149:7 INDENT
924+151:7 INDENT
911−149:7 glyph [
925+151:7 glyph [
912−149:8 tight name rest
926+151: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 ~
920151:13 name acc
927151:13 name acc
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
921−152:11 NEWLINE
935+154:11 NEWLINE
922−152:11 glyph [
936+154:11 glyph [
923−152:12 tight name item
937+154:12 tight name item
924−152:17 name more
938+154:17 name more
925−152:21 tight glyph ]
939+154:21 tight glyph ]
926−152:23 glyph (
940+154:23 glyph (
927−152:24 tight name reverse-into
941+154:24 tight name reverse-into
928−152:37 name more
942+154:37 name more
929−152:42 glyph [
943+154:42 glyph [
930−152:43 tight name item
944+154:43 tight name item
931−152:48 name acc
945+154:48 name acc
932−152:51 tight glyph ]
946+154:51 tight glyph ]
933−152:52 tight glyph )
947+154:52 tight glyph )
934−153:3 DEDENT
948+155:3 DEDENT
935−153:3 DEDENT
949+155:3 DEDENT
936−153:3 DEDENT
950+155:3 DEDENT
937−153:3 DEDENT
951+155:3 DEDENT
938−153:3 NEWLINE
952+155:3 NEWLINE
939−153:3 glyph (
953+155:3 glyph (
940−153:4 tight name reverse-into
954+155:4 tight name reverse-into
941−153:17 name xs
955+155:17 name xs
942−153:20 lit ~
956+155:20 lit ~
943−153:21 tight glyph )
957+155:21 tight glyph )
944−155:1 DEDENT
958+157:1 DEDENT
945−155:1 NEWLINE
959+157:1 NEWLINE
946−155:1 glyph ++
960+157:1 glyph ++
947−155:4 name drop
961+157:4 name drop
948−155:9 glyph |=
962+157:9 glyph |=
949−155:12 name maybe
963+157:12 name maybe
950−155:17 tight glyph =
964+157:17 tight glyph =
951−155:18 tight glyph (
965+157:18 tight glyph (
952−155:19 tight name unit
966+157:19 tight name unit
953−155:24 tvar A
967+157:24 tvar A
954−155:25 tight glyph )
968+157:25 tight glyph )
955−156:3 INDENT
969+158:3 INDENT
956−156:3 glyph ^-
970+158:3 glyph ^-
957−156:6 glyph (
971+158:6 glyph (
958−156:7 tight name list
972+158:7 tight name list
959−156:12 tvar A
973+158:12 tvar A
960−156:13 tight glyph )
974+158:13 tight glyph )
961−157:5 INDENT
975+159:5 INDENT
962−157:5 glyph ?-
976+159:5 glyph ?-
963−157:8 name maybe
977+159:8 name maybe
964−158:7 INDENT
978+160:7 INDENT
965−158:7 lit ~
979+160:7 lit ~
966−158:9 lit ~
980+160:9 lit ~
967−159:7 NEWLINE
981+161:7 NEWLINE
968−159:7 glyph [
982+161:7 glyph [
969−159:8 tight lit ~
983+161:8 tight lit ~
970−159:10 name value
984+161:10 name value
971−159:15 tight glyph ]
985+161:15 tight glyph ]
972−159:17 glyph [
986+161:17 glyph [
973−159:18 tight name value
987+161:18 tight name value
974−159:24 lit ~
988+161:24 lit ~
975−159:25 tight glyph ]
989+161:25 tight glyph ]
976−161:1 DEDENT
990+163:1 DEDENT
977−161:1 DEDENT
991+163:1 DEDENT
978−161:1 DEDENT
992+163:1 DEDENT
979−161:1 NEWLINE
993+163:1 NEWLINE
980−161:1 glyph ++
994+163:1 glyph ++
981−161:4 name bond
995+163:4 name bond
982−161:9 glyph |=
996+163:9 glyph |=
983−161:12 name fallback
997+163:12 name fallback
984−161:20 tight glyph =
998+163:20 tight glyph =
985−161:21 tight glyph $-(
999+163:21 tight glyph $-(
986−161:24 tight lit ~
1000+163:24 tight lit ~
987−161:26 tvar A
1001+163:26 tvar A
988−161:27 tight glyph )
1002+163:27 tight glyph )
989−162:3 INDENT
1003+164:3 INDENT
990−162:3 glyph |=
1004+164:3 glyph |=
991−162:6 name maybe
1005+164:6 name maybe
992−162:11 tight glyph =
1006+164:11 tight glyph =
993−162:12 tight glyph (
1007+164:12 tight glyph (
994−162:13 tight name unit
1008+164:13 tight name unit
995−162:18 tvar A
1009+164:18 tvar A
996−162:19 tight glyph )
1010+164:19 tight glyph )
997−163:5 INDENT
1011+165:5 INDENT
998−163:5 glyph ?-
1012+165:5 glyph ?-
999−163:8 name maybe
1013+165:8 name maybe
1000−164:7 INDENT
1014+166:7 INDENT
1001−164:7 lit ~
1015+166:7 lit ~
1002−164:9 glyph (
1016+166:9 glyph (
1003−164:10 tight name fallback
1017+166:10 tight name fallback
1004−164:19 lit ~
1018+166:19 lit ~
1005−164:20 tight glyph )
1019+166:20 tight glyph )
1006−165:7 NEWLINE
1020+167:7 NEWLINE
1007−165:7 glyph [
1021+167:7 glyph [
1008−165:8 tight lit ~
1022+167:8 tight lit ~
1009−165:10 name value
1023+167:10 name value
1010−165:15 tight glyph ]
1024+167:15 tight glyph ]
1011−165:17 name value
1025+167:17 name value
1012−167:1 DEDENT
1026+169:1 DEDENT
1013−167:1 DEDENT
1027+169:1 DEDENT
1014−167:1 DEDENT
1028+169:1 DEDENT
1015−167:1 NEWLINE
1029+169:1 NEWLINE
1016−167:1 glyph ++
1030+169:1 glyph ++
1017−167:4 name bind
1031+169:4 name bind
1018−167:9 glyph |=
1032+169:9 glyph |=
1019−167:12 name args
1033+169:12 name args
1020−167:16 tight glyph =
1034+169:16 tight glyph =
1021−167:17 tight glyph [
1035+169:17 tight glyph [
1022−167:18 tight glyph (
1036+169: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 (
1041169:19 tight name unit
1037169:19 tight name unit
1042−169:24 tvar B
1038+169:24 tvar A
1043169:25 tight glyph )
1039169:25 tight 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 )
1044−170:7 INDENT
1058+172:7 INDENT
1045−170:7 glyph ?-
1059+172:7 glyph ?-
1046−170:10 name maybe
1060+172:10 name maybe
1047−171:9 INDENT
1061+173:9 INDENT
1048−171:9 lit ~
1062+173:9 lit ~
1049−171:11 lit ~
1063+173:11 lit ~
1050−172:9 NEWLINE
1064+174:9 NEWLINE
1051−172:9 glyph [
1065+174:9 glyph [
1052−172:10 tight lit ~
1066+174:10 tight lit ~
1053−172:12 name value
1067+174:12 name value
1054−172:17 tight glyph ]
1068+174:17 tight glyph ]
1055−172:19 glyph `
1069+174:19 glyph `
1056−172:20 tight glyph (
1070+174:20 tight glyph (
1057−172:21 tight name f
1071+174:21 tight name f
1058−172:23 name value
1072+174:23 name value
1059−172:28 tight glyph )
1073+174:28 tight glyph )
1060−174:1 DEDENT
1074+176:1 DEDENT
1061−174:1 DEDENT
1075+176:1 DEDENT
1062−174:1 DEDENT
1076+176:1 DEDENT
1063−174:1 DEDENT
1077+176:1 DEDENT
1064−174:1 NEWLINE
1078+176:1 NEWLINE
1065−174:1 glyph ++
1079+176:1 glyph ++
1066−174:4 name biff
1080+176:4 name biff
1067−174:9 glyph |=
1081+176:9 glyph |=
1068−174:12 name args
1082+176:12 name args
1069−174:16 tight glyph =
1083+176:16 tight glyph =
1070−174:17 tight glyph [
1084+176:17 tight glyph [
1071−174:18 tight glyph (
1085+176: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 (
1093176:19 tight name unit
1086176:19 tight name unit
1094−176:24 tvar B
1087+176:24 tvar A
1095176:25 tight glyph )
1088176:25 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 )
1096−177:7 INDENT
1110+179:7 INDENT
1097−177:7 glyph ?-
1111+179:7 glyph ?-
1098−177:10 name maybe
1112+179:10 name maybe
1099−178:9 INDENT
1113+180:9 INDENT
1100−178:9 lit ~
1114+180:9 lit ~
1101−178:11 lit ~
1115+180:11 lit ~
1102−179:9 NEWLINE
1116+181:9 NEWLINE
1103−179:9 glyph [
1117+181:9 glyph [
1104−179:10 tight lit ~
1118+181:10 tight lit ~
1105−179:12 name value
1119+181:12 name value
1106−179:17 tight glyph ]
1120+181:17 tight glyph ]
1107−179:19 glyph (
1121+181:19 glyph (
1108−179:20 tight name f
1122+181:20 tight name f
1109−179:22 name value
1123+181:22 name value
1110−179:27 tight glyph )
1124+181:27 tight glyph )
1111−181:1 DEDENT
1125+183:1 DEDENT
1112−181:1 DEDENT
1126+183:1 DEDENT
1113−181:1 DEDENT
1127+183:1 DEDENT
1114−181:1 DEDENT
1128+183:1 DEDENT
1115−181:1 NEWLINE
1129+183:1 NEWLINE
1116−181:1 glyph ++
1130+183:1 glyph ++
1117−181:4 name both
1131+183:4 name both
1118−181:9 glyph |=
1132+183:9 glyph |=
1119−181:12 name args
1133+183:12 name args
1120−181:16 tight glyph =
1134+183:16 tight glyph =
1121−181:17 tight glyph [
1135+183:17 tight glyph [
1122−181:18 tight glyph (
1136+183:18 tight glyph (
1123−181:19 tight name unit
1137+183:19 tight name unit
1124−181:24 tvar A
1138+183:24 tvar A
1125−181:25 tight glyph )
1139+183:25 tight glyph )
1126−181:27 glyph (
1140+183:27 glyph (
1127−181:28 tight name unit
1141+183:28 tight name unit
1128−181:33 tvar B
1142+183: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 ]
1146183:34 tight glyph )
1143183:34 tight glyph )
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 )
1147−184:7 INDENT
1161+186:7 INDENT
1148−184:7 glyph ?-
1162+186:7 glyph ?-
1149−184:10 name first
1163+186:10 name first
1150−185:9 INDENT
1164+187:9 INDENT
1151−185:9 lit ~
1165+187:9 lit ~
1152−185:11 lit ~
1166+187:11 lit ~
1153−186:9 NEWLINE
1167+188:9 NEWLINE
1154−186:9 glyph [
1168+188:9 glyph [
1155−186:10 tight lit ~
1169+188:10 tight lit ~
1156−186:12 name a
1170+188:12 name a
1157−186:13 tight glyph ]
1171+188:13 tight glyph ]
1158−187:11 INDENT
1172+189:11 INDENT
1159−187:11 glyph ?-
1173+189:11 glyph ?-
1160−187:14 name second
1174+189:14 name second
1161−188:13 INDENT
1175+190:13 INDENT
1162−188:13 lit ~
1176+190:13 lit ~
1163−188:15 lit ~
1177+190:15 lit ~
1164−189:13 NEWLINE
1178+191:13 NEWLINE
1165−189:13 glyph [
1179+191:13 glyph [
1166−189:14 tight lit ~
1180+191:14 tight lit ~
1167−189:16 name b
1181+191:16 name b
1168−189:17 tight glyph ]
1182+191:17 tight glyph ]
1169−189:19 glyph `
1183+191:19 glyph `
1170−189:20 tight glyph [
1184+191:20 tight glyph [
1171−189:21 tight name a
1185+191:21 tight name a
1172−189:23 name b
1186+191:23 name b
1173−189:24 tight glyph ]
1187+191:24 tight glyph ]
1174−191:1 DEDENT
1188+193:1 DEDENT
1175−191:1 DEDENT
1189+193:1 DEDENT
1176−191:1 DEDENT
1190+193:1 DEDENT
1177−191:1 DEDENT
1191+193:1 DEDENT
1178−191:1 DEDENT
1192+193:1 DEDENT
1179−191:1 DEDENT
1193+193:1 DEDENT
1180−191:1 NEWLINE
1194+193:1 NEWLINE
1181−191:1 glyph ++
1195+193:1 glyph ++
1182−191:4 name clap
1196+193:4 name clap
1183−191:9 glyph |=
1197+193:9 glyph |=
1184−191:12 name args
1198+193:12 name args
1185−191:16 tight glyph =
1199+193:16 tight glyph =
1186−191:17 tight glyph [
1200+193:17 tight glyph [
1187−191:18 tight glyph (
1201+193:18 tight glyph (
1188−191:19 tight name unit
1202+193:19 tight name unit
1189−191:24 tvar A
1203+193:24 tvar A
1190−191:25 tight glyph )
1204+193:25 tight glyph )
1191−191:27 glyph (
1205+193:27 glyph (
1192−191:28 tight name unit
1206+193:28 tight name unit
1193−191:33 tvar A
1207+193:33 tvar A
1194−191:34 tight glyph )
1208+193:34 tight glyph )
1195−191:36 glyph $-(
1209+193:36 glyph $-(
1196−191:39 tight glyph [
1210+193:39 tight glyph [
1197−191:40 tight tvar A
1211+193:40 tight tvar A
1198−191:42 tvar A
1212+193:42 tvar A
1199−191:43 tight glyph ]
1213+193:43 tight glyph ]
1200−191:45 tvar A
1214+193:45 tvar A
1201−191:46 tight glyph )
1215+193:46 tight glyph )
1202−191:47 tight glyph ]
1216+193:47 tight glyph ]
1203−192:3 INDENT
1217+194:3 INDENT
1204−192:3 glyph ?-
1218+194:3 glyph ?-
1205−192:6 name args
1219+194:6 name args
1206−193:5 INDENT
1220+195:5 INDENT
1207−193:5 glyph [
1221+195:5 glyph [
1208−193:6 tight name first
1222+195:6 tight name first
1209−193:12 name second
1223+195:12 name second
1210−193:19 name combine
1224+195:19 name combine
1211−193:26 tight glyph ]
1225+195:26 tight glyph ]
1212−193:28 glyph ^-
1226+195:28 glyph ^-
1213−193:31 glyph (
1227+195:31 glyph (
1214−193:32 tight name unit
1228+195:32 tight name unit
1215−193:37 tvar A
1229+195:37 tvar A
1216−193:38 tight glyph )
1230+195:38 tight glyph )
1217−194:7 INDENT
1231+196:7 INDENT
1218−194:7 glyph ?-
1232+196:7 glyph ?-
1219−194:10 name first
1233+196:10 name first
1220−195:9 INDENT
1234+197:9 INDENT
1221−195:9 lit ~
1235+197:9 lit ~
1222−195:11 name second
1236+197:11 name second
1223−196:9 NEWLINE
1237+198:9 NEWLINE
1224−196:9 glyph [
1238+198:9 glyph [
1225−196:10 tight lit ~
1239+198:10 tight lit ~
1226−196:12 name a
1240+198:12 name a
1227−196:13 tight glyph ]
1241+198:13 tight glyph ]
1228−197:11 INDENT
1242+199:11 INDENT
1229−197:11 glyph ?-
1243+199:11 glyph ?-
1230−197:14 name second
1244+199:14 name second
1231−198:13 INDENT
1245+200:13 INDENT
1232−198:13 lit ~
1246+200:13 lit ~
1233−198:15 name first
1247+200:15 name first
1234−199:13 NEWLINE
1248+201:13 NEWLINE
1235−199:13 glyph [
1249+201:13 glyph [
1236−199:14 tight lit ~
1250+201:14 tight lit ~
1237−199:16 name b
1251+201:16 name b
1238−199:17 tight glyph ]
1252+201:17 tight glyph ]
1239−199:19 glyph `
1253+201:19 glyph `
1240−199:20 tight glyph (
1254+201:20 tight glyph (
1241−199:21 tight name combine
1255+201:21 tight name combine
1242−199:29 name a
1256+201:29 name a
1243−199:31 name b
1257+201:31 name b
1244−199:32 tight glyph )
1258+201:32 tight glyph )
1245−201:1 DEDENT
1259+203:1 DEDENT
1246−201:1 DEDENT
1260+203:1 DEDENT
1247−201:1 DEDENT
1261+203:1 DEDENT
1248−201:1 DEDENT
1262+203:1 DEDENT
1249−201:1 DEDENT
1263+203:1 DEDENT
1250−201:1 DEDENT
1264+203:1 DEDENT
1251−201:1 NEWLINE
1265+203:1 NEWLINE
1252−201:1 glyph ++
1266+203:1 glyph ++
1253−201:4 name hunt
1267+203:4 name hunt
1254−201:9 glyph |=
1268+203:9 glyph |=
1255−201:12 name args
1269+203:12 name args
1256−201:16 tight glyph =
1270+203:16 tight glyph =
1257−201:17 tight glyph [
1271+203:17 tight glyph [
1258−201:18 tight glyph $-(
1272+203:18 tight glyph $-(
1259−201:21 tight glyph [
1273+203:21 tight glyph [
1260−201:22 tight tvar A
1274+203:22 tight tvar A
1261−201:24 tvar A
1275+203: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
1282203:25 tight glyph ]
1276203:25 tight glyph ]
1283−203:27 glyph ^-
1277+203:27 glyph ?
1278+203:28 tight glyph )
1284203:30 glyph (
1279203:30 glyph (
1285203:31 tight name unit
1280203:31 tight name unit
1286203:36 tvar A
1281203:36 tvar A
1287203:37 tight glyph )
1282203:37 tight glyph )
1288−204:7 INDENT
1283+203:39 glyph (
1289−204:7 glyph ?-
1284+203:40 tight name unit
1290−204:10 name first
1285+203:45 tvar A
1291−205:9 INDENT
1286+203:46 tight glyph )
1292−205:9 lit ~
1287+203:47 tight glyph ]
1293−205:11 name second
1288+204:3 INDENT
1294−206:9 NEWLINE
1289+204:3 glyph ?-
1295−206:9 glyph [
1290+204:6 name args
1296−206:10 tight lit ~
1291+205:5 INDENT
1297−206:12 name a
1292+205:5 glyph [
1298−206:13 tight glyph ]
1293+205:6 tight name choose
1299−207:11 INDENT
1294+205:13 name first
1300−207:11 glyph ?-
1295+205:19 name second
1301−207:14 name second
1296+205:25 tight glyph ]
1302−208:13 INDENT
1297+205:27 glyph ^-
1303−208:13 lit ~
1298+205:30 glyph (
1304−208:15 name first
1299+205:31 tight name unit
1305−209:13 NEWLINE
1300+205:36 tvar A
1306−209:13 glyph [
1301+205:37 tight glyph )
1307−209:14 tight lit ~
1302+206:7 INDENT
1308−209:16 name b
1303+206:7 glyph ?-
1309−209:17 tight glyph ]
1304+206:10 name first
1310−210:15 INDENT
1305+207:9 INDENT
1311−210:15 glyph ?-
1306+207:9 lit ~
1312−210:18 glyph (
1307+207:11 name second
1313−210:19 tight name choose
1308+208:9 NEWLINE
1314−210:26 name a
1309+208:9 glyph [
1315−210:28 name b
1310+208:10 tight lit ~
1316−210:29 tight glyph )
1311+208:12 name a
1317−211:17 INDENT
1312+208:13 tight glyph ]
1318−211:17 lit %.y
1313+209:11 INDENT
1319−211:21 name first
1314+209:11 glyph ?-
1320−212:17 NEWLINE
1315+209:14 name second
1321−212:17 lit %.n
1316+210:13 INDENT
1322−212:21 name second
1317+210:13 lit ~
1323−214:1 DEDENT
1318+210:15 name first
1324−214:1 DEDENT
1319+211:13 NEWLINE
1325−214:1 DEDENT
1320+211:13 glyph [
1326−214:1 DEDENT
1321+211:14 tight lit ~
1327−214:1 DEDENT
1322+211:16 name b
1328−214:1 DEDENT
1323+211:17 tight glyph ]
1329−214:1 DEDENT
1324+212:15 INDENT
1330−214:1 DEDENT
1325+212:15 glyph ?-
1331−214:1 NEWLINE
1326+212:18 glyph (
1332−214:1 glyph ++
1327+212:19 tight name choose
1333−214:4 name clef
1328+212:26 name a
1334−214:9 glyph |=
1329+212:28 name b
1335−214:12 name args
1330+212:29 tight glyph )
1336−214:16 tight glyph =
1331+213:17 INDENT
1337−214:17 tight glyph [
1332+213:17 lit %.y
1338−214:18 tight glyph (
1333+213:21 name first
1339−214:19 tight name unit
1334+214:17 NEWLINE
1340−214:24 tvar A
1335+214:17 lit %.n
1341−214:25 tight glyph )
1336+214:21 name second
1342−214:27 glyph (
1337+216:1 DEDENT
1343−214:28 tight name unit
1338+216:1 DEDENT
1344−214:33 tvar B
1339+216:1 DEDENT
1345−214:34 tight glyph )
1340+216:1 DEDENT
1346−214:36 glyph $-(
1341+216:1 DEDENT
1347−214:39 tight glyph [
1342+216:1 DEDENT
1348−214:40 tight tvar A
1343+216:1 DEDENT
1349−214:42 tvar B
1344+216:1 DEDENT
1350−214:43 tight glyph ]
1345+216:1 NEWLINE
1351−214:45 glyph (
1346+216:1 glyph ++
1352−214:46 tight name unit
1347+216:4 name mate
1353−214:51 tvar C
1348+216:9 glyph |=
1354−214:52 tight glyph )
1349+216:12 name args
1355−214:53 tight glyph )
1350+216:16 tight glyph =
1356−214:54 tight glyph ]
1351+216:17 tight glyph [
1357−215:3 INDENT
1352+216:18 tight glyph (
1358−215:3 glyph ?-
1353+216:19 tight name unit
1359−215:6 name args
1354+216:24 tvar A
1360−216:5 INDENT
1355+216:25 tight glyph )
1361−216:5 glyph [
1356+216:27 glyph (
1362−216:6 tight name first
1357+216:28 tight name unit
1363−216:12 name second
1358+216:33 tvar A
1364−216:19 name combine
1359+216:34 tight glyph )
1365−216:26 tight glyph ]
1360+216:35 tight glyph ]
1366−216:28 glyph ^-
1361+217:3 INDENT
1367−216:31 glyph (
1362+217:3 glyph ?-
1368−216:32 tight name unit
1363+217:6 name args
1369−216:37 tvar C
1364+218:5 INDENT
1370−216:38 tight glyph )
1365+218:5 glyph [
1371−217:7 INDENT
1366+218:6 tight name first
1372−217:7 glyph ?-
1367+218:12 name second
1373−217:10 name first
1368+218:18 tight glyph ]
1374−218:9 INDENT
1369+218:20 glyph ^-
1375−218:9 lit ~
1370+218:23 glyph (
1376−218:11 lit ~
1371+218:24 tight name unit
1377−219:9 NEWLINE
1372+218:29 tvar A
1378−219:9 glyph [
1373+218:30 tight glyph )
1379−219:10 tight lit ~
1374+219:7 INDENT
1380−219:12 name a
1375+219:7 glyph ?-
1381−219:13 tight glyph ]
1376+219:10 name second
1382−220:11 INDENT
1377+220:9 INDENT
1383−220:11 glyph ?-
1378+220:9 lit ~
1384−220:14 name second
1379+220:11 name first
1385−221:13 INDENT
1380+221:9 NEWLINE
1386−221:13 lit ~
1381+221:9 glyph [
1387−221:15 lit ~
1382+221:10 tight lit ~
1388−222:13 NEWLINE
1383+221:12 name b
1389−222:13 glyph [
1384+221:13 tight glyph ]
1390−222:14 tight lit ~
1385+222:11 INDENT
1391−222:16 name b
1386+222:11 glyph ?-
1392−222:17 tight glyph ]
1387+222:14 name first
1393−222:19 glyph (
1388+223:13 INDENT
1394−222:20 tight name combine
1389+223:13 lit ~
1395−222:28 name a
1390+223:15 name second
1396−222:30 name b
1391+224:13 NEWLINE
1397−222:31 tight glyph )
1392+224:13 glyph [
1398−224:1 DEDENT
1393+224:14 tight lit ~
1399−224:1 DEDENT
1394+224:16 name a
1400−224:1 DEDENT
1395+224:17 tight glyph ]
1401−224:1 DEDENT
1396+225:15 INDENT
1402−224:1 DEDENT
1397+225:15 glyph ?-
1403−224:1 DEDENT
1398+225:18 glyph (
1404−224:1 NEWLINE
1399+225:19 tight name eq
1405−224:1 glyph ++
1400+225:22 name a
1406−224:4 name skim
1401+225:24 name b
1407−224:9 glyph |=
1402+225:25 tight glyph )
1408−224:12 name args
1403+226:17 INDENT
1409−224:16 tight glyph =
1404+226:17 lit %.y
1410−224:17 tight glyph [
1405+226:21 name first
1411−224:18 tight glyph (
1406+227:17 NEWLINE
1412−224:19 tight name list
1407+227:17 lit %.n
1413−224:24 tvar A
1408+227:21 glyph !!
1414−224:25 tight glyph )
1409+229:1 DEDENT
1415−224:27 glyph $-(
1410+229:1 DEDENT
1416−224:30 tight tvar A
1411+229:1 DEDENT
1417−224:32 glyph ?
1412+229:1 DEDENT
1418−224:33 tight glyph )
1413+229:1 DEDENT
1419−224:34 tight glyph ]
1414+229:1 DEDENT
1420−225:3 INDENT
1415+229:1 DEDENT
1421−225:3 glyph ?-
1416+229:1 DEDENT
1422−225:6 name args
1417+229:1 NEWLINE
1423−226:5 INDENT
1418+229:1 glyph ++
1424−226:5 glyph [
1419+229:4 name clef
1425−226:6 tight name xs
1420+229:9 glyph |=
1426−226:9 name predicate
1421+229:12 name args
1427−226:18 tight glyph ]
1422+229:16 tight glyph =
1428−226:20 glyph ^-
1423+229:17 tight glyph [
1429−226:23 glyph (
1424+229:18 tight glyph (
1430−226:24 tight name list
1425+229:19 tight name unit
1431−226:29 tvar A
1426+229:24 tvar A
1432−226:30 tight glyph )
1427+229:25 tight glyph )
1433−227:9 INDENT
1428+229:27 glyph (
1434−227:9 glyph ?-
1429+229:28 tight name unit
1435−227:12 name xs
1430+229:33 tvar B
1436−228:11 INDENT
1431+229:34 tight glyph )
1437−228:11 lit ~
1432+229:36 glyph $-(
1438−228:13 lit ~
1433+229:39 tight glyph [
1439−229:11 NEWLINE
1434+229:40 tight tvar A
1440−229:11 glyph [
1435+229:42 tvar B
1441−229:12 tight name item
1436+229:43 tight glyph ]
1442−229:17 name rest
1437+229:45 glyph (
1443−229:21 tight glyph ]
1438+229:46 tight name unit
1444−230:13 INDENT
1439+229:51 tvar C
1445−230:13 glyph ?-
1440+229:52 tight glyph )
1446−230:16 glyph (
1441+229:53 tight glyph )
1447−230:17 tight name predicate
1442+229:54 tight glyph ]
1448−230:27 name item
1443+230:3 INDENT
1449−230:31 tight glyph )
1444+230:3 glyph ?-
1450−231:15 INDENT
1445+230:6 name args
1451−231:15 lit %.y
1446+231:5 INDENT
1452−231:19 glyph [
1447+231:5 glyph [
1453−231:20 tight name item
1448+231:6 tight name first
1454−231:25 glyph (
1449+231:12 name second
1455−231:26 tight name skim
1450+231:19 name combine
1456−231:31 name rest
1451+231:26 tight glyph ]
1457−231:36 name predicate
1452+231:28 glyph ^-
1458−231:45 tight glyph )
1453+231:31 glyph (
1459−231:46 tight glyph ]
1454+231:32 tight name unit
1460−232:15 NEWLINE
1455+231:37 tvar C
1461−232:15 lit %.n
1456+231:38 tight glyph )
1462−232:19 glyph (
1457+232:7 INDENT
1463−232:20 tight name skim
1458+232:7 glyph ?-
1464−232:25 name rest
1459+232:10 name first
1465−232:30 name predicate
1460+233:9 INDENT
1466−232:39 tight glyph )
1461+233:9 lit ~
1467−234:1 DEDENT
1462+233:11 lit ~
1468−234:1 DEDENT
1463+234:9 NEWLINE
1469−234:1 DEDENT
1464+234:9 glyph [
1470−234:1 DEDENT
1465+234:10 tight lit ~
1471−234:1 DEDENT
1466+234:12 name a
1472−234:1 DEDENT
1467+234:13 tight glyph ]
1473−234:1 NEWLINE
1468+235:11 INDENT
1474−234:1 glyph ++
1469+235:11 glyph ?-
1475−234:4 name skip
1470+235:14 name second
1476−234:9 glyph |=
1471+236:13 INDENT
1477−234:12 name args
1472+236:13 lit ~
1478−234:16 tight glyph =
1473+236:15 lit ~
1479−234:17 tight glyph [
1474+237:13 NEWLINE
1480−234:18 tight glyph (
1475+237:13 glyph [
1481−234:19 tight name list
1476+237:14 tight lit ~
1482−234:24 tvar A
1477+237:16 name b
1483−234:25 tight glyph )
1478+237:17 tight glyph ]
1484−234:27 glyph $-(
1479+237:19 glyph (
1485−234:30 tight tvar A
1480+237:20 tight name combine
1486−234:32 glyph ?
1481+237:28 name a
1487−234:33 tight glyph )
1482+237:30 name b
1488−234:34 tight glyph ]
1483+237:31 tight glyph )
1489−235:3 INDENT
1484+239:1 DEDENT
1490−235:3 glyph ?-
1485+239:1 DEDENT
1491−235:6 name args
1486+239:1 DEDENT
1492−236:5 INDENT
1487+239:1 DEDENT
1493−236:5 glyph [
1488+239:1 DEDENT
1494−236:6 tight name xs
1489+239:1 DEDENT
1495−236:9 name predicate
1490+239:1 NEWLINE
1496−236:18 tight glyph ]
1491+239:1 glyph ++
1497−236:20 glyph ^-
1492+239:4 name skim
1498−236:23 glyph (
1493+239:9 glyph |=
1499−236:24 tight name list
1494+239:12 name args
1500−236:29 tvar A
1495+239:16 tight glyph =
1501−236:30 tight glyph )
1496+239:17 tight glyph [
1502−237:9 INDENT
1497+239:18 tight glyph (
1503−237:9 glyph ?-
1498+239:19 tight name list
1504−237:12 name xs
1499+239:24 tvar A
1505−238:11 INDENT
1500+239:25 tight glyph )
1506−238:11 lit ~
1501+239:27 glyph $-(
1507−238:13 lit ~
1502+239:30 tight tvar A
1508−239:11 NEWLINE
1503+239:32 glyph ?
1509−239:11 glyph [
1504+239:33 tight glyph )
1510−239:12 tight name item
1505+239:34 tight glyph ]
1511−239:17 name rest
1506+240:3 INDENT
1512−239:21 tight glyph ]
1507+240:3 glyph ?-
1513−240:13 INDENT
1508+240:6 name args
1514−240:13 glyph ?-
1509+241:5 INDENT
1515−240:16 glyph (
1510+241:5 glyph [
1516−240:17 tight name predicate
1511+241:6 tight name xs
1517−240:27 name item
1512+241:9 name predicate
1518−240:31 tight glyph )
1513+241:18 tight glyph ]
1519−241:15 INDENT
1514+241:20 glyph ^-
1520−241:15 lit %.y
1515+241:23 glyph (
1521−241:19 glyph (
1516+241:24 tight name list
1522−241:20 tight name skip
1517+241:29 tvar A
1523−241:25 name rest
1518+241:30 tight glyph )
1524−241:30 name predicate
1519+242:9 INDENT
1525−241:39 tight glyph )
1520+242:9 glyph ?-
1526−242:15 NEWLINE
1521+242:12 name xs
1527−242:15 lit %.n
1522+243:11 INDENT
1528−242:19 glyph [
1523+243:11 lit ~
1529−242:20 tight name item
1524+243:13 lit ~
1530−242:25 glyph (
1525+244:11 NEWLINE
1531−242:26 tight name skip
1526+244:11 glyph [
1532−242:31 name rest
1527+244:12 tight name item
1533−242:36 name predicate
1528+244:17 name rest
1534−242:45 tight glyph )
1529+244:21 tight glyph ]
1535−242:46 tight glyph ]
1530+245:13 INDENT
1536−244:1 DEDENT
1531+245:13 glyph ?-
1537−244:1 DEDENT
1532+245:16 glyph (
1538−244:1 DEDENT
1533+245:17 tight name predicate
1539−244:1 DEDENT
1534+245:27 name item
1540−244:1 DEDENT
1535+245:31 tight glyph )
1541−244:1 DEDENT
1536+246:15 INDENT
1542−244:1 NEWLINE
1537+246:15 lit %.y
1543−244:1 glyph ++
1538+246:19 glyph [
1544−244:4 name levy
1539+246:20 tight name item
1545−244:9 glyph |=
1540+246:25 glyph (
1546−244:12 name args
1541+246:26 tight name skim
1547−244:16 tight glyph =
1542+246:31 name rest
1548−244:17 tight glyph [
1543+246:36 name predicate
1549−244:18 tight glyph (
1544+246:45 tight glyph )
1550−244:19 tight name list
1545+246:46 tight glyph ]
1551−244:24 tvar A
1546+247:15 NEWLINE
1552−244:25 tight glyph )
1547+247:15 lit %.n
1553−244:27 glyph $-(
1548+247:19 glyph (
1554−244:30 tight tvar A
1549+247:20 tight name skim
1555−244:32 glyph ?
1550+247:25 name rest
1556−244:33 tight glyph )
1551+247:30 name predicate
1557−244:34 tight glyph ]
1552+247:39 tight glyph )
1558−245:3 INDENT
1553+249:1 DEDENT
1559−245:3 glyph ^-
1554+249:1 DEDENT
1560−245:6 glyph ?
1555+249:1 DEDENT
1561−246:5 INDENT
1556+249:1 DEDENT
1562−246:5 glyph ?-
1557+249:1 DEDENT
1563−246:8 name args
1558+249:1 DEDENT
1564−247:7 INDENT
1559+249:1 NEWLINE
1565−247:7 glyph [
1560+249:1 glyph ++
1566−247:8 tight name xs
1561+249:4 name skip
1567−247:11 name predicate
1562+249:9 glyph |=
1568−247:20 tight glyph ]
1563+249:12 name args
1569−248:9 INDENT
1564+249:16 tight glyph =
1570−248:9 glyph ?-
1565+249:17 tight glyph [
1571−248:12 name xs
1566+249:18 tight glyph (
1572−249:11 INDENT
1567+249:19 tight name list
1573−249:11 lit ~
1568+249:24 tvar A
1574−249:13 lit %.y
1569+249:25 tight glyph )
1575−250:11 NEWLINE
1570+249:27 glyph $-(
1576−250:11 glyph [
1571+249:30 tight tvar A
1577−250:12 tight name item
1572+249:32 glyph ?
1578−250:17 name rest
1573+249:33 tight glyph )
1579−250:21 tight glyph ]
1574+249:34 tight glyph ]
1580−251:13 INDENT
1575+250:3 INDENT
1581−251:13 glyph ?-
1576+250:3 glyph ?-
1582−251:16 glyph (
1577+250:6 name args
1583−251:17 tight name predicate
1578+251:5 INDENT
1584−251:27 name item
1579+251:5 glyph [
1585−251:31 tight glyph )
1580+251:6 tight name xs
1586−252:15 INDENT
1581+251:9 name predicate
1587−252:15 lit %.y
1582+251:18 tight glyph ]
1588−252:19 glyph (
1583+251:20 glyph ^-
1589−252:20 tight name levy
1584+251:23 glyph (
1590−252:25 name rest
1585+251:24 tight name list
1591−252:30 name predicate
1586+251:29 tvar A
1592−252:39 tight glyph )
1587+251:30 tight glyph )
1593−253:15 NEWLINE
1588+252:9 INDENT
1594−253:15 lit %.n
1589+252:9 glyph ?-
1595−253:19 lit %.n
1590+252:12 name xs
1596−255:1 DEDENT
1591+253:11 INDENT
1597−255:1 DEDENT
1592+253:11 lit ~
1598−255:1 DEDENT
1593+253:13 lit ~
1599−255:1 DEDENT
1594+254:11 NEWLINE
1600−255:1 DEDENT
1595+254:11 glyph [
1601−255:1 DEDENT
1596+254:12 tight name item
1602−255:1 DEDENT
1597+254:17 name rest
1603−255:1 NEWLINE
1598+254:21 tight glyph ]
1604−255:1 glyph ++
1599+255:13 INDENT
1605−255:4 name lien
1600+255:13 glyph ?-
1606−255:9 glyph |=
1601+255:16 glyph (
1607−255:12 name args
1602+255:17 tight name predicate
1608−255:16 tight glyph =
1603+255:27 name item
1609−255:17 tight glyph [
1604+255:31 tight glyph )
1610−255:18 tight glyph (
1605+256:15 INDENT
1611−255:19 tight name list
1606+256:15 lit %.y
1612−255:24 tvar A
1607+256:19 glyph (
1613−255:25 tight glyph )
1608+256:20 tight name skip
1614−255:27 glyph $-(
1609+256:25 name rest
1615−255:30 tight tvar A
1610+256:30 name predicate
1616−255:32 glyph ?
1611+256:39 tight glyph )
1617−255:33 tight glyph )
1612+257:15 NEWLINE
1618−255:34 tight glyph ]
1613+257:15 lit %.n
1619−256:3 INDENT
1614+257:19 glyph [
1620−256:3 glyph ^-
1615+257:20 tight name item
1621−256:6 glyph ?
1616+257:25 glyph (
1622−257:5 INDENT
1617+257:26 tight name skip
1623−257:5 glyph ?-
1618+257:31 name rest
1624−257:8 name args
1619+257:36 name predicate
1625−258:7 INDENT
1620+257:45 tight glyph )
1626−258:7 glyph [
1621+257:46 tight glyph ]
1627−258:8 tight name xs
1622+259:1 DEDENT
1628−258:11 name predicate
1623+259:1 DEDENT
1629−258:20 tight glyph ]
1624+259:1 DEDENT
1630−259:9 INDENT
1625+259:1 DEDENT
1631−259:9 glyph ?-
1626+259:1 DEDENT
1632−259:12 name xs
1627+259:1 DEDENT
1633−260:11 INDENT
1628+259:1 NEWLINE
1634−260:11 lit ~
1629+259:1 glyph ++
1635−260:13 lit %.n
1630+259:4 name levy
1636−261:11 NEWLINE
1631+259:9 glyph |=
1637−261:11 glyph [
1632+259:12 name args
1638−261:12 tight name item
1633+259:16 tight glyph =
1639−261:17 name rest
1634+259:17 tight glyph [
1640−261:21 tight glyph ]
1635+259:18 tight glyph (
1641−262:13 INDENT
1636+259:19 tight name list
1642−262:13 glyph ?-
1637+259:24 tvar A
1643−262:16 glyph (
1638+259:25 tight glyph )
1644−262:17 tight name predicate
1639+259:27 glyph $-(
1645−262:27 name item
1640+259:30 tight tvar A
1646−262:31 tight glyph )
1641+259:32 glyph ?
1647−263:15 INDENT
1642+259:33 tight glyph )
1648−263:15 lit %.y
1643+259:34 tight glyph ]
1649−263:19 lit %.y
1644+260:3 INDENT
1650−264:15 NEWLINE
1645+260:3 glyph ^-
1651−264:15 lit %.n
1646+260:6 glyph ?
1652−264:19 glyph (
1647+261:5 INDENT
1653−264:20 tight name lien
1648+261:5 glyph ?-
1654−264:25 name rest
1649+261:8 name args
1655−264:30 name predicate
1650+262:7 INDENT
1656−264:39 tight glyph )
1651+262:7 glyph [
1657−266:1 DEDENT
1652+262:8 tight name xs
1658−266:1 DEDENT
1653+262:11 name predicate
1659−266:1 DEDENT
1654+262:20 tight glyph ]
1660−266:1 DEDENT
1655+263:9 INDENT
1661−266:1 DEDENT
1656+263:9 glyph ?-
1662−266:1 DEDENT
1657+263:12 name xs
1663−266:1 DEDENT
1658+264:11 INDENT
1664−266:1 NEWLINE
1659+264:11 lit ~
1665−266:1 glyph ++
1660+264:13 lit %.y
1666−266:4 name roll
1661+265:11 NEWLINE
1667−266:9 glyph |=
1662+265:11 glyph [
1668−266:12 name args
1663+265:12 tight name item
1669−266:16 tight glyph =
1664+265:17 name rest
1670−266:17 tight glyph [
1665+265:21 tight glyph ]
1671−266:18 tight glyph (
1666+266:13 INDENT
1672−266:19 tight name list
1667+266:13 glyph ?-
1673−266:24 tvar A
1668+266:16 glyph (
1674−266:25 tight glyph )
1669+266:17 tight name predicate
1675−266:27 tvar B
1670+266:27 name item
1676−266:29 glyph $-(
1671+266:31 tight glyph )
1677−266:32 tight glyph [
1672+267:15 INDENT
1678−266:33 tight tvar A
1673+267:15 lit %.y
1679−266:35 tvar B
1674+267:19 glyph (
1680−266:36 tight glyph ]
1675+267:20 tight name levy
1681−266:38 tvar B
1676+267:25 name rest
1682−266:39 tight glyph )
1677+267:30 name predicate
1683−266:40 tight glyph ]
1678+267:39 tight glyph )
1684−267:3 INDENT
1679+268:15 NEWLINE
1685−267:3 glyph ?-
1680+268:15 lit %.n
1686−267:6 name args
1681+268:19 lit %.n
1687−268:5 INDENT
1682+270:1 DEDENT
1688−268:5 glyph [
1683+270:1 DEDENT
1689−268:6 tight name xs
1684+270:1 DEDENT
1690−268:9 name start
1685+270:1 DEDENT
1691−268:15 name combine
1686+270:1 DEDENT
1692−268:22 tight glyph ]
1687+270:1 DEDENT
1693−269:7 INDENT
1688+270:1 DEDENT
1694−269:7 glyph ?-
1689+270:1 NEWLINE
1695−269:10 name xs
1690+270:1 glyph ++
1696−270:9 INDENT
1691+270:4 name lien
1697−270:9 lit ~
1692+270:9 glyph |=
1698−270:11 name start
1693+270:12 name args
1699−271:9 NEWLINE
1694+270:16 tight glyph =
1700−271:9 glyph [
1695+270:17 tight glyph [
1701−271:10 tight name item
1696+270:18 tight glyph (
1702−271:15 name rest
1697+270:19 tight name list
1703−271:19 tight glyph ]
1698+270:24 tvar A
1704−271:21 glyph (
1699+270:25 tight glyph )
1705−271:22 tight name roll
1700+270:27 glyph $-(
1706−271:27 name rest
1701+270:30 tight tvar A
1707−271:32 glyph (
1702+270:32 glyph ?
1708−271:33 tight name combine
1703+270:33 tight glyph )
1709−271:41 name item
1704+270:34 tight glyph ]
1710−271:46 name start
1705+271:3 INDENT
1711−271:51 tight glyph )
1706+271:3 glyph ^-
1712−271:53 name combine
1707+271:6 glyph ?
1713−271:60 tight glyph )
1708+272:5 INDENT
1714−273:1 DEDENT
1709+272:5 glyph ?-
1715−273:1 DEDENT
1710+272:8 name args
1716−273:1 DEDENT
1711+273:7 INDENT
1717−273:1 DEDENT
1712+273:7 glyph [
1718−273:1 NEWLINE
1713+273:8 tight name xs
1719−273:1 glyph ++
1714+273:11 name predicate
1720−273:4 name reel
1715+273:20 tight glyph ]
1721−273:9 glyph |=
1716+274:9 INDENT
1722−273:12 name args
1717+274:9 glyph ?-
1723−273:16 tight glyph =
1718+274:12 name xs
1724−273:17 tight glyph [
1719+275:11 INDENT
1725−273:18 tight glyph (
1720+275:11 lit ~
1726−273:19 tight name list
1721+275:13 lit %.n
1727−273:24 tvar A
1722+276:11 NEWLINE
1728−273:25 tight glyph )
1723+276:11 glyph [
1729−273:27 tvar B
1724+276:12 tight name item
1730−273:29 glyph $-(
1725+276:17 name rest
1731−273:32 tight glyph [
1726+276:21 tight glyph ]
1732−273:33 tight tvar A
1727+277:13 INDENT
1733−273:35 tvar B
1728+277:13 glyph ?-
1734−273:36 tight glyph ]
1729+277:16 glyph (
1735−273:38 tvar B
1730+277:17 tight name predicate
1736−273:39 tight glyph )
1731+277:27 name item
1737−273:40 tight glyph ]
1732+277:31 tight glyph )
1738−274:3 INDENT
1733+278:15 INDENT
1739−274:3 glyph ?-
1734+278:15 lit %.y
1740−274:6 name args
1735+278:19 lit %.y
1741−275:5 INDENT
1736+279:15 NEWLINE
1742−275:5 glyph [
1737+279:15 lit %.n
1743−275:6 tight name xs
1738+279:19 glyph (
1744−275:9 name start
1739+279:20 tight name lien
1745−275:15 name combine
1740+279:25 name rest
1746−275:22 tight glyph ]
1741+279:30 name predicate
1747−276:7 INDENT
1742+279:39 tight glyph )
1748−276:7 glyph ?-
1743+281:1 DEDENT
1749−276:10 name xs
1744+281:1 DEDENT
1750−277:9 INDENT
1745+281:1 DEDENT
1751−277:9 lit ~
1746+281:1 DEDENT
1752−277:11 name start
1747+281:1 DEDENT
1753−278:9 NEWLINE
1748+281:1 DEDENT
1754−278:9 glyph [
1749+281:1 DEDENT
1755−278:10 tight name item
1750+281:1 NEWLINE
1756−278:15 name rest
1751+281:1 glyph ++
1757−278:19 tight glyph ]
1752+281:4 name roll
1758−278:21 glyph (
1753+281:9 glyph |=
1759−278:22 tight name combine
1754+281:12 name args
1760−278:30 name item
1755+281:16 tight glyph =
1761−278:35 glyph (
1756+281:17 tight glyph [
1762−278:36 tight name reel
1757+281:18 tight glyph (
1763−278:41 name rest
1758+281:19 tight name list
1764−278:46 name start
1759+281:24 tvar A
1765−278:52 name combine
1760+281:25 tight glyph )
1766−278:59 tight glyph )
1761+281:27 tvar B
1767−278:60 tight glyph )
1762+281:29 glyph $-(
1768−280:1 DEDENT
1763+281:32 tight glyph [
1769−280:1 DEDENT
1764+281:33 tight tvar A
1770−280:1 DEDENT
1765+281:35 tvar B
1771−280:1 DEDENT
1766+281:36 tight glyph ]
1772−280:1 NEWLINE
1767+281:38 tvar B
1773−280:1 glyph ++
1768+281:39 tight glyph )
1774−280:4 name flit
1769+281:40 tight glyph ]
1775−280:9 glyph |=
1770+282:3 INDENT
1776−280:12 name predicate
1771+282:3 glyph ?-
1777−280:21 tight glyph =
1772+282:6 name args
1778−280:22 tight glyph $-(
1773+283:5 INDENT
1779−280:25 tight tvar A
1774+283:5 glyph [
1780−280:27 glyph ?
1775+283:6 tight name xs
1781−280:28 tight glyph )
1776+283:9 name start
1782−281:3 INDENT
1777+283:15 name combine
1783−281:3 glyph |=
1778+283:22 tight glyph ]
1784−281:6 name value
1779+284:7 INDENT
1785−281:11 tight glyph =
1780+284:7 glyph ?-
1786−281:12 tight tvar A
1781+284:10 name xs
1787−282:5 INDENT
1782+285:9 INDENT
1788−282:5 glyph ^-
1783+285:9 lit ~
1789−282:8 glyph (
1784+285:11 name start
1790−282:9 tight name unit
1785+286:9 NEWLINE
1791−282:14 tvar A
1786+286:9 glyph [
1792−282:15 tight glyph )
1787+286:10 tight name item
1793−283:7 INDENT
1788+286:15 name rest
1794−283:7 glyph ?-
1789+286:19 tight glyph ]
1795−283:10 glyph (
1790+286:21 glyph (
1796−283:11 tight name predicate
1791+286:22 tight name roll
1797−283:21 name value
1792+286:27 name rest
1798−283:26 tight glyph )
1793+286:32 glyph (
1799−284:9 INDENT
1794+286:33 tight name combine
1800−284:9 lit %.y
1795+286:41 name item
1801−284:13 glyph `
1796+286:46 name start
1802−284:14 tight name value
1797+286:51 tight glyph )
1803−285:9 NEWLINE
1798+286:53 name combine
1804−285:9 lit %.n
1799+286:60 tight glyph )
1805−285:13 lit ~
1800+288:1 DEDENT
1806−287:1 DEDENT
1801+288:1 DEDENT
1807−287:1 DEDENT
1802+288:1 DEDENT
1808−287:1 DEDENT
1803+288:1 DEDENT
1809−287:1 DEDENT
1804+288:1 NEWLINE
1810−287:1 NEWLINE
1805+288:1 glyph ++
1811−287:1 glyph ++
1806+288:4 name reel
1812−287:4 name murn
1807+288:9 glyph |=
1813−287:9 glyph |=
1808+288:12 name args
1814−287:12 name args
1809+288:16 tight glyph =
1815−287:16 tight glyph =
1810+288:17 tight glyph [
1816−287:17 tight glyph [
1811+288:18 tight glyph (
1817−287:18 tight glyph (
1812+288:19 tight name list
1818−287:19 tight name list
1813+288:24 tvar A
1819−287:24 tvar A
1814+288:25 tight glyph )
1820−287:25 tight glyph )
1815+288:27 tvar B
1821−287:27 glyph $-(
1816+288:29 glyph $-(
1822−287:30 tight tvar A
1817+288:32 tight glyph [
1823−287:32 glyph (
1818+288:33 tight tvar A
1824−287:33 tight name unit
1819+288:35 tvar B
1825−287:38 tvar B
1820+288:36 tight glyph ]
1826−287:39 tight glyph )
1821+288:38 tvar B
1827−287:40 tight glyph )
1822+288:39 tight glyph )
1828−287:41 tight glyph ]
1823+288:40 tight glyph ]
1829−288:3 INDENT
1824+289:3 INDENT
1830−288:3 glyph ?-
1825+289:3 glyph ?-
1831−288:6 name args
1826+289:6 name args
1832−289:5 INDENT
1827+290:5 INDENT
1833−289:5 glyph [
1828+290:5 glyph [
1834−289:6 tight name xs
1829+290:6 tight name xs
1835−289:9 name f
1830+290:9 name start
1836−289:10 tight glyph ]
1831+290:15 name combine
1837−289:12 glyph ^-
1832+290:22 tight glyph ]
1838−289:15 glyph (
1833+291:7 INDENT
1839−289:16 tight name list
1834+291:7 glyph ?-
1840−289:21 tvar B
1835+291:10 name xs
1841−289:22 tight glyph )
1836+292:9 INDENT
1842−290:9 INDENT
1837+292:9 lit ~
1843−290:9 glyph ?-
1838+292:11 name start
1844−290:12 name xs
1839+293:9 NEWLINE
1845−291:11 INDENT
1840+293:9 glyph [
1846−291:11 lit ~
1841+293:10 tight name item
1847−291:13 lit ~
1842+293:15 name rest
1848−292:11 NEWLINE
1843+293:19 tight glyph ]
1849−292:11 glyph [
1844+293:21 glyph (
1850−292:12 tight name item
1845+293:22 tight name combine
1851−292:17 name rest
1846+293:30 name item
1852−292:21 tight glyph ]
1847+293:35 glyph (
1853−293:13 INDENT
1848+293:36 tight name reel
1854−293:13 glyph ?-
1849+293:41 name rest
1855−293:16 glyph (
1850+293:46 name start
1856−293:17 tight name f
1851+293:52 name combine
1857−293:19 name item
1852+293:59 tight glyph )
1858−293:23 tight glyph )
1853+293:60 tight glyph )
1859−294:15 INDENT
1854+295:1 DEDENT
1860−294:15 lit ~
1855+295:1 DEDENT
1861−294:17 glyph (
1856+295:1 DEDENT
1862−294:18 tight name murn
1857+295:1 DEDENT
1863−294:23 name rest
1858+295:1 NEWLINE
1864−294:28 name f
1859+295:1 glyph ++
1865−294:29 tight glyph )
1860+295:4 name flit
1866−295:15 NEWLINE
1861+295:9 glyph |=
1867−295:15 glyph [
1862+295:12 name predicate
1868−295:16 tight lit ~
1863+295:21 tight glyph =
1869−295:18 name value
1864+295:22 tight glyph $-(
1870−295:23 tight glyph ]
1865+295:25 tight tvar A
1871−295:25 glyph [
1866+295:27 glyph ?
1872−295:26 tight name value
1867+295:28 tight glyph )
1873−295:32 glyph (
1868+296:3 INDENT
1874−295:33 tight name murn
1869+296:3 glyph |=
1875−295:38 name rest
1870+296:6 name value
1876−295:43 name f
1871+296:11 tight glyph =
1877−295:44 tight glyph )
1872+296:12 tight tvar A
1878−295:45 tight glyph ]
1873+297:5 INDENT
1879−297:1 DEDENT
1874+297:5 glyph ^-
1880−297:1 DEDENT
1875+297:8 glyph (
1881−297:1 DEDENT
1876+297:9 tight name unit
1882−297:1 DEDENT
1877+297:14 tvar A
1883−297:1 DEDENT
1878+297:15 tight glyph )
1884−297:1 DEDENT
1879+298:7 INDENT
1885−297:1 NEWLINE
1880+298:7 glyph ?-
1886−297:1 glyph ++
1881+298:10 glyph (
1887−297:4 name join
1882+298:11 tight name predicate
1888−297:9 glyph |=
1883+298:21 name value
1889−297:12 name args
1884+298:26 tight glyph )
1890−297:16 tight glyph =
1885+299:9 INDENT
1891−297:17 tight glyph [
1886+299:9 lit %.y
1892−297:18 tight tvar A
1887+299:13 glyph `
1893−297:20 glyph (
1888+299:14 tight name value
1894−297:21 tight name list
1889+300:9 NEWLINE
1895−297:26 tvar A
1890+300:9 lit %.n
1896−297:27 tight glyph )
1891+300:13 lit ~
1897−297:28 tight glyph ]
1892+302:1 DEDENT
1898−298:3 INDENT
1893+302:1 DEDENT
1899−298:3 glyph ?-
1894+302:1 DEDENT
1900−298:6 name args
1895+302:1 DEDENT
1901−299:5 INDENT
1896+302:1 NEWLINE
1902−299:5 glyph [
1897+302:1 glyph ++
1903−299:6 tight name separator
1898+302:4 name murn
1904−299:16 name xs
1899+302:9 glyph |=
1905−299:18 tight glyph ]
1900+302:12 name args
1906−299:20 glyph ^-
1901+302:16 tight glyph =
1907−299:23 glyph (
1902+302:17 tight glyph [
1908−299:24 tight name list
1903+302:18 tight glyph (
1909−299:29 tvar A
1904+302:19 tight name list
1910−299:30 tight glyph )
1905+302:24 tvar A
1911−300:9 INDENT
1906+302:25 tight glyph )
1912−300:9 glyph ?-
1907+302:27 glyph $-(
1913−300:12 name xs
1908+302:30 tight tvar A
1914−301:11 INDENT
1909+302:32 glyph (
1915−301:11 lit ~
1910+302:33 tight name unit
1916−301:13 lit ~
1911+302:38 tvar B
1917−302:11 NEWLINE
1912+302:39 tight glyph )
1918−302:11 glyph [
1913+302:40 tight glyph )
1919−302:12 tight name item
1914+302:41 tight glyph ]
1920−302:17 name rest
1915+303:3 INDENT
1921−302:21 tight glyph ]
1916+303:3 glyph ?-
1922−303:13 INDENT
1917+303:6 name args
1923−303:13 glyph ?-
1918+304:5 INDENT
1924−303:16 name rest
1919+304:5 glyph [
1925−304:15 INDENT
1920+304:6 tight name xs
1926−304:15 lit ~
1921+304:9 name f
1927−304:17 glyph [
1922+304:10 tight glyph ]
1928−304:18 tight name item
1923+304:12 glyph ^-
1929−304:23 lit ~
1924+304:15 glyph (
1930−304:24 tight glyph ]
1925+304:16 tight name list
1931−305:15 NEWLINE
1926+304:21 tvar B
1932−305:15 glyph [
1927+304:22 tight glyph )
1933−305:16 tight name next
1928+305:9 INDENT
1934−305:21 name more
1929+305:9 glyph ?-
1935−305:25 tight glyph ]
1930+305:12 name xs
1936−305:27 glyph [
1931+306:11 INDENT
1937−305:28 tight name item
1932+306:11 lit ~
1938−305:33 glyph [
1933+306:13 lit ~
1939−305:34 tight name separator
1934+307:11 NEWLINE
1940−305:44 glyph (
1935+307:11 glyph [
1941−305:45 tight name join
1936+307:12 tight name item
1942−305:50 name separator
1937+307:17 name rest
1943−305:60 name rest
1938+307:21 tight glyph ]
1944−305:64 tight glyph )
1939+308:13 INDENT
1945−305:65 tight glyph ]
1940+308:13 glyph ?-
1946−305:66 tight glyph ]
1941+308:16 glyph (
1947−307:1 DEDENT
1942+308:17 tight name f
1948−307:1 DEDENT
1943+308:19 name item
1949−307:1 DEDENT
1944+308:23 tight glyph )
1950−307:1 DEDENT
1945+309:15 INDENT
1951−307:1 DEDENT
1946+309:15 lit ~
1952−307:1 DEDENT
1947+309:17 glyph (
1953−307:1 NEWLINE
1948+309:18 tight name murn
1954−307:1 glyph ++
1949+309:23 name rest
1955−307:4 name snip
1950+309:28 name f
1956−307:9 glyph |=
1951+309:29 tight glyph )
1957−307:12 name xs
1952+310:15 NEWLINE
1958−307:14 tight glyph =
1953+310:15 glyph [
1959−307:15 tight glyph (
1954+310:16 tight lit ~
1960−307:16 tight name list
1955+310:18 name value
1961−307:21 tvar A
1956+310:23 tight glyph ]
1962−307:22 tight glyph )
1957+310:25 glyph [
1963−308:3 INDENT
1958+310:26 tight name value
1964−308:3 glyph ^-
1959+310:32 glyph (
1965−308:6 glyph (
1960+310:33 tight name murn
1966−308:7 tight name list
1961+310:38 name rest
1967−308:12 tvar A
1962+310:43 name f
1968−308:13 tight glyph )
1963+310:44 tight glyph )
1969−309:5 INDENT
1964+310:45 tight glyph ]
1970−309:5 glyph ?-
1965+312:1 DEDENT
1971−309:8 name xs
1966+312:1 DEDENT
1972−310:7 INDENT
1967+312:1 DEDENT
1973−310:7 lit ~
1968+312:1 DEDENT
1974−310:9 lit ~
1969+312:1 DEDENT
1975−311:7 NEWLINE
1970+312:1 DEDENT
1976−311:7 glyph [
1971+312:1 NEWLINE
1977−311:8 tight name item
1972+312:1 glyph ++
1978−311:13 name rest
1973+312:4 name join
1979−311:17 tight glyph ]
1974+312:9 glyph |=
1980−312:9 INDENT
1975+312:12 name args
1981−312:9 glyph ?-
1976+312:16 tight glyph =
1982−312:12 name rest
1977+312:17 tight glyph [
1983−313:11 INDENT
1978+312:18 tight tvar A
1984−313:11 lit ~
1979+312:20 glyph (
1985−313:13 lit ~
1980+312:21 tight name list
1986−314:11 NEWLINE
1981+312:26 tvar A
1987−314:11 glyph [
1982+312:27 tight glyph )
1988−314:12 tight name next
1983+312:28 tight glyph ]
1989−314:17 name more
1984+313:3 INDENT
1990−314:21 tight glyph ]
1985+313:3 glyph ?-
1991−314:23 glyph [
1986+313:6 name args
1992−314:24 tight name item
1987+314:5 INDENT
1993−314:29 glyph (
1988+314:5 glyph [
1994−314:30 tight name snip
1989+314:6 tight name separator
1995−314:35 name rest
1990+314:16 name xs
1996−314:39 tight glyph )
1991+314:18 tight glyph ]
1997−314:40 tight glyph ]
1992+314:20 glyph ^-
1998−316:1 DEDENT
1993+314:23 glyph (
1999−316:1 DEDENT
1994+314:24 tight name list
2000−316:1 DEDENT
1995+314:29 tvar A
2001−316:1 DEDENT
1996+314:30 tight glyph )
2002−316:1 DEDENT
1997+315:9 INDENT
2003−316:1 NEWLINE
1998+315:9 glyph ?-
2004−316:1 glyph ++
1999+315:12 name xs
2005−316:4 name rear
2000+316:11 INDENT
2006−316:9 glyph |=
2001+316:11 lit ~
2007−316:12 name xs
2002+316:13 lit ~
2008−316:14 tight glyph =
2003+317:11 NEWLINE
2009−316:15 tight glyph (
2004+317:11 glyph [
2010−316:16 tight name list
2005+317:12 tight name item
2011−316:21 tvar A
2006+317:17 name rest
2012−316:22 tight glyph )
2007+317:21 tight glyph ]
2013−317:3 INDENT
2008+318:13 INDENT
2014−317:3 glyph ?-
2009+318:13 glyph ?-
2015−317:6 name xs
2010+318:16 name rest
2016−318:5 INDENT
2011+319:15 INDENT
2017−318:5 lit ~
2012+319:15 lit ~
2018−318:7 glyph !!
2013+319:17 glyph [
2019−319:5 NEWLINE
2014+319:18 tight name item
2020−319:5 glyph [
2015+319:23 lit ~
2021−319:6 tight name item
2016+319:24 tight glyph ]
2022−319:11 name rest
2017+320:15 NEWLINE
2023−319:15 tight glyph ]
2018+320:15 glyph [
2024−320:7 INDENT
2019+320:16 tight name next
2025−320:7 glyph ?-
2020+320:21 name more
2026−320:10 name rest
2021+320:25 tight glyph ]
2027−321:9 INDENT
2022+320:27 glyph [
2028−321:9 lit ~
2023+320:28 tight name item
2029−321:11 name item
2024+320:33 glyph [
2030−322:9 NEWLINE
2025+320:34 tight name separator
2031−322:9 glyph [
2026+320:44 glyph (
2032−322:10 tight name next
2027+320:45 tight name join
2033−322:15 name more
2028+320:50 name separator
2034−322:19 tight glyph ]
2029+320:60 name rest
2035−322:21 glyph (
2030+320:64 tight glyph )
2036−322:22 tight name rear
2031+320:65 tight glyph ]
2037−322:27 name rest
2032+320:66 tight glyph ]
2038−322:31 tight glyph )
2033+322:1 DEDENT
2039−324:1 DEDENT
2034+322:1 DEDENT
2040−324:1 DEDENT
2035+322:1 DEDENT
2041−324:1 DEDENT
2036+322:1 DEDENT
2042−324:1 DEDENT
2037+322:1 DEDENT
2043−324:1 NEWLINE
2038+322:1 DEDENT
2044−324:1 glyph ++
2039+322:1 NEWLINE
2045−324:4 name cork
2040+322:1 glyph ++
2046−324:9 glyph |=
2041+322:4 name snip
2047−324:12 name gates
2042+322:9 glyph |=
2048−324:17 tight glyph =
2043+322:12 name xs
2049−324:18 tight glyph [
2044+322:14 tight glyph =
2050−324:19 tight glyph $-(
2045+322:15 tight glyph (
2051−324:22 tight tvar A
2046+322:16 tight name list
2052−324:24 tvar B
2047+322:21 tvar A
2053−324:25 tight glyph )
2048+322:22 tight glyph )
2054−324:27 glyph $-(
2049+323:3 INDENT
2055−324:30 tight tvar B
2050+323:3 glyph ^-
2056−324:32 tvar C
2051+323:6 glyph (
2057−324:33 tight glyph )
2052+323:7 tight name list
2058−324:34 tight glyph ]
2053+323:12 tvar A
2059−325:3 INDENT
2054+323:13 tight glyph )
2060−325:3 glyph ?-
2055+324:5 INDENT
2061−325:6 name gates
2056+324:5 glyph ?-
2062−326:5 INDENT
2057+324:8 name xs
2063−326:5 glyph [
2058+325:7 INDENT
2064−326:6 tight name f
2059+325:7 lit ~
2065−326:8 name g
2060+325:9 lit ~
2066−326:9 tight glyph ]
2061+326:7 NEWLINE
2067−326:11 glyph |=
2062+326:7 glyph [
2068−326:14 name x
2063+326:8 tight name item
2069−326:15 tight glyph =
2064+326:13 name rest
2070−326:16 tight tvar A
2065+326:17 tight glyph ]
2071−326:18 glyph (
2066+327:9 INDENT
2072−326:19 tight name g
2067+327:9 glyph ?-
2073−326:21 glyph (
2068+327:12 name rest
2074−326:22 tight name f
2069+328:11 INDENT
2075−326:24 name x
2070+328:11 lit ~
2076−326:25 tight glyph )
2071+328:13 lit ~
2077−326:26 tight glyph )
2072+329:11 NEWLINE
2078−328:1 DEDENT
2073+329:11 glyph [
2079−328:1 DEDENT
2074+329:12 tight name next
2080−328:1 NEWLINE
2075+329:17 name more
2081−328:1 glyph ++
2076+329:21 tight glyph ]
2082−328:4 name corl
2077+329:23 glyph [
2083−328:9 glyph |=
2078+329:24 tight name item
2084−328:12 name gates
2079+329:29 glyph (
2085−328:17 tight glyph =
2080+329:30 tight name snip
2086−328:18 tight glyph [
2081+329:35 name rest
2087−328:19 tight glyph $-(
2082+329:39 tight glyph )
2088−328:22 tight tvar B
2083+329:40 tight glyph ]
2089−328:24 tvar C
2084+331:1 DEDENT
2090−328:25 tight glyph )
2085+331:1 DEDENT
2091−328:27 glyph $-(
2086+331:1 DEDENT
2092−328:30 tight tvar A
2087+331:1 DEDENT
2093−328:32 tvar B
2088+331:1 DEDENT
2094−328:33 tight glyph )
2089+331:1 NEWLINE
2095−328:34 tight glyph ]
2090+331:1 glyph ++
2096−329:3 INDENT
2091+331:4 name rear
2097−329:3 glyph ?-
2092+331:9 glyph |=
2098−329:6 name gates
2093+331:12 name xs
2099−330:5 INDENT
2094+331:14 tight glyph =
2100−330:5 glyph [
2095+331:15 tight glyph (
2101−330:6 tight name f
2096+331:16 tight name list
2102−330:8 name g
2097+331:21 tvar A
2103−330:9 tight glyph ]
2098+331:22 tight glyph )
2104−330:11 glyph |=
2099+332:3 INDENT
2105−330:14 name x
2100+332:3 glyph ?-
2106−330:15 tight glyph =
2101+332:6 name xs
2107−330:16 tight tvar A
2102+333:5 INDENT
2108−330:18 glyph (
2103+333:5 lit ~
2109−330:19 tight name f
2104+333:7 glyph !!
2110−330:21 glyph (
2105+334:5 NEWLINE
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
2137334:5 glyph [
2106334:5 glyph [
2138−334:6 tight name f
2107+334:6 tight name item
2139−334:8 name a
2108+334:11 name rest
2140−334:9 tight glyph ]
2109+334:15 tight glyph ]
2110+335:7 INDENT
2141−334:11 glyph |=
2111+335:7 glyph ?-
2142−334:14 name b
2112+335:10 name rest
2113+336:9 INDENT
2114+336:9 lit ~
2115+336:11 name item
2116+337:9 NEWLINE
2143−334:15 tight glyph =
2117+337:9 glyph [
2144−334:16 tight tvar B
2118+337:10 tight name next
2145−334:18 glyph (
2119+337:15 name more
2146−334:19 tight name f
2120+337:19 tight glyph ]
2147−334:21 name a
2121+337:21 glyph (
2148−334:23 name b
2122+337:22 tight name rear
2123+337:27 name rest
2149−334:24 tight glyph )
2124+337:31 tight glyph )
2125+339:1 DEDENT
2126+339:1 DEDENT
2150−336:1 DEDENT
2127+339:1 DEDENT
2151−336:1 DEDENT
2128+339:1 DEDENT
2152−336:1 NEWLINE
2129+339:1 NEWLINE
2153−336:1 glyph ++
2130+339:1 glyph ++
2154−336:4 name curr
2131+339:4 name cork
2155−336:9 glyph |=
2132+339:9 glyph |=
2156−336:12 name args
2133+339:12 name gates
2157−336:16 tight glyph =
2134+339:17 tight glyph =
2158−336:17 tight glyph [
2135+339:18 tight glyph [
2159−336:18 tight glyph $-(
2136+339:19 tight glyph $-(
2160−336:21 tight glyph [
2161−336:22 tight tvar A
2137+339:22 tight tvar A
2162−336:24 tvar B
2138+339:24 tvar B
2163−336:25 tight glyph ]
2139+339:25 tight glyph )
2164−336:27 tvar C
2140+339:27 glyph $-(
2165−336:28 tight glyph )
2141+339:30 tight tvar B
2166−336:30 tvar B
2142+339:32 tvar C
2143+339:33 tight glyph )
2167−336:31 tight glyph ]
2144+339:34 tight glyph ]
2168−337:3 INDENT
2145+340:3 INDENT
2169−337:3 glyph ?-
2146+340:3 glyph ?-
2170−337:6 name args
2147+340:6 name gates
2171−338:5 INDENT
2148+341:5 INDENT
2172−338:5 glyph [
2149+341:5 glyph [
2173−338:6 tight name f
2150+341:6 tight name f
2174−338:8 name b
2151+341:8 name g
2175−338:9 tight glyph ]
2152+341:9 tight glyph ]
2176−338:11 glyph |=
2153+341:11 glyph |=
2177−338:14 name a
2154+341:14 name x
2178−338:15 tight glyph =
2155+341:15 tight glyph =
2179−338:16 tight tvar A
2156+341:16 tight tvar A
2180−338:18 glyph (
2157+341:18 glyph (
2181−338:19 tight name f
2158+341:19 tight name g
2182−338:21 name a
2159+341:21 glyph (
2160+341:22 tight name f
2183−338:23 name b
2161+341:24 name x
2162+341:25 tight glyph )
2184−338:24 tight glyph )
2163+341:26 tight glyph )
2185−340:1 DEDENT
2164+343:1 DEDENT
2186−340:1 DEDENT
2165+343:1 DEDENT
2187−340:1 NEWLINE
2166+343:1 NEWLINE
2188−340:1 glyph +$
2167+343:1 glyph ++
2189−340:4 name cmd
2168+343:4 name corl
2190−340:8 glyph |$
2169+343:9 glyph |=
2191−340:11 glyph [
2170+343:12 name gates
2192−340:12 tight tvar M
2171+343:17 tight glyph =
2193−340:13 tight glyph ]
2172+343:18 tight glyph [
2194−341:3 INDENT
2195−341:3 glyph [
2173+343:19 tight glyph $-(
2196−341:4 tight lit %poke
2174+343:22 tight tvar B
2197−341:10 name p
2175+343:24 tvar C
2198−341:11 tight glyph =
2199−341:12 tight name raw-poke
2200−341:21 name reply
2201−341:26 tight glyph =
2176+343:25 tight glyph )
2202−341:27 tight glyph $-(
2177+343:27 glyph $-(
2203−341:30 tight glyph (
2178+343:30 tight tvar A
2204−341:31 tight name unit
2205−341:36 aura @t
2206−341:38 tight glyph )
2207−341:40 tvar M
2179+343:32 tvar B
2208−341:41 tight glyph )
2180+343:33 tight glyph )
2209−341:42 tight glyph ]
2181+343:34 tight glyph ]
2210−342:3 NEWLINE
2182+344:3 INDENT
2211−342:3 glyph [
2183+344:3 glyph ?-
2212−342:4 tight lit %go
2184+344:6 name gates
2213−342:8 name url
2185+345:5 INDENT
2214−342:11 tight glyph =
2215−342:12 tight aura @t
2216−342:14 tight glyph ]
2217−343:3 NEWLINE
2218−343:3 glyph [
2186+345:5 glyph [
2219−343:4 tight lit %wait
2187+345:6 tight name f
2220−343:10 name gap
2188+345:8 name g
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 ]
2189+345:9 tight glyph ]
2227−344:3 NEWLINE
2228−344:3 glyph [
2190+345:11 glyph |=
2229−344:4 tight lit %now
2191+345:14 name x
2230−344:9 name reply
2231−344:14 tight glyph =
2192+345:15 tight glyph =
2232−344:15 tight glyph $-(
2193+345:16 tight tvar A
2233−344:18 tight aura @da
2234−344:22 tvar M
2235−344:23 tight glyph )
2194+345:18 glyph (
2236−344:24 tight glyph ]
2195+345:19 tight name f
2237−345:3 NEWLINE
2238−345:3 glyph [
2196+345:21 glyph (
2239−345:4 tight lit %who
2197+345:22 tight name g
2240−345:9 name reply
2198+345:24 name x
2241−345:14 tight glyph =
2199+345:25 tight glyph )
2242−345:15 tight glyph $-(
2243−345:18 tight aura @p
2244−345:21 tvar M
2245−345:22 tight glyph )
2200+345:26 tight glyph )
2246−345:23 tight glyph ]
2201+347:1 DEDENT
2247347:1 DEDENT
2202347:1 DEDENT
2248347:1 NEWLINE
2203347:1 NEWLINE
2249347:1 glyph ++
2204347:1 glyph ++
2250−347:4 name gth
2205+347:4 name cury
2251−347:8 glyph |=
2206+347:9 glyph |=
2252−347:11 name args
2207+347:12 name args
2253−347:15 tight glyph =
2208+347:16 tight glyph =
2254−347:16 tight glyph [
2209+347:17 tight glyph [
2255−347:17 tight tvar A
2210+347:18 tight glyph $-(
2256−347:19 tvar A
2211+347:21 tight glyph [
2257−347:20 tight glyph ]
2212+347:22 tight tvar A
2258−347:22 glyph (
2213+347:24 tvar B
2259−347:23 tight wing gth-atom.internal
2214+347:25 tight glyph ]
2260−347:41 name args
2215+347:27 tvar C
2261−347:45 tight glyph )
2216+347:28 tight glyph )
2262−348:1 NEWLINE
2217+347:30 tvar A
2263−348:1 glyph ++
2218+347:31 tight glyph ]
2264−348:4 name add
2219+348:3 INDENT
2265−348:8 glyph |=
2220+348:3 glyph ?-
2266−348:11 name args
2221+348:6 name args
2267−348:15 tight glyph =
2222+349:5 INDENT
2268−348:16 tight glyph [
2223+349:5 glyph [
2269−348:17 tight tvar A
2224+349:6 tight name f
2270−348:19 tvar A
2225+349:8 name a
2271−348:20 tight glyph ]
2226+349:9 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 |=
2227+349:11 glyph |=
2280−349:11 name atom
2228+349:14 name b
2281349:15 tight glyph =
2229349:15 tight glyph =
2282−349:16 tight tvar A
2230+349:16 tight tvar B
2283349:18 glyph (
2231349:18 glyph (
2284−349:19 tight wing dec-atom.internal
2232+349:19 tight name f
2233+349:21 name a
2285−349:37 name atom
2234+349:23 name b
2286−349:41 tight glyph )
2235+349:24 tight glyph )
2236+351:1 DEDENT
2237+351:1 DEDENT
2287351:1 NEWLINE
2238351:1 NEWLINE
2288−351:1 glyph +$
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 +$
2289−351:4 name ask
2375+366:4 name ask
2290−351:8 glyph |$
2376+366:8 glyph |$
2291−351:11 glyph [
2377+366:11 glyph [
2292−351:12 tight tvar M
2378+366:12 tight tvar M
2293−351:13 tight glyph ]
2379+366:13 tight glyph ]
2294−351:15 glyph (
2380+366:15 glyph (
2295−351:16 tight wing ask.internal
2381+366:16 tight wing ask.internal
2296−351:29 tvar M
2382+366:29 tvar M
2297−351:30 tight glyph )
2383+366:30 tight glyph )
2298−352:1 NEWLINE
2384+367:1 NEWLINE
2299−352:1 glyph ++
2385+367:1 glyph ++
2300−352:4 name pure
2386+367:4 name pure
2301−352:9 glyph |=
2387+367:9 glyph |=
2302−352:12 name x
2388+367:12 name x
2303−352:13 tight glyph =
2389+367:13 tight glyph =
2304−352:14 tight tvar M
2390+367:14 tight tvar M
2305−352:16 glyph ^-
2391+367:16 glyph ^-
2306−352:19 glyph (
2392+367:19 glyph (
2307−352:20 tight name ask
2393+367:20 tight name ask
2308−352:24 tvar M
2394+367:24 tvar M
2309−352:25 tight glyph )
2395+367:25 tight glyph )
2310−352:27 glyph [
2396+367:27 glyph [
2311−352:28 tight lit %pure
2397+367:28 tight lit %pure
2312−352:34 name x
2398+367:34 name x
2313−352:35 tight glyph ]
2399+367:35 tight glyph ]
2314−352:36 NEWLINE
2400+367:36 NEWLINE
tests/golden/prelude-unit-list-transforms/tree.txt+994−957
@@ -34,973 +34,1010 @@
34 (wing 18:6 b)
34 (wing 18:6 b)
35 (arm 19:5 (lit 19:5 %.y) (lit 19:9 %.n))
35 (arm 19:5 (lit 19:5 %.y) (lit 19:9 %.n))
36 (arm 20:5 (lit 20:5 %.n) (lit 20:9 %.y))))))
36 (arm 20:5 (lit 20:5 %.n) (lit 20:9 %.y))))))
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)))))
37− (mold 22:1 list
43+ (mold 24:1 list
38− (generic 22:9 A
44+ (generic 24:9 A
39− (union 23:3
45+ (union 25:3
40− (const 23:3 ~)
46+ (const 25:3 ~)
41− (cell 24:3
47+ (cell 26:3
42− (face 24:4 i (tvar 24:6 A))
48+ (face 26:4 i (tvar 26:6 A))
43− (face 24:8 t
49+ (face 26:8 t
44− (apply 24:10 list (tvar 24:16 A)))))))
50+ (apply 26:10 list (tvar 26:16 A)))))))
45− (mold 26:1 unit
51+ (mold 28:1 unit
46− (generic 26:9 A
52+ (generic 28:9 A
47− (union 27:3
53+ (union 29:3
48− (const 27:3 ~)
54+ (const 29:3 ~)
49− (cell 28:3
55+ (cell 30:3
50− (const 28:4 ~)
56+ (const 30:4 ~)
51− (face 28:6 u (tvar 28:8 A))))))
57+ (face 30:6 u (tvar 30:8 A))))))
52− (value 30:1 fall
58+ (value 32:1 fall
53− (gate 30:9
59+ (gate 32:9
54− (face 30:12 args
60+ (face 32:12 args
55− (cell 30:17
61+ (cell 32:17
56− (apply 30:18 unit (tvar 30:24 A))
62+ (apply 32:18 unit (tvar 32:24 A))
57− (tvar 30:27 A)))
63+ (tvar 32:27 A)))
58− (body 31:3
64+ (body 33:3
59− (branch 31:3
65+ (branch 33:3
60− (wing 31:6 args)
66+ (wing 33:6 args)
61− (arm 32:5
67+ (arm 34:5
62− (cell 32:5 (bind 32:6 maybe) (bind 32:12 fallback))
68+ (cell 34:5 (bind 34:6 maybe) (bind 34:12 fallback))
63− (body 33:7
69+ (body 35:7
64− (branch 33:7
70+ (branch 35:7
65− (wing 33:10 maybe)
71+ (wing 35:10 maybe)
66− (arm 34:9 (lit 34:9 ~) (wing 34:11 fallback))
72+ (arm 36:9 (lit 36:9 ~) (wing 36:11 fallback))
67− (arm 35:9
73+ (arm 37:9
68− (cell 35:9 (lit 35:10 ~) (bind 35:12 value))
74+ (cell 37:9 (lit 37:10 ~) (bind 37:12 value))
69− (wing 35:19 value)))))))))
75+ (wing 37:19 value)))))))))
70− (value 37:1 need
76+ (value 39:1 need
71− (gate 37:9
77+ (gate 39:9
72− (face 37:12 maybe
78+ (face 39:12 maybe
73− (apply 37:18 unit (tvar 37:24 A)))
79+ (apply 39:18 unit (tvar 39:24 A)))
74− (body 38:3
80+ (body 40:3
75− (branch 38:3
81+ (branch 40:3
76− (wing 38:6 maybe)
82+ (wing 40:6 maybe)
77− (arm 39:5 (lit 39:5 ~) (crash 39:7))
83+ (arm 41:5 (lit 41:5 ~) (crash 41:7))
78− (arm 40:5
84+ (arm 42:5
79− (cell 40:5 (lit 40:6 ~) (bind 40:8 value))
85+ (cell 42:5 (lit 42:6 ~) (bind 42:8 value))
80− (wing 40:15 value))))))
86+ (wing 42:15 value))))))
81− (value 42:1 weld
87+ (value 44:1 weld
82− (gate 42:9
88+ (gate 44:9
83− (face 42:12 args
89+ (face 44:12 args
84− (cell 42:17
90+ (cell 44:17
85− (apply 42:18 list (tvar 42:24 A))
91+ (apply 44:18 list (tvar 44:24 A))
86− (apply 42:27 list (tvar 42:33 A))))
92+ (apply 44:27 list (tvar 44:33 A))))
87− (body 43:3
93+ (body 45:3
88− (branch 43:3
94+ (branch 45:3
89− (wing 43:6 args)
95+ (wing 45:6 args)
90− (arm 44:5
96+ (arm 46:5
91− (cell 44:5 (bind 44:6 xs) (bind 44:9 ys))
97+ (cell 46:5 (bind 46:6 xs) (bind 46:9 ys))
92− (body 45:7
98+ (body 47:7
93− (cast 45:7
99+ (cast 47:7
94− (apply 45:10 list (tvar 45:16 A))
100+ (apply 47:10 list (tvar 47:16 A))
95− (body 46:9
101+ (body 48:9
96− (branch 46:9
102+ (branch 48:9
97− (wing 46:12 xs)
103+ (wing 48:12 xs)
98− (arm 47:11 (lit 47:11 ~) (wing 47:13 ys))
104+ (arm 49:11 (lit 49:11 ~) (wing 49:13 ys))
99− (arm 48:11
105+ (arm 50:11
100− (cell 48:11 (bind 48:12 item) (bind 48:17 rest))
106+ (cell 50:11 (bind 50:12 item) (bind 50:17 rest))
101− (tuple 48:23
107+ (tuple 50:23
102− (wing 48:24 item)
108+ (wing 50:24 item)
103− (group 48:29
109+ (group 50:29
104− (call 48:30 (wing 48:30 weld) (wing 48:35 rest) (wing 48:40 ys))))))))))))))
110+ (call 50:30 (wing 50:30 weld) (wing 50:35 rest) (wing 50:40 ys))))))))))))))
105− (value 50:1 turn
111+ (value 52:1 turn
106− (gate 50:9
112+ (gate 52:9
107− (face 50:12 args
113+ (face 52:12 args
108− (cell 50:17
114+ (cell 52:17
109− (apply 50:18 list (tvar 50:24 A))
115+ (apply 52:18 list (tvar 52:24 A))
110− (fn 50:27 (tvar 50:30 A) (tvar 50:32 B))))
116+ (fn 52:27 (tvar 52:30 A) (tvar 52:32 B))))
111− (body 51:3
117+ (body 53:3
112− (branch 51:3
118+ (branch 53:3
113− (wing 51:6 args)
119+ (wing 53:6 args)
114− (arm 52:5
120+ (arm 54:5
115− (cell 52:5 (bind 52:6 xs) (bind 52:9 f))
121+ (cell 54:5 (bind 54:6 xs) (bind 54:9 f))
116− (body 53:7
122+ (body 55:7
117− (cast 53:7
123+ (cast 55:7
118− (apply 53:10 list (tvar 53:16 B))
124+ (apply 55:10 list (tvar 55:16 B))
119− (body 54:9
125+ (body 56:9
120− (branch 54:9
126+ (branch 56:9
121− (wing 54:12 xs)
127+ (wing 56:12 xs)
122− (arm 55:11 (lit 55:11 ~) (lit 55:13 ~))
128+ (arm 57:11 (lit 57:11 ~) (lit 57:13 ~))
123− (arm 56:11
129+ (arm 58:11
124− (cell 56:11 (bind 56:12 item) (bind 56:17 rest))
130+ (cell 58:11 (bind 58:12 item) (bind 58:17 rest))
125− (tuple 56:23
131+ (tuple 58:23
126− (group 56:24
132+ (group 58:24
127− (call 56:25 (wing 56:25 f) (wing 56:27 item)))
133+ (call 58:25 (wing 58:25 f) (wing 58:27 item)))
128− (group 56:33
134+ (group 58:33
129− (call 56:34 (wing 56:34 turn) (wing 56:39 rest) (wing 56:44 f))))))))))))))
135+ (call 58:34 (wing 58:34 turn) (wing 58:39 rest) (wing 58:44 f))))))))))))))
130− (mold 58:1 dime
136+ (mold 60: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
135 (cell 60:9
137 (cell 60:9
136− (face 60:10 p (aura 60:12 @ud))
138+ (face 60:10 p (aura 60:12 @ta))
137− (face 60:16 q (aura 60:18 @ud))))
139+ (face 60:16 q (aura 60:18 @))))
138− (mold 62:1 pint
140+ (mold 62:1 hair
139 (cell 62:9
141 (cell 62:9
140− (face 62:10 p
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
141− (cell 62:12
147+ (cell 64:12
142− (face 62:13 p (aura 62:15 @))
148+ (face 64:13 p (aura 64:15 @))
143− (face 62:17 q (aura 62:19 @))))
149+ (face 64:17 q (aura 64:19 @))))
144− (face 62:22 q
150+ (face 64:22 q
145− (cell 62:24
151+ (cell 64:24
146− (face 62:25 p (aura 62:27 @))
152+ (face 64:25 p (aura 64:27 @))
147− (face 62:29 q (aura 62:31 @))))))
153+ (face 64:29 q (aura 64:31 @))))))
148− (mold 64:1 coin
154+ (mold 66:1 coin
149− (union 65:3
155+ (union 67: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)))
156 (cell 67:3
156 (cell 67:3
157− (const 67:4 %many)
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)
158− (face 67:10 p
164+ (face 69:10 p
159− (apply 67:12 list (ref 67:18 coin))))))
165+ (apply 69:12 list (ref 69:18 coin))))))
160− (mold 69:1 pair
166+ (mold 71:1 pair
161− (generic 69:9 A B
167+ (generic 71:9 A B
162− (cell 69:18
168+ (cell 71:18
163− (face 69:19 p (tvar 69:21 A))
169+ (face 71:19 p (tvar 71:21 A))
164− (face 69:23 q (tvar 69:25 B)))))
170+ (face 71:23 q (tvar 71:25 B)))))
165− (mold 71:1 trel
171+ (mold 73:1 trel
166− (generic 71:9 A B C
172+ (generic 73:9 A B C
167− (cell 71:20
173+ (cell 73:20
168− (face 71:21 p (tvar 71:23 A))
174+ (face 73:21 p (tvar 73:23 A))
169− (face 71:25 q (tvar 71:27 B))
175+ (face 73:25 q (tvar 73:27 B))
170− (face 71:29 r (tvar 71:31 C)))))
176+ (face 73:29 r (tvar 73:31 C)))))
171− (mold 73:1 qual
177+ (mold 75:1 qual
172− (generic 73:9 A B C D
178+ (generic 75:9 A B C D
173− (cell 73:22
179+ (cell 75:22
174− (face 73:23 p (tvar 73:25 A))
180+ (face 75:23 p (tvar 75:25 A))
175− (face 73:27 q (tvar 73:29 B))
181+ (face 75:27 q (tvar 75:29 B))
176− (face 73:31 r (tvar 73:33 C))
182+ (face 75:31 r (tvar 75:33 C))
177− (face 73:35 s (tvar 73:37 D)))))
183+ (face 75:35 s (tvar 75:37 D)))))
178− (mold 75:1 cord (aura 75:9 @t))
184+ (mold 77:1 cord (aura 77:9 @t))
179− (mold 77:1 knot (aura 77:9 @ta))
185+ (mold 79:1 knot (aura 79:9 @ta))
180− (mold 79:1 tape
186+ (mold 81:1 tape
181− (apply 79:9 list (aura 79:15 @tD)))
187+ (apply 81:9 list (aura 81:15 @tD)))
182− (mold 81:1 path
188+ (mold 83:1 path
183− (apply 81:9 list (ref 81:15 knot)))
189+ (apply 83:9 list (ref 83:15 knot)))
184− (mold 83:1 tank
190+ (mold 85:1 tank
185− (union 84:3
191+ (union 86:3
186− (ref 84:3 cord)
192+ (ref 86: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))))
196 (cell 87:3
193 (cell 87:3
197− (const 87:4 %rose)
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)
198− (face 87:10 p
204+ (face 89:10 p
199− (apply 87:12 trel (ref 87:18 tape) (ref 87:23 tape) (ref 87:28 tape)))
205+ (apply 89:12 trel (ref 89:18 tape) (ref 89:23 tape) (ref 89:28 tape)))
200− (face 87:34 q
206+ (face 89:34 q
201− (apply 87:36 list (ref 87:42 tank))))))
207+ (apply 89:36 list (ref 89:42 tank))))))
202− (mold 89:1 nail
208+ (mold 91: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
207 (cell 91:9
209 (cell 91:9
208 (face 91:10 p (ref 91:12 hair))
210 (face 91:10 p (ref 91:12 hair))
209− (face 91:17 q
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
210− (apply 91:19 unit
216+ (apply 93:19 unit
211− (cell 91:25
217+ (cell 93:25
212− (face 91:26 p (noun 91:28))
218+ (face 93:26 p (noun 93:28))
213− (face 91:30 q (ref 91:32 nail)))))))
219+ (face 93:30 q (ref 93:32 nail)))))))
214− (mold 93:1 rule
220+ (mold 95:1 rule
215− (fn 93:9 (ref 93:12 nail) (ref 93:17 edge)))
221+ (fn 95:9 (ref 95:12 nail) (ref 95:17 edge)))
216− (mold 95:1 spot
222+ (mold 97:1 spot
217− (cell 95:9
223+ (cell 97:9
218− (face 95:10 p (ref 95:12 path))
224+ (face 97:10 p (ref 97:12 path))
219− (face 95:17 q (ref 95:19 pint))))
225+ (face 97:17 q (ref 97:19 pint))))
220− (mold 97:1 toon
226+ (mold 99:1 toon
221− (union 98:3
227+ (union 100: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)))
228 (cell 100:3
228 (cell 100:3
229− (const 100:4 %2)
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)
230− (face 100:7 p
236+ (face 102:7 p
231− (apply 100:9 list (ref 100:15 tank))))))
237+ (apply 102:9 list (ref 102:15 tank))))))
232− (mold 102:1 like
238+ (mold 104:1 like
233− (generic 102:9 A
239+ (generic 104:9 A
234− (cell 102:16
240+ (cell 104:16
235− (face 102:17 p (ref 102:19 hair))
241+ (face 104:17 p (ref 104:19 hair))
236− (face 102:24 q
242+ (face 104:24 q
237− (apply 102:26 unit
243+ (apply 104:26 unit
238− (cell 102:32
244+ (cell 104:32
239− (face 102:33 p (tvar 102:35 A))
245+ (face 104:33 p (tvar 104:35 A))
240− (face 102:37 q (ref 102:39 nail))))))))
246+ (face 104:37 q (ref 104:39 nail))))))))
241− (value 104:1 like
247+ (value 106:1 like
242− (gate 104:9
248+ (gate 106:9
243− (cell 104:12
249+ (cell 106:12
244− (face 104:13 f
250+ (face 106:13 f
245− (fn 104:15 (tvar 104:18 A) (tvar 104:20 B)))
251+ (fn 106:15 (tvar 106:18 A) (tvar 106:20 B)))
246− (face 104:23 result
252+ (face 106:23 result
247− (apply 104:30 like (tvar 104:36 A))))
253+ (apply 106:30 like (tvar 106:36 A))))
248− (body 105:3
254+ (body 107:3
249− (value 105:3 mapped
255+ (value 107:3 mapped
250− (body 106:5
256+ (body 108:5
251− (cast 106:5
257+ (cast 108:5
252− (apply 106:8 unit
258+ (apply 108:8 unit
253− (cell 106:14
259+ (cell 108:14
254− (face 106:15 p (tvar 106:17 B))
260+ (face 108:15 p (tvar 108:17 B))
255− (face 106:19 q (ref 106:21 nail))))
261+ (face 108:19 q (ref 108:21 nail))))
256− (body 107:7
262+ (body 109:7
257− (branch 107:7
263+ (branch 109:7
258− (wing 107:10 q.result)
264+ (wing 109:10 q.result)
259− (arm 108:9 (lit 108:9 ~) (lit 108:11 ~))
265+ (arm 110:9 (lit 110:9 ~) (lit 110:11 ~))
260− (arm 109:9
266+ (arm 111:9
261− (cell 109:9 (lit 109:10 ~) (bind 109:12 value))
267+ (cell 111:9 (lit 111:10 ~) (bind 111:12 value))
262− (unit 109:19
268+ (unit 111:19
263− (tuple 109:20
269+ (tuple 111:20
264− (face 109:21 p
270+ (face 111:21 p
265− (group 109:23
271+ (group 111:23
266− (call 109:24 (wing 109:24 f) (wing 109:26 p.value))))
272+ (call 111:24 (wing 111:24 f) (wing 111:26 p.value))))
267− (face 109:35 q (wing 109:37 q.value))))))))))
273+ (face 111:35 q (wing 111:37 q.value))))))))))
268− (cast 110:3
274+ (cast 112:3
269− (apply 110:6 like (tvar 110:12 B))
275+ (apply 112:6 like (tvar 112:12 B))
270− (tuple 110:15
276+ (tuple 112:15
271− (face 110:16 p (wing 110:18 p.result))
277+ (face 112:16 p (wing 112:18 p.result))
272− (face 110:27 q (wing 110:29 mapped)))))))
278+ (face 112:27 q (wing 112:29 mapped)))))))
273− (value 112:1 wonk
279+ (value 114:1 wonk
274− (gate 112:9
280+ (gate 114:9
275− (face 112:12 veq
281+ (face 114:12 veq
276− (apply 112:16 like (tvar 112:22 A)))
282+ (apply 114:16 like (tvar 114:22 A)))
277− (body 113:3
283+ (body 115:3
278− (branch 113:3
284+ (branch 115:3
279− (wing 113:6 q.veq)
285+ (wing 115:6 q.veq)
280− (arm 114:5 (lit 114:5 ~) (crash 114:7))
286+ (arm 116:5 (lit 116:5 ~) (crash 116:7))
281− (arm 115:5
287+ (arm 117:5
282− (cell 115:5 (lit 115:6 ~) (bind 115:8 product))
288+ (cell 117:5 (lit 117:6 ~) (bind 117:8 product))
283− (wing 115:17 p.product))))))
289+ (wing 117:17 p.product))))))
284− (mold 117:1 lone
290+ (mold 119: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
289 (generic 119:9 A
291 (generic 119:9 A
290 (cell 119:16
292 (cell 119:16
291− (face 119:17 i (tvar 119:19 A))
293+ (face 119:17 p (tvar 119:19 A)))))
292− (face 119:21 t
293− (apply 119:23 list (tvar 119:29 A))))))
294− (mold 121:1 pole
294+ (mold 121:1 lest
295 (generic 121:9 A
295 (generic 121:9 A
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
296− (union 122:3
302+ (union 124:3
297− (const 122:3 ~)
303+ (const 124:3 ~)
298− (cell 123:3
304+ (cell 125:3
299− (tvar 123:4 A)
305+ (tvar 125:4 A)
300− (apply 123:6 pole (tvar 123:12 A))))))
306+ (apply 125:6 pole (tvar 125:12 A))))))
301− (mold 125:1 quip
307+ (mold 127:1 quip
302− (generic 125:9 A B
308+ (generic 127:9 A B
303− (cell 125:18
309+ (cell 127:18
304− (apply 125:19 list (tvar 125:25 A))
310+ (apply 127:19 list (tvar 127:25 A))
305− (tvar 125:28 B))))
311+ (tvar 127:28 B))))
306− (mold 127:1 tree
312+ (mold 129:1 tree
307− (generic 127:9 A
313+ (generic 129:9 A
308− (union 128:3
314+ (union 130:3
309− (const 128:3 ~)
315+ (const 130:3 ~)
310− (cell 129:3
316+ (cell 131:3
311− (face 129:4 n (tvar 129:6 A))
317+ (face 131:4 n (tvar 131:6 A))
312− (face 129:8 l
318+ (face 131:8 l
313− (apply 129:10 tree (tvar 129:16 A)))
319+ (apply 131:10 tree (tvar 131:16 A)))
314− (face 129:19 r
320+ (face 131:19 r
315− (apply 129:21 tree (tvar 129:27 A)))))))
321+ (apply 131:21 tree (tvar 131:27 A)))))))
316− (mold 131:1 each
322+ (mold 133:1 each
317− (generic 131:9 A B
323+ (generic 133:9 A B
318− (union 132:3
324+ (union 134:3
319− (cell 132:3
325+ (cell 134:3
320− (const 132:4 %|)
326+ (const 134:4 %|)
321− (face 132:7 p (tvar 132:9 B)))
327+ (face 134:7 p (tvar 134:9 B)))
322− (cell 133:3
328+ (cell 135:3
323− (const 133:4 %&)
329+ (const 135:4 %&)
324− (face 133:7 p (tvar 133:9 A))))))
330+ (face 135:7 p (tvar 135:9 A))))))
325− (mold 135:1 bloq (aura 135:9 @))
331+ (mold 137:1 bloq (aura 137:9 @))
326− (value 137:1 some
332+ (value 139: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
331 (gate 139:9
333 (gate 139:9
332 (face 139:12 item (tvar 139:17 A))
334 (face 139:12 item (tvar 139:17 A))
333− (body 140:3
335+ (unit 139:19 (wing 139:20 item))))
334− (cast 140:3
336+ (value 141:1 lure
335− (apply 140:6 list (tvar 140:12 A))
337+ (gate 141:9
336− (tuple 140:15 (wing 140:16 item) (lit 140:21 ~))))))
338+ (face 141:12 item (tvar 141:17 A))
337− (value 142:1 snoc
339+ (body 142:3
338− (gate 142:9
340+ (cast 142:3
339− (face 142:12 args
341+ (apply 142:6 list (tvar 142:12 A))
340− (cell 142:17
342+ (tuple 142:15 (wing 142:16 item) (lit 142:21 ~))))))
341− (apply 142:18 list (tvar 142:24 A))
343+ (value 144:1 snoc
342− (tvar 142:27 A)))
344+ (gate 144:9
343− (body 143:3
345+ (face 144:12 args
344− (branch 143:3
346+ (cell 144:17
345− (wing 143:6 args)
347+ (apply 144:18 list (tvar 144:24 A))
346− (arm 144:5
348+ (tvar 144:27 A)))
347− (cell 144:5 (bind 144:6 xs) (bind 144:9 item))
349+ (body 145:3
348− (group 144:15
350+ (branch 145:3
349− (call 144:16
351+ (wing 145:6 args)
350− (wing 144:16 weld)
352+ (arm 146:5
351− (wing 144:21 xs)
353+ (cell 146:5 (bind 146:6 xs) (bind 146:9 item))
352− (tuple 144:24 (wing 144:25 item) (lit 144:30 ~)))))))))
354+ (group 146:15
353− (value 146:1 flop
355+ (call 146:16
354− (gate 146:9
356+ (wing 146:16 weld)
355− (face 146:12 xs
357+ (wing 146:21 xs)
356− (apply 146:15 list (tvar 146:21 A)))
358+ (tuple 146:24 (wing 146:25 item) (lit 146:30 ~)))))))))
357− (body 147:3
359+ (value 148:1 flop
358− (value 147:3 reverse-into
360+ (gate 148:9
359− (gate 147:19
361+ (face 148:12 xs
360− (face 147:22 args
362+ (apply 148:15 list (tvar 148:21 A)))
361− (cell 147:27
363+ (body 149:3
362− (apply 147:28 list (tvar 147:34 A))
364+ (value 149:3 reverse-into
363− (apply 147:37 list (tvar 147:43 A))))
365+ (gate 149:19
364− (body 148:5
366+ (face 149:22 args
365− (branch 148:5
367+ (cell 149:27
366− (wing 148:8 args)
368+ (apply 149:28 list (tvar 149:34 A))
367− (arm 149:7
369+ (apply 149:37 list (tvar 149:43 A))))
368− (cell 149:7 (bind 149:8 rest) (bind 149:13 acc))
370+ (body 150:5
369− (body 150:9
371+ (branch 150:5
370− (branch 150:9
372+ (wing 150:8 args)
371− (wing 150:12 rest)
373+ (arm 151:7
372− (arm 151:11 (lit 151:11 ~) (wing 151:13 acc))
374+ (cell 151:7 (bind 151:8 rest) (bind 151:13 acc))
373− (arm 152:11
375+ (body 152:9
374− (cell 152:11 (bind 152:12 item) (bind 152:17 more))
376+ (branch 152:9
375− (group 152:23
377+ (wing 152:12 rest)
376− (call 152:24
378+ (arm 153:11 (lit 153:11 ~) (wing 153:13 acc))
377− (wing 152:24 reverse-into)
379+ (arm 154:11
378− (wing 152:37 more)
380+ (cell 154:11 (bind 154:12 item) (bind 154:17 more))
379− (tuple 152:42 (wing 152:43 item) (wing 152:48 acc))))))))))))
381+ (group 154:23
380− (group 153:3
382+ (call 154:24
381− (call 153:4 (wing 153:4 reverse-into) (wing 153:17 xs) (lit 153:20 ~))))))
383+ (wing 154:24 reverse-into)
382− (value 155:1 drop
384+ (wing 154:37 more)
383− (gate 155:9
385+ (tuple 154:42 (wing 154:43 item) (wing 154:48 acc))))))))))))
384− (face 155:12 maybe
386+ (group 155:3
385− (apply 155:18 unit (tvar 155:24 A)))
387+ (call 155:4 (wing 155:4 reverse-into) (wing 155:17 xs) (lit 155:20 ~))))))
386− (body 156:3
388+ (value 157:1 drop
387− (cast 156:3
389+ (gate 157:9
388− (apply 156:6 list (tvar 156:12 A))
390+ (face 157:12 maybe
389− (body 157:5
391+ (apply 157:18 unit (tvar 157:24 A)))
390− (branch 157:5
392+ (body 158:3
391− (wing 157:8 maybe)
393+ (cast 158:3
392− (arm 158:7 (lit 158:7 ~) (lit 158:9 ~))
394+ (apply 158:6 list (tvar 158:12 A))
393− (arm 159:7
395+ (body 159:5
394− (cell 159:7 (lit 159:8 ~) (bind 159:10 value))
396+ (branch 159:5
395− (tuple 159:17 (wing 159:18 value) (lit 159:24 ~)))))))))
397+ (wing 159:8 maybe)
396− (value 161:1 bond
398+ (arm 160:7 (lit 160:7 ~) (lit 160:9 ~))
397− (gate 161:9
399+ (arm 161:7
398− (face 161:12 fallback
400+ (cell 161:7 (lit 161:8 ~) (bind 161:10 value))
399− (fn 161:21 (const 161:24 ~) (tvar 161:26 A)))
401+ (tuple 161:17 (wing 161:18 value) (lit 161:24 ~)))))))))
400− (body 162:3
402+ (value 163:1 bond
401− (gate 162:3
403+ (gate 163:9
402− (face 162:6 maybe
404+ (face 163:12 fallback
403− (apply 162:12 unit (tvar 162:18 A)))
405+ (fn 163:21 (const 163:24 ~) (tvar 163:26 A)))
404− (body 163:5
406+ (body 164:3
405− (branch 163:5
407+ (gate 164:3
406− (wing 163:8 maybe)
408+ (face 164:6 maybe
407− (arm 164:7
409+ (apply 164:12 unit (tvar 164:18 A)))
408− (lit 164:7 ~)
410+ (body 165:5
409− (group 164:9
411+ (branch 165:5
410− (call 164:10 (wing 164:10 fallback) (lit 164:19 ~))))
412+ (wing 165:8 maybe)
411− (arm 165:7
413+ (arm 166:7
412− (cell 165:7 (lit 165:8 ~) (bind 165:10 value))
414+ (lit 166:7 ~)
413− (wing 165:17 value))))))))
415+ (group 166:9
414− (value 167:1 bind
416+ (call 166:10 (wing 166:10 fallback) (lit 166:19 ~))))
415− (gate 167:9
417+ (arm 167:7
416− (face 167:12 args
418+ (cell 167:7 (lit 167:8 ~) (bind 167:10 value))
417− (cell 167:17
419+ (wing 167:17 value))))))))
418− (apply 167:18 unit (tvar 167:24 A))
420+ (value 169:1 bind
419− (fn 167:27 (tvar 167:30 A) (tvar 167:32 B))))
421+ (gate 169:9
420− (body 168:3
422+ (face 169:12 args
421− (branch 168:3
423+ (cell 169:17
422− (wing 168:6 args)
424+ (apply 169:18 unit (tvar 169:24 A))
423− (arm 169:5
425+ (fn 169:27 (tvar 169:30 A) (tvar 169:32 B))))
424− (cell 169:5 (bind 169:6 maybe) (bind 169:12 f))
426+ (body 170:3
425− (cast 169:15
427+ (branch 170:3
426− (apply 169:18 unit (tvar 169:24 B))
428+ (wing 170:6 args)
427− (body 170:7
429+ (arm 171:5
428− (branch 170:7
430+ (cell 171:5 (bind 171:6 maybe) (bind 171:12 f))
429− (wing 170:10 maybe)
431+ (cast 171:15
430− (arm 171:9 (lit 171:9 ~) (lit 171:11 ~))
432+ (apply 171:18 unit (tvar 171:24 B))
431− (arm 172:9
433+ (body 172:7
432− (cell 172:9 (lit 172:10 ~) (bind 172:12 value))
434+ (branch 172:7
433− (unit 172:19
435+ (wing 172:10 maybe)
434− (group 172:20
436+ (arm 173:9 (lit 173:9 ~) (lit 173:11 ~))
435− (call 172:21 (wing 172:21 f) (wing 172:23 value)))))))))))))
437+ (arm 174:9
436− (value 174:1 biff
438+ (cell 174:9 (lit 174:10 ~) (bind 174:12 value))
437− (gate 174:9
439+ (unit 174:19
438− (face 174:12 args
440+ (group 174:20
439− (cell 174:17
441+ (call 174:21 (wing 174:21 f) (wing 174:23 value)))))))))))))
440− (apply 174:18 unit (tvar 174:24 A))
442+ (value 176:1 biff
441− (fn 174:27
443+ (gate 176:9
442− (tvar 174:30 A)
444+ (face 176:12 args
443− (apply 174:32 unit (tvar 174:38 B)))))
445+ (cell 176:17
444− (body 175:3
446+ (apply 176:18 unit (tvar 176:24 A))
445− (branch 175:3
447+ (fn 176:27
446− (wing 175:6 args)
448+ (tvar 176:30 A)
447− (arm 176:5
449+ (apply 176:32 unit (tvar 176:38 B)))))
448− (cell 176:5 (bind 176:6 maybe) (bind 176:12 f))
450+ (body 177:3
449− (cast 176:15
451+ (branch 177:3
450− (apply 176:18 unit (tvar 176:24 B))
452+ (wing 177:6 args)
451− (body 177:7
453+ (arm 178:5
452− (branch 177:7
454+ (cell 178:5 (bind 178:6 maybe) (bind 178:12 f))
453− (wing 177:10 maybe)
455+ (cast 178:15
454− (arm 178:9 (lit 178:9 ~) (lit 178:11 ~))
456+ (apply 178:18 unit (tvar 178:24 B))
455− (arm 179:9
457+ (body 179:7
456− (cell 179:9 (lit 179:10 ~) (bind 179:12 value))
458+ (branch 179:7
457− (group 179:19
459+ (wing 179:10 maybe)
458− (call 179:20 (wing 179:20 f) (wing 179:22 value))))))))))))
460+ (arm 180:9 (lit 180:9 ~) (lit 180:11 ~))
459− (value 181:1 both
461+ (arm 181:9
460− (gate 181:9
462+ (cell 181:9 (lit 181:10 ~) (bind 181:12 value))
461− (face 181:12 args
463+ (group 181:19
462− (cell 181:17
464+ (call 181:20 (wing 181:20 f) (wing 181:22 value))))))))))))
463− (apply 181:18 unit (tvar 181:24 A))
465+ (value 183:1 both
464− (apply 181:27 unit (tvar 181:33 B))))
466+ (gate 183:9
465− (body 182:3
467+ (face 183:12 args
466− (branch 182:3
468+ (cell 183:17
467− (wing 182:6 args)
469+ (apply 183:18 unit (tvar 183:24 A))
468− (arm 183:5
470+ (apply 183:27 unit (tvar 183:33 B))))
469− (cell 183:5 (bind 183:6 first) (bind 183:12 second))
471+ (body 184:3
470− (cast 183:20
472+ (branch 184:3
471− (apply 183:23 unit
473+ (wing 184:6 args)
472− (cell 183:29 (tvar 183:30 A) (tvar 183:32 B)))
474+ (arm 185:5
473− (body 184:7
475+ (cell 185:5 (bind 185:6 first) (bind 185:12 second))
474− (branch 184:7
476+ (cast 185:20
475− (wing 184:10 first)
477+ (apply 185:23 unit
476− (arm 185:9 (lit 185:9 ~) (lit 185:11 ~))
478+ (cell 185:29 (tvar 185:30 A) (tvar 185:32 B)))
477− (arm 186:9
479+ (body 186:7
478− (cell 186:9 (lit 186:10 ~) (bind 186:12 a))
480+ (branch 186:7
479− (body 187:11
481+ (wing 186:10 first)
480− (branch 187:11
482+ (arm 187:9 (lit 187:9 ~) (lit 187:11 ~))
481− (wing 187:14 second)
483+ (arm 188:9
482− (arm 188:13 (lit 188:13 ~) (lit 188:15 ~))
484+ (cell 188:9 (lit 188:10 ~) (bind 188:12 a))
483− (arm 189:13
485+ (body 189:11
484− (cell 189:13 (lit 189:14 ~) (bind 189:16 b))
486+ (branch 189:11
485− (unit 189:19
487+ (wing 189:14 second)
486− (tuple 189:20 (wing 189:21 a) (wing 189:23 b)))))))))))))))
488+ (arm 190:13 (lit 190:13 ~) (lit 190:15 ~))
487− (value 191:1 clap
489+ (arm 191:13
488− (gate 191:9
490+ (cell 191:13 (lit 191:14 ~) (bind 191:16 b))
489− (face 191:12 args
491+ (unit 191:19
490− (cell 191:17
492+ (tuple 191:20 (wing 191:21 a) (wing 191:23 b)))))))))))))))
491− (apply 191:18 unit (tvar 191:24 A))
493+ (value 193:1 clap
492− (apply 191:27 unit (tvar 191:33 A))
494+ (gate 193:9
493− (fn 191:36
495+ (face 193:12 args
494− (cell 191:39 (tvar 191:40 A) (tvar 191:42 A))
496+ (cell 193:17
495− (tvar 191:45 A))))
497+ (apply 193:18 unit (tvar 193:24 A))
496− (body 192:3
498+ (apply 193:27 unit (tvar 193:33 A))
497− (branch 192:3
499+ (fn 193:36
498− (wing 192:6 args)
500+ (cell 193:39 (tvar 193:40 A) (tvar 193:42 A))
499− (arm 193:5
501+ (tvar 193:45 A))))
500− (cell 193:5 (bind 193:6 first) (bind 193:12 second) (bind 193:19 combine))
502+ (body 194:3
501− (cast 193:28
503+ (branch 194:3
502− (apply 193:31 unit (tvar 193:37 A))
504+ (wing 194:6 args)
503− (body 194:7
505+ (arm 195:5
504− (branch 194:7
506+ (cell 195:5 (bind 195:6 first) (bind 195:12 second) (bind 195:19 combine))
505− (wing 194:10 first)
507+ (cast 195:28
506− (arm 195:9 (lit 195:9 ~) (wing 195:11 second))
508+ (apply 195:31 unit (tvar 195:37 A))
507− (arm 196:9
509+ (body 196:7
508− (cell 196:9 (lit 196:10 ~) (bind 196:12 a))
510+ (branch 196:7
509− (body 197:11
511+ (wing 196:10 first)
510− (branch 197:11
512+ (arm 197:9 (lit 197:9 ~) (wing 197:11 second))
511− (wing 197:14 second)
513+ (arm 198:9
512− (arm 198:13 (lit 198:13 ~) (wing 198:15 first))
514+ (cell 198:9 (lit 198:10 ~) (bind 198:12 a))
513− (arm 199:13
515+ (body 199:11
514− (cell 199:13 (lit 199:14 ~) (bind 199:16 b))
516+ (branch 199:11
515− (unit 199:19
517+ (wing 199:14 second)
516− (group 199:20
518+ (arm 200:13 (lit 200:13 ~) (wing 200:15 first))
517− (call 199:21 (wing 199:21 combine) (wing 199:29 a) (wing 199:31 b))))))))))))))))
519+ (arm 201:13
518− (value 201:1 hunt
520+ (cell 201:13 (lit 201:14 ~) (bind 201:16 b))
519− (gate 201:9
521+ (unit 201:19
520− (face 201:12 args
522+ (group 201:20
521− (cell 201:17
523+ (call 201:21 (wing 201:21 combine) (wing 201:29 a) (wing 201:31 b))))))))))))))))
522− (fn 201:18
524+ (value 203:1 hunt
523− (cell 201:21 (tvar 201:22 A) (tvar 201:24 A))
525+ (gate 203:9
524− (flag 201:27))
526+ (face 203:12 args
525− (apply 201:30 unit (tvar 201:36 A))
527+ (cell 203:17
526− (apply 201:39 unit (tvar 201:45 A))))
528+ (fn 203:18
527− (body 202:3
529+ (cell 203:21 (tvar 203:22 A) (tvar 203:24 A))
528− (branch 202:3
530+ (flag 203:27))
529− (wing 202:6 args)
531+ (apply 203:30 unit (tvar 203:36 A))
530− (arm 203:5
532+ (apply 203:39 unit (tvar 203:45 A))))
531− (cell 203:5 (bind 203:6 choose) (bind 203:13 first) (bind 203:19 second))
533+ (body 204:3
532− (cast 203:27
534+ (branch 204:3
533− (apply 203:30 unit (tvar 203:36 A))
535+ (wing 204:6 args)
534− (body 204:7
536+ (arm 205:5
535− (branch 204:7
537+ (cell 205:5 (bind 205:6 choose) (bind 205:13 first) (bind 205:19 second))
536− (wing 204:10 first)
538+ (cast 205:27
537− (arm 205:9 (lit 205:9 ~) (wing 205:11 second))
539+ (apply 205:30 unit (tvar 205:36 A))
538− (arm 206:9
540+ (body 206:7
539− (cell 206:9 (lit 206:10 ~) (bind 206:12 a))
541+ (branch 206:7
540− (body 207:11
542+ (wing 206:10 first)
541− (branch 207:11
543+ (arm 207:9 (lit 207:9 ~) (wing 207:11 second))
542− (wing 207:14 second)
544+ (arm 208:9
543− (arm 208:13 (lit 208:13 ~) (wing 208:15 first))
545+ (cell 208:9 (lit 208:10 ~) (bind 208:12 a))
544− (arm 209:13
546+ (body 209:11
545− (cell 209:13 (lit 209:14 ~) (bind 209:16 b))
547+ (branch 209:11
546− (body 210:15
548+ (wing 209:14 second)
547− (branch 210:15
549+ (arm 210:13 (lit 210:13 ~) (wing 210:15 first))
548− (group 210:18
550+ (arm 211:13
549− (call 210:19 (wing 210:19 choose) (wing 210:26 a) (wing 210:28 b)))
551+ (cell 211:13 (lit 211:14 ~) (bind 211:16 b))
550− (arm 211:17 (lit 211:17 %.y) (wing 211:21 first))
552+ (body 212:15
551− (arm 212:17 (lit 212:17 %.n) (wing 212:21 second))))))))))))))))
553+ (branch 212:15
552− (value 214:1 clef
554+ (group 212:18
553− (gate 214:9
555+ (call 212:19 (wing 212:19 choose) (wing 212:26 a) (wing 212:28 b)))
554− (face 214:12 args
556+ (arm 213:17 (lit 213:17 %.y) (wing 213:21 first))
555− (cell 214:17
557+ (arm 214:17 (lit 214:17 %.n) (wing 214:21 second))))))))))))))))
556− (apply 214:18 unit (tvar 214:24 A))
558+ (value 216:1 mate
557− (apply 214:27 unit (tvar 214:33 B))
559+ (gate 216:9
558− (fn 214:36
560+ (face 216:12 args
559− (cell 214:39 (tvar 214:40 A) (tvar 214:42 B))
561+ (cell 216:17
560− (apply 214:45 unit (tvar 214:51 C)))))
562+ (apply 216:18 unit (tvar 216:24 A))
561− (body 215:3
563+ (apply 216:27 unit (tvar 216:33 A))))
562− (branch 215:3
564+ (body 217:3
563− (wing 215:6 args)
565+ (branch 217:3
564− (arm 216:5
566+ (wing 217:6 args)
565− (cell 216:5 (bind 216:6 first) (bind 216:12 second) (bind 216:19 combine))
567+ (arm 218:5
566− (cast 216:28
568+ (cell 218:5 (bind 218:6 first) (bind 218:12 second))
567− (apply 216:31 unit (tvar 216:37 C))
569+ (cast 218:20
568− (body 217:7
570+ (apply 218:23 unit (tvar 218:29 A))
569− (branch 217:7
571+ (body 219:7
570− (wing 217:10 first)
572+ (branch 219:7
571− (arm 218:9 (lit 218:9 ~) (lit 218:11 ~))
573+ (wing 219:10 second)
572− (arm 219:9
574+ (arm 220:9 (lit 220:9 ~) (wing 220:11 first))
573− (cell 219:9 (lit 219:10 ~) (bind 219:12 a))
575+ (arm 221:9
574− (body 220:11
576+ (cell 221:9 (lit 221:10 ~) (bind 221:12 b))
575− (branch 220:11
577+ (body 222:11
576− (wing 220:14 second)
578+ (branch 222:11
577− (arm 221:13 (lit 221:13 ~) (lit 221:15 ~))
579+ (wing 222:14 first)
578− (arm 222:13
580+ (arm 223:13 (lit 223:13 ~) (wing 223:15 second))
579− (cell 222:13 (lit 222:14 ~) (bind 222:16 b))
581+ (arm 224:13
580− (group 222:19
582+ (cell 224:13 (lit 224:14 ~) (bind 224:16 a))
581− (call 222:20 (wing 222:20 combine) (wing 222:28 a) (wing 222:30 b)))))))))))))))
583+ (body 225:15
582− (value 224:1 skim
584+ (branch 225:15
583− (gate 224:9
585+ (group 225:18
584− (face 224:12 args
586+ (call 225:19 (wing 225:19 eq) (wing 225:22 a) (wing 225:24 b)))
585− (cell 224:17
587+ (arm 226:17 (lit 226:17 %.y) (wing 226:21 first))
586− (apply 224:18 list (tvar 224:24 A))
588+ (arm 227:17 (lit 227:17 %.n) (crash 227:21))))))))))))))))
587− (fn 224:27 (tvar 224:30 A) (flag 224:32))))
589+ (value 229:1 clef
588− (body 225:3
590+ (gate 229:9
589− (branch 225:3
591+ (face 229:12 args
590− (wing 225:6 args)
592+ (cell 229:17
591− (arm 226:5
593+ (apply 229:18 unit (tvar 229:24 A))
592− (cell 226:5 (bind 226:6 xs) (bind 226:9 predicate))
594+ (apply 229:27 unit (tvar 229:33 B))
593− (cast 226:20
595+ (fn 229:36
594− (apply 226:23 list (tvar 226:29 A))
596+ (cell 229:39 (tvar 229:40 A) (tvar 229:42 B))
595− (body 227:9
597+ (apply 229:45 unit (tvar 229:51 C)))))
596− (branch 227:9
598+ (body 230:3
597− (wing 227:12 xs)
599+ (branch 230:3
598− (arm 228:11 (lit 228:11 ~) (lit 228:13 ~))
600+ (wing 230:6 args)
599− (arm 229:11
601+ (arm 231:5
600− (cell 229:11 (bind 229:12 item) (bind 229:17 rest))
602+ (cell 231:5 (bind 231:6 first) (bind 231:12 second) (bind 231:19 combine))
601− (body 230:13
603+ (cast 231:28
602− (branch 230:13
604+ (apply 231:31 unit (tvar 231:37 C))
603− (group 230:16
605+ (body 232:7
604− (call 230:17 (wing 230:17 predicate) (wing 230:27 item)))
606+ (branch 232:7
605− (arm 231:15
607+ (wing 232:10 first)
606− (lit 231:15 %.y)
608+ (arm 233:9 (lit 233:9 ~) (lit 233:11 ~))
607− (tuple 231:19
609+ (arm 234:9
608− (wing 231:20 item)
610+ (cell 234:9 (lit 234:10 ~) (bind 234:12 a))
609− (group 231:25
611+ (body 235:11
610− (call 231:26 (wing 231:26 skim) (wing 231:31 rest) (wing 231:36 predicate)))))
612+ (branch 235:11
611− (arm 232:15
613+ (wing 235:14 second)
612− (lit 232:15 %.n)
614+ (arm 236:13 (lit 236:13 ~) (lit 236:15 ~))
613− (group 232:19
615+ (arm 237:13
614− (call 232:20 (wing 232:20 skim) (wing 232:25 rest) (wing 232:30 predicate)))))))))))))))
616+ (cell 237:13 (lit 237:14 ~) (bind 237:16 b))
615− (value 234:1 skip
617+ (group 237:19
616− (gate 234:9
618+ (call 237:20 (wing 237:20 combine) (wing 237:28 a) (wing 237:30 b)))))))))))))))
617− (face 234:12 args
619+ (value 239:1 skim
618− (cell 234:17
620+ (gate 239:9
619− (apply 234:18 list (tvar 234:24 A))
621+ (face 239:12 args
620− (fn 234:27 (tvar 234:30 A) (flag 234:32))))
622+ (cell 239:17
621− (body 235:3
623+ (apply 239:18 list (tvar 239:24 A))
622− (branch 235:3
624+ (fn 239:27 (tvar 239:30 A) (flag 239:32))))
623− (wing 235:6 args)
625+ (body 240:3
624− (arm 236:5
626+ (branch 240:3
625− (cell 236:5 (bind 236:6 xs) (bind 236:9 predicate))
627+ (wing 240:6 args)
626− (cast 236:20
628+ (arm 241:5
627− (apply 236:23 list (tvar 236:29 A))
629+ (cell 241:5 (bind 241:6 xs) (bind 241:9 predicate))
628− (body 237:9
630+ (cast 241:20
629− (branch 237:9
631+ (apply 241:23 list (tvar 241:29 A))
630− (wing 237:12 xs)
632+ (body 242:9
631− (arm 238:11 (lit 238:11 ~) (lit 238:13 ~))
633+ (branch 242:9
632− (arm 239:11
634+ (wing 242:12 xs)
633− (cell 239:11 (bind 239:12 item) (bind 239:17 rest))
635+ (arm 243:11 (lit 243:11 ~) (lit 243:13 ~))
634− (body 240:13
636+ (arm 244:11
635− (branch 240:13
637+ (cell 244:11 (bind 244:12 item) (bind 244:17 rest))
636− (group 240:16
638+ (body 245:13
637− (call 240:17 (wing 240:17 predicate) (wing 240:27 item)))
639+ (branch 245:13
638− (arm 241:15
640+ (group 245:16
639− (lit 241:15 %.y)
641+ (call 245:17 (wing 245:17 predicate) (wing 245:27 item)))
640− (group 241:19
642+ (arm 246:15
641− (call 241:20 (wing 241:20 skip) (wing 241:25 rest) (wing 241:30 predicate))))
643+ (lit 246:15 %.y)
642− (arm 242:15
644+ (tuple 246:19
643− (lit 242:15 %.n)
645+ (wing 246:20 item)
644− (tuple 242:19
646+ (group 246:25
645− (wing 242:20 item)
647+ (call 246:26 (wing 246:26 skim) (wing 246:31 rest) (wing 246:36 predicate)))))
646− (group 242:25
648+ (arm 247:15
647− (call 242:26 (wing 242:26 skip) (wing 242:31 rest) (wing 242:36 predicate))))))))))))))))
649+ (lit 247:15 %.n)
648− (value 244:1 levy
650+ (group 247:19
649− (gate 244:9
651+ (call 247:20 (wing 247:20 skim) (wing 247:25 rest) (wing 247:30 predicate)))))))))))))))
650− (face 244:12 args
652+ (value 249:1 skip
651− (cell 244:17
653+ (gate 249:9
652− (apply 244:18 list (tvar 244:24 A))
654+ (face 249:12 args
653− (fn 244:27 (tvar 244:30 A) (flag 244:32))))
655+ (cell 249:17
654− (body 245:3
656+ (apply 249:18 list (tvar 249:24 A))
655− (cast 245:3
657+ (fn 249:27 (tvar 249:30 A) (flag 249:32))))
656− (flag 245:6)
658+ (body 250:3
657− (body 246:5
659+ (branch 250:3
658− (branch 246:5
660+ (wing 250:6 args)
659− (wing 246:8 args)
661+ (arm 251:5
660− (arm 247:7
662+ (cell 251:5 (bind 251:6 xs) (bind 251:9 predicate))
661− (cell 247:7 (bind 247:8 xs) (bind 247:11 predicate))
663+ (cast 251:20
662− (body 248:9
664+ (apply 251:23 list (tvar 251:29 A))
663− (branch 248:9
665+ (body 252:9
664− (wing 248:12 xs)
666+ (branch 252:9
665− (arm 249:11 (lit 249:11 ~) (lit 249:13 %.y))
667+ (wing 252:12 xs)
666− (arm 250:11
668+ (arm 253:11 (lit 253:11 ~) (lit 253:13 ~))
667− (cell 250:11 (bind 250:12 item) (bind 250:17 rest))
669+ (arm 254:11
668− (body 251:13
670+ (cell 254:11 (bind 254:12 item) (bind 254:17 rest))
669− (branch 251:13
671+ (body 255:13
670− (group 251:16
672+ (branch 255:13
671− (call 251:17 (wing 251:17 predicate) (wing 251:27 item)))
673+ (group 255:16
672− (arm 252:15
674+ (call 255:17 (wing 255:17 predicate) (wing 255:27 item)))
673− (lit 252:15 %.y)
675+ (arm 256:15
674− (group 252:19
676+ (lit 256:15 %.y)
675− (call 252:20 (wing 252:20 levy) (wing 252:25 rest) (wing 252:30 predicate))))
677+ (group 256:19
676− (arm 253:15 (lit 253:15 %.n) (lit 253:19 %.n))))))))))))))
678+ (call 256:20 (wing 256:20 skip) (wing 256:25 rest) (wing 256:30 predicate))))
677− (value 255:1 lien
679+ (arm 257:15
678− (gate 255:9
680+ (lit 257:15 %.n)
679− (face 255:12 args
681+ (tuple 257:19
680− (cell 255:17
682+ (wing 257:20 item)
681− (apply 255:18 list (tvar 255:24 A))
683+ (group 257:25
682− (fn 255:27 (tvar 255:30 A) (flag 255:32))))
684+ (call 257:26 (wing 257:26 skip) (wing 257:31 rest) (wing 257:36 predicate))))))))))))))))
683− (body 256:3
685+ (value 259:1 levy
684− (cast 256:3
686+ (gate 259:9
685− (flag 256:6)
687+ (face 259:12 args
686− (body 257:5
688+ (cell 259:17
687− (branch 257:5
689+ (apply 259:18 list (tvar 259:24 A))
688− (wing 257:8 args)
690+ (fn 259:27 (tvar 259:30 A) (flag 259:32))))
689− (arm 258:7
691+ (body 260:3
690− (cell 258:7 (bind 258:8 xs) (bind 258:11 predicate))
692+ (cast 260:3
691− (body 259:9
693+ (flag 260:6)
692− (branch 259:9
694+ (body 261:5
693− (wing 259:12 xs)
695+ (branch 261:5
694− (arm 260:11 (lit 260:11 ~) (lit 260:13 %.n))
696+ (wing 261:8 args)
695− (arm 261:11
697+ (arm 262:7
696− (cell 261:11 (bind 261:12 item) (bind 261:17 rest))
698+ (cell 262:7 (bind 262:8 xs) (bind 262:11 predicate))
697− (body 262:13
699+ (body 263:9
698− (branch 262:13
700+ (branch 263:9
699− (group 262:16
701+ (wing 263:12 xs)
700− (call 262:17 (wing 262:17 predicate) (wing 262:27 item)))
702+ (arm 264:11 (lit 264:11 ~) (lit 264:13 %.y))
701− (arm 263:15 (lit 263:15 %.y) (lit 263:19 %.y))
703+ (arm 265:11
702− (arm 264:15
704+ (cell 265:11 (bind 265:12 item) (bind 265:17 rest))
703− (lit 264:15 %.n)
705+ (body 266:13
704− (group 264:19
706+ (branch 266:13
705− (call 264:20 (wing 264:20 lien) (wing 264:25 rest) (wing 264:30 predicate))))))))))))))))
707+ (group 266:16
706− (value 266:1 roll
708+ (call 266:17 (wing 266:17 predicate) (wing 266:27 item)))
707− (gate 266:9
709+ (arm 267:15
708− (face 266:12 args
710+ (lit 267:15 %.y)
709− (cell 266:17
711+ (group 267:19
710− (apply 266:18 list (tvar 266:24 A))
712+ (call 267:20 (wing 267:20 levy) (wing 267:25 rest) (wing 267:30 predicate))))
711− (tvar 266:27 B)
713+ (arm 268:15 (lit 268:15 %.n) (lit 268:19 %.n))))))))))))))
712− (fn 266:29
714+ (value 270:1 lien
713− (cell 266:32 (tvar 266:33 A) (tvar 266:35 B))
715+ (gate 270:9
714− (tvar 266:38 B))))
716+ (face 270:12 args
715− (body 267:3
717+ (cell 270:17
716− (branch 267:3
718+ (apply 270:18 list (tvar 270:24 A))
717− (wing 267:6 args)
719+ (fn 270:27 (tvar 270:30 A) (flag 270:32))))
718− (arm 268:5
720+ (body 271:3
719− (cell 268:5 (bind 268:6 xs) (bind 268:9 start) (bind 268:15 combine))
721+ (cast 271:3
720− (body 269:7
722+ (flag 271:6)
721− (branch 269:7
723+ (body 272:5
722− (wing 269:10 xs)
724+ (branch 272:5
723− (arm 270:9 (lit 270:9 ~) (wing 270:11 start))
725+ (wing 272:8 args)
724− (arm 271:9
726+ (arm 273:7
725− (cell 271:9 (bind 271:10 item) (bind 271:15 rest))
727+ (cell 273:7 (bind 273:8 xs) (bind 273:11 predicate))
726− (group 271:21
728+ (body 274:9
727− (call 271:22
729+ (branch 274:9
728− (wing 271:22 roll)
730+ (wing 274:12 xs)
729− (wing 271:27 rest)
731+ (arm 275:11 (lit 275:11 ~) (lit 275:13 %.n))
730− (group 271:32
732+ (arm 276:11
731− (call 271:33 (wing 271:33 combine) (wing 271:41 item) (wing 271:46 start)))
733+ (cell 276:11 (bind 276:12 item) (bind 276:17 rest))
732− (wing 271:53 combine)))))))))))
734+ (body 277:13
733− (value 273:1 reel
735+ (branch 277:13
734− (gate 273:9
736+ (group 277:16
735− (face 273:12 args
737+ (call 277:17 (wing 277:17 predicate) (wing 277:27 item)))
736− (cell 273:17
738+ (arm 278:15 (lit 278:15 %.y) (lit 278:19 %.y))
737− (apply 273:18 list (tvar 273:24 A))
739+ (arm 279:15
738− (tvar 273:27 B)
740+ (lit 279:15 %.n)
739− (fn 273:29
741+ (group 279:19
740− (cell 273:32 (tvar 273:33 A) (tvar 273:35 B))
742+ (call 279:20 (wing 279:20 lien) (wing 279:25 rest) (wing 279:30 predicate))))))))))))))))
741− (tvar 273:38 B))))
743+ (value 281:1 roll
742− (body 274:3
744+ (gate 281:9
743− (branch 274:3
745+ (face 281:12 args
744− (wing 274:6 args)
746+ (cell 281:17
745− (arm 275:5
747+ (apply 281:18 list (tvar 281:24 A))
746− (cell 275:5 (bind 275:6 xs) (bind 275:9 start) (bind 275:15 combine))
748+ (tvar 281:27 B)
747− (body 276:7
749+ (fn 281:29
748− (branch 276:7
750+ (cell 281:32 (tvar 281:33 A) (tvar 281:35 B))
749− (wing 276:10 xs)
751+ (tvar 281:38 B))))
750− (arm 277:9 (lit 277:9 ~) (wing 277:11 start))
752+ (body 282:3
751− (arm 278:9
753+ (branch 282:3
752− (cell 278:9 (bind 278:10 item) (bind 278:15 rest))
754+ (wing 282:6 args)
753− (group 278:21
755+ (arm 283:5
754− (call 278:22
756+ (cell 283:5 (bind 283:6 xs) (bind 283:9 start) (bind 283:15 combine))
755− (wing 278:22 combine)
757+ (body 284:7
756− (wing 278:30 item)
758+ (branch 284:7
757− (group 278:35
759+ (wing 284:10 xs)
758− (call 278:36 (wing 278:36 reel) (wing 278:41 rest) (wing 278:46 start) (wing 278:52 combine)))))))))))))
760+ (arm 285:9 (lit 285:9 ~) (wing 285:11 start))
759− (value 280:1 flit
761+ (arm 286:9
760− (gate 280:9
762+ (cell 286:9 (bind 286:10 item) (bind 286:15 rest))
761− (face 280:12 predicate
763+ (group 286:21
762− (fn 280:22 (tvar 280:25 A) (flag 280:27)))
764+ (call 286:22
763− (body 281:3
765+ (wing 286:22 roll)
764− (gate 281:3
766+ (wing 286:27 rest)
765− (face 281:6 value (tvar 281:12 A))
767+ (group 286:32
766− (body 282:5
768+ (call 286:33 (wing 286:33 combine) (wing 286:41 item) (wing 286:46 start)))
767− (cast 282:5
769+ (wing 286:53 combine)))))))))))
768− (apply 282:8 unit (tvar 282:14 A))
770+ (value 288:1 reel
769− (body 283:7
771+ (gate 288:9
770− (branch 283:7
772+ (face 288:12 args
771− (group 283:10
773+ (cell 288:17
772− (call 283:11 (wing 283:11 predicate) (wing 283:21 value)))
774+ (apply 288:18 list (tvar 288:24 A))
773− (arm 284:9
775+ (tvar 288:27 B)
774− (lit 284:9 %.y)
776+ (fn 288:29
775− (unit 284:13 (wing 284:14 value)))
777+ (cell 288:32 (tvar 288:33 A) (tvar 288:35 B))
776− (arm 285:9 (lit 285:9 %.n) (lit 285:13 ~))))))))))
778+ (tvar 288:38 B))))
777− (value 287:1 murn
779+ (body 289:3
778− (gate 287:9
780+ (branch 289:3
779− (face 287:12 args
781+ (wing 289:6 args)
780− (cell 287:17
782+ (arm 290:5
781− (apply 287:18 list (tvar 287:24 A))
783+ (cell 290:5 (bind 290:6 xs) (bind 290:9 start) (bind 290:15 combine))
782− (fn 287:27
784+ (body 291:7
783− (tvar 287:30 A)
785+ (branch 291:7
784− (apply 287:32 unit (tvar 287:38 B)))))
786+ (wing 291:10 xs)
785− (body 288:3
787+ (arm 292:9 (lit 292:9 ~) (wing 292:11 start))
786− (branch 288:3
788+ (arm 293:9
787− (wing 288:6 args)
789+ (cell 293:9 (bind 293:10 item) (bind 293:15 rest))
788− (arm 289:5
790+ (group 293:21
789− (cell 289:5 (bind 289:6 xs) (bind 289:9 f))
791+ (call 293:22
790− (cast 289:12
792+ (wing 293:22 combine)
791− (apply 289:15 list (tvar 289:21 B))
793+ (wing 293:30 item)
792− (body 290:9
794+ (group 293:35
793− (branch 290:9
795+ (call 293:36 (wing 293:36 reel) (wing 293:41 rest) (wing 293:46 start) (wing 293:52 combine)))))))))))))
794− (wing 290:12 xs)
796+ (value 295:1 flit
795− (arm 291:11 (lit 291:11 ~) (lit 291:13 ~))
797+ (gate 295:9
796− (arm 292:11
798+ (face 295:12 predicate
797− (cell 292:11 (bind 292:12 item) (bind 292:17 rest))
799+ (fn 295:22 (tvar 295:25 A) (flag 295:27)))
798− (body 293:13
800+ (body 296:3
799− (branch 293:13
801+ (gate 296:3
800− (group 293:16
802+ (face 296:6 value (tvar 296:12 A))
801− (call 293:17 (wing 293:17 f) (wing 293:19 item)))
803+ (body 297:5
802− (arm 294:15
804+ (cast 297:5
803− (lit 294:15 ~)
805+ (apply 297:8 unit (tvar 297:14 A))
804− (group 294:17
806+ (body 298:7
805− (call 294:18 (wing 294:18 murn) (wing 294:23 rest) (wing 294:28 f))))
807+ (branch 298:7
806− (arm 295:15
808+ (group 298:10
807− (cell 295:15 (lit 295:16 ~) (bind 295:18 value))
809+ (call 298:11 (wing 298:11 predicate) (wing 298:21 value)))
808− (tuple 295:25
810+ (arm 299:9
809− (wing 295:26 value)
811+ (lit 299:9 %.y)
810− (group 295:32
812+ (unit 299:13 (wing 299:14 value)))
811− (call 295:33 (wing 295:33 murn) (wing 295:38 rest) (wing 295:43 f))))))))))))))))
813+ (arm 300:9 (lit 300:9 %.n) (lit 300:13 ~))))))))))
812− (value 297:1 join
814+ (value 302:1 murn
813− (gate 297:9
815+ (gate 302:9
814− (face 297:12 args
816+ (face 302:12 args
815− (cell 297:17
817+ (cell 302:17
816− (tvar 297:18 A)
818+ (apply 302:18 list (tvar 302:24 A))
817− (apply 297:20 list (tvar 297:26 A))))
819+ (fn 302:27
818− (body 298:3
820+ (tvar 302:30 A)
819− (branch 298:3
821+ (apply 302:32 unit (tvar 302:38 B)))))
820− (wing 298:6 args)
822+ (body 303:3
821− (arm 299:5
823+ (branch 303:3
822− (cell 299:5 (bind 299:6 separator) (bind 299:16 xs))
824+ (wing 303:6 args)
823− (cast 299:20
825+ (arm 304:5
824− (apply 299:23 list (tvar 299:29 A))
826+ (cell 304:5 (bind 304:6 xs) (bind 304:9 f))
825− (body 300:9
827+ (cast 304:12
826− (branch 300:9
828+ (apply 304:15 list (tvar 304:21 B))
827− (wing 300:12 xs)
829+ (body 305:9
828− (arm 301:11 (lit 301:11 ~) (lit 301:13 ~))
830+ (branch 305:9
829− (arm 302:11
831+ (wing 305:12 xs)
830− (cell 302:11 (bind 302:12 item) (bind 302:17 rest))
832+ (arm 306:11 (lit 306:11 ~) (lit 306:13 ~))
831− (body 303:13
833+ (arm 307:11
832− (branch 303:13
834+ (cell 307:11 (bind 307:12 item) (bind 307:17 rest))
833− (wing 303:16 rest)
835+ (body 308:13
834− (arm 304:15
836+ (branch 308:13
835− (lit 304:15 ~)
837+ (group 308:16
836− (tuple 304:17 (wing 304:18 item) (lit 304:23 ~)))
838+ (call 308:17 (wing 308:17 f) (wing 308:19 item)))
837− (arm 305:15
839+ (arm 309:15
838− (cell 305:15 (bind 305:16 next) (bind 305:21 more))
840+ (lit 309:15 ~)
839− (tuple 305:27
841+ (group 309:17
840− (wing 305:28 item)
842+ (call 309:18 (wing 309:18 murn) (wing 309:23 rest) (wing 309:28 f))))
841− (tuple 305:33
843+ (arm 310:15
842− (wing 305:34 separator)
844+ (cell 310:15 (lit 310:16 ~) (bind 310:18 value))
843− (group 305:44
845+ (tuple 310:25
844− (call 305:45 (wing 305:45 join) (wing 305:50 separator) (wing 305:60 rest)))))))))))))))))
846+ (wing 310:26 value)
845− (value 307:1 snip
847+ (group 310:32
846− (gate 307:9
848+ (call 310:33 (wing 310:33 murn) (wing 310:38 rest) (wing 310:43 f))))))))))))))))
847− (face 307:12 xs
849+ (value 312:1 join
848− (apply 307:15 list (tvar 307:21 A)))
850+ (gate 312:9
849− (body 308:3
851+ (face 312:12 args
850− (cast 308:3
852+ (cell 312:17
851− (apply 308:6 list (tvar 308:12 A))
853+ (tvar 312:18 A)
852− (body 309:5
854+ (apply 312:20 list (tvar 312:26 A))))
853− (branch 309:5
855+ (body 313:3
854− (wing 309:8 xs)
856+ (branch 313:3
855− (arm 310:7 (lit 310:7 ~) (lit 310:9 ~))
857+ (wing 313:6 args)
856− (arm 311:7
858+ (arm 314:5
857− (cell 311:7 (bind 311:8 item) (bind 311:13 rest))
859+ (cell 314:5 (bind 314:6 separator) (bind 314:16 xs))
858− (body 312:9
860+ (cast 314:20
859− (branch 312:9
861+ (apply 314:23 list (tvar 314:29 A))
860− (wing 312:12 rest)
862+ (body 315:9
861− (arm 313:11 (lit 313:11 ~) (lit 313:13 ~))
863+ (branch 315:9
862− (arm 314:11
864+ (wing 315:12 xs)
863− (cell 314:11 (bind 314:12 next) (bind 314:17 more))
865+ (arm 316:11 (lit 316:11 ~) (lit 316:13 ~))
864− (tuple 314:23
866+ (arm 317:11
865− (wing 314:24 item)
867+ (cell 317:11 (bind 317:12 item) (bind 317:17 rest))
866− (group 314:29
868+ (body 318:13
867− (call 314:30 (wing 314:30 snip) (wing 314:35 rest))))))))))))))
869+ (branch 318:13
868− (value 316:1 rear
870+ (wing 318:16 rest)
869− (gate 316:9
871+ (arm 319:15
870− (face 316:12 xs
872+ (lit 319:15 ~)
871− (apply 316:15 list (tvar 316:21 A)))
873+ (tuple 319:17 (wing 319:18 item) (lit 319:23 ~)))
872− (body 317:3
874+ (arm 320:15
873− (branch 317:3
875+ (cell 320:15 (bind 320:16 next) (bind 320:21 more))
874− (wing 317:6 xs)
876+ (tuple 320:27
875− (arm 318:5 (lit 318:5 ~) (crash 318:7))
877+ (wing 320:28 item)
876− (arm 319:5
878+ (tuple 320:33
877− (cell 319:5 (bind 319:6 item) (bind 319:11 rest))
879+ (wing 320:34 separator)
878− (body 320:7
880+ (group 320:44
879− (branch 320:7
881+ (call 320:45 (wing 320:45 join) (wing 320:50 separator) (wing 320:60 rest)))))))))))))))))
880− (wing 320:10 rest)
882+ (value 322:1 snip
881− (arm 321:9 (lit 321:9 ~) (wing 321:11 item))
883+ (gate 322:9
882− (arm 322:9
884+ (face 322:12 xs
883− (cell 322:9 (bind 322:10 next) (bind 322:15 more))
885+ (apply 322:15 list (tvar 322:21 A)))
884− (group 322:21
886+ (body 323:3
885− (call 322:22 (wing 322:22 rear) (wing 322:27 rest)))))))))))
887+ (cast 323:3
886− (value 324:1 cork
888+ (apply 323:6 list (tvar 323:12 A))
887− (gate 324:9
889+ (body 324:5
888− (face 324:12 gates
890+ (branch 324:5
889− (cell 324:18
891+ (wing 324:8 xs)
890− (fn 324:19 (tvar 324:22 A) (tvar 324:24 B))
892+ (arm 325:7 (lit 325:7 ~) (lit 325:9 ~))
891− (fn 324:27 (tvar 324:30 B) (tvar 324:32 C))))
893+ (arm 326:7
892− (body 325:3
894+ (cell 326:7 (bind 326:8 item) (bind 326:13 rest))
893− (branch 325:3
895+ (body 327:9
894− (wing 325:6 gates)
896+ (branch 327:9
895− (arm 326:5
897+ (wing 327:12 rest)
896− (cell 326:5 (bind 326:6 f) (bind 326:8 g))
898+ (arm 328:11 (lit 328:11 ~) (lit 328:13 ~))
897− (gate 326:11
899+ (arm 329:11
898− (face 326:14 x (tvar 326:16 A))
900+ (cell 329:11 (bind 329:12 next) (bind 329:17 more))
899− (group 326:18
901+ (tuple 329:23
900− (call 326:19
902+ (wing 329:24 item)
901− (wing 326:19 g)
903+ (group 329:29
902− (group 326:21
904+ (call 329:30 (wing 329:30 snip) (wing 329:35 rest))))))))))))))
903− (call 326:22 (wing 326:22 f) (wing 326:24 x)))))))))))
905+ (value 331:1 rear
904− (value 328:1 corl
906+ (gate 331:9
905− (gate 328:9
907+ (face 331:12 xs
906− (face 328:12 gates
908+ (apply 331:15 list (tvar 331:21 A)))
907− (cell 328:18
909+ (body 332:3
908− (fn 328:19 (tvar 328:22 B) (tvar 328:24 C))
910+ (branch 332:3
909− (fn 328:27 (tvar 328:30 A) (tvar 328:32 B))))
911+ (wing 332:6 xs)
910− (body 329:3
912+ (arm 333:5 (lit 333:5 ~) (crash 333:7))
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)
933 (arm 334:5
913 (arm 334:5
934− (cell 334:5 (bind 334:6 f) (bind 334:8 a))
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))
935− (gate 334:11
972+ (gate 349:11
936− (face 334:14 b (tvar 334:16 B))
973+ (face 349:14 b (tvar 349:16 B))
937− (group 334:18
974+ (group 349:18
938− (call 334:19 (wing 334:19 f) (wing 334:21 a) (wing 334:23 b)))))))))
975+ (call 349:19 (wing 349:19 f) (wing 349:21 a) (wing 349:23 b)))))))))
939− (value 336:1 curr
976+ (value 351:1 curr
940− (gate 336:9
977+ (gate 351:9
941− (face 336:12 args
978+ (face 351:12 args
942− (cell 336:17
979+ (cell 351:17
943− (fn 336:18
980+ (fn 351:18
944− (cell 336:21 (tvar 336:22 A) (tvar 336:24 B))
981+ (cell 351:21 (tvar 351:22 A) (tvar 351:24 B))
945− (tvar 336:27 C))
982+ (tvar 351:27 C))
946− (tvar 336:30 B)))
983+ (tvar 351:30 B)))
947− (body 337:3
984+ (body 352:3
948− (branch 337:3
985+ (branch 352:3
949− (wing 337:6 args)
986+ (wing 352:6 args)
950− (arm 338:5
987+ (arm 353:5
951− (cell 338:5 (bind 338:6 f) (bind 338:8 b))
988+ (cell 353:5 (bind 353:6 f) (bind 353:8 b))
952− (gate 338:11
989+ (gate 353:11
953− (face 338:14 a (tvar 338:16 A))
990+ (face 353:14 a (tvar 353:16 A))
954− (group 338:18
991+ (group 353:18
955− (call 338:19 (wing 338:19 f) (wing 338:21 a) (wing 338:23 b)))))))))
992+ (call 353:19 (wing 353:19 f) (wing 353:21 a) (wing 353:23 b)))))))))
956− (mold 340:1 cmd
993+ (mold 355:1 cmd
957− (generic 340:8 M
994+ (generic 355:8 M
958− (union 341:3
995+ (union 356:3
959− (cell 341:3
996+ (cell 356:3
960− (const 341:4 %poke)
997+ (const 356:4 %poke)
961− (face 341:10 p (ref 341:12 raw-poke))
998+ (face 356:10 p (ref 356:12 raw-poke))
962− (face 341:21 reply
999+ (face 356:21 reply
963− (fn 341:27
1000+ (fn 356:27
964− (apply 341:30 unit (aura 341:36 @t))
1001+ (apply 356:30 unit (aura 356:36 @t))
965− (tvar 341:40 M))))
1002+ (tvar 356:40 M))))
966− (cell 342:3
1003+ (cell 357:3
967− (const 342:4 %go)
1004+ (const 357:4 %go)
968− (face 342:8 url (aura 342:12 @t)))
1005+ (face 357:8 url (aura 357:12 @t)))
969− (cell 343:3
1006+ (cell 358:3
970− (const 343:4 %wait)
1007+ (const 358:4 %wait)
971− (face 343:10 gap (aura 343:14 @dr))
1008+ (face 358:10 gap (aura 358:14 @dr))
972− (face 343:18 msg (tvar 343:22 M)))
1009+ (face 358:18 msg (tvar 358:22 M)))
973− (cell 344:3
1010+ (cell 359:3
974− (const 344:4 %now)
1011+ (const 359:4 %now)
975− (face 344:9 reply
1012+ (face 359:9 reply
976− (fn 344:15 (aura 344:18 @da) (tvar 344:22 M))))
1013+ (fn 359:15 (aura 359:18 @da) (tvar 359:22 M))))
977− (cell 345:3
1014+ (cell 360:3
978− (const 345:4 %who)
1015+ (const 360:4 %who)
979− (face 345:9 reply
1016+ (face 360:9 reply
980− (fn 345:15 (aura 345:18 @p) (tvar 345:21 M)))))))
1017+ (fn 360:15 (aura 360:18 @p) (tvar 360:21 M)))))))
981− (value 347:1 gth
1018+ (value 362:1 gth
982− (gate 347:8
1019+ (gate 362:8
983− (face 347:11 args
1020+ (face 362:11 args
984− (cell 347:16 (tvar 347:17 A) (tvar 347:19 A)))
1021+ (cell 362:16 (tvar 362:17 A) (tvar 362:19 A)))
985− (group 347:22
1022+ (group 362:22
986− (call 347:23 (wing 347:23 gth-atom.internal) (wing 347:41 args)))))
1023+ (call 362:23 (wing 362:23 gth-atom.internal) (wing 362:41 args)))))
987− (value 348:1 add
1024+ (value 363:1 add
988− (gate 348:8
1025+ (gate 363:8
989− (face 348:11 args
1026+ (face 363:11 args
990− (cell 348:16 (tvar 348:17 A) (tvar 348:19 A)))
1027+ (cell 363:16 (tvar 363:17 A) (tvar 363:19 A)))
991− (group 348:22
1028+ (group 363:22
992− (call 348:23 (wing 348:23 add-atom.internal) (wing 348:41 args)))))
1029+ (call 363:23 (wing 363:23 add-atom.internal) (wing 363:41 args)))))
993− (value 349:1 dec
1030+ (value 364:1 dec
994− (gate 349:8
1031+ (gate 364:8
995− (face 349:11 atom (tvar 349:16 A))
1032+ (face 364:11 atom (tvar 364:16 A))
996− (group 349:18
1033+ (group 364:18
997− (call 349:19 (wing 349:19 dec-atom.internal) (wing 349:37 atom)))))
1034+ (call 364:19 (wing 364:19 dec-atom.internal) (wing 364:37 atom)))))
998− (mold 351:1 ask
1035+ (mold 366:1 ask
999− (generic 351:8 M
1036+ (generic 366:8 M
1000− (apply 351:15 ask.internal (tvar 351:29 M))))
1037+ (apply 366:15 ask.internal (tvar 366:29 M))))
1001− (value 352:1 pure
1038+ (value 367:1 pure
1002− (gate 352:9
1039+ (gate 367:9
1003− (face 352:12 x (tvar 352:14 M))
1040+ (face 367:12 x (tvar 367:14 M))
1004− (cast 352:16
1041+ (cast 367:16
1005− (apply 352:19 ask (tvar 352:24 M))
1042+ (apply 367:19 ask (tvar 367:24 M))
1006− (tuple 352:27 (lit 352:28 %pure) (wing 352:34 x))))))
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
5++ head: $-([A B] A)
5++ head: $-([A B] A)
6++ tail: $-([A B] B)
6++ tail: $-([A B] B)
7++ not: $-(? ?)
7++ not: $-(? ?)
8+++ eq: field access is not supported by partial inference
8+$ list: cases proven disjoint; mold not checked
9+$ list: cases proven disjoint; mold not checked
9+$ unit: cases proven disjoint; mold not checked
10+$ unit: cases proven disjoint; mold not checked
10++ fall: $-([(unit A) A] A)
11++ fall: $-([(unit A) A] A)
@@ -49,6 +50,7 @@ partial inference; module not checked
49++ both: unit construction needs the standard prelude in partial inference
50++ both: unit construction needs the standard prelude in partial inference
50++ clap: unit construction needs the standard prelude in partial inference
51++ clap: unit construction needs the standard prelude in partial inference
51++ hunt: $-([$-([A A] ?) [(unit A) (unit A)]] (unit A))
52++ hunt: $-([$-([A A] ?) [(unit A) (unit A)]] (unit A))
53+++ mate: name is not available to partial inference
52++ clef: $-([(unit A) [(unit B) $-([A B] (unit C))]] (unit C))
54++ clef: $-([(unit A) [(unit B) $-([A B] (unit C))]] (unit C))
53++ skim: sample mold is not supported by partial inference
55++ skim: sample mold is not supported by partial inference
54++ skip: sample mold is not supported by partial inference
56++ skip: sample mold is not supported by partial inference
tests/golden/types-generic-gates/about.txt+1−1
@@ -1,4 +1,4 @@
1source: Grammar, Molds: "Generic molds" are defined with `|$` after a `+$` name; type variables are capitals.
1source: 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.
3expect: parses
3expect: parses
4expect-types: a partial inference report
4expect-types: a partial inference report
tests/golden/types-generic-gates/source.jibb+2
@@ -2,3 +2,5 @@
2+$ duo |$ [A B] [left=A right=B]
2+$ duo |$ [A B] [left=A right=B]
3++ gate ^- (mapper @t @t) |= x=@t x
3++ gate ^- (mapper @t @t) |= x=@t x
4++ pair ^- (duo @t @p) [left="hi" right=~zod]
4++ 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 @@
564:40 tight glyph =
564:40 tight glyph =
574:41 tight lit ~zod
574:41 tight lit ~zod
584:45 tight glyph ]
584:45 tight glyph ]
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 ]
59−4:46 NEWLINE
101+6:67 NEWLINE
tests/golden/types-generic-gates/tree.txt+18−1
@@ -18,4 +18,21 @@
18 (apply 4:12 duo (aura 4:17 @t) (aura 4:20 @p))
18 (apply 4:12 duo (aura 4:17 @t) (aura 4:20 @p))
19 (tuple 4:24
19 (tuple 4:24
20 (face 4:25 left (str 4:30 "hi"))
20 (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
3+$ duo: not checked
3+$ duo: not checked
4++ gate: $-(@t @t)
4++ gate: $-(@t @t)
5++ pair: [left=@t right=@p]
5++ 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 @@
1source: Overview, Prelude: Hoon standard-library gates are regrouped into the prelude, with Jibb implementations.
1source: 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.
3expect: parses
3expect: parses
4expect-types: a partial inference report
4expect-types: a partial inference report
tests/golden/types-prelude-unit-helpers/source.jibb+10
@@ -19,3 +19,13 @@
19++ hunt-right (hunt |=(p=[@t @t] %.n) `"a" ~)
19++ hunt-right (hunt |=(p=[@t @t] %.n) `"a" ~)
20++ hunt-bad (hunt |=(p=[@t @t] %.y) `"a" `~zod)
20++ hunt-bad (hunt |=(p=[@t @t] %.y) `"a" `~zod)
21++ hunt-gate-bad (hunt |=(p=[@t @p] %.y) `"a" `"b")
21++ 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 @@
31821:47 glyph `
31821:47 glyph `
31921:48 tight str "b"
31921:48 tight str "b"
32021:51 tight glyph )
32021:51 tight glyph )
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 )
321−21:52 NEWLINE
427+31:31 NEWLINE
tests/golden/types-prelude-unit-helpers/tree.txt+57−1
@@ -172,4 +172,60 @@
172 (cell 21:29 (aura 21:30 @t) (aura 21:33 @p)))
172 (cell 21:29 (aura 21:30 @t) (aura 21:33 @p)))
173 (lit 21:37 %.y))
173 (lit 21:37 %.y))
174 (unit 21:42 (str 21:43 "a"))
174 (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
42/tests/golden/types-prelude-unit-helpers/source.jibb:21:24: argument has type $-([@t @p] ?)
42/tests/golden/types-prelude-unit-helpers/source.jibb:21:24: argument has type $-([@t @p] ?)
43++ hunt-gate-bad (hunt |=(p=[@t @p] %.y) `"a" `"b")
43++ hunt-gate-bad (hunt |=(p=[@t @p] %.y) `"a" `"b")
44 ^
44 ^
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 @@
18 ['flag' flag 8 %yes]
18 ['flag' flag 8 %yes]
19 ['atom variable' [%avar 0] 8 %yes]
19 ['atom variable' [%avar 0] 8 %yes]
20 ['open variable' var 8 %unknown]
20 ['open variable' var 8 %unknown]
21+ ['gate-free variable' [%fvar 0] 8 %yes]
21 ['noun' noun 8 %unknown]
22 ['noun' noun 8 %unknown]
22 ['raw gate' gate 8 %no]
23 ['raw gate' gate 8 %no]
23 ['data item' item 30 %yes]
24 ['data item' item 30 %yes]
@@ -59,6 +60,54 @@
59 =? errors !=(path.b `~[[%item ~]]) ['list path incorrect' errors]
60 =? errors !=(path.b `~[[%item ~]]) ['list path incorrect' errors]
60 =/ c=igate-free:jibb (gate-free-type:jibb model 100 ~)
61 =/ c=igate-free:jibb (gate-free-type:jibb model 100 ~)
61 =? errors ?=(^ path.c) ['gate-free result carries witness path' errors]
62 =? 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]
62 :: The explicit budget is shared across the entire normalized type.
111 :: The explicit budget is shared across the entire normalized type.
63 =/ deep
112 =/ deep
64 |= depth=@ud
113 |= depth=@ud
@@ -71,6 +120,21 @@
71 =/ exceeds=igate-free:jibb (gate-free-type:jibb (deep 256) 256 ~)
120 =/ exceeds=igate-free:jibb (gate-free-type:jibb (deep 256) 256 ~)
72 =? errors !=(%yes verdict.fits) ['256 node budget rejected exact fit' errors]
121 =? errors !=(%yes verdict.fits) ['256 node budget rejected exact fit' errors]
73 =? errors !=(%unknown verdict.exceeds) ['257 node budget did not fail closed' errors]
122 =? 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]
74 =/ errors (skim errors |=(x=@t !=(x '')))
138 =/ errors (skim errors |=(x=@t !=(x '')))
75 (turn errors trip)
139 (turn errors trip)
76++ test-gate-free-guards
140++ test-gate-free-guards