on master help sign in
Record type decisions and enforce capital equality
d782b45iko
docs/compiler.md+4−4
@@ -56,21 +56,21 @@ The core is split into chapters, `+| %name`, in this order:
56| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
56| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
57| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
57| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
58
58
59−The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a two-binder cell pattern, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. A supported single syntactic top-level gate can refer to itself through one monomorphic placeholder; the completed body must unify with it before the gate is generalized. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. Mutual groups, local recursive gates, polymorphic recursion and value cycles remain unsupported. Acyclic local value definitions can refer forward and generalize variables that are free of their enclosing environment; captured variables and explicit capitals remain shared. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. A null-headed cell can match a union case but does not supply a `|=%$` constructor; unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do recursive local groups and recursive molds. 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. A differing-variable face constraint remains unsupported. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types. The reporting path repeats inference of a recursive gate rather than instantiating its generalized interface inside its own body. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
59+The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a two-binder cell pattern, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. A supported single syntactic top-level gate can refer to itself through one monomorphic placeholder; the completed body must unify with it before the gate is generalized. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. Mutual groups, local recursive gates, polymorphic recursion and value cycles remain unsupported. Acyclic local value definitions can refer forward and generalize variables that are free of their enclosing environment; captured variables and explicit capitals remain shared. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. A null-headed cell can match a union case but does not supply a `|=%$` constructor; unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do recursive local groups and recursive molds. 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. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types. The reporting path repeats inference of a recursive gate rather than instantiating its generalized interface inside its own body. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
60
60
61For supported closed unions, the type printer keeps the union’s origin separate from its displayed name. It prints an in-scope name such as `msg` or `msg.lib`, including in records and gates; an accessible imported nongeneric alias may name a transitive union. A nongeneric body-local union that escapes its scope, or an origin without an accessible name, prints its cases separated by spaces, parenthesized when nested. That case-list form is print-only. A supported generic union prints its name and all arguments, including unused arguments; when its name is unavailable, the partial printer reports that limitation instead of dropping its arguments. Two faces for the same imported origin remain compatible; compatibility between distinct union origins, including in gate types, remains unsupported. Some comparisons of generic union arguments also remain unsupported rather than deciding equality or mismatch. The Hoon bridge also translates some imported unnamed unions into this representation; unsupported cases remain errors.
61For supported closed unions, the type printer keeps the union’s origin separate from its displayed name. It prints an in-scope name such as `msg` or `msg.lib`, including in records and gates; an accessible imported nongeneric alias may name a transitive union. A nongeneric body-local union that escapes its scope, or an origin without an accessible name, prints its cases separated by spaces, parenthesized when nested. That case-list form is print-only. A supported generic union prints its name and all arguments, including unused arguments; when its name is unavailable, the partial printer reports that limitation instead of dropping its arguments. Two faces for the same imported origin remain compatible; compatibility between distinct union origins, including in gate types, remains unsupported. Some comparisons of generic union arguments also remain unsupported rather than deciding equality or mismatch. The Hoon bridge also translates some imported unnamed unions into this representation; unsupported cases remain errors.
62
62
63−A list literal can be inferred when a cast or known gate sample supplies a list type and the supplied prelude has the validated standard list definition. Empty, nonempty and nested literals work, including contextual union tags in elements; mismatched elements report the item and expected type. Imported Hoon lists share this representation. Under the same known context, `~` and zero-valued term literals fit an empty list, and a two-item unfaced cell `[head tail]` is a cons; cons cells and list literals can be nested. Mismatched heads or tails report both sites. Faced or longer cells, uncontextualized construction, and a missing or altered prelude list remain unsupported. For a known standard list with a supported element type, it also infers a complete two-arm branch using `~` and `[item rest]`, in either order. The binders have the element and list types and cannot shadow or duplicate names. Unknown subjects, unsupported element types, other patterns and incomplete arms remain unsupported.
63+A list literal can be inferred when a cast or known gate sample supplies a list type and the supplied prelude has the validated standard list definition. Empty, nonempty and nested literals work, including contextual union tags in elements; mismatched elements report the item and expected type. Imported Hoon lists share this representation. Under the same known context, `~` and zero-valued term literals fit an empty list, and a two-item unfaced cell `[head tail]` is a cons; cons cells and list literals can be nested. Mismatched heads or tails report both sites. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. Faced or longer cells, uncontextualized construction, and a missing or altered prelude list remain unsupported. For a known standard list with a supported element type, it also infers a complete two-arm branch using `~` and `[item rest]`, in either order. The binders have the element and list types and cannot shadow or duplicate names. Unknown subjects, unsupported element types, other patterns and incomplete arms remain unsupported.
64
64
65A known union of `~` and a null-headed cell can be matched by `~` and `[~ value]` arms in either order. The payload binder is checked for shadowing. Unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported; this fragment infers the prelude’s `fall` and `need` signatures.
65A known union of `~` and a null-headed cell can be matched by `~` and `[~ value]` arms in either order. The payload binder is checked for shadowing. Unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported; this fragment infers the prelude’s `fall` and `need` signatures.
66
66
67A known closed union can also provide context to each arm of a complete loobean or unit-shaped branch in a cast or a call with a known union sample. Nested branches and transparent groups work; a mismatch reports the expected union and the offending arm. General patterns and context through bodies with local definitions remain unsupported, and unrelated unresolved tags stay pending.
67A known closed union can also provide context to each arm of a complete loobean or unit-shaped branch in a cast or a call with a known union sample. Nested branches and transparent groups work; a mismatch reports the expected union and the offending arm. General patterns and context through bodies with local definitions remain unsupported, and unrelated unresolved tags stay pending.
68
68
69−The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule (doc question 22). It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms, valid term singletons, nested faced or unfaced cells, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts the same shapes for declared marks. The caller must pass unchanged results from the source-aware reader: the bridge validates the supplied graph but cannot detect source cases Hoon collapsed before that graph was built. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and prelude collection operations are not yet connected. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
69+The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule, as @iko confirmed on 2026-10-30. It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms, valid term singletons, nested faced or unfaced cells, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts the same shapes for declared marks. The caller must pass unchanged results from the source-aware reader: the bridge validates the supplied graph but cannot detect source cases Hoon collapsed before that graph was built. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and prelude collection operations are not yet connected. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
70
70
71Self-recursive `/sur` molds can cross the bridge as opaque module-and-name identities when their supported source-aware graph passes validation. Aliases, foreign references, recursive marks, unfolding, construction and field access remain unsupported; the partial printer declines recursive names that are not in scope.
71Self-recursive `/sur` molds can cross the bridge as opaque module-and-name identities when their supported source-aware graph passes validation. Aliases, foreign references, recursive marks, unfolding, construction and field access remain unsupported; the partial printer declines recursive names that are not in scope.
72
72
73−Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The checker currently treats a failed import as unsupported rather than rendering the importer's error.
73+Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The checker currently treats a failed import as unsupported rather than rendering the importer's error. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
74
74
75`+golden-types-with-prelude` accepts case-local Jibb module sources alongside `/sur` and mark results and the vendored prelude source. It resolves reachable ordinary library modules in dependency order, caching completed interfaces per invocation and exporting supported closed value schemes, direct generic unions, and simple or nonrecursive generic mold aliases whose bodies the fragment supports. It detects missing sources and cycles and rejects a dependency if its interface cannot be inferred by the fragment.
75`+golden-types-with-prelude` accepts case-local Jibb module sources alongside `/sur` and mark results and the vendored prelude source. It resolves reachable ordinary library modules in dependency order, caching completed interfaces per invocation and exporting supported closed value schemes, direct generic unions, and simple or nonrecursive generic mold aliases whose bodies the fragment supports. It detects missing sources and cycles and rejects a dependency if its interface cannot be inferred by the fragment.
76
76
docs/open-questions.md+4−4
@@ -39,10 +39,10 @@ Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking i
3917. **Settled: empty cases in union disjointness.** On 2026-10-30, @iko said `!!` is disjoint from every case. A cell containing an empty position at any depth is itself empty and is also disjoint from every case.
3917. **Settled: empty cases in union disjointness.** On 2026-10-30, @iko said `!!` is disjoint from every case. A cell containing an empty position at any depth is itself empty and is also disjoint from every case.
4018. **The two uses of Hoon `like`.** Hoon `+like` is a wet mold builder, but the gate it returns is callable and applies its supplied gate to the product. In a verified Hoon 135 example, applying `(like f)` to `[[1 2] [7 8 ~]]` produces an edge whose product is `8` when `f` is identity and `42` when `f` returns `42`; the resulting nail is the original input. Jibb molds are types, not callable values. The prelude now declares a generic `(like A)` mold and a `wonk` extractor; both parse, but their full type and backend validation remain outstanding. Should it also expose a value gate under `like`? If so, should the value preserve Hoon's input shape and behavior, or instead map the product of an already constructed edge? @iko is reviewing these alternatives; the exact public signature is not yet decided.
4018. **The two uses of Hoon `like`.** Hoon `+like` is a wet mold builder, but the gate it returns is callable and applies its supplied gate to the product. In a verified Hoon 135 example, applying `(like f)` to `[[1 2] [7 8 ~]]` produces an edge whose product is `8` when `f` is identity and `42` when `f` returns `42`; the resulting nail is the original input. Jibb molds are types, not callable values. The prelude now declares a generic `(like A)` mold and a `wonk` extractor; both parse, but their full type and backend validation remain outstanding. Should it also expose a value gate under `like`? If so, should the value preserve Hoon's input shape and behavior, or instead map the product of an already constructed edge? @iko is reviewing these alternatives; the exact public signature is not yet decided.
4119. **Settled: Hoon aura families and `step.hoon`.** On 2026-10-30, @iko chose `step.hoon` for Hoon 1c `step`, avoiding a clash with the Grammar example's `step`, and chose one-way widening across Hoon aura families: for example, `@ud` and `@ux` fit `@u`, and `@tD` fits `@t`. The reverse needs a check. The `step.hoon` group representation is not implemented yet.
4119. **Settled: Hoon aura families and `step.hoon`.** On 2026-10-30, @iko chose `step.hoon` for Hoon 1c `step`, avoiding a clash with the Grammar example's `step`, and chose one-way widening across Hoon aura families: for example, `@ud` and `@ux` fit `@u`, and `@tD` fits `@t`. The reverse needs a check. The `step.hoon` group representation is not implemented yet.
42−20. **The type of Hoon `clap`.** Hoon allows its two input units and combining gate's result to have different types. If only one unit is present it returns that unit; when both are present it returns the combining gate's result. Jibb branches normally need a common type, while every union written in Jibb has a name. Should the Jibb gate require a shared type, infer an unnamed union of the possible values, or wait for a different typing design? Asked @iko on 2026-10-30. `clap` is not implemented while this is open.
42+20. **Settled: the type of `clap`.** On 2026-10-30, @iko chose one shared value type for both units and the combining gate. If either unit is absent, `clap` returns the other; if both are present, it applies the gate to their values and wraps the result.
43−21. **Duplicate faces in imported Hoon records.** Hoon permits `[a=@ud a=@t]`, and its lookup picks the first `a`. Should Jibb reject the imported type where it is used, use the first field, or permit the type but reject access to the ambiguous field? Asked @iko on 2026-10-30. The inference fragment currently permits the type but declines ambiguous field access (doc question).
43+21. **Settled: duplicate faces in imported Hoon records.** On 2026-10-30, @iko chose to reject an imported Hoon record with duplicate field names where its type is used. Hoon permits `[a=@ud a=@t]` and picks the first `a`; Jibb rejects it.
44−22. **Overlapping imported `$%` and `$?` cases.** The Grammar says a union whose cases don't all differ as nouns is rejected, while the import table explicitly mentions that condition only for `$^`; its `$%` and `$?` row says they become a union. Does the general disjointness rule reject imported `$%` and `$?` cases such as `[%x @ud]` and `[%x @t]` where the type is used? Asked @iko on 2026-10-30. The general rule is the provisional reading (doc question); the importer rejects recognizable overlaps and fails closed when it cannot verify them.
44+22. **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.
45−23. **Converging explicit capitals.** May a body constrain two separately written capitals to the same type? For `++ repeated |= x=(choice A A) x`, should `++ f |= x=(choice A B) (repeated x)` infer `$-((choice A A) (choice A A))`, or reject it because `A` and `B` are distinct? The same issue arises when casting `(phantom A)` to `(phantom B)` and across local captures. Asked @iko on 2026-10-30. Pending an answer, partial inference declines to merge distinct explicitly written capitals (doc question).
45+23. **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## Grammar questions never put to the doc's author
47## Grammar questions never put to the doc's author
48
48
docs/prelude-inventory.md+1−1
@@ -28,7 +28,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
28| `bind` | Applies a gate to a present value and wraps the result; absent stays absent. | Written |
28| `bind` | Applies a gate to a present value and wraps the result; absent stays absent. | Written |
29| `bond` | Calls a fallback trap for an absent unit, otherwise returns its value. | Missing |
29| `bond` | Calls a fallback trap for an absent unit, otherwise returns its value. | Missing |
30| `both` | Returns a unit of both values when both units are present. | Written |
30| `both` | Returns a unit of both values when both units are present. | Written |
31−| `clap` | Returns the present unit if only one is present; combines both values with a gate if both are present. | Missing; Hoon permits different input and output types |
31+| `clap` | Returns the present unit if only one is present; combines both values with a gate if both are present. | Written with one shared type for both units and the combining gate, as @iko chose |
32| `clef` | Applies a gate returning a unit when both inputs are present; otherwise returns an absent unit. | Written |
32| `clef` | Applies a gate returning a unit when both inputs are present; otherwise returns an absent unit. | Written |
33| `drop` | Converts an absent unit to an empty list and a present unit to a singleton. | Written |
33| `drop` | Converts an absent unit to an empty list and a present unit to a singleton. | Written |
34| `fall` | Returns the value of a present unit or the supplied fallback. | Written |
34| `fall` | Returns the value of a present unit or the supplied fallback. | Written |
docs/prompts/milestone-2.md+4−4
@@ -62,7 +62,7 @@ The rules are scattered across the tabs. This is a map of them, not a replacemen
62- Hindley–Milner with aura variables: "every expression has a principal type, and there is no general subtyping". A specific atom fits `@`, a specific noun fits `*`, and a more specific aura fits an ancestor in its Hoon aura family, each only in that direction; the reverse needs a check.
62- Hindley–Milner with aura variables: "every expression has a principal type, and there is no general subtyping". A specific atom fits `@`, a specific noun fits `*`, and a more specific aura fits an ancestor in its Hoon aura family, each only in that direction; the reverse needs a check.
63- `@` means any atom, independently at each occurrence. A specific atom such as `@ud` fits where `@` is expected; an `@` value needs a check to fit `@ud`. `@ud` and `@ux` also fit `@u`, and `@tD` fits `@t`, following Hoon aura families; the reverse needs a check. Distinct specific auras remain distinct. `add` takes `[A A]` and returns `A`, with an atom constraint inferred for the shared type variable.
63- `@` means any atom, independently at each occurrence. A specific atom such as `@ud` fits where `@` is expected; an `@` value needs a check to fit `@ud`. `@ud` and `@ux` also fit `@u`, and `@tD` fits `@t`, following Hoon aura families; the reverse needs a check. Distinct specific auras remain distinct. `add` takes `[A A]` and returns `A`, with an atom constraint inferred for the shared type variable.
64- Faces are part of record types: `[a=@ b=@]` and `[x=@ y=@]` don't unify. An unnamed position can unify with a faced one and take its face, so `[0 0]` fits `[x=@ud y=@ud]`. A single-item cell `[a]` is `a`; an empty `[]` is an error.
64- Faces are part of record types: `[a=@ b=@]` and `[x=@ y=@]` don't unify. An unnamed position can unify with a faced one and take its face, so `[0 0]` fits `[x=@ud y=@ud]`. A single-item cell `[a]` is `a`; an empty `[]` is an error.
65−- Type variables are capitals, "generalized per `++`". A capital in a local `++` shares the enclosing `++`'s variable of that name; a different type takes a different capital. "A type variable used where an atom is required gains an atom constraint", so `++ clamp |= [lo=A hi=A n=A]`, calling `gth` and `max`, works on any one aura; "It can become nothing more specific: a body that makes `A` a `@ud` or a list is an error." Names "may refer to each other in any order", so infer `++` definitions in dependency order, a group of mutually recursive ones together.
65+- Type variables are capitals, "generalized per `++`". A capital in a local `++` shares the enclosing `++`'s variable of that name; a different type takes a different capital. A body cannot force two distinct capitals to be equal; use the same capital where a type is shared. "A type variable used where an atom is required gains an atom constraint", so `++ clamp |= [lo=A hi=A n=A]`, calling `gth` and `max`, works on any one aura; "It can become nothing more specific: a body that makes `A` a `@ud` or a list is an error." Names "may refer to each other in any order", so infer `++` definitions in dependency order, a group of mutually recursive ones together.
66- The checker infers a gate-free constraint for `eq` arguments and map and set keys and retains it when a type variable is generalized. The requirement applies recursively to nested values; union-case matching treats gates as opaque. Print a gate-free constraint as `$-([A A] ?) where A contains no gates` and an atom constraint as `$-([A A] A) where A is an atom`; separate multiple clauses with commas, as `where A is an atom, B contains no gates`.
66- The checker infers a gate-free constraint for `eq` arguments and map and set keys and retains it when a type variable is generalized. The requirement applies recursively to nested values; union-case matching treats gates as opaque. Print a gate-free constraint as `$-([A A] ?) where A contains no gates` and an atom constraint as `$-([A A] A) where A is an atom`; separate multiple clauses with commas, as `where A is an atom, B contains no gates`.
67- Gates may call themselves and their siblings; a non-gate value that depends on itself, even through a gate, is an error. Molds may be recursive, and "recursive molds go by name and module".
67- Gates may call themselves and their siblings; a non-gate value that depends on itself, even through a gate, is an error. Molds may be recursive, and "recursive molds go by name and module".
68- A sample's mold may be left out: every bare name in a sample binds, at any depth, as in `|=(p title.p)` "when the call fixes the type", `|= [a=@ b]` and `|=(m ~)`.
68- A sample's mold may be left out: every bare name in a sample binds, at any depth, as in `|=(p title.p)` "when the call fixes the type", `|= [a=@ b]` and `|=(m ~)`.
@@ -98,7 +98,7 @@ The rules are scattered across the tabs. This is a map of them, not a replacemen
98- `main`'s type decides a module's kind: `(element !!)` a page, `(page R D)` a page with data, `(program D X M)` an island, `(store S)` a store; no `main`, a library.
98- `main`'s type decides a module's kind: `(element !!)` a page, `(page R D)` a page with data, `(program D X M)` an island, `(store S)` a store; no `main`, a library.
99
99
100**Importing Hoon types** (overview: Importing Hoon types; Decisions: Hoon types)
100**Importing Hoon types** (overview: Importing Hoon types; Decisions: Hoon types)
101−- The table: `$%` and `$?` become a union; `$@` a union with an atom case; `$^` a union if its cases differ as nouns, else an error where used; `$~` dropped; `map`, `set`, `qeu`, `jar`, `jug` the same, by name; `mop` as `(mop K V)`, read with `on`; other `$|` their base type; `%0`, `%&` and `%|` tags; recursive molds recursive, matched by name; cores, gates, vases, signed and float auras an error where used.
101+- The table: `$%`, `$?` and `$^` become unions only if their cases differ as nouns, else an error where used; `$@` a union with an atom case; `$~` dropped; `map`, `set`, `qeu`, `jar`, `jug` the same, by name; `mop` as `(mop K V)`, read with `on`; other `$|` their base type; `%0`, `%&` and `%|` tags; recursive molds recursive, matched by name; imported records with duplicate field names, cores, gates, vases, signed and float auras are errors where used.
102- "Unused molds are skipped, so unsupported constructs elsewhere in a `/sur` file are fine." A field's unnamed union imports too, although Jibb cannot write one.
102- "Unused molds are skipped, so unsupported constructs elsewhere in a `/sur` file are fine." A field's unnamed union imports too, although Jibb cannot write one.
103
103
104**Islands, pages and stores** (overview: The Elm architecture on Urbit; Grammar: Modules and the store example)
104**Islands, pages and stores** (overview: The Elm architecture on Urbit; Grammar: Modules and the store example)
@@ -113,13 +113,13 @@ The rules are scattered across the tabs. This is a map of them, not a replacemen
113
113
114**The prelude** (overview: Prelude, Layout and styling, Links and URLs, Effects)
114**The prelude** (overview: Prelude, Layout and styling, Links and URLs, Effects)
115- Hoon's standard library regrouped, "written in Jibb and vendored as `/lib/jibb/prelude`", plus `eq`, `not`, `page`, `program`, `store`, `pure`, `island`, the layout elements and molds, `attr`, `theme`, and `cmd` and `sub` as the overview's Effects block writes them.
115- Hoon's standard library regrouped, "written in Jibb and vendored as `/lib/jibb/prelude`", plus `eq`, `not`, `page`, `program`, `store`, `pure`, `island`, the layout elements and molds, `attr`, `theme`, and `cmd` and `sub` as the overview's Effects block writes them.
116−- Signatures change where the Prelude table says: maps and sets are plain gates over Hoon's trees, as `(get.by m k)`; folds take a start, as `(roll xs init f)`, `rep.by` and `rep.in`; ordered maps go through lull's `on`, as `(get.on lte m k)`.
116+- Signatures change where the Prelude table says: `clap` takes two units of one value type and a combining gate over that type; maps and sets are plain gates over Hoon's trees, as `(get.by m k)`; folds take a start, as `(roll xs init f)`, `rep.by` and `rep.in`; ordered maps go through lull's `on`, as `(get.on lte m k)`.
117- Left out: signed and float gates, parser helpers outside 3g other than the explicitly listed `slav` and `slaw`, and the table's "The rest" (1b, 2p, 3d, 3f, 4c, 4n, 4o, 5a–5f); "`jam`, `cue` and `fein` run inside the runtime".
117- Left out: signed and float gates, parser helpers outside 3g other than the explicitly listed `slav` and `slaw`, and the table's "The rest" (1b, 2p, 3d, 3f, 4c, 4n, 4o, 5a–5f); "`jam`, `cue` and `fein` run inside the runtime".
118- Write the prelude in Jibb, enough to give every name its type. Foundational gates use private low-level primitives from the internal prelude module. Jetted functions have working Jibb implementations; the compiler recognizes their shapes and uses the Hoon versions so jets can fire. They may take gates as arguments; the Nock backend comes in milestone 3.
118- Write the prelude in Jibb, enough to give every name its type. Foundational gates use private low-level primitives from the internal prelude module. Jetted functions have working Jibb implementations; the compiler recognizes their shapes and uses the Hoon versions so jets can fire. They may take gates as arguments; the Nock backend comes in milestone 3.
119- Element signatures are in the Layout and styling table. Paths and unchecked cords have separate declarations, with `link-unsafe`, `image-unsafe` and `go-unsafe` for the unchecked forms. Both navigation declarations produce `[%go url=@t]`; `go` converts its application path to a cord including the app's base path. "The same attribute twice in a literal list is an error."
119- Element signatures are in the Layout and styling table. Paths and unchecked cords have separate declarations, with `link-unsafe`, `image-unsafe` and `go-unsafe` for the unchecked forms. Both navigation declarations produce `[%go url=@t]`; `go` converts its application path to a cord including the app's base path. "The same attribute twice in a literal list is an error."
120
120
121**Errors**
121**Errors**
122−- Each one the Grammar tab describes needs a golden case with its message. A start on the list: an aura mismatch; mismatched faces; "msg has no case %submitt"; an unresolved tag, as the Grammar's `add-button` ("nothing fixes the union of %add"); an open constraint at the end of a module; a `|=%tag` whose union has no such case tagged at its head; a union whose cases overlap; a missing `?-` case, named; an arm that earlier arms cover; a value that refers to itself; a shadowed name, including a prelude or imported one; a cell in `{…}` with no printer; an atom of a generic aura in `{…}` or a path's `(…)`; a capital that a body makes a `@ud` or a list; `~[text "hi"]`, where the checker suggests `~[(text "hi")]`; clashing derived names; an import cycle; from an import, a signed or float aura, a core, gate or vase, or a `$^` whose cases don't differ as nouns, each where used; a `(facts …)` outside an API file's `paths`; a gate in island data or a model, naming the field; a repeated attribute in a literal list. Read the Grammar tab, and the other tabs' mentions of "error" and "the checker", and make the list complete.
122+- Each one the Grammar tab describes needs a golden case with its message. A start on the list: an aura mismatch; mismatched faces; "msg has no case %submitt"; an unresolved tag, as the Grammar's `add-button` ("nothing fixes the union of %add"); an open constraint at the end of a module; a `|=%tag` whose union has no such case tagged at its head; a union whose cases overlap; a missing `?-` case, named; an arm that earlier arms cover; a value that refers to itself; a shadowed name, including a prelude or imported one; a cell in `{…}` with no printer; an atom of a generic aura in `{…}` or a path's `(…)`; a capital that a body makes a `@ud` or a list; `~[text "hi"]`, where the checker suggests `~[(text "hi")]`; clashing derived names; an import cycle; from an import, a signed or float aura, a core, gate or vase, or a `$%`, `$?` or `$^` whose cases don't differ as nouns, or a record with duplicate field names, each where used; a `(facts …)` outside an API file's `paths`; a gate in island data or a model, naming the field; a repeated attribute in a literal list. Read the Grammar tab, and the other tabs' mentions of "error" and "the checker", and make the list complete.
123- For a `+$` whose cases overlap or do not fit, suggest that a record or tuple leaves its `[` open on the `+$` line. `+$ pt` above `@t` and `[@ud @ud]` is a valid union.
123- For a `+$` whose cases overlap or do not fit, suggest that a record or tuple leaves its `[` open on the `+$` line. `+$ pt` above `@t` and `[@ud @ud]` is a valid union.
124- "Each error names both conflicting sites, with excerpts." Today's `error` is `[file line col msg]`, a start only; spans keep each node's end so that a type error can underline both sites.
124- "Each error names both conflicting sites, with excerpts." Today's `error` is `[file line col msg]`, a start only; spans keep each node's end so that a type error can underline both sites.
125- Messages name things in the doc's words and quote the code they're about in backticks, as milestone 1's do. Their wording is fixed by the golden tests once written.
125- Messages name things in the doc's words and quote the code they're about in backticks, as milestone 1's do. Their wording is fixed by the golden tests once written.
docs/spec/decisions.md+3−3
@@ -35,14 +35,14 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
35| Agent APIs | `/ui/api/<agent>.jibb` with `+$ poke` and `+$ paths`, over the agent's mark types; a case is a name, a path and a type, with `(facts full diff …)` for diffs, told apart by mark; an optional scry path, for pages; an island watching such a request has a type error; typed segments by aura | Decided 2026-10-30 |
35| Agent APIs | `/ui/api/<agent>.jibb` with `+$ poke` and `+$ paths`, over the agent's mark types; a case is a name, a path and a type, with `(facts full diff …)` for diffs, told apart by mark; an optional scry path, for pages; an island watching such a request has a type error; typed segments by aura | Decided 2026-10-30 |
36| Mark names | Any name: `/%` names types after marks, and constructors poke with their type's mark; no alias marks | Decided 2026-10-26 |
36| Mark names | Any name: `/%` names types after marks, and constructors poke with their type's mark; no alias marks | Decided 2026-10-26 |
37| Derived gates | API files and stores give a constructor per poke type and a checked request per path or store state; clashing names are errors, including a derived name that clashes with an import face | Decided 2026-10-30 |
37| Derived gates | API files and stores give a constructor per poke type and a checked request per path or store state; clashing names are errors, including a derived name that clashes with an import face | Decided 2026-10-30 |
38−| Hoon types | A fixed translation table; `map`, `set`, `qeu`, `jar`, `jug` by name; `mop` as `(mop K V)`, read with `on`; unused molds skipped | Decided 2026-10-29 |
38+| Hoon types | A fixed translation table; `map`, `set`, `qeu`, `jar`, `jug` by name; `mop` as `(mop K V)`, read with `on`; imported `$%`, `$?` and `$^` cases must differ as nouns, and records with duplicate field names are errors where used; unused molds skipped | Decided 2026-10-30 |
39| Layout | Indentation; juxtaposed calls; a bracket open at line end takes one item per line, with no closer | Decided |
39| Layout | Indentation; juxtaposed calls; a bracket open at line end takes one item per line, with no closer | Decided |
40| Elements | Ordinary gates; containers take attribute lists; `stack` switches at `wide`; `el` adds attributes and wins; headings 1 to 6; `form` sends on Enter, the innermost when nested; `image` from an application path, sized from the file, or a sized URL; no focus control for now | Decided 2026-10-29 |
40| Elements | Ordinary gates; containers take attribute lists; `stack` switches at `wide`; `el` adds attributes and wins; headings 1 to 6; `form` sends on Enter, the innermost when nested; `image` from an application path, sized from the file, or a sized URL; no focus control for now | Decided 2026-10-29 |
41| Long calls | One argument per line inside parentheses | Decided |
41| Long calls | One argument per line inside parentheses | Decided |
42| Inline gates | Hoon's wide form; the mold may be inferred; a bare sample name binds; `\|=%got` is a case's constructor, typed by the gate expected; a bare tag is always a value | Decided 2026-10-29 |
42| Inline gates | Hoon's wide form; the mold may be inferred; a bare sample name binds; `\|=%got` is a case's constructor, typed by the gate expected; a bare tag is always a value | Decided 2026-10-29 |
43| Empty mold | `!!`, with no values; the expression has any type; pages are `(element !!)`, which keeps islands out of islands | Decided 2026-10-29 |
43| Empty mold | `!!`, with no values; the expression has any type; pages are `(element !!)`, which keeps islands out of islands | Decided 2026-10-29 |
44| Noun mold | `*` is the noun type, not a type variable; use a capital for a generic type; a value of a more specific noun type can be used where `*` is expected | Decided 2026-10-30 |
44| Noun mold | `*` is the noun type, not a type variable; use a capital for a generic type; a value of a more specific noun type can be used where `*` is expected | Decided 2026-10-30 |
45−| Type variables | Capitals, generalized per `++`; a capital in a local `++` shares the enclosing `++`'s variable of that name, and a different type takes a different capital; one used where an atom is required gains an inferred atom constraint, and cannot be fixed to a more specific type in its body | Decided 2026-10-30 |
45+| Type variables | Capitals, generalized per `++`; a capital in a local `++` shares the enclosing `++`'s variable of that name, and a different type takes a different capital; a body cannot force distinct capitals to be equal, so a shared type uses the same capital; one used where an atom is required gains an inferred atom constraint, and cannot be fixed to a more specific type in its body | Decided 2026-10-30 |
46| Loobean mold | `?`, switched with `?-` | Decided 2026-10-26 |
46| Loobean mold | `?`, switched with `?-` | Decided 2026-10-26 |
47| Defaults | None | Decided |
47| Defaults | None | Decided |
48| Modules | Records, not cores | Decided |
48| Modules | Records, not cores | Decided |
@@ -76,7 +76,7 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
76| Dark mode | Hand-written dark tones under `dark`, used when the reader prefers dark | Decided 2026-10-27 |
76| Dark mode | Hand-written dark tones under `dark`, used when the reader prefers dark | Decided 2026-10-27 |
77| Links | All text escaped; in-app links are application paths, as `%/blog/(slug)`, with no query or fragment, checked at compile time against routes and static files; paths and unchecked `https`, `mailto` and `tel` URLs and root-relative cords such as `"/apps/groups"` have separate declarations; `link-unsafe`, `image-unsafe` and `go-unsafe` are the unchecked forms; both navigation declarations produce `[%go url=@t]`, with `go` converting the path to a cord including the app's base path; other cords render as text; a CSP on every page | Decided 2026-10-30 |
77| Links | All text escaped; in-app links are application paths, as `%/blog/(slug)`, with no query or fragment, checked at compile time against routes and static files; paths and unchecked `https`, `mailto` and `tel` URLs and root-relative cords such as `"/apps/groups"` have separate declarations; `link-unsafe`, `image-unsafe` and `go-unsafe` are the unchecked forms; both navigation declarations produce `[%go url=@t]`, with `go` converting the path to a cord including the app's base path; other cords render as text; a CSP on every page | Decided 2026-10-30 |
78| Data layer | Hoon's nouns: units, treaps, loobeans | Decided |
78| Data layer | Hoon's nouns: units, treaps, loobeans | Decided |
79−| Prelude | Hoon's standard library regrouped: all names from the listed sections except explicitly excluded groups, including all of 3g, with Hoon's `tone` exposed as `tone.hoon` and Hoon's 1c `step` as `step.hoon`; arithmetic over aura variables, units, lists, maps, sets, queues, ordered maps, function helpers, text, atom printing, a zoned date printer, time and data molds; folds take a start; jetted functions have working Jibb implementations, whose shapes the compiler recognizes to use the Hoon versions, and may take gates; private helpers and low-level primitives live in a separate internal module imported without exposing them, with public foundational gates implemented in Jibb on those primitives; no signed or float gates, or parser gates outside 3g except `slav` and `slaw`; signed or float auras are errors | Decided 2026-10-30 |
79+| Prelude | Hoon's standard library regrouped: all names from the listed sections except explicitly excluded groups, including all of 3g, with Hoon's `tone` exposed as `tone.hoon` and Hoon's 1c `step` as `step.hoon`; arithmetic over aura variables, units, lists, maps, sets, queues, ordered maps, function helpers, text, atom printing, a zoned date printer, time and data molds; folds take a start; jetted functions have working Jibb implementations, whose shapes the compiler recognizes to use the Hoon versions, and may take gates; private helpers and low-level primitives live in a separate internal module imported without exposing them, with public foundational gates implemented in Jibb on those primitives; `clap` takes two units of the same type and a combining gate over that type; no signed or float gates, or parser gates outside 3g except `slav` and `slaw`; signed or float auras are errors | Decided 2026-10-30 |
80| Wire format | Noun channels; Jibb's own noun codec in the browser | Decided 2026-10-29 |
80| Wire format | Noun channels; Jibb's own noun codec in the browser | Decided 2026-10-29 |
81| Hosting | One thin host agent on `%jibb` binds, caches and serves every Jibb desk; each desk vendors jibb-dev, names its base path in docket's `site+`, and builds and renders with its own copy through fixed entry points; install `%jibb` first; app agents stay plain Hoon; pokes only from the ship | Decided 2026-10-29 |
81| Hosting | One thin host agent on `%jibb` binds, caches and serves every Jibb desk; each desk vendors jibb-dev, names its base path in docket's `site+`, and builds and renders with its own copy through fixed entry points; install `%jibb` first; app agents stay plain Hoon; pokes only from the ship | Decided 2026-10-29 |
82| Private pages | Served by the host per request and never cached; non-owners go to the login page | Decided 2026-10-29 |
82| Private pages | Served by the host per request and never cached; non-owners go to the login page | Decided 2026-10-29 |
docs/spec/grammar.md+2−2
@@ -91,7 +91,7 @@ Imports come first:
91/= card /ui/components/card :: a Jibb module
91/= card /ui/components/card :: a Jibb module
92```
92```
93
93
94−`/%` names a type after its mark, so it takes no face, and any mark name works; Hoon's `/%` binds the mark's core instead. Derived constructors such as `todo-action.todo` supply the agent and mark, so code never writes one. API modules re-export their `/%` types, not `/-` faces or `/=` modules. Import cycles are errors.
94+An imported Hoon record with duplicate field names is an error where used; imported union cases must differ as nouns. `/%` names a type after its mark, so it takes no face, and any mark name works; Hoon's `/%` binds the mark's core instead. Derived constructors such as `todo-action.todo` supply the agent and mark, so code never writes one. API modules re-export their `/%` types, not `/-` faces or `/=` modules. Import cycles are errors.
95
95
96## Modules
96## Modules
97
97
@@ -125,7 +125,7 @@ A mold is only a type: never called on a noun, and with no default. Types are in
125- **Records and tuples**: `[text=@t done=?]`, `[@t ?]`. An empty `[]` is an error. Faces are part of the type, so `[a=@ b=@]` and `[x=@ y=@]` don't unify. An unnamed position can unify with a faced position and take its face, so `[0 0]` fits `[x=@ud y=@ud]`; two different faces don't unify. A record too long for one line can leave its `[` open, with one field per deeper line, as an expression's bracket does.
125- **Records and tuples**: `[text=@t done=?]`, `[@t ?]`. An empty `[]` is an error. Faces are part of the type, so `[a=@ b=@]` and `[x=@ y=@]` don't unify. An unnamed position can unify with a faced position and take its face, so `[0 0]` fits `[x=@ud y=@ud]`; two different faces don't unify. A record too long for one line can leave its `[` open, with one field per deeper line, as an expression's bracket does.
126- **Unions**: a `+$` with several cases below it. Every union written in Jibb has a name, so one used in a field, a sample, a cast, a gate's mold or an argument gets its own `+$`; only imports bring in unions without one. Tags take their union from context, as Tag resolution describes. Cases must differ as nouns: inhabited cases must differ at some position of their right-nested cells, where one is an atom and the other a cell, or both are different constants. `*`, type variables and molds that can be either, such as `(list A)`, can overlap atoms and cells. `?` counts as the two atoms `%.y` and `%.n`: it is disjoint from cells and overlaps the constants 0 and 1. The empty mold `!!` is disjoint from every case; a cell with an empty position at any depth is itself empty and is also disjoint from every case. A union whose cases don't all differ is rejected.
126- **Unions**: a `+$` with several cases below it. Every union written in Jibb has a name, so one used in a field, a sample, a cast, a gate's mold or an argument gets its own `+$`; only imports bring in unions without one. Tags take their union from context, as Tag resolution describes. Cases must differ as nouns: inhabited cases must differ at some position of their right-nested cells, where one is an atom and the other a cell, or both are different constants. `*`, type variables and molds that can be either, such as `(list A)`, can overlap atoms and cells. `?` counts as the two atoms `%.y` and `%.n`: it is disjoint from cells and overlaps the constants 0 and 1. The empty mold `!!` is disjoint from every case; a cell with an empty position at any depth is itself empty and is also disjoint from every case. A union whose cases don't all differ is rejected.
127- **Containers**: `(list A)`, `(unit A)`, `(set A)`, `(map K V)`, `(mop K V)`, `(qeu A)`, `(jar K V)`, `(jug K V)`.
127- **Containers**: `(list A)`, `(unit A)`, `(set A)`, `(map K V)`, `(mop K V)`, `(qeu A)`, `(jar K V)`, `(jug K V)`.
128−- **Gates**: `$-(A B)`. Type variables are capitals, generalized per `++`. A capital in a local `++` shares the enclosing `++`'s variable of the same name; use another capital for a different type. A type variable used where an atom is required gains an atom constraint, so `++ clamp |= [lo=A hi=A n=A]`, whose body calls `gth` and `max`, works on any one aura. It can become nothing more specific: a body that makes `A` a `@ud` or a list is an error.
128+- **Gates**: `$-(A B)`. Type variables are capitals, generalized per `++`. A capital in a local `++` shares the enclosing `++`'s variable of the same name; use another capital for a different type. A body can't force two distinct capitals to be equal; use the same capital wherever a type must be shared. A type variable used where an atom is required gains an atom constraint, so `++ clamp |= [lo=A hi=A n=A]`, whose body calls `gth` and `max`, works on any one aura. It can become nothing more specific: a body that makes `A` a `@ud` or a list is an error.
129- **Paths**: `/todos` is constant, `/` empty, and `/todo/[id=@ud]` typed by aura. `%/blog/(slug)` is an `qath`, checked against routes and static files.
129- **Paths**: `/todos` is constant, `/` empty, and `/todo/[id=@ud]` typed by aura. `%/blog/(slug)` is an `qath`, checked against routes and static files.
130- **Generic molds**: `+$ result |$ [V E]` with cases below; `|$` goes only right after a `+$`'s name.
130- **Generic molds**: `+$ result |$ [V E]` with cases below; `|$` goes only right after a `+$`'s name.
131- **Noun**: `*`, not a type variable; use a capital for a generic type. A value already known to have a more specific noun type, such as `@ud`, can be used where `*` is expected. **Empty**: `!!`.
131- **Noun**: `*`, not a type variable; use a capital for a generic type. A value already known to have a more specific noun type, such as `@ud`, can be used where `*` is expected. **Empty**: `!!`.
docs/spec/overview.md+3−3
@@ -63,7 +63,7 @@ Hoon's runes and literals in an indentation layout, over Hoon's nouns and molds,
63
63
64| Hoon | Jibb |
64| Hoon | Jibb |
65| --- | --- |
65| --- | --- |
66−| `$%`, `$?` | A union |
66+| `$%`, `$?` | A union if its cases differ as nouns, else an error where used |
67| `$@` | A union with an atom case |
67| `$@` | A union with an atom case |
68| `$^` | A union if its cases differ as nouns, else an error where used |
68| `$^` | A union if its cases differ as nouns, else an error where used |
69| `$~` | Dropped |
69| `$~` | Dropped |
@@ -72,7 +72,7 @@ Hoon's runes and literals in an indentation layout, over Hoon's nouns and molds,
72| Other `$\|` | Its base type |
72| Other `$\|` | Its base type |
73| `%0`, `%&`, `%\|` | Tags |
73| `%0`, `%&`, `%\|` | Tags |
74| Recursive molds, such as `json` | Recursive, matched by name |
74| Recursive molds, such as `json` | Recursive, matched by name |
75−| Cores, gates, vases, signed and float auras | An error where used |
75+| Records with duplicate field names; cores, gates, vases, signed and float auras | An error where used |
76
76
77Unused molds are skipped, so unsupported constructs elsewhere in a `/sur` file are fine. A union without a name, as a field's `?(%approve %deny)`, imports too, though Jibb can't write one. Messages and printed types show its cases separated by spaces, as `%approve %deny`; this notation is print-only.
77Unused molds are skipped, so unsupported constructs elsewhere in a `/sur` file are fine. A union without a name, as a field's `?(%approve %deny)`, imports too, though Jibb can't write one. Messages and printed types show its cases separated by spaces, as `%approve %deny`; this notation is print-only.
78
78
@@ -83,7 +83,7 @@ Hoon's standard library regrouped, written in Jibb and vendored as `/lib/jibb/pr
83| Group | Hoon | Jibb |
83| Group | Hoon | Jibb |
84| --- | --- | --- |
84| --- | --- | --- |
85| Arithmetic | [1a](https://docs.urbit.org/hoon/stdlib/1a), [2g](https://docs.urbit.org/hoon/stdlib/2g) | Jibb gates over shared atom-constrained type variables, using private low-level primitives: `add`, `sub`, `div`, `mod`, `gth`, `max`, `pow` |
85| Arithmetic | [1a](https://docs.urbit.org/hoon/stdlib/1a), [2g](https://docs.urbit.org/hoon/stdlib/2g) | Jibb gates over shared atom-constrained type variables, using private low-level primitives: `add`, `sub`, `div`, `mod`, `gth`, `max`, `pow` |
86−| Units | [2a](https://docs.urbit.org/hoon/stdlib/2a) | `fall`, `need`, `bind`, `biff` |
86+| Units | [2a](https://docs.urbit.org/hoon/stdlib/2a) | `fall`, `need`, `bind`, `biff`, `clap`; `clap` takes two units of the same type and a gate combining two values of that type into one of that type |
87| Lists | [2b](https://docs.urbit.org/hoon/stdlib/2b) | `turn`, `weld`, `snag`, `lent`, `sort`, `skim`; `(roll xs init f)` takes a start |
87| Lists | [2b](https://docs.urbit.org/hoon/stdlib/2b) | `turn`, `weld`, `snag`, `lent`, `sort`, `skim`; `(roll xs init f)` takes a start |
88| Maps, sets, queues | [2h](https://docs.urbit.org/hoon/stdlib/2h)–[2m](https://docs.urbit.org/hoon/stdlib/2m), [2o](https://docs.urbit.org/hoon/stdlib/2o) | Plain gates over Hoon's trees, such as `(get.by m k)`; `rep.by` and `rep.in` take a start; ordered maps through lull's `on`, as `(get.on lte m k)` |
88| Maps, sets, queues | [2h](https://docs.urbit.org/hoon/stdlib/2h)–[2m](https://docs.urbit.org/hoon/stdlib/2m), [2o](https://docs.urbit.org/hoon/stdlib/2o) | Plain gates over Hoon's trees, such as `(get.by m k)`; `rep.by` and `rep.in` take a start; ordered maps through lull's `on`, as `(get.on lte m k)` |
89| Function helpers | [2n](https://docs.urbit.org/hoon/stdlib/2n) | `same`, `head`, `tail`, `cork`, `cury` |
89| Function helpers | [2n](https://docs.urbit.org/hoon/stdlib/2n) | `same`, `head`, `tail`, `cork`, `cury` |
docs/status.md+7−6
@@ -19,7 +19,7 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
19
19
20## Milestone 2: in progress
20## Milestone 2: in progress
21
21
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, 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 prelude collection operations are not yet connected; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases (doc question 22), while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level 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. A recursive gate uses one monomorphic self reference while its body is inferred, then generalizes after the body is checked; subsequent uses instantiate it independently. 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. Mutual groups, local recursive gates, polymorphic recursion and value cycles remain unsupported. Reporting repeats inference for a recursive gate, so its performance cost remains unmeasured. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. Faced or longer cells and a missing or altered prelude list fail closed. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Uncontextualized list construction, unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. 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 local groups and 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` and `rear`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
22+The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, 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 prelude collection operations are not yet connected; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. 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. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level 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. A recursive gate uses one monomorphic self reference while its body is inferred, then generalizes after the body is checked; subsequent uses instantiate it independently. 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. Mutual groups, local recursive gates, polymorphic recursion and value cycles remain unsupported. Reporting repeats inference for a recursive gate, so its performance cost remains unmeasured. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Uncontextualized list construction, unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive local groups and molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
23
23
24The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall` and `need`. Unsupported entries such as most list helpers remain reserved but unavailable. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
24The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall` and `need`. Unsupported entries such as most list helpers remain reserved but unavailable. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
25
25
@@ -39,8 +39,8 @@ What the plan asks for, and where it is:
39
39
40Besides the plan's list:
40Besides the plan's list:
41
41
42−- 504 golden cases: 288 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
42+- 508 golden cases: 292 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
43−- The 504-case corpus passed under `urbit eval` in 56.4 s. The fake ship passed all 509 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 29.0 s for sync and 32.6 s for tests. The importer golden compares 141 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
43+- The 508-case corpus passed under `urbit eval` in 56.0 s. The fake ship passed all 513 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 28.1 s for sync and 54.9 s for tests. The importer golden compares 141 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
44- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
44- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
45- Two independent audits before 7c739b7, one of which compared the library with a reference parser written in Python from the doc over about 19,000 generated programs. Before ab797a9, a second Python parser, written from the decisions, agreed with the library on 8,000 generated programs and 900 hand-written probes.
45- Two independent audits before 7c739b7, one of which compared the library with a reference parser written in Python from the doc over about 19,000 generated programs. Before ab797a9, a second Python parser, written from the decisions, agreed with the library on 8,000 generated programs and 900 hand-written probes.
46- Speed: starting `urbit eval` and building the library takes about 8 s. After that, a 2,000-line module of 400 definitions parses in about a second. Loops over definitions, arms, lines and items grow no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (library section 3).
46- Speed: starting `urbit eval` and building the library takes about 8 s. After that, a 2,000-line module of 400 definitions parses in about a second. Loops over definitions, arms, lines and items grow no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (library section 3).
@@ -84,14 +84,15 @@ Besides the plan's list:
84| a2a6ef5 | 2026-10-30 | Infer complete list-shaped branches |
84| a2a6ef5 | 2026-10-30 | Infer complete list-shaped branches |
85| 671fe72 | 2026-10-30 | Infer contextual list nulls and cons cells |
85| 671fe72 | 2026-10-30 | Infer contextual list nulls and cons cells |
86| 7e69436 | 2026-10-30 | Infer selected self-recursive gates |
86| 7e69436 | 2026-10-30 | Infer selected self-recursive gates |
87−| This change | 2026-10-30 | Infer recursive branches with closed base types |
87+| 9ab52e8 | 2026-10-30 | Infer recursive branches with closed base types |
88+| This change | 2026-10-30 | Propagate list context and apply settled type decisions |
88
89
89## Checking it
90## Checking it
90
91
91On a machine set up as [development.md](development.md) says:
92On a machine set up as [development.md](development.md) says:
92
93
93```
94```
94−tools/golden # 504 cases under urbit eval
95+tools/golden # 508 cases under urbit eval
95tools/importer-test # the Hoon importer fixture projection
96tools/importer-test # the Hoon importer fixture projection
96tools/type-import-test # the importer/checker bridge fixture
97tools/type-import-test # the importer/checker bridge fixture
97tools/type-mark-test # the mark/checker bridge fixture
98tools/type-mark-test # the mark/checker bridge fixture
@@ -101,7 +102,7 @@ tools/testdata/selftest # the tools themselves
101tools/doc-blocks docs/spec # the doc's examples are golden cases
102tools/doc-blocks docs/spec # the doc's examples are golden cases
102tools/ship start
103tools/ship start
103tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
104tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
104−tools/ship test # the same 504 cases as -test arms on the ship
105+tools/ship test # the same 508 cases as -test arms on the ship
105tools/testdata/ship-selftest
106tools/testdata/ship-selftest
106tools/ship check-commit # |commit stores .jibb files
107tools/ship check-commit # |commit stores .jibb files
107tools/clay-fixtures # example /sur files and marks build through Clay
108tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb-import.hoon+2−3
@@ -386,9 +386,8 @@
386 ?: ?=([%bckt ^ ^] h) &
386 ?: ?=([%bckt ^ ^] h) &
387 |($(h -.h) $(h +.h))
387 |($(h -.h) $(h +.h))
388::
388::
389−:: (doc question 22) The Grammar's disjointness rule is applied to
389+:: The Grammar's disjointness rule applies to imported $% and $? too;
390−:: imported $% and $? too. The import table singles out $^, so @iko
390+:: @iko confirmed the rule for imported unions on 2026-10-30.
391−:: has been asked whether that general rule also covers those unions.
392++ has-spec-general-union
391++ has-spec-general-union
393 |= h=*
392 |= h=*
394 ^- ?
393 ^- ?
jibb-dev/lib/jibb.hoon+101−9
@@ -5234,7 +5234,8 @@
5234+$ imold-types (list [name=term template=ischeme])
5234+$ imold-types (list [name=term template=ischeme])
5235+$ ifile [values=ienv molds=imold-types at=path]
5235+$ ifile [values=ienv molds=imold-types at=path]
5236+$ ijimports (list [face=term interface=ifile])
5236+$ ijimports (list [face=term interface=ifile])
5237−+$ icaps (list [name=@t id=@ud])
5237++$ icap [name=@t id=@ud at=span]
5238++$ icaps (list icap)
5238+$ iparams (list [name=@t typ=itype])
5239+$ iparams (list [name=@t typ=itype])
5239+$ imolds (list [name=term body=shape])
5240+$ imolds (list [name=term body=shape])
5240:: A caller supplies the exact noun returned by +read-mold:jibb-import.
5241:: A caller supplies the exact noun returned by +read-mold:jibb-import.
@@ -5524,6 +5525,48 @@
5524 $(pats t.pats)
5525 $(pats t.pats)
5525::
5526::
5526::
5527::
5528+::
5529+:: Repeated faces along an imported record spine fail closed. Hoon's type
5530+:: graph can erase unfaced nested-cell boundaries, so that alone does not
5531+:: prove the original source repeated a name within one record. A faced
5532+:: body and each union alternative have separate scopes. Check recursive
5533+:: roots before making them opaque; unused molds are never inspected.
5534+::
5535+++ imported-faces-valid
5536+ |= node=*
5537+ ^- ?
5538+ ?@ node &
5539+ ?+ -.node &
5540+ %face ?:(?=([%face @ *] node) $(node +>.node) |)
5541+ %cell ?:(?=([%cell * *] node) (imported-record-faces-valid node ~) |)
5542+ %fork (imported-faces-valid-list +.node)
5543+ %apply ?:(?=([%apply @ *] node) (imported-faces-valid-list +>.node) |)
5544+ ==
5545+::
5546+++ imported-faces-valid-list
5547+ |= nodes=*
5548+ ^- ?
5549+ ?@ nodes =(nodes 0)
5550+ ?. (imported-faces-valid -.nodes) |
5551+ $(nodes +.nodes)
5552+::
5553+++ imported-record-faces-valid
5554+ |= [node=* names=(list @)]
5555+ ^- ?
5556+ ?: ?=([%cell * *] node)
5557+ =/ head=* +<.node
5558+ =/ rest=* +>.node
5559+ ?: ?=([%face @ *] head)
5560+ ?: (lien names |=(n=@ =(n +<.head))) |
5561+ ?. (imported-faces-valid +>.head) |
5562+ $(node rest, names [+<.head names])
5563+ ?. (imported-faces-valid head) |
5564+ $(node rest)
5565+ ?: ?=([%face @ *] node)
5566+ ?: (lien names |=(n=@ =(n +<.node))) |
5567+ (imported-faces-valid +>.node)
5568+ (imported-faces-valid node)
5569+::
5527++ import-to-itype
5570++ import-to-itype
5528 |= node=*
5571 |= node=*
5529 ^- (unit itype)
5572 ^- (unit itype)
@@ -5616,6 +5659,7 @@
5616 ?@ result ~
5659 ?@ result ~
5617 ?. ?=(%& -.result) ~
5660 ?. ?=(%& -.result) ~
5618 =/ node=* +.result
5661 =/ node=* +.result
5662+ ?. (imported-faces-valid node) ~
5619 ?@ node (import-to-itype node)
5663 ?@ node (import-to-itype node)
5620 ?: ?=(%ref -.node) (import-to-itype node)
5664 ?: ?=(%ref -.node) (import-to-itype node)
5621 =/ pattern=(unit irec-pattern) (rec-pattern node module name)
5665 =/ pattern=(unit irec-pattern) (rec-pattern node module name)
@@ -5651,6 +5695,7 @@
5651 =/ result=* result.i.found
5695 =/ result=* result.i.found
5652 ?@ result ~
5696 ?@ result ~
5653 ?. ?=(%& -.result) ~
5697 ?. ?=(%& -.result) ~
5698+ ?. (imported-faces-valid +.result) ~
5654 (import-to-itype +.result)
5699 (import-to-itype +.result)
5655::
5700::
5656++ find-jibb-interface
5701++ find-jibb-interface
@@ -5895,7 +5940,7 @@
5895 ?: in-mold.state ~
5940 ?: in-mold.state ~
5896 =/ n=(unit @ud) (icap-lookup name.sh caps.state)
5941 =/ n=(unit @ud) (icap-lookup name.sh caps.state)
5897 ?^ n `[[%var u.n] state]
5942 ?^ n `[[%var u.n] state]
5898− `[[%var next.state] state(next +(next.state), caps [[name.sh next.state] caps.state])]
5943+ `[[%var next.state] state(next +(next.state), caps [[name.sh next.state at.sh] caps.state])]
5899 * ~
5944 * ~
5900 ==
5945 ==
5901::
5946::
@@ -6067,8 +6112,8 @@
6067 $(ds t.ds, env [[name.d [typ vars]] env], state state.p.inferred, progressed &)
6112 $(ds t.ds, env [[name.d [typ vars]] env], state state.p.inferred, progressed &)
6068::
6113::
6069:: Read only fields of a known record. Unresolved field constraints and
6114:: Read only fields of a known record. Unresolved field constraints and
6070−:: ambiguous repeated faces are outside this fragment (doc question:
6115+:: ambiguous repeated faces are outside this fragment. Imported record
6071−:: whether duplicate imported Hoon faces are valid or select a field).
6116+:: spines with repeated names are unavailable when used.
6072::
6117::
6073++ record-fields-named
6118++ record-fields-named
6074 |= [name=term t=itype sub=isub]
6119 |= [name=term t=itype sub=isub]
@@ -6099,9 +6144,9 @@
6099 ?^ t.found [%| ["field name is ambiguous in partial inference" ~]]
6144 ?^ t.found [%| ["field name is ambiguous in partial inference" ~]]
6100 $(fields t.fields, typ i.found)
6145 $(fields t.fields, typ i.found)
6101::
6146::
6102−:: Propagate a known union through supported loobean and unit branches. Empty bodies
6147+:: Propagate a known union or list through supported loobean, unit and list
6103−:: and groups are transparent; bodies with definitions keep their normal
6148+:: branches. Empty bodies and groups are transparent; bodies with definitions
6104−:: scoping and wait for general bidirectional inference.
6149+:: keep their normal scoping and wait for general bidirectional inference.
6105::
6150::
6106++ context-union-branch
6151++ context-union-branch
6107 |= e=expr
6152 |= e=expr
@@ -6118,6 +6163,8 @@
6118 ^- iresult
6163 ^- iresult
6119 ?: ?=(%group -.e) $(e inner.e)
6164 ?: ?=(%group -.e) $(e inner.e)
6120 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
6165 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
6166+ ?: &(?=(%collection -.expected) =(%list name.expected) (context-list-expression e))
6167+ (infer-list-context e expected env state context)
6121 ?: ?=(%branch -.e)
6168 ?: ?=(%branch -.e)
6122 ?~ arms.e [%| ["branch is not supported by partial inference" ~]]
6169 ?~ arms.e [%| ["branch is not supported by partial inference" ~]]
6123 ?~ t.arms.e [%| ["branch pattern is not supported by partial inference" ~]]
6170 ?~ t.arms.e [%| ["branch pattern is not supported by partial inference" ~]]
@@ -6145,8 +6192,12 @@
6145 ?: ?=(%| -.value) value
6192 ?: ?=(%| -.value) value
6146 =/ fit=ifit (itype-fit typ.p.value expected sub.state.p.value next.state.p.value)
6193 =/ fit=ifit (itype-fit typ.p.value expected sub.state.p.value next.state.p.value)
6147 ?: ?=(%unknown -.fit)
6194 ?: ?=(%unknown -.fit)
6195+ ?: &(?=(%collection -.expected) =(%list name.expected))
6196+ [%| ["branch list constraint is not supported by partial inference" ~]]
6148 [%| ["branch union constraint is not supported by partial inference" ~]]
6197 [%| ["branch union constraint is not supported by partial inference" ~]]
6149 ?: ?=(%bad -.fit)
6198 ?: ?=(%bad -.fit)
6199+ ?: &(?=(%collection -.expected) =(%list name.expected))
6200+ [%| ["branch arm does not fit its expected list" ~[[context "expected list"] [(span-of e) "branch arm"]]]]
6150 [%| ["branch arm does not fit its expected union" ~[[context "expected union"] [(span-of e) "branch arm"]]]]
6201 [%| ["branch arm does not fit its expected union" ~[[context "expected union"] [(span-of e) "branch arm"]]]]
6151 [%& expected state.p.value(sub sub.fit, next next.fit)]
6202 [%& expected state.p.value(sub sub.fit, next next.fit)]
6152::
6203::
@@ -6219,6 +6270,8 @@
6219 =/ value=iresult
6270 =/ value=iresult
6220 ?: &(?=(%union -.target) (context-union-branch i.items))
6271 ?: &(?=(%union -.target) (context-union-branch i.items))
6221 (infer-union-context i.items target env state context)
6272 (infer-union-context i.items target env state context)
6273+ ?: &(?=(%collection -.target) =(%list name.target) (context-union-branch i.items))
6274+ (infer-union-context i.items target env state context)
6222 ?: &(?=(%collection -.target) =(%list name.target) (context-list-expression i.items))
6275 ?: &(?=(%collection -.target) =(%list name.target) (context-list-expression i.items))
6223 (infer-list-context i.items target env state context)
6276 (infer-list-context i.items target env state context)
6224 (infer-fragment i.items env state)
6277 (infer-fragment i.items env state)
@@ -6485,6 +6538,8 @@
6485 =/ value=iresult
6538 =/ value=iresult
6486 ?: &(?=(%union -.typ.u.target) (context-union-branch val.e))
6539 ?: &(?=(%union -.typ.u.target) (context-union-branch val.e))
6487 (infer-union-context val.e typ.u.target env state.u.target at.shape.e)
6540 (infer-union-context val.e typ.u.target env state.u.target at.shape.e)
6541+ ?: &(?=(%collection -.typ.u.target) =(%list name.typ.u.target) (context-union-branch val.e))
6542+ (infer-union-context val.e typ.u.target env state.u.target at.shape.e)
6488 ?: &(?=(%collection -.typ.u.target) =(%list name.typ.u.target) (context-list-expression val.e))
6543 ?: &(?=(%collection -.typ.u.target) =(%list name.typ.u.target) (context-list-expression val.e))
6489 (infer-list-context val.e typ.u.target env state.u.target at.shape.e)
6544 (infer-list-context val.e typ.u.target env state.u.target at.shape.e)
6490 $(e val.e, state state.u.target)
6545 $(e val.e, state state.u.target)
@@ -6517,6 +6572,8 @@
6517 =/ arg=iresult
6572 =/ arg=iresult
6518 ?: &(?=(%fn -.head-type) ?=(%union -.sample.head-type) (context-union-branch i.args.e))
6573 ?: &(?=(%fn -.head-type) ?=(%union -.sample.head-type) (context-union-branch i.args.e))
6519 (infer-union-context i.args.e sample.head-type env state.p.head (span-of head.e))
6574 (infer-union-context i.args.e sample.head-type env state.p.head (span-of head.e))
6575+ ?: &(?=(%fn -.head-type) ?=(%collection -.sample.head-type) =(%list name.sample.head-type) (context-union-branch i.args.e))
6576+ (infer-union-context i.args.e sample.head-type env state.p.head (span-of head.e))
6520 ?: &(?=(%fn -.head-type) ?=(%collection -.sample.head-type) =(%list name.sample.head-type) (context-list-expression i.args.e))
6577 ?: &(?=(%fn -.head-type) ?=(%collection -.sample.head-type) =(%list name.sample.head-type) (context-list-expression i.args.e))
6521 (infer-list-context i.args.e sample.head-type env state.p.head (span-of head.e))
6578 (infer-list-context i.args.e sample.head-type env state.p.head (span-of head.e))
6522 $(e i.args.e, state state.p.head)
6579 $(e i.args.e, state state.p.head)
@@ -6675,8 +6732,8 @@
6675:: A capital in a written mold is generalized with its enclosing ++.
6732:: A capital in a written mold is generalized with its enclosing ++.
6676:: Atom constraints may remain generic; until full rigidity checking
6733:: Atom constraints may remain generic; until full rigidity checking
6677:: is implemented, do not report a type if one became more specific.
6734:: is implemented, do not report a type if one became more specific.
6678−:: Whether distinct written capitals may become equal is a doc question;
6735+:: Distinct written capitals cannot be forced equal; use the same
6679−:: the partial checker leaves such inference unsupported for now.
6736+:: capital where a type must be shared (Decisions 2026-10-30).
6680::
6737::
6681++ cap-id-in
6738++ cap-id-in
6682 |= [n=@ud caps=icaps sub=isub]
6739 |= [n=@ud caps=icaps sub=isub]
@@ -6692,6 +6749,35 @@
6692 ?: =(n u.ident) &
6749 ?: =(n u.ident) &
6693 $(caps t.caps)
6750 $(caps t.caps)
6694::
6751::
6752+++ cap-with-id
6753+ |= [n=@ud caps=icaps sub=isub]
6754+ ^- (unit icap)
6755+ ?~ caps ~
6756+ =/ resolved=itype (itype-walk [%var id.i.caps] sub)
6757+ =/ ident=(unit @ud)
6758+ ?+ -.resolved ~
6759+ %var `id.resolved
6760+ %avar `id.resolved
6761+ ==
6762+ ?~ ident $(caps t.caps)
6763+ ?: =(n u.ident) `i.caps
6764+ $(caps t.caps)
6765+::
6766+++ merged-capitals
6767+ |= [caps=icaps sub=isub]
6768+ ^- (unit [first=icap second=icap])
6769+ ?~ caps ~
6770+ =/ resolved=itype (itype-walk [%var id.i.caps] sub)
6771+ =/ ident=(unit @ud)
6772+ ?+ -.resolved ~
6773+ %var `id.resolved
6774+ %avar `id.resolved
6775+ ==
6776+ ?~ ident $(caps t.caps)
6777+ =/ found=(unit icap) (cap-with-id u.ident t.caps sub)
6778+ ?^ found `[u.found i.caps]
6779+ $(caps t.caps)
6780+::
6695++ constrained-capitals
6781++ constrained-capitals
6696 |= [caps=icaps sub=isub]
6782 |= [caps=icaps sub=isub]
6697 ^- ?
6783 ^- ?
@@ -7392,6 +7478,12 @@
7392 (infer-fragment val.d env initial)
7478 (infer-fragment val.d env initial)
7393 ?: ?=(%| -.result)
7479 ?: ?=(%| -.result)
7394 $(ds t.ds, lines [(show-inference-diagnostic file src name.d p.result) lines])
7480 $(ds t.ds, lines [(show-inference-diagnostic file src name.d p.result) lines])
7481+ =/ merged=(unit [first=icap second=icap])
7482+ (merged-capitals caps.state.p.result sub.state.p.result)
7483+ ?^ merged
7484+ =/ diag=idiag
7485+ ["distinct type variables `{(trip name.first.u.merged)}` and `{(trip name.second.u.merged)}` must not be forced equal; use the same capital for a shared type" ~[[at.first.u.merged "first type variable"] [at.second.u.merged "second type variable"]]]
7486+ $(ds t.ds, lines [(show-inference-diagnostic file src name.d diag) lines])
7395 ?: (constrained-capitals caps.state.p.result sub.state.p.result)
7487 ?: (constrained-capitals caps.state.p.result sub.state.p.result)
7396 $(ds t.ds, lines [(crip "++ {(trip name.d)}: explicit capital constraints are not supported by partial inference") lines])
7488 $(ds t.ds, lines [(crip "++ {(trip name.d)}: explicit capital constraints are not supported by partial inference") lines])
7397 =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
7489 =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
jibb-dev/lib/jibb/prelude.jibb+10
@@ -166,6 +166,16 @@
166 ~ ~
166 ~ ~
167 [~ b] `[a b]
167 [~ b] `[a b]
168
168
169+++ clap |= args=[(unit A) (unit A) $-([A A] A)]
170+ ?- args
171+ [first second combine]
172+ ?- first
173+ ~ second
174+ [~ a]
175+ ?- second
176+ ~ first
177+ [~ b] `(combine a b)
178+
169++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
179++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
170 ?- args
180 ?- args
171 [first second combine]
181 [first second combine]
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` and `clef`, 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` and `clef`, 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, two ways to combine units, 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.
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, 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.
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+10
@@ -166,6 +166,16 @@
166 ~ ~
166 ~ ~
167 [~ b] `[a b]
167 [~ b] `[a b]
168
168
169+++ clap |= args=[(unit A) (unit A) $-([A A] A)]
170+ ?- args
171+ [first second combine]
172+ ?- first
173+ ~ second
174+ [~ a]
175+ ?- second
176+ ~ first
177+ [~ b] `(combine a b)
178+
169++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
179++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
170 ?- args
180 ?- args
171 [first second combine]
181 [first second combine]
tests/golden/prelude-unit-list-transforms/tokens.txt+428−362
@@ -1012,7 +1012,7 @@
1012169:1 DEDENT
1012169:1 DEDENT
1013169:1 NEWLINE
1013169:1 NEWLINE
1014169:1 glyph ++
1014169:1 glyph ++
1015−169:4 name clef
1015+169:4 name clap
1016169:9 glyph |=
1016169:9 glyph |=
1017169:12 name args
1017169:12 name args
1018169:16 tight glyph =
1018169:16 tight glyph =
@@ -1023,19 +1023,16 @@
1023169:25 tight glyph )
1023169:25 tight glyph )
1024169:27 glyph (
1024169:27 glyph (
1025169:28 tight name unit
1025169:28 tight name unit
1026−169:33 tvar B
1026+169:33 tvar A
1027169:34 tight glyph )
1027169:34 tight glyph )
1028169:36 glyph $-(
1028169:36 glyph $-(
1029169:39 tight glyph [
1029169:39 tight glyph [
1030169:40 tight tvar A
1030169:40 tight tvar A
1031−169:42 tvar B
1031+169:42 tvar A
1032169:43 tight glyph ]
1032169:43 tight glyph ]
1033−169:45 glyph (
1033+169:45 tvar A
1034−169:46 tight name unit
1035−169:51 tvar C
1036−169:52 tight glyph )
1034+169:46 tight glyph )
1037−169:53 tight glyph )
1038−169:54 tight glyph ]
1035+169:47 tight glyph ]
1039170:3 INDENT
1036170:3 INDENT
1040170:3 glyph ?-
1037170:3 glyph ?-
1041170:6 name args
1038170:6 name args
@@ -1050,7 +1047,7 @@
1050172:10 name first
1047172:10 name first
1051173:9 INDENT
1048173:9 INDENT
1052173:9 lit ~
1049173:9 lit ~
1053−173:11 lit ~
1050+173:11 name second
1054174:9 NEWLINE
1051174:9 NEWLINE
1055174:9 glyph [
1052174:9 glyph [
1056174:10 tight lit ~
1053174:10 tight lit ~
@@ -1061,17 +1058,18 @@
1061175:14 name second
1058175:14 name second
1062176:13 INDENT
1059176:13 INDENT
1063176:13 lit ~
1060176:13 lit ~
1064−176:15 lit ~
1061+176:15 name first
1065177:13 NEWLINE
1062177:13 NEWLINE
1066177:13 glyph [
1063177:13 glyph [
1067177:14 tight lit ~
1064177:14 tight lit ~
1068177:16 name b
1065177:16 name b
1069177:17 tight glyph ]
1066177:17 tight glyph ]
1070−177:19 glyph (
1067+177:19 glyph `
1071−177:20 tight name combine
1068+177:20 tight glyph (
1069+177:21 tight name combine
1072−177:28 name a
1070+177:29 name a
1073−177:30 name b
1071+177:31 name b
1074−177:31 tight glyph )
1072+177:32 tight glyph )
1075179:1 DEDENT
1073179:1 DEDENT
1076179:1 DEDENT
1074179:1 DEDENT
1077179:1 DEDENT
1075179:1 DEDENT
@@ -1080,62 +1078,66 @@
1080179:1 DEDENT
1078179:1 DEDENT
1081179:1 NEWLINE
1079179:1 NEWLINE
1082179:1 glyph ++
1080179:1 glyph ++
1083−179:4 name skim
1081+179:4 name clef
1084179:9 glyph |=
1082179:9 glyph |=
1085179:12 name args
1083179:12 name args
1086179:16 tight glyph =
1084179:16 tight glyph =
1087179:17 tight glyph [
1085179:17 tight glyph [
1088179:18 tight glyph (
1086179:18 tight glyph (
1089−179:19 tight name list
1087+179:19 tight name unit
1090179:24 tvar A
1088179:24 tvar A
1091179:25 tight glyph )
1089179:25 tight glyph )
1092−179:27 glyph $-(
1090+179:27 glyph (
1091+179:28 tight name unit
1092+179:33 tvar B
1093+179:34 tight glyph )
1094+179:36 glyph $-(
1095+179:39 tight glyph [
1093−179:30 tight tvar A
1096+179:40 tight tvar A
1097+179:42 tvar B
1098+179:43 tight glyph ]
1099+179:45 glyph (
1100+179:46 tight name unit
1101+179:51 tvar C
1094−179:32 glyph ?
1102+179:52 tight glyph )
1095−179:33 tight glyph )
1103+179:53 tight glyph )
1096−179:34 tight glyph ]
1104+179:54 tight glyph ]
1097180:3 INDENT
1105180:3 INDENT
1098180:3 glyph ?-
1106180:3 glyph ?-
1099180:6 name args
1107180:6 name args
1100181:5 INDENT
1108181:5 INDENT
1101181:5 glyph [
1109181:5 glyph [
1102−181:6 tight name xs
1110+181:6 tight name first
1111+181:12 name second
1103−181:9 name predicate
1112+181:19 name combine
1104−181:18 tight glyph ]
1113+181:26 tight glyph ]
1105182:7 INDENT
1114182:7 INDENT
1106182:7 glyph ?-
1115182:7 glyph ?-
1107−182:10 name xs
1116+182:10 name first
1108183:9 INDENT
1117183:9 INDENT
1109183:9 lit ~
1118183:9 lit ~
1110183:11 lit ~
1119183:11 lit ~
1111184:9 NEWLINE
1120184:9 NEWLINE
1112184:9 glyph [
1121184:9 glyph [
1113−184:10 tight name item
1122+184:10 tight lit ~
1114−184:15 name rest
1123+184:12 name a
1115−184:19 tight glyph ]
1124+184:13 tight glyph ]
1116185:11 INDENT
1125185:11 INDENT
1117185:11 glyph ?-
1126185:11 glyph ?-
1118−185:14 glyph (
1127+185:14 name second
1119−185:15 tight name predicate
1120−185:25 name item
1121−185:29 tight glyph )
1122186:13 INDENT
1128186:13 INDENT
1123−186:13 lit %.y
1129+186:13 lit ~
1124−186:17 glyph [
1130+186:15 lit ~
1125−186:18 tight name item
1126−186:23 glyph (
1127−186:24 tight name skim
1128−186:29 name rest
1129−186:34 name predicate
1130−186:43 tight glyph )
1131−186:44 tight glyph ]
1132187:13 NEWLINE
1131187:13 NEWLINE
1133−187:13 lit %.n
1132+187:13 glyph [
1133+187:14 tight lit ~
1134+187:16 name b
1135+187:17 tight glyph ]
1134−187:17 glyph (
1136+187:19 glyph (
1135−187:18 tight name skim
1137+187:20 tight name combine
1136−187:23 name rest
1137−187:28 name predicate
1138+187:28 name a
1139+187:30 name b
1138−187:37 tight glyph )
1140+187:31 tight glyph )
1139189:1 DEDENT
1141189:1 DEDENT
1140189:1 DEDENT
1142189:1 DEDENT
1141189:1 DEDENT
1143189:1 DEDENT
@@ -1144,7 +1146,7 @@
1144189:1 DEDENT
1146189:1 DEDENT
1145189:1 NEWLINE
1147189:1 NEWLINE
1146189:1 glyph ++
1148189:1 glyph ++
1147−189:4 name skip
1149+189:4 name skim
1148189:9 glyph |=
1150189:9 glyph |=
1149189:12 name args
1151189:12 name args
1150189:16 tight glyph =
1152189:16 tight glyph =
@@ -1185,21 +1187,21 @@
1185195:29 tight glyph )
1187195:29 tight glyph )
1186196:13 INDENT
1188196:13 INDENT
1187196:13 lit %.y
1189196:13 lit %.y
1188−196:17 glyph (
1190+196:17 glyph [
1189−196:18 tight name skip
1191+196:18 tight name item
1192+196:23 glyph (
1193+196:24 tight name skim
1190−196:23 name rest
1194+196:29 name rest
1191−196:28 name predicate
1195+196:34 name predicate
1192−196:37 tight glyph )
1196+196:43 tight glyph )
1197+196:44 tight glyph ]
1193197:13 NEWLINE
1198197:13 NEWLINE
1194197:13 lit %.n
1199197:13 lit %.n
1195−197:17 glyph [
1200+197:17 glyph (
1196−197:18 tight name item
1201+197:18 tight name skim
1197−197:23 glyph (
1198−197:24 tight name skip
1199−197:29 name rest
1202+197:23 name rest
1200−197:34 name predicate
1203+197:28 name predicate
1201−197:43 tight glyph )
1204+197:37 tight glyph )
1202−197:44 tight glyph ]
1203199:1 DEDENT
1205199:1 DEDENT
1204199:1 DEDENT
1206199:1 DEDENT
1205199:1 DEDENT
1207199:1 DEDENT
@@ -1208,7 +1210,7 @@
1208199:1 DEDENT
1210199:1 DEDENT
1209199:1 NEWLINE
1211199:1 NEWLINE
1210199:1 glyph ++
1212199:1 glyph ++
1211−199:4 name levy
1213+199:4 name skip
1212199:9 glyph |=
1214199:9 glyph |=
1213199:12 name args
1215199:12 name args
1214199:16 tight glyph =
1216199:16 tight glyph =
@@ -1235,7 +1237,7 @@
1235202:10 name xs
1237202:10 name xs
1236203:9 INDENT
1238203:9 INDENT
1237203:9 lit ~
1239203:9 lit ~
1238−203:11 lit %.y
1240+203:11 lit ~
1239204:9 NEWLINE
1241204:9 NEWLINE
1240204:9 glyph [
1242204:9 glyph [
1241204:10 tight name item
1243204:10 tight name item
@@ -1250,13 +1252,20 @@
1250206:13 INDENT
1252206:13 INDENT
1251206:13 lit %.y
1253206:13 lit %.y
1252206:17 glyph (
1254206:17 glyph (
1253−206:18 tight name levy
1255+206:18 tight name skip
1254206:23 name rest
1256206:23 name rest
1255206:28 name predicate
1257206:28 name predicate
1256206:37 tight glyph )
1258206:37 tight glyph )
1257207:13 NEWLINE
1259207:13 NEWLINE
1258207:13 lit %.n
1260207:13 lit %.n
1259−207:17 lit %.n
1261+207:17 glyph [
1262+207:18 tight name item
1263+207:23 glyph (
1264+207:24 tight name skip
1265+207:29 name rest
1266+207:34 name predicate
1267+207:43 tight glyph )
1268+207:44 tight glyph ]
1260209:1 DEDENT
1269209:1 DEDENT
1261209:1 DEDENT
1270209:1 DEDENT
1262209:1 DEDENT
1271209:1 DEDENT
@@ -1265,7 +1274,7 @@
1265209:1 DEDENT
1274209:1 DEDENT
1266209:1 NEWLINE
1275209:1 NEWLINE
1267209:1 glyph ++
1276209:1 glyph ++
1268−209:4 name lien
1277+209:4 name levy
1269209:9 glyph |=
1278209:9 glyph |=
1270209:12 name args
1279209:12 name args
1271209:16 tight glyph =
1280209:16 tight glyph =
@@ -1292,7 +1301,7 @@
1292212:10 name xs
1301212:10 name xs
1293213:9 INDENT
1302213:9 INDENT
1294213:9 lit ~
1303213:9 lit ~
1295−213:11 lit %.n
1304+213:11 lit %.y
1296214:9 NEWLINE
1305214:9 NEWLINE
1297214:9 glyph [
1306214:9 glyph [
1298214:10 tight name item
1307214:10 tight name item
@@ -1306,14 +1315,14 @@
1306215:29 tight glyph )
1315215:29 tight glyph )
1307216:13 INDENT
1316216:13 INDENT
1308216:13 lit %.y
1317216:13 lit %.y
1309−216:17 lit %.y
1318+216:17 glyph (
1319+216:18 tight name levy
1320+216:23 name rest
1321+216:28 name predicate
1322+216:37 tight glyph )
1310217:13 NEWLINE
1323217:13 NEWLINE
1311217:13 lit %.n
1324217:13 lit %.n
1312−217:17 glyph (
1325+217:17 lit %.n
1313−217:18 tight name lien
1314−217:23 name rest
1315−217:28 name predicate
1316−217:37 tight glyph )
1317219:1 DEDENT
1326219:1 DEDENT
1318219:1 DEDENT
1327219:1 DEDENT
1319219:1 DEDENT
1328219:1 DEDENT
@@ -1322,7 +1331,7 @@
1322219:1 DEDENT
1331219:1 DEDENT
1323219:1 NEWLINE
1332219:1 NEWLINE
1324219:1 glyph ++
1333219:1 glyph ++
1325−219:4 name roll
1334+219:4 name lien
1326219:9 glyph |=
1335219:9 glyph |=
1327219:12 name args
1336219:12 name args
1328219:16 tight glyph =
1337219:16 tight glyph =
@@ -1331,225 +1340,218 @@
1331219:19 tight name list
1340219:19 tight name list
1332219:24 tvar A
1341219:24 tvar A
1333219:25 tight glyph )
1342219:25 tight glyph )
1334−219:27 tvar B
1343+219:27 glyph $-(
1335−219:29 glyph $-(
1344+219:30 tight tvar A
1336−219:32 tight glyph [
1345+219:32 glyph ?
1337−219:33 tight tvar A
1346+219:33 tight glyph )
1338−219:35 tvar B
1339−219:36 tight glyph ]
1340−219:38 tvar B
1341−219:39 tight glyph )
1342−219:40 tight glyph ]
1347+219:34 tight glyph ]
1343220:3 INDENT
1348220:3 INDENT
1344220:3 glyph ?-
1349220:3 glyph ?-
1345220:6 name args
1350220:6 name args
1346221:5 INDENT
1351221:5 INDENT
1347221:5 glyph [
1352221:5 glyph [
1348221:6 tight name xs
1353221:6 tight name xs
1349−221:9 name start
1354+221:9 name predicate
1350−221:15 name combine
1351−221:22 tight glyph ]
1355+221:18 tight glyph ]
1352222:7 INDENT
1356222:7 INDENT
1353222:7 glyph ?-
1357222:7 glyph ?-
1354222:10 name xs
1358222:10 name xs
1355223:9 INDENT
1359223:9 INDENT
1356223:9 lit ~
1360223:9 lit ~
1357−223:11 name start
1361+223:11 lit %.n
1358224:9 NEWLINE
1362224:9 NEWLINE
1359224:9 glyph [
1363224:9 glyph [
1360224:10 tight name item
1364224:10 tight name item
1361224:15 name rest
1365224:15 name rest
1362224:19 tight glyph ]
1366224:19 tight glyph ]
1367+225:11 INDENT
1368+225:11 glyph ?-
1369+225:14 glyph (
1370+225:15 tight name predicate
1371+225:25 name item
1372+225:29 tight glyph )
1373+226:13 INDENT
1374+226:13 lit %.y
1375+226:17 lit %.y
1376+227:13 NEWLINE
1377+227:13 lit %.n
1378+227:17 glyph (
1379+227:18 tight name lien
1380+227:23 name rest
1381+227:28 name predicate
1382+227:37 tight glyph )
1383+229:1 DEDENT
1384+229:1 DEDENT
1385+229:1 DEDENT
1386+229:1 DEDENT
1387+229:1 DEDENT
1388+229:1 DEDENT
1389+229:1 NEWLINE
1390+229:1 glyph ++
1391+229:4 name roll
1392+229:9 glyph |=
1393+229:12 name args
1394+229:16 tight glyph =
1395+229:17 tight glyph [
1396+229:18 tight glyph (
1397+229:19 tight name list
1398+229:24 tvar A
1399+229:25 tight glyph )
1400+229:27 tvar B
1401+229:29 glyph $-(
1402+229:32 tight glyph [
1403+229:33 tight tvar A
1404+229:35 tvar B
1405+229:36 tight glyph ]
1406+229:38 tvar B
1407+229:39 tight glyph )
1408+229:40 tight glyph ]
1409+230:3 INDENT
1410+230:3 glyph ?-
1411+230:6 name args
1412+231:5 INDENT
1413+231:5 glyph [
1414+231:6 tight name xs
1415+231:9 name start
1416+231:15 name combine
1417+231:22 tight glyph ]
1418+232:7 INDENT
1419+232:7 glyph ?-
1420+232:10 name xs
1421+233:9 INDENT
1422+233:9 lit ~
1423+233:11 name start
1424+234:9 NEWLINE
1425+234:9 glyph [
1426+234:10 tight name item
1427+234:15 name rest
1428+234:19 tight glyph ]
1363−224:21 glyph (
1429+234:21 glyph (
1364−224:22 tight name roll
1430+234:22 tight name roll
1365−224:27 name rest
1431+234:27 name rest
1366−224:32 glyph (
1432+234:32 glyph (
1367−224:33 tight name combine
1433+234:33 tight name combine
1368−224:41 name item
1434+234:41 name item
1369−224:46 name start
1435+234:46 name start
1370−224:51 tight glyph )
1436+234:51 tight glyph )
1371−224:53 name combine
1437+234:53 name combine
1372−224:60 tight glyph )
1438+234:60 tight glyph )
1373−226:1 DEDENT
1439+236:1 DEDENT
1374−226:1 DEDENT
1440+236:1 DEDENT
1375−226:1 DEDENT
1441+236:1 DEDENT
1376−226:1 DEDENT
1442+236:1 DEDENT
1377−226:1 NEWLINE
1443+236:1 NEWLINE
1378−226:1 glyph ++
1444+236:1 glyph ++
1379−226:4 name reel
1445+236:4 name reel
1380−226:9 glyph |=
1446+236:9 glyph |=
1381−226:12 name args
1447+236:12 name args
1382−226:16 tight glyph =
1448+236:16 tight glyph =
1383−226:17 tight glyph [
1449+236:17 tight glyph [
1384−226:18 tight glyph (
1450+236:18 tight glyph (
1385−226:19 tight name list
1451+236:19 tight name list
1386−226:24 tvar A
1452+236:24 tvar A
1387−226:25 tight glyph )
1453+236:25 tight glyph )
1388−226:27 tvar B
1454+236:27 tvar B
1389−226:29 glyph $-(
1455+236:29 glyph $-(
1390−226:32 tight glyph [
1456+236:32 tight glyph [
1391−226:33 tight tvar A
1457+236:33 tight tvar A
1392−226:35 tvar B
1458+236:35 tvar B
1393−226:36 tight glyph ]
1459+236:36 tight glyph ]
1394−226:38 tvar B
1460+236:38 tvar B
1395−226:39 tight glyph )
1461+236:39 tight glyph )
1396−226:40 tight glyph ]
1462+236:40 tight glyph ]
1397−227:3 INDENT
1463+237:3 INDENT
1398−227:3 glyph ?-
1464+237:3 glyph ?-
1399−227:6 name args
1465+237:6 name args
1400−228:5 INDENT
1466+238:5 INDENT
1401−228:5 glyph [
1467+238:5 glyph [
1402−228:6 tight name xs
1468+238:6 tight name xs
1403−228:9 name start
1469+238:9 name start
1404−228:15 name combine
1470+238:15 name combine
1405−228:22 tight glyph ]
1471+238:22 tight glyph ]
1406−229:7 INDENT
1472+239:7 INDENT
1407−229:7 glyph ?-
1473+239:7 glyph ?-
1408−229:10 name xs
1474+239:10 name xs
1409−230:9 INDENT
1475+240:9 INDENT
1410−230:9 lit ~
1476+240:9 lit ~
1411−230:11 name start
1477+240:11 name start
1412−231:9 NEWLINE
1478+241:9 NEWLINE
1413−231:9 glyph [
1479+241:9 glyph [
1414−231:10 tight name item
1480+241:10 tight name item
1415−231:15 name rest
1481+241:15 name rest
1416−231:19 tight glyph ]
1482+241:19 tight glyph ]
1417−231:21 glyph (
1483+241:21 glyph (
1418−231:22 tight name combine
1484+241:22 tight name combine
1419−231:30 name item
1485+241:30 name item
1420−231:35 glyph (
1486+241:35 glyph (
1421−231:36 tight name reel
1487+241:36 tight name reel
1422−231:41 name rest
1488+241:41 name rest
1423−231:46 name start
1489+241:46 name start
1424−231:52 name combine
1490+241:52 name combine
1425−231:59 tight glyph )
1491+241:59 tight glyph )
1426−231:60 tight glyph )
1492+241:60 tight glyph )
1427−233:1 DEDENT
1493+243:1 DEDENT
1428−233:1 DEDENT
1494+243:1 DEDENT
1429−233:1 DEDENT
1495+243:1 DEDENT
1430−233:1 DEDENT
1496+243:1 DEDENT
1431−233:1 NEWLINE
1497+243:1 NEWLINE
1432−233:1 glyph ++
1498+243:1 glyph ++
1433−233:4 name flit
1499+243:4 name flit
1434−233:9 glyph |=
1500+243:9 glyph |=
1435−233:12 name predicate
1501+243:12 name predicate
1436−233:21 tight glyph =
1502+243:21 tight glyph =
1437−233:22 tight glyph $-(
1503+243:22 tight glyph $-(
1438−233:25 tight tvar A
1504+243:25 tight tvar A
1439−233:27 glyph ?
1505+243:27 glyph ?
1440−233:28 tight glyph )
1506+243:28 tight glyph )
1441−234:3 INDENT
1507+244:3 INDENT
1442−234:3 glyph |=
1508+244:3 glyph |=
1443−234:6 name value
1509+244:6 name value
1444−234:11 tight glyph =
1510+244:11 tight glyph =
1445−234:12 tight tvar A
1511+244:12 tight tvar A
1446−235:5 INDENT
1512+245:5 INDENT
1447−235:5 glyph ?-
1513+245:5 glyph ?-
1448−235:8 glyph (
1514+245:8 glyph (
1449−235:9 tight name predicate
1515+245:9 tight name predicate
1450−235:19 name value
1516+245:19 name value
1451−235:24 tight glyph )
1517+245:24 tight glyph )
1452−236:7 INDENT
1518+246:7 INDENT
1453−236:7 lit %.y
1519+246:7 lit %.y
1454−236:11 glyph `
1520+246:11 glyph `
1455−236:12 tight name value
1521+246:12 tight name value
1456−237:7 NEWLINE
1522+247:7 NEWLINE
1457−237:7 lit %.n
1523+247:7 lit %.n
1458−237:11 lit ~
1524+247:11 lit ~
1459−239:1 DEDENT
1460−239:1 DEDENT
1461−239:1 DEDENT
1462−239:1 NEWLINE
1463−239:1 glyph ++
1464−239:4 name murn
1465−239:9 glyph |=
1466−239:12 name args
1467−239:16 tight glyph =
1468−239:17 tight glyph [
1469−239:18 tight glyph (
1470−239:19 tight name list
1471−239:24 tvar A
1472−239:25 tight glyph )
1473−239:27 glyph $-(
1474−239:30 tight tvar A
1475−239:32 glyph (
1476−239:33 tight name unit
1477−239:38 tvar B
1478−239:39 tight glyph )
1479−239:40 tight glyph )
1480−239:41 tight glyph ]
1481−240:3 INDENT
1482−240:3 glyph ?-
1483−240:6 name args
1484−241:5 INDENT
1485−241:5 glyph [
1486−241:6 tight name xs
1487−241:9 name f
1488−241:10 tight glyph ]
1489−242:7 INDENT
1490−242:7 glyph ?-
1491−242:10 name xs
1492−243:9 INDENT
1493−243:9 lit ~
1494−243:11 lit ~
1495−244:9 NEWLINE
1496−244:9 glyph [
1497−244:10 tight name item
1498−244:15 name rest
1499−244:19 tight glyph ]
1500−245:11 INDENT
1501−245:11 glyph ?-
1502−245:14 glyph (
1503−245:15 tight name f
1504−245:17 name item
1505−245:21 tight glyph )
1506−246:13 INDENT
1507−246:13 lit ~
1508−246:15 glyph (
1509−246:16 tight name murn
1510−246:21 name rest
1511−246:26 name f
1512−246:27 tight glyph )
1513−247:13 NEWLINE
1514−247:13 glyph [
1515−247:14 tight lit ~
1516−247:16 name value
1517−247:21 tight glyph ]
1518−247:23 glyph [
1519−247:24 tight name value
1520−247:30 glyph (
1521−247:31 tight name murn
1522−247:36 name rest
1523−247:41 name f
1524−247:42 tight glyph )
1525−247:43 tight glyph ]
1526−249:1 DEDENT
1527−249:1 DEDENT
1528−249:1 DEDENT
1529249:1 DEDENT
1525249:1 DEDENT
1530249:1 DEDENT
1526249:1 DEDENT
1531249:1 DEDENT
1527249:1 DEDENT
1532249:1 NEWLINE
1528249:1 NEWLINE
1533249:1 glyph ++
1529249:1 glyph ++
1534−249:4 name join
1530+249:4 name murn
1535249:9 glyph |=
1531249:9 glyph |=
1536249:12 name args
1532249:12 name args
1537249:16 tight glyph =
1533249:16 tight glyph =
1538249:17 tight glyph [
1534249:17 tight glyph [
1539−249:18 tight tvar A
1535+249:18 tight glyph (
1540−249:20 glyph (
1541−249:21 tight name list
1536+249:19 tight name list
1542−249:26 tvar A
1537+249:24 tvar A
1538+249:25 tight glyph )
1539+249:27 glyph $-(
1540+249:30 tight tvar A
1541+249:32 glyph (
1542+249:33 tight name unit
1543+249:38 tvar B
1544+249:39 tight glyph )
1543−249:27 tight glyph )
1545+249:40 tight glyph )
1544−249:28 tight glyph ]
1546+249:41 tight glyph ]
1545250:3 INDENT
1547250:3 INDENT
1546250:3 glyph ?-
1548250:3 glyph ?-
1547250:6 name args
1549250:6 name args
1548251:5 INDENT
1550251:5 INDENT
1549251:5 glyph [
1551251:5 glyph [
1550−251:6 tight name separator
1552+251:6 tight name xs
1551−251:16 name xs
1553+251:9 name f
1552−251:18 tight glyph ]
1554+251:10 tight glyph ]
1553252:7 INDENT
1555252:7 INDENT
1554252:7 glyph ?-
1556252:7 glyph ?-
1555252:10 name xs
1557252:10 name xs
@@ -1563,29 +1565,30 @@
1563254:19 tight glyph ]
1565254:19 tight glyph ]
1564255:11 INDENT
1566255:11 INDENT
1565255:11 glyph ?-
1567255:11 glyph ?-
1566−255:14 name rest
1568+255:14 glyph (
1569+255:15 tight name f
1570+255:17 name item
1571+255:21 tight glyph )
1567256:13 INDENT
1572256:13 INDENT
1568256:13 lit ~
1573256:13 lit ~
1569−256:15 glyph [
1574+256:15 glyph (
1570−256:16 tight name item
1575+256:16 tight name murn
1571−256:21 lit ~
1576+256:21 name rest
1577+256:26 name f
1572−256:22 tight glyph ]
1578+256:27 tight glyph )
1573257:13 NEWLINE
1579257:13 NEWLINE
1574257:13 glyph [
1580257:13 glyph [
1575−257:14 tight name next
1581+257:14 tight lit ~
1576−257:19 name more
1582+257:16 name value
1583+257:21 tight glyph ]
1577−257:23 tight glyph ]
1584+257:23 glyph [
1578−257:25 glyph [
1585+257:24 tight name value
1579−257:26 tight name item
1586+257:30 glyph (
1580−257:31 glyph [
1581−257:32 tight name separator
1587+257:31 tight name murn
1582−257:42 glyph (
1583−257:43 tight name join
1584−257:48 name separator
1585−257:58 name rest
1588+257:36 name rest
1589+257:41 name f
1586−257:62 tight glyph )
1590+257:42 tight glyph )
1587−257:63 tight glyph ]
1588−257:64 tight glyph ]
1591+257:43 tight glyph ]
1589259:1 DEDENT
1592259:1 DEDENT
1590259:1 DEDENT
1593259:1 DEDENT
1591259:1 DEDENT
1594259:1 DEDENT
@@ -1594,85 +1597,148 @@
1594259:1 DEDENT
1597259:1 DEDENT
1595259:1 NEWLINE
1598259:1 NEWLINE
1596259:1 glyph ++
1599259:1 glyph ++
1597−259:4 name snip
1600+259:4 name join
1598259:9 glyph |=
1601259:9 glyph |=
1599−259:12 name xs
1602+259:12 name args
1600−259:14 tight glyph =
1603+259:16 tight glyph =
1604+259:17 tight glyph [
1605+259:18 tight tvar A
1601−259:15 tight glyph (
1606+259:20 glyph (
1602−259:16 tight name list
1607+259:21 tight name list
1603−259:21 tvar A
1608+259:26 tvar A
1604−259:22 tight glyph )
1609+259:27 tight glyph )
1610+259:28 tight glyph ]
1605260:3 INDENT
1611260:3 INDENT
1606260:3 glyph ?-
1612260:3 glyph ?-
1607−260:6 name xs
1613+260:6 name args
1608261:5 INDENT
1614261:5 INDENT
1609−261:5 lit ~
1615+261:5 glyph [
1616+261:6 tight name separator
1617+261:16 name xs
1618+261:18 tight glyph ]
1619+262:7 INDENT
1620+262:7 glyph ?-
1621+262:10 name xs
1622+263:9 INDENT
1623+263:9 lit ~
1624+263:11 lit ~
1625+264:9 NEWLINE
1626+264:9 glyph [
1627+264:10 tight name item
1628+264:15 name rest
1629+264:19 tight glyph ]
1630+265:11 INDENT
1631+265:11 glyph ?-
1632+265:14 name rest
1633+266:13 INDENT
1634+266:13 lit ~
1635+266:15 glyph [
1636+266:16 tight name item
1637+266:21 lit ~
1638+266:22 tight glyph ]
1639+267:13 NEWLINE
1640+267:13 glyph [
1641+267:14 tight name next
1642+267:19 name more
1643+267:23 tight glyph ]
1644+267:25 glyph [
1645+267:26 tight name item
1646+267:31 glyph [
1647+267:32 tight name separator
1648+267:42 glyph (
1649+267:43 tight name join
1650+267:48 name separator
1651+267:58 name rest
1652+267:62 tight glyph )
1653+267:63 tight glyph ]
1654+267:64 tight glyph ]
1655+269:1 DEDENT
1656+269:1 DEDENT
1657+269:1 DEDENT
1658+269:1 DEDENT
1659+269:1 DEDENT
1660+269:1 DEDENT
1661+269:1 NEWLINE
1662+269:1 glyph ++
1663+269:4 name snip
1664+269:9 glyph |=
1665+269:12 name xs
1666+269:14 tight glyph =
1667+269:15 tight glyph (
1668+269:16 tight name list
1669+269:21 tvar A
1670+269:22 tight glyph )
1671+270:3 INDENT
1672+270:3 glyph ?-
1673+270:6 name xs
1674+271:5 INDENT
1675+271:5 lit ~
1610−261:7 lit ~
1676+271:7 lit ~
1611−262:5 NEWLINE
1677+272:5 NEWLINE
1612−262:5 glyph [
1678+272:5 glyph [
1613−262:6 tight name item
1679+272:6 tight name item
1614−262:11 name rest
1680+272:11 name rest
1615−262:15 tight glyph ]
1681+272:15 tight glyph ]
1616−263:7 INDENT
1682+273:7 INDENT
1617−263:7 glyph ?-
1683+273:7 glyph ?-
1618−263:10 name rest
1684+273:10 name rest
1619−264:9 INDENT
1685+274:9 INDENT
1620−264:9 lit ~
1686+274:9 lit ~
1621−264:11 lit ~
1687+274:11 lit ~
1622−265:9 NEWLINE
1688+275:9 NEWLINE
1623−265:9 glyph [
1689+275:9 glyph [
1624−265:10 tight name next
1690+275:10 tight name next
1625−265:15 name more
1691+275:15 name more
1626−265:19 tight glyph ]
1692+275:19 tight glyph ]
1627−265:21 glyph [
1693+275:21 glyph [
1628−265:22 tight name item
1694+275:22 tight name item
1629−265:27 glyph (
1695+275:27 glyph (
1630−265:28 tight name snip
1696+275:28 tight name snip
1631−265:33 name rest
1697+275:33 name rest
1632−265:37 tight glyph )
1698+275:37 tight glyph )
1633−265:38 tight glyph ]
1699+275:38 tight glyph ]
1634−267:1 DEDENT
1700+277:1 DEDENT
1635−267:1 DEDENT
1701+277:1 DEDENT
1636−267:1 DEDENT
1702+277:1 DEDENT
1637−267:1 DEDENT
1703+277:1 DEDENT
1638−267:1 NEWLINE
1704+277:1 NEWLINE
1639−267:1 glyph ++
1705+277:1 glyph ++
1640−267:4 name rear
1706+277:4 name rear
1641−267:9 glyph |=
1707+277:9 glyph |=
1642−267:12 name xs
1708+277:12 name xs
1643−267:14 tight glyph =
1709+277:14 tight glyph =
1644−267:15 tight glyph (
1710+277:15 tight glyph (
1645−267:16 tight name list
1711+277:16 tight name list
1646−267:21 tvar A
1712+277:21 tvar A
1647−267:22 tight glyph )
1713+277:22 tight glyph )
1648−268:3 INDENT
1714+278:3 INDENT
1649−268:3 glyph ?-
1715+278:3 glyph ?-
1650−268:6 name xs
1716+278:6 name xs
1651−269:5 INDENT
1717+279:5 INDENT
1652−269:5 lit ~
1718+279:5 lit ~
1653−269:7 glyph !!
1719+279:7 glyph !!
1654−270:5 NEWLINE
1720+280:5 NEWLINE
1655−270:5 glyph [
1721+280:5 glyph [
1656−270:6 tight name item
1722+280:6 tight name item
1657−270:11 name rest
1723+280:11 name rest
1658−270:15 tight glyph ]
1724+280:15 tight glyph ]
1659−271:7 INDENT
1725+281:7 INDENT
1660−271:7 glyph ?-
1726+281:7 glyph ?-
1661−271:10 name rest
1727+281:10 name rest
1662−272:9 INDENT
1728+282:9 INDENT
1663−272:9 lit ~
1729+282:9 lit ~
1664−272:11 name item
1730+282:11 name item
1665−273:9 NEWLINE
1731+283:9 NEWLINE
1666−273:9 glyph [
1732+283:9 glyph [
1667−273:10 tight name next
1733+283:10 tight name next
1668−273:15 name more
1734+283:15 name more
1669−273:19 tight glyph ]
1735+283:19 tight glyph ]
1670−273:21 glyph (
1736+283:21 glyph (
1671−273:22 tight name rear
1737+283:22 tight name rear
1672−273:27 name rest
1738+283:27 name rest
1673−273:31 tight glyph )
1739+283:31 tight glyph )
1674−273:32 DEDENT
1740+283:32 DEDENT
1675−273:32 DEDENT
1741+283:32 DEDENT
1676−273:32 DEDENT
1742+283:32 DEDENT
1677−273:32 DEDENT
1743+283:32 DEDENT
1678−273:32 NEWLINE
1744+283:32 NEWLINE
tests/golden/prelude-unit-list-transforms/tree.txt+208−179
@@ -415,15 +415,15 @@
415 (cell 167:13 (lit 167:14 ~) (bind 167:16 b))
415 (cell 167:13 (lit 167:14 ~) (bind 167:16 b))
416 (unit 167:19
416 (unit 167:19
417 (tuple 167:20 (wing 167:21 a) (wing 167:23 b))))))))))))))
417 (tuple 167:20 (wing 167:21 a) (wing 167:23 b))))))))))))))
418− (value 169:1 clef
418+ (value 169:1 clap
419 (gate 169:9
419 (gate 169:9
420 (face 169:12 args
420 (face 169:12 args
421 (cell 169:17
421 (cell 169:17
422 (apply 169:18 unit (tvar 169:24 A))
422 (apply 169:18 unit (tvar 169:24 A))
423− (apply 169:27 unit (tvar 169:33 B))
423+ (apply 169:27 unit (tvar 169:33 A))
424 (fn 169:36
424 (fn 169:36
425− (cell 169:39 (tvar 169:40 A) (tvar 169:42 B))
425+ (cell 169:39 (tvar 169:40 A) (tvar 169:42 A))
426− (apply 169:45 unit (tvar 169:51 C)))))
426+ (tvar 169:45 A))))
427 (body 170:3
427 (body 170:3
428 (branch 170:3
428 (branch 170:3
429 (wing 170:6 args)
429 (wing 170:6 args)
@@ -432,49 +432,47 @@
432 (body 172:7
432 (body 172:7
433 (branch 172:7
433 (branch 172:7
434 (wing 172:10 first)
434 (wing 172:10 first)
435− (arm 173:9 (lit 173:9 ~) (lit 173:11 ~))
435+ (arm 173:9 (lit 173:9 ~) (wing 173:11 second))
436 (arm 174:9
436 (arm 174:9
437 (cell 174:9 (lit 174:10 ~) (bind 174:12 a))
437 (cell 174:9 (lit 174:10 ~) (bind 174:12 a))
438 (body 175:11
438 (body 175:11
439 (branch 175:11
439 (branch 175:11
440 (wing 175:14 second)
440 (wing 175:14 second)
441− (arm 176:13 (lit 176:13 ~) (lit 176:15 ~))
441+ (arm 176:13 (lit 176:13 ~) (wing 176:15 first))
442 (arm 177:13
442 (arm 177:13
443 (cell 177:13 (lit 177:14 ~) (bind 177:16 b))
443 (cell 177:13 (lit 177:14 ~) (bind 177:16 b))
444− (group 177:19
444+ (unit 177:19
445+ (group 177:20
445− (call 177:20 (wing 177:20 combine) (wing 177:28 a) (wing 177:30 b))))))))))))))
446+ (call 177:21 (wing 177:21 combine) (wing 177:29 a) (wing 177:31 b)))))))))))))))
446− (value 179:1 skim
447+ (value 179:1 clef
447 (gate 179:9
448 (gate 179:9
448 (face 179:12 args
449 (face 179:12 args
449 (cell 179:17
450 (cell 179:17
450− (apply 179:18 list (tvar 179:24 A))
451+ (apply 179:18 unit (tvar 179:24 A))
451− (fn 179:27 (tvar 179:30 A) (flag 179:32))))
452+ (apply 179:27 unit (tvar 179:33 B))
453+ (fn 179:36
454+ (cell 179:39 (tvar 179:40 A) (tvar 179:42 B))
455+ (apply 179:45 unit (tvar 179:51 C)))))
452 (body 180:3
456 (body 180:3
453 (branch 180:3
457 (branch 180:3
454 (wing 180:6 args)
458 (wing 180:6 args)
455 (arm 181:5
459 (arm 181:5
456− (cell 181:5 (bind 181:6 xs) (bind 181:9 predicate))
460+ (cell 181:5 (bind 181:6 first) (bind 181:12 second) (bind 181:19 combine))
457 (body 182:7
461 (body 182:7
458 (branch 182:7
462 (branch 182:7
459− (wing 182:10 xs)
463+ (wing 182:10 first)
460 (arm 183:9 (lit 183:9 ~) (lit 183:11 ~))
464 (arm 183:9 (lit 183:9 ~) (lit 183:11 ~))
461 (arm 184:9
465 (arm 184:9
462− (cell 184:9 (bind 184:10 item) (bind 184:15 rest))
466+ (cell 184:9 (lit 184:10 ~) (bind 184:12 a))
463 (body 185:11
467 (body 185:11
464 (branch 185:11
468 (branch 185:11
465− (group 185:14
469+ (wing 185:14 second)
466− (call 185:15 (wing 185:15 predicate) (wing 185:25 item)))
467− (arm 186:13
470+ (arm 186:13 (lit 186:13 ~) (lit 186:15 ~))
468− (lit 186:13 %.y)
469− (tuple 186:17
470− (wing 186:18 item)
471− (group 186:23
472− (call 186:24 (wing 186:24 skim) (wing 186:29 rest) (wing 186:34 predicate)))))
473 (arm 187:13
471 (arm 187:13
474− (lit 187:13 %.n)
472+ (cell 187:13 (lit 187:14 ~) (bind 187:16 b))
475− (group 187:17
473+ (group 187:19
476− (call 187:18 (wing 187:18 skim) (wing 187:23 rest) (wing 187:28 predicate))))))))))))))
474+ (call 187:20 (wing 187:20 combine) (wing 187:28 a) (wing 187:30 b))))))))))))))
477− (value 189:1 skip
475+ (value 189:1 skim
478 (gate 189:9
476 (gate 189:9
479 (face 189:12 args
477 (face 189:12 args
480 (cell 189:17
478 (cell 189:17
@@ -497,15 +495,15 @@
497 (call 195:15 (wing 195:15 predicate) (wing 195:25 item)))
495 (call 195:15 (wing 195:15 predicate) (wing 195:25 item)))
498 (arm 196:13
496 (arm 196:13
499 (lit 196:13 %.y)
497 (lit 196:13 %.y)
500− (group 196:17
498+ (tuple 196:17
501− (call 196:18 (wing 196:18 skip) (wing 196:23 rest) (wing 196:28 predicate))))
499+ (wing 196:18 item)
500+ (group 196:23
501+ (call 196:24 (wing 196:24 skim) (wing 196:29 rest) (wing 196:34 predicate)))))
502 (arm 197:13
502 (arm 197:13
503 (lit 197:13 %.n)
503 (lit 197:13 %.n)
504− (tuple 197:17
504+ (group 197:17
505− (wing 197:18 item)
505+ (call 197:18 (wing 197:18 skim) (wing 197:23 rest) (wing 197:28 predicate))))))))))))))
506− (group 197:23
507− (call 197:24 (wing 197:24 skip) (wing 197:29 rest) (wing 197:34 predicate)))))))))))))))
508− (value 199:1 levy
506+ (value 199:1 skip
509 (gate 199:9
507 (gate 199:9
510 (face 199:12 args
508 (face 199:12 args
511 (cell 199:17
509 (cell 199:17
@@ -519,7 +517,7 @@
519 (body 202:7
517 (body 202:7
520 (branch 202:7
518 (branch 202:7
521 (wing 202:10 xs)
519 (wing 202:10 xs)
522− (arm 203:9 (lit 203:9 ~) (lit 203:11 %.y))
520+ (arm 203:9 (lit 203:9 ~) (lit 203:11 ~))
523 (arm 204:9
521 (arm 204:9
524 (cell 204:9 (bind 204:10 item) (bind 204:15 rest))
522 (cell 204:9 (bind 204:10 item) (bind 204:15 rest))
525 (body 205:11
523 (body 205:11
@@ -529,9 +527,14 @@
529 (arm 206:13
527 (arm 206:13
530 (lit 206:13 %.y)
528 (lit 206:13 %.y)
531 (group 206:17
529 (group 206:17
532− (call 206:18 (wing 206:18 levy) (wing 206:23 rest) (wing 206:28 predicate))))
530+ (call 206:18 (wing 206:18 skip) (wing 206:23 rest) (wing 206:28 predicate))))
531+ (arm 207:13
533− (arm 207:13 (lit 207:13 %.n) (lit 207:17 %.n))))))))))))
532+ (lit 207:13 %.n)
533+ (tuple 207:17
534+ (wing 207:18 item)
535+ (group 207:23
536+ (call 207:24 (wing 207:24 skip) (wing 207:29 rest) (wing 207:34 predicate)))))))))))))))
534− (value 209:1 lien
537+ (value 209:1 levy
535 (gate 209:9
538 (gate 209:9
536 (face 209:12 args
539 (face 209:12 args
537 (cell 209:17
540 (cell 209:17
@@ -545,130 +548,125 @@
545 (body 212:7
548 (body 212:7
546 (branch 212:7
549 (branch 212:7
547 (wing 212:10 xs)
550 (wing 212:10 xs)
548− (arm 213:9 (lit 213:9 ~) (lit 213:11 %.n))
551+ (arm 213:9 (lit 213:9 ~) (lit 213:11 %.y))
549 (arm 214:9
552 (arm 214:9
550 (cell 214:9 (bind 214:10 item) (bind 214:15 rest))
553 (cell 214:9 (bind 214:10 item) (bind 214:15 rest))
551 (body 215:11
554 (body 215:11
552 (branch 215:11
555 (branch 215:11
553 (group 215:14
556 (group 215:14
554 (call 215:15 (wing 215:15 predicate) (wing 215:25 item)))
557 (call 215:15 (wing 215:15 predicate) (wing 215:25 item)))
555− (arm 216:13 (lit 216:13 %.y) (lit 216:17 %.y))
558+ (arm 216:13
556− (arm 217:13
557− (lit 217:13 %.n)
559+ (lit 216:13 %.y)
558− (group 217:17
560+ (group 216:17
559− (call 217:18 (wing 217:18 lien) (wing 217:23 rest) (wing 217:28 predicate))))))))))))))
561+ (call 216:18 (wing 216:18 levy) (wing 216:23 rest) (wing 216:28 predicate))))
562+ (arm 217:13 (lit 217:13 %.n) (lit 217:17 %.n))))))))))))
560− (value 219:1 roll
563+ (value 219:1 lien
561 (gate 219:9
564 (gate 219:9
562 (face 219:12 args
565 (face 219:12 args
563 (cell 219:17
566 (cell 219:17
564 (apply 219:18 list (tvar 219:24 A))
567 (apply 219:18 list (tvar 219:24 A))
565− (tvar 219:27 B)
566− (fn 219:29
567− (cell 219:32 (tvar 219:33 A) (tvar 219:35 B))
568+ (fn 219:27 (tvar 219:30 A) (flag 219:32))))
568− (tvar 219:38 B))))
569 (body 220:3
569 (body 220:3
570 (branch 220:3
570 (branch 220:3
571 (wing 220:6 args)
571 (wing 220:6 args)
572 (arm 221:5
572 (arm 221:5
573− (cell 221:5 (bind 221:6 xs) (bind 221:9 start) (bind 221:15 combine))
573+ (cell 221:5 (bind 221:6 xs) (bind 221:9 predicate))
574 (body 222:7
574 (body 222:7
575 (branch 222:7
575 (branch 222:7
576 (wing 222:10 xs)
576 (wing 222:10 xs)
577− (arm 223:9 (lit 223:9 ~) (wing 223:11 start))
577+ (arm 223:9 (lit 223:9 ~) (lit 223:11 %.n))
578 (arm 224:9
578 (arm 224:9
579 (cell 224:9 (bind 224:10 item) (bind 224:15 rest))
579 (cell 224:9 (bind 224:10 item) (bind 224:15 rest))
580+ (body 225:11
581+ (branch 225:11
580− (group 224:21
582+ (group 225:14
583+ (call 225:15 (wing 225:15 predicate) (wing 225:25 item)))
584+ (arm 226:13 (lit 226:13 %.y) (lit 226:17 %.y))
585+ (arm 227:13
586+ (lit 227:13 %.n)
587+ (group 227:17
588+ (call 227:18 (wing 227:18 lien) (wing 227:23 rest) (wing 227:28 predicate))))))))))))))
589+ (value 229:1 roll
590+ (gate 229:9
591+ (face 229:12 args
592+ (cell 229:17
593+ (apply 229:18 list (tvar 229:24 A))
594+ (tvar 229:27 B)
595+ (fn 229:29
596+ (cell 229:32 (tvar 229:33 A) (tvar 229:35 B))
597+ (tvar 229:38 B))))
598+ (body 230:3
599+ (branch 230:3
600+ (wing 230:6 args)
601+ (arm 231:5
602+ (cell 231:5 (bind 231:6 xs) (bind 231:9 start) (bind 231:15 combine))
603+ (body 232:7
604+ (branch 232:7
605+ (wing 232:10 xs)
606+ (arm 233:9 (lit 233:9 ~) (wing 233:11 start))
607+ (arm 234:9
608+ (cell 234:9 (bind 234:10 item) (bind 234:15 rest))
609+ (group 234:21
581− (call 224:22
610+ (call 234:22
582− (wing 224:22 roll)
611+ (wing 234:22 roll)
583− (wing 224:27 rest)
612+ (wing 234:27 rest)
584− (group 224:32
613+ (group 234:32
585− (call 224:33 (wing 224:33 combine) (wing 224:41 item) (wing 224:46 start)))
614+ (call 234:33 (wing 234:33 combine) (wing 234:41 item) (wing 234:46 start)))
586− (wing 224:53 combine)))))))))))
615+ (wing 234:53 combine)))))))))))
587− (value 226:1 reel
616+ (value 236:1 reel
588− (gate 226:9
617+ (gate 236:9
589− (face 226:12 args
618+ (face 236:12 args
590− (cell 226:17
619+ (cell 236:17
591− (apply 226:18 list (tvar 226:24 A))
620+ (apply 236:18 list (tvar 236:24 A))
592− (tvar 226:27 B)
621+ (tvar 236:27 B)
593− (fn 226:29
622+ (fn 236:29
594− (cell 226:32 (tvar 226:33 A) (tvar 226:35 B))
623+ (cell 236:32 (tvar 236:33 A) (tvar 236:35 B))
595− (tvar 226:38 B))))
624+ (tvar 236:38 B))))
596− (body 227:3
625+ (body 237:3
597− (branch 227:3
626+ (branch 237:3
598− (wing 227:6 args)
627+ (wing 237:6 args)
599− (arm 228:5
628+ (arm 238:5
600− (cell 228:5 (bind 228:6 xs) (bind 228:9 start) (bind 228:15 combine))
629+ (cell 238:5 (bind 238:6 xs) (bind 238:9 start) (bind 238:15 combine))
601− (body 229:7
630+ (body 239:7
602− (branch 229:7
631+ (branch 239:7
603− (wing 229:10 xs)
632+ (wing 239:10 xs)
604− (arm 230:9 (lit 230:9 ~) (wing 230:11 start))
633+ (arm 240:9 (lit 240:9 ~) (wing 240:11 start))
605− (arm 231:9
634+ (arm 241:9
606− (cell 231:9 (bind 231:10 item) (bind 231:15 rest))
635+ (cell 241:9 (bind 241:10 item) (bind 241:15 rest))
607− (group 231:21
636+ (group 241:21
608− (call 231:22
637+ (call 241:22
609− (wing 231:22 combine)
638+ (wing 241:22 combine)
610− (wing 231:30 item)
639+ (wing 241:30 item)
611− (group 231:35
640+ (group 241:35
612− (call 231:36 (wing 231:36 reel) (wing 231:41 rest) (wing 231:46 start) (wing 231:52 combine)))))))))))))
641+ (call 241:36 (wing 241:36 reel) (wing 241:41 rest) (wing 241:46 start) (wing 241:52 combine)))))))))))))
613− (value 233:1 flit
642+ (value 243:1 flit
614− (gate 233:9
643+ (gate 243:9
615− (face 233:12 predicate
644+ (face 243:12 predicate
616− (fn 233:22 (tvar 233:25 A) (flag 233:27)))
645+ (fn 243:22 (tvar 243:25 A) (flag 243:27)))
617− (body 234:3
646+ (body 244:3
618− (gate 234:3
647+ (gate 244:3
619− (face 234:6 value (tvar 234:12 A))
648+ (face 244:6 value (tvar 244:12 A))
620− (body 235:5
649+ (body 245:5
621− (branch 235:5
650+ (branch 245:5
622− (group 235:8
651+ (group 245:8
623− (call 235:9 (wing 235:9 predicate) (wing 235:19 value)))
652+ (call 245:9 (wing 245:9 predicate) (wing 245:19 value)))
624− (arm 236:7
653+ (arm 246:7
625− (lit 236:7 %.y)
654+ (lit 246:7 %.y)
626− (unit 236:11 (wing 236:12 value)))
655+ (unit 246:11 (wing 246:12 value)))
627− (arm 237:7 (lit 237:7 %.n) (lit 237:11 ~))))))))
656+ (arm 247:7 (lit 247:7 %.n) (lit 247:11 ~))))))))
628− (value 239:1 murn
629− (gate 239:9
630− (face 239:12 args
631− (cell 239:17
632− (apply 239:18 list (tvar 239:24 A))
633− (fn 239:27
634− (tvar 239:30 A)
635− (apply 239:32 unit (tvar 239:38 B)))))
636− (body 240:3
637− (branch 240:3
638− (wing 240:6 args)
639− (arm 241:5
640− (cell 241:5 (bind 241:6 xs) (bind 241:9 f))
641− (body 242:7
642− (branch 242:7
643− (wing 242:10 xs)
644− (arm 243:9 (lit 243:9 ~) (lit 243:11 ~))
645− (arm 244:9
646− (cell 244:9 (bind 244:10 item) (bind 244:15 rest))
647− (body 245:11
648− (branch 245:11
649− (group 245:14
650− (call 245:15 (wing 245:15 f) (wing 245:17 item)))
651− (arm 246:13
652− (lit 246:13 ~)
653− (group 246:15
654− (call 246:16 (wing 246:16 murn) (wing 246:21 rest) (wing 246:26 f))))
655− (arm 247:13
656− (cell 247:13 (lit 247:14 ~) (bind 247:16 value))
657− (tuple 247:23
658− (wing 247:24 value)
659− (group 247:30
660− (call 247:31 (wing 247:31 murn) (wing 247:36 rest) (wing 247:41 f)))))))))))))))
661− (value 249:1 join
657+ (value 249:1 murn
662 (gate 249:9
658 (gate 249:9
663 (face 249:12 args
659 (face 249:12 args
664 (cell 249:17
660 (cell 249:17
665− (tvar 249:18 A)
666− (apply 249:20 list (tvar 249:26 A))))
661+ (apply 249:18 list (tvar 249:24 A))
662+ (fn 249:27
663+ (tvar 249:30 A)
664+ (apply 249:32 unit (tvar 249:38 B)))))
667 (body 250:3
665 (body 250:3
668 (branch 250:3
666 (branch 250:3
669 (wing 250:6 args)
667 (wing 250:6 args)
670 (arm 251:5
668 (arm 251:5
671− (cell 251:5 (bind 251:6 separator) (bind 251:16 xs))
669+ (cell 251:5 (bind 251:6 xs) (bind 251:9 f))
672 (body 252:7
670 (body 252:7
673 (branch 252:7
671 (branch 252:7
674 (wing 252:10 xs)
672 (wing 252:10 xs)
@@ -677,53 +675,84 @@
677 (cell 254:9 (bind 254:10 item) (bind 254:15 rest))
675 (cell 254:9 (bind 254:10 item) (bind 254:15 rest))
678 (body 255:11
676 (body 255:11
679 (branch 255:11
677 (branch 255:11
680− (wing 255:14 rest)
678+ (group 255:14
679+ (call 255:15 (wing 255:15 f) (wing 255:17 item)))
681 (arm 256:13
680 (arm 256:13
682 (lit 256:13 ~)
681 (lit 256:13 ~)
683− (tuple 256:15 (wing 256:16 item) (lit 256:21 ~)))
682+ (group 256:15
683+ (call 256:16 (wing 256:16 murn) (wing 256:21 rest) (wing 256:26 f))))
684 (arm 257:13
684 (arm 257:13
685− (cell 257:13 (bind 257:14 next) (bind 257:19 more))
685+ (cell 257:13 (lit 257:14 ~) (bind 257:16 value))
686− (tuple 257:25
686+ (tuple 257:23
687− (wing 257:26 item)
687+ (wing 257:24 value)
688− (tuple 257:31
689− (wing 257:32 separator)
690− (group 257:42
688+ (group 257:30
691− (call 257:43 (wing 257:43 join) (wing 257:48 separator) (wing 257:58 rest))))))))))))))))
689+ (call 257:31 (wing 257:31 murn) (wing 257:36 rest) (wing 257:41 f)))))))))))))))
692− (value 259:1 snip
690+ (value 259:1 join
693 (gate 259:9
691 (gate 259:9
694− (face 259:12 xs
692+ (face 259:12 args
693+ (cell 259:17
694+ (tvar 259:18 A)
695− (apply 259:15 list (tvar 259:21 A)))
695+ (apply 259:20 list (tvar 259:26 A))))
696 (body 260:3
696 (body 260:3
697 (branch 260:3
697 (branch 260:3
698− (wing 260:6 xs)
698+ (wing 260:6 args)
699− (arm 261:5 (lit 261:5 ~) (lit 261:7 ~))
699+ (arm 261:5
700+ (cell 261:5 (bind 261:6 separator) (bind 261:16 xs))
701+ (body 262:7
702+ (branch 262:7
703+ (wing 262:10 xs)
704+ (arm 263:9 (lit 263:9 ~) (lit 263:11 ~))
705+ (arm 264:9
706+ (cell 264:9 (bind 264:10 item) (bind 264:15 rest))
707+ (body 265:11
708+ (branch 265:11
709+ (wing 265:14 rest)
710+ (arm 266:13
711+ (lit 266:13 ~)
712+ (tuple 266:15 (wing 266:16 item) (lit 266:21 ~)))
713+ (arm 267:13
714+ (cell 267:13 (bind 267:14 next) (bind 267:19 more))
715+ (tuple 267:25
716+ (wing 267:26 item)
717+ (tuple 267:31
718+ (wing 267:32 separator)
719+ (group 267:42
720+ (call 267:43 (wing 267:43 join) (wing 267:48 separator) (wing 267:58 rest))))))))))))))))
721+ (value 269:1 snip
722+ (gate 269:9
723+ (face 269:12 xs
724+ (apply 269:15 list (tvar 269:21 A)))
725+ (body 270:3
726+ (branch 270:3
727+ (wing 270:6 xs)
728+ (arm 271:5 (lit 271:5 ~) (lit 271:7 ~))
700− (arm 262:5
729+ (arm 272:5
701− (cell 262:5 (bind 262:6 item) (bind 262:11 rest))
730+ (cell 272:5 (bind 272:6 item) (bind 272:11 rest))
702− (body 263:7
731+ (body 273:7
703− (branch 263:7
732+ (branch 273:7
704− (wing 263:10 rest)
733+ (wing 273:10 rest)
705− (arm 264:9 (lit 264:9 ~) (lit 264:11 ~))
734+ (arm 274:9 (lit 274:9 ~) (lit 274:11 ~))
706− (arm 265:9
735+ (arm 275:9
707− (cell 265:9 (bind 265:10 next) (bind 265:15 more))
736+ (cell 275:9 (bind 275:10 next) (bind 275:15 more))
708− (tuple 265:21
737+ (tuple 275:21
709− (wing 265:22 item)
738+ (wing 275:22 item)
710− (group 265:27
739+ (group 275:27
711− (call 265:28 (wing 265:28 snip) (wing 265:33 rest))))))))))))
740+ (call 275:28 (wing 275:28 snip) (wing 275:33 rest))))))))))))
712− (value 267:1 rear
741+ (value 277:1 rear
713− (gate 267:9
742+ (gate 277:9
714− (face 267:12 xs
743+ (face 277:12 xs
715− (apply 267:15 list (tvar 267:21 A)))
744+ (apply 277:15 list (tvar 277:21 A)))
716− (body 268:3
745+ (body 278:3
717− (branch 268:3
746+ (branch 278:3
718− (wing 268:6 xs)
747+ (wing 278:6 xs)
719− (arm 269:5 (lit 269:5 ~) (crash 269:7))
748+ (arm 279:5 (lit 279:5 ~) (crash 279:7))
720− (arm 270:5
749+ (arm 280:5
721− (cell 270:5 (bind 270:6 item) (bind 270:11 rest))
750+ (cell 280:5 (bind 280:6 item) (bind 280:11 rest))
722− (body 271:7
751+ (body 281:7
723− (branch 271:7
752+ (branch 281:7
724− (wing 271:10 rest)
753+ (wing 281:10 rest)
725− (arm 272:9 (lit 272:9 ~) (wing 272:11 item))
754+ (arm 282:9 (lit 282:9 ~) (wing 282:11 item))
726− (arm 273:9
755+ (arm 283:9
727− (cell 273:9 (bind 273:10 next) (bind 273:15 more))
756+ (cell 283:9 (bind 283:10 next) (bind 283:15 more))
728− (group 273:21
757+ (group 283:21
729− (call 273:22 (wing 273:22 rear) (wing 273:27 rest))))))))))))
758+ (call 283:22 (wing 283:22 rear) (wing 283:27 rest))))))))))))
tests/golden/prelude-unit-list-transforms/types.txt+1
@@ -43,6 +43,7 @@ partial inference; module not checked
43++ bind: expression is not supported by partial inference
43++ bind: expression is not supported by partial inference
44++ biff: unit branch results need unsupported inference
44++ biff: unit branch results need unsupported inference
45++ both: expression is not supported by partial inference
45++ both: expression is not supported by partial inference
46+++ clap: branch pattern is not supported by partial inference
46++ clef: branch pattern is not supported by partial inference
47++ clef: branch pattern is not supported by partial inference
47++ skim: sample mold is not supported by partial inference
48++ skim: sample mold is not supported by partial inference
48++ skip: sample mold is not supported by partial inference
49++ skip: sample mold is not supported by partial inference
tests/golden/types-capital-distinct/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Decisions, Type variables: "Capitals, generalized per `++`"; "a different type takes a different capital".
2+tests: Different explicitly written capitals cannot be forced equal via a call or cast; their source sites are reported. Repeated spelling, independent capitals and concrete-forcing controls retain their intended behavior.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-capital-distinct/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ repeat |= p=[A A] p
2+++ same |= p=[A A] p
3+++ independent |= p=[A B] p
4+++ bad-call |= p=[A B] (repeat p)
5+++ bad-cast |= p=[A B] ^- [A A] p
6+++ concrete |= x=A ^- @t x
tests/golden/types-capital-distinct/tokens.txtnew file+73
@@ -0,0 +1,73 @@
1+1:1 glyph ++
2+1:4 name repeat
3+1:11 glyph |=
4+1:14 name p
5+1:15 tight glyph =
6+1:16 tight glyph [
7+1:17 tight tvar A
8+1:19 tvar A
9+1:20 tight glyph ]
10+1:22 name p
11+2:1 NEWLINE
12+2:1 glyph ++
13+2:4 name same
14+2:9 glyph |=
15+2:12 name p
16+2:13 tight glyph =
17+2:14 tight glyph [
18+2:15 tight tvar A
19+2:17 tvar A
20+2:18 tight glyph ]
21+2:20 name p
22+3:1 NEWLINE
23+3:1 glyph ++
24+3:4 name independent
25+3:16 glyph |=
26+3:19 name p
27+3:20 tight glyph =
28+3:21 tight glyph [
29+3:22 tight tvar A
30+3:24 tvar B
31+3:25 tight glyph ]
32+3:27 name p
33+4:1 NEWLINE
34+4:1 glyph ++
35+4:4 name bad-call
36+4:13 glyph |=
37+4:16 name p
38+4:17 tight glyph =
39+4:18 tight glyph [
40+4:19 tight tvar A
41+4:21 tvar B
42+4:22 tight glyph ]
43+4:24 glyph (
44+4:25 tight name repeat
45+4:32 name p
46+4:33 tight glyph )
47+5:1 NEWLINE
48+5:1 glyph ++
49+5:4 name bad-cast
50+5:13 glyph |=
51+5:16 name p
52+5:17 tight glyph =
53+5:18 tight glyph [
54+5:19 tight tvar A
55+5:21 tvar B
56+5:22 tight glyph ]
57+5:24 glyph ^-
58+5:27 glyph [
59+5:28 tight tvar A
60+5:30 tvar A
61+5:31 tight glyph ]
62+5:33 name p
63+6:1 NEWLINE
64+6:1 glyph ++
65+6:4 name concrete
66+6:13 glyph |=
67+6:16 name x
68+6:17 tight glyph =
69+6:18 tight tvar A
70+6:20 glyph ^-
71+6:23 aura @t
72+6:26 name x
73+6:27 NEWLINE
tests/golden/types-capital-distinct/tree.txtnew file+33
@@ -0,0 +1,33 @@
1+(module
2+ (value 1:1 repeat
3+ (gate 1:11
4+ (face 1:14 p
5+ (cell 1:16 (tvar 1:17 A) (tvar 1:19 A)))
6+ (wing 1:22 p)))
7+ (value 2:1 same
8+ (gate 2:9
9+ (face 2:12 p
10+ (cell 2:14 (tvar 2:15 A) (tvar 2:17 A)))
11+ (wing 2:20 p)))
12+ (value 3:1 independent
13+ (gate 3:16
14+ (face 3:19 p
15+ (cell 3:21 (tvar 3:22 A) (tvar 3:24 B)))
16+ (wing 3:27 p)))
17+ (value 4:1 bad-call
18+ (gate 4:13
19+ (face 4:16 p
20+ (cell 4:18 (tvar 4:19 A) (tvar 4:21 B)))
21+ (group 4:24
22+ (call 4:25 (wing 4:25 repeat) (wing 4:32 p)))))
23+ (value 5:1 bad-cast
24+ (gate 5:13
25+ (face 5:16 p
26+ (cell 5:18 (tvar 5:19 A) (tvar 5:21 B)))
27+ (cast 5:24
28+ (cell 5:27 (tvar 5:28 A) (tvar 5:30 A))
29+ (wing 5:33 p))))
30+ (value 6:1 concrete
31+ (gate 6:13
32+ (face 6:16 x (tvar 6:18 A))
33+ (cast 6:20 (aura 6:23 @t) (wing 6:26 x)))))
tests/golden/types-capital-distinct/types.txtnew file+19
@@ -0,0 +1,19 @@
1+partial inference; module not checked
2+++ repeat: $-([A A] [A A])
3+++ same: $-([A A] [A A])
4+++ independent: $-([A B] [A B])
5+++ bad-call: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
6+/tests/golden/types-capital-distinct/source.jibb:4:19: first type variable
7+++ bad-call |= p=[A B] (repeat p)
8+ ^
9+/tests/golden/types-capital-distinct/source.jibb:4:21: second type variable
10+++ bad-call |= p=[A B] (repeat p)
11+ ^
12+++ bad-cast: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
13+/tests/golden/types-capital-distinct/source.jibb:5:19: first type variable
14+++ bad-cast |= p=[A B] ^- [A A] p
15+ ^
16+/tests/golden/types-capital-distinct/source.jibb:5:21: second type variable
17+++ bad-cast |= p=[A B] ^- [A A] p
18+ ^
19+++ concrete: explicit capital constraints are not supported by partial inference
tests/golden/types-generic-union-alias/about.txt+1−1
@@ -1,4 +1,4 @@
1source: Grammar, Molds: generic molds are applied with their arguments; Modules: "Everything is exported and read through the import's face".
1source: Grammar, Molds: generic molds are applied with their arguments; Modules: "Everything is exported and read through the import's face".
2−tests: Generic aliases swap or repeat a union's arguments, ignore an alias parameter, and keep the original union identity; local aliases retain their scope; a merge of distinct capitals remains unsupported.
2+tests: Generic aliases swap or repeat a union's arguments, ignore an alias parameter, and keep the original union identity; local aliases retain their scope; a forced merge of distinct capitals is reported at both sites.
3expect: parses
3expect: parses
4expect-types: a partial inference report
4expect-types: a partial inference report
tests/golden/types-generic-union-alias/types.txt+7−1
@@ -6,7 +6,13 @@ partial inference; module not checked
6++ reverse-value: (choice @p @t)
6++ reverse-value: (choice @p @t)
7++ reverse-gate: $-((choice A B) (choice A B))
7++ reverse-gate: $-((choice A B) (choice A B))
8++ repeat-gate: $-((choice A A) (choice A A))
8++ repeat-gate: $-((choice A A) (choice A A))
9−++ repeated-call: explicit capital constraints are not supported by partial inference
9+++ repeated-call: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
10+/tests/golden/types-generic-union-alias/source.jibb:10:31: first type variable
11+++ repeated-call |= x=(choice A B) (repeat-gate x)
12+ ^
13+/tests/golden/types-generic-union-alias/source.jibb:10:33: second type variable
14+++ repeated-call |= x=(choice A B) (repeat-gate x)
15+ ^
10++ ghost-a: (choice @t @p)
16++ ghost-a: (choice @t @p)
11++ ghost-b: (choice @t @p)
17++ ghost-b: (choice @t @p)
12++ use-ghost: $-((choice @t @p) (choice @t @p))
18++ use-ghost: $-((choice @t @p) (choice @t @p))
tests/golden/types-generic-union-capitals/about.txt+1−1
@@ -1,4 +1,4 @@
1source: Decisions, Type variables: "Capitals, generalized per `++`; a capital in a local `++` shares the enclosing `++`'s variable of that name, and a different type takes a different capital".
1source: Decisions, Type variables: "Capitals, generalized per `++`; a capital in a local `++` shares the enclosing `++`'s variable of that name, and a different type takes a different capital".
2−tests: Distinct explicit capitals, repeated capitals, and local captures in generic-union molds. The partial checker must not silently merge distinct explicit capitals pending the doc question; the same repeated capital remains usable.
2+tests: Distinct explicit capitals, repeated capitals, and local captures in generic-union molds. The checker rejects a forced merge of distinct capitals with both source sites; the same repeated capital remains usable.
3expect: parses
3expect: parses
4expect-types: a partial inference report
4expect-types: a partial inference report
tests/golden/types-generic-union-capitals/types.txt+28−4
@@ -4,7 +4,31 @@ partial inference; module not checked
4++ repeated: $-((choice A A) (choice A A))
4++ repeated: $-((choice A A) (choice A A))
5++ independent: $-((choice A B) (choice A B))
5++ independent: $-((choice A B) (choice A B))
6++ already-same: $-((choice A A) (choice A A))
6++ already-same: $-((choice A A) (choice A A))
7−++ merge-call: explicit capital constraints are not supported by partial inference
7+++ merge-call: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
8−++ phantom-cast: explicit capital constraints are not supported by partial inference
8+/tests/golden/types-generic-union-capitals/source.jibb:10:28: first type variable
9−++ local-merge: explicit capital constraints are not supported by partial inference
9+++ merge-call |= x=(choice A B) (repeated x)
10−++ captured-merge: explicit capital constraints are not supported by partial inference
10+ ^
11+/tests/golden/types-generic-union-capitals/source.jibb:10:30: second type variable
12+++ merge-call |= x=(choice A B) (repeated x)
13+ ^
14+++ phantom-cast: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
15+/tests/golden/types-generic-union-capitals/source.jibb:11:31: first type variable
16+++ phantom-cast |= x=(phantom A) ^- (phantom B) x
17+ ^
18+/tests/golden/types-generic-union-capitals/source.jibb:11:46: second type variable
19+++ phantom-cast |= x=(phantom A) ^- (phantom B) x
20+ ^
21+++ local-merge: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
22+/tests/golden/types-generic-union-capitals/source.jibb:12:29: first type variable
23+++ local-merge |= x=(choice A B)
24+ ^
25+/tests/golden/types-generic-union-capitals/source.jibb:12:31: second type variable
26+++ local-merge |= x=(choice A B)
27+ ^
28+++ captured-merge: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
29+/tests/golden/types-generic-union-capitals/source.jibb:15:32: first type variable
30+++ captured-merge |= x=(choice A B)
31+ ^
32+/tests/golden/types-generic-union-capitals/source.jibb:15:34: second type variable
33+++ captured-merge |= x=(choice A B)
34+ ^
tests/golden/types-import-duplicate-mark/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Overview, Importing Hoon types: `/%` translates marks; Grammar, Molds: "Faces are part of the type".
2+tests: A mark with a duplicate face in a nested record is reported unsupported where used by the partial checker.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-import-duplicate-mark/mar/duplicate.txtnew file+5
@@ -0,0 +1,5 @@
1+|_ a=[nested=[same=@t same=@ud] id=@ud]
2+++ grab |% ++ noun [nested=[same=@t same=@ud] id=@ud] --
3+++ grow |% ++ noun a --
4+++ grad %noun
5+--
tests/golden/types-import-duplicate-mark/marks.txtnew file+1
@@ -0,0 +1 @@
1+duplicate
tests/golden/types-import-duplicate-mark/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/% %duplicate
2+++ identity |= x=duplicate x
tests/golden/types-import-duplicate-mark/tokens.txtnew file+11
@@ -0,0 +1,11 @@
1+1:1 glyph /%
2+1:5 lit %duplicate
3+2:1 NEWLINE
4+2:1 glyph ++
5+2:4 name identity
6+2:13 glyph |=
7+2:16 name x
8+2:17 tight glyph =
9+2:18 tight name duplicate
10+2:28 name x
11+2:29 NEWLINE
tests/golden/types-import-duplicate-mark/tree.txtnew file+6
@@ -0,0 +1,6 @@
1+(module
2+ (mark 1:1 %duplicate)
3+ (value 2:1 identity
4+ (gate 2:13
5+ (face 2:16 x (ref 2:18 duplicate))
6+ (wing 2:28 x))))
tests/golden/types-import-duplicate-mark/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ identity: sample mold is not supported by partial inference
tests/golden/types-import-duplicate-sur/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: "Faces are part of the type"; Overview, Importing Hoon types: "Unused molds are skipped".
2+tests: A used imported Hoon record with duplicate sibling faces, including a nested record, is reported unsupported by the partial checker; identical names at separate nesting levels remain valid and an unselected duplicate mold is skipped.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-import-duplicate-sur/imports.txtnew file+3
@@ -0,0 +1,3 @@
1+fixture direct
2+fixture nested
3+fixture valid
tests/golden/types-import-duplicate-sur/source.jibbnew file+5
@@ -0,0 +1,5 @@
1+/- fixture
2+++ direct-id |= x=direct.fixture x
3+++ nested-id |= x=nested.fixture x
4+++ valid-id |= x=valid.fixture x
5+++ valid-read |= x=valid.fixture same.nested.x
tests/golden/types-import-duplicate-sur/sur/fixture.txtnew file+6
@@ -0,0 +1,6 @@
1+|%
2++$ direct [same=@t same=@ud]
3++$ nested [outer=[same=@t same=@ud] id=@ud]
4++$ valid [same=@t nested=[same=@ud other=@t]]
5++$ unused [same=@t same=@ud]
6+--
tests/golden/types-import-duplicate-sur/tokens.txtnew file+35
@@ -0,0 +1,35 @@
1+1:1 glyph /-
2+1:5 name fixture
3+2:1 NEWLINE
4+2:1 glyph ++
5+2:4 name direct-id
6+2:14 glyph |=
7+2:17 name x
8+2:18 tight glyph =
9+2:19 tight wing direct.fixture
10+2:34 name x
11+3:1 NEWLINE
12+3:1 glyph ++
13+3:4 name nested-id
14+3:14 glyph |=
15+3:17 name x
16+3:18 tight glyph =
17+3:19 tight wing nested.fixture
18+3:34 name x
19+4:1 NEWLINE
20+4:1 glyph ++
21+4:4 name valid-id
22+4:13 glyph |=
23+4:16 name x
24+4:17 tight glyph =
25+4:18 tight wing valid.fixture
26+4:32 name x
27+5:1 NEWLINE
28+5:1 glyph ++
29+5:4 name valid-read
30+5:15 glyph |=
31+5:18 name x
32+5:19 tight glyph =
33+5:20 tight wing valid.fixture
34+5:34 wing same.nested.x
35+5:47 NEWLINE
tests/golden/types-import-duplicate-sur/tree.txtnew file+18
@@ -0,0 +1,18 @@
1+(module
2+ (sur 1:1 fixture)
3+ (value 2:1 direct-id
4+ (gate 2:14
5+ (face 2:17 x (ref 2:19 direct.fixture))
6+ (wing 2:34 x)))
7+ (value 3:1 nested-id
8+ (gate 3:14
9+ (face 3:17 x (ref 3:19 nested.fixture))
10+ (wing 3:34 x)))
11+ (value 4:1 valid-id
12+ (gate 4:13
13+ (face 4:16 x (ref 4:18 valid.fixture))
14+ (wing 4:32 x)))
15+ (value 5:1 valid-read
16+ (gate 5:15
17+ (face 5:18 x (ref 5:20 valid.fixture))
18+ (wing 5:34 same.nested.x))))
tests/golden/types-import-duplicate-sur/types.txtnew file+5
@@ -0,0 +1,5 @@
1+partial inference; module not checked
2+++ direct-id: sample mold is not supported by partial inference
3+++ nested-id: sample mold is not supported by partial inference
4+++ valid-id: $-([same=@t nested=[same=@ud other=@t]] [same=@t nested=[same=@ud other=@t]])
5+++ valid-read: $-([same=@t nested=[same=@ud other=@t]] @ud)
tests/golden/types-list-branch/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Patterns: "Every case needs an arm or a catch-all"; Literals by context: "Where a list is expected, `[x xs]` is `x` in front of `xs`."
2+tests: List casts and known-sample calls provide context through complete loobean, unit and list branches, including recursive and nested forms; bad arms and unrelated constraints fail closed.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-list-branch/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-validated prelude.
tests/golden/types-list-branch/source.jibbnew file+81
@@ -0,0 +1,81 @@
1+++ copy |= xs=(list @t)
2+ ^- (list @t)
3+ ?- xs
4+ ~ ~
5+ [item rest] [item (copy rest)]
6+++ copy-reverse |= xs=(list @t)
7+ ^- (list @t)
8+ ?- xs
9+ [item rest] [item (copy-reverse rest)]
10+ ~ ~
11+++ boolean |= b=?
12+ ^- (list @t)
13+ ?- b
14+ %.y ~[]
15+ %.n ["hi" ~]
16+++ unit-branch |= x=(unit @t)
17+ ^- (list @t)
18+ ?- x
19+ ~ ~[]
20+ [~ item] [item ~]
21+++ nested |= xs=(list @t)
22+ ^- (list @t)
23+ ?- xs
24+ ~
25+ ?- %.y
26+ %.y ~[]
27+ %.n ["x" ~]
28+ [item rest] [item (copy rest)]
29+++ consume |= xs=(list @t) xs
30+++ call |= b=?
31+ (consume
32+ ?- b
33+ %.y ~[]
34+ %.n ["hi" ~]
35+++ bad-head |= b=?
36+ ^- (list @t)
37+ ?- b
38+ %.y ~[]
39+ %.n [~zod ~]
40+++ bad-tail |= b=?
41+ ^- (list @t)
42+ ?- b
43+ %.y ["hi" ~zod]
44+ %.n ~[]
45+++ pending |= b=?
46+ ~& %unknown
47+ ^- (list @t)
48+ ?- b
49+ %.y ~[]
50+ %.n ["hi" ~]
51+++ pending-null |= b=?
52+ ~& ~
53+ ^- (list @t)
54+ ?- b
55+ %.y ~[]
56+ %.n ["hi" ~]
57+++ incomplete |= xs=(list @t)
58+ ^- (list @t)
59+ ?- xs
60+ ~ ~[]
61+++ duplicate |= xs=(list @t)
62+ ^- (list @t)
63+ ?- xs
64+ ~ ~[]
65+ ~ ~[]
66+ [item rest] [item ~]
67+++ opposite |= b=?
68+ ^- (list @t)
69+ ?- b
70+ %.y [~zod ~]
71+ %.n ["hi" ~]
72+++ escape |= xs=(list @t)
73+ ^- (list @t)
74+ ?- xs
75+ ~ [item ~]
76+ [item rest] [item ~]
77+++ bad-recursive |= xs=(list @t)
78+ ^- (list @t)
79+ ?- xs
80+ ~ ~[]
81+ [item rest] [item (bad-recursive ~zod)]
tests/golden/types-list-branch/tokens.txtnew file+521
@@ -0,0 +1,521 @@
1+1:1 glyph ++
2+1:4 name copy
3+1:9 glyph |=
4+1:12 name xs
5+1:14 tight glyph =
6+1:15 tight glyph (
7+1:16 tight name list
8+1:21 aura @t
9+1:23 tight glyph )
10+2:3 INDENT
11+2:3 glyph ^-
12+2:6 glyph (
13+2:7 tight name list
14+2:12 aura @t
15+2:14 tight glyph )
16+3:5 INDENT
17+3:5 glyph ?-
18+3:8 name xs
19+4:7 INDENT
20+4:7 lit ~
21+4:9 lit ~
22+5:7 NEWLINE
23+5:7 glyph [
24+5:8 tight name item
25+5:13 name rest
26+5:17 tight glyph ]
27+5:19 glyph [
28+5:20 tight name item
29+5:25 glyph (
30+5:26 tight name copy
31+5:31 name rest
32+5:35 tight glyph )
33+5:36 tight glyph ]
34+6:1 DEDENT
35+6:1 DEDENT
36+6:1 DEDENT
37+6:1 NEWLINE
38+6:1 glyph ++
39+6:4 name copy-reverse
40+6:17 glyph |=
41+6:20 name xs
42+6:22 tight glyph =
43+6:23 tight glyph (
44+6:24 tight name list
45+6:29 aura @t
46+6:31 tight glyph )
47+7:3 INDENT
48+7:3 glyph ^-
49+7:6 glyph (
50+7:7 tight name list
51+7:12 aura @t
52+7:14 tight glyph )
53+8:5 INDENT
54+8:5 glyph ?-
55+8:8 name xs
56+9:7 INDENT
57+9:7 glyph [
58+9:8 tight name item
59+9:13 name rest
60+9:17 tight glyph ]
61+9:19 glyph [
62+9:20 tight name item
63+9:25 glyph (
64+9:26 tight name copy-reverse
65+9:39 name rest
66+9:43 tight glyph )
67+9:44 tight glyph ]
68+10:7 NEWLINE
69+10:7 lit ~
70+10:9 lit ~
71+11:1 DEDENT
72+11:1 DEDENT
73+11:1 DEDENT
74+11:1 NEWLINE
75+11:1 glyph ++
76+11:4 name boolean
77+11:12 glyph |=
78+11:15 name b
79+11:16 tight glyph =
80+11:17 tight glyph ?
81+12:3 INDENT
82+12:3 glyph ^-
83+12:6 glyph (
84+12:7 tight name list
85+12:12 aura @t
86+12:14 tight glyph )
87+13:5 INDENT
88+13:5 glyph ?-
89+13:8 name b
90+14:7 INDENT
91+14:7 lit %.y
92+14:11 glyph ~[
93+14:13 tight glyph ]
94+15:7 NEWLINE
95+15:7 lit %.n
96+15:11 glyph [
97+15:12 tight str "hi"
98+15:17 lit ~
99+15:18 tight glyph ]
100+16:1 DEDENT
101+16:1 DEDENT
102+16:1 DEDENT
103+16:1 NEWLINE
104+16:1 glyph ++
105+16:4 name unit-branch
106+16:16 glyph |=
107+16:19 name x
108+16:20 tight glyph =
109+16:21 tight glyph (
110+16:22 tight name unit
111+16:27 aura @t
112+16:29 tight glyph )
113+17:3 INDENT
114+17:3 glyph ^-
115+17:6 glyph (
116+17:7 tight name list
117+17:12 aura @t
118+17:14 tight glyph )
119+18:5 INDENT
120+18:5 glyph ?-
121+18:8 name x
122+19:7 INDENT
123+19:7 lit ~
124+19:9 glyph ~[
125+19:11 tight glyph ]
126+20:7 NEWLINE
127+20:7 glyph [
128+20:8 tight lit ~
129+20:10 name item
130+20:14 tight glyph ]
131+20:16 glyph [
132+20:17 tight name item
133+20:22 lit ~
134+20:23 tight glyph ]
135+21:1 DEDENT
136+21:1 DEDENT
137+21:1 DEDENT
138+21:1 NEWLINE
139+21:1 glyph ++
140+21:4 name nested
141+21:11 glyph |=
142+21:14 name xs
143+21:16 tight glyph =
144+21:17 tight glyph (
145+21:18 tight name list
146+21:23 aura @t
147+21:25 tight glyph )
148+22:3 INDENT
149+22:3 glyph ^-
150+22:6 glyph (
151+22:7 tight name list
152+22:12 aura @t
153+22:14 tight glyph )
154+23:5 INDENT
155+23:5 glyph ?-
156+23:8 name xs
157+24:7 INDENT
158+24:7 lit ~
159+25:9 INDENT
160+25:9 glyph ?-
161+25:12 lit %.y
162+26:11 INDENT
163+26:11 lit %.y
164+26:15 glyph ~[
165+26:17 tight glyph ]
166+27:11 NEWLINE
167+27:11 lit %.n
168+27:15 glyph [
169+27:16 tight str "x"
170+27:20 lit ~
171+27:21 tight glyph ]
172+28:7 DEDENT
173+28:7 DEDENT
174+28:7 NEWLINE
175+28:7 glyph [
176+28:8 tight name item
177+28:13 name rest
178+28:17 tight glyph ]
179+28:19 glyph [
180+28:20 tight name item
181+28:25 glyph (
182+28:26 tight name copy
183+28:31 name rest
184+28:35 tight glyph )
185+28:36 tight glyph ]
186+29:1 DEDENT
187+29:1 DEDENT
188+29:1 DEDENT
189+29:1 NEWLINE
190+29:1 glyph ++
191+29:4 name consume
192+29:12 glyph |=
193+29:15 name xs
194+29:17 tight glyph =
195+29:18 tight glyph (
196+29:19 tight name list
197+29:24 aura @t
198+29:26 tight glyph )
199+29:28 name xs
200+30:1 NEWLINE
201+30:1 glyph ++
202+30:4 name call
203+30:9 glyph |=
204+30:12 name b
205+30:13 tight glyph =
206+30:14 tight glyph ?
207+31:3 INDENT
208+31:3 glyph (
209+31:4 tight name consume
210+32:5 INDENT
211+32:5 glyph ?-
212+32:8 name b
213+33:7 INDENT
214+33:7 lit %.y
215+33:11 glyph ~[
216+33:13 tight glyph ]
217+34:7 NEWLINE
218+34:7 lit %.n
219+34:11 glyph [
220+34:12 tight str "hi"
221+34:17 lit ~
222+34:18 tight glyph ]
223+35:1 DEDENT
224+35:1 DEDENT
225+35:1 DEDENT
226+35:1 NEWLINE
227+35:1 glyph ++
228+35:4 name bad-head
229+35:13 glyph |=
230+35:16 name b
231+35:17 tight glyph =
232+35:18 tight glyph ?
233+36:3 INDENT
234+36:3 glyph ^-
235+36:6 glyph (
236+36:7 tight name list
237+36:12 aura @t
238+36:14 tight glyph )
239+37:5 INDENT
240+37:5 glyph ?-
241+37:8 name b
242+38:7 INDENT
243+38:7 lit %.y
244+38:11 glyph ~[
245+38:13 tight glyph ]
246+39:7 NEWLINE
247+39:7 lit %.n
248+39:11 glyph [
249+39:12 tight lit ~zod
250+39:17 lit ~
251+39:18 tight glyph ]
252+40:1 DEDENT
253+40:1 DEDENT
254+40:1 DEDENT
255+40:1 NEWLINE
256+40:1 glyph ++
257+40:4 name bad-tail
258+40:13 glyph |=
259+40:16 name b
260+40:17 tight glyph =
261+40:18 tight glyph ?
262+41:3 INDENT
263+41:3 glyph ^-
264+41:6 glyph (
265+41:7 tight name list
266+41:12 aura @t
267+41:14 tight glyph )
268+42:5 INDENT
269+42:5 glyph ?-
270+42:8 name b
271+43:7 INDENT
272+43:7 lit %.y
273+43:11 glyph [
274+43:12 tight str "hi"
275+43:17 lit ~zod
276+43:21 tight glyph ]
277+44:7 NEWLINE
278+44:7 lit %.n
279+44:11 glyph ~[
280+44:13 tight glyph ]
281+45:1 DEDENT
282+45:1 DEDENT
283+45:1 DEDENT
284+45:1 NEWLINE
285+45:1 glyph ++
286+45:4 name pending
287+45:12 glyph |=
288+45:15 name b
289+45:16 tight glyph =
290+45:17 tight glyph ?
291+46:3 INDENT
292+46:3 glyph ~&
293+46:6 lit %unknown
294+47:5 INDENT
295+47:5 glyph ^-
296+47:8 glyph (
297+47:9 tight name list
298+47:14 aura @t
299+47:16 tight glyph )
300+48:7 INDENT
301+48:7 glyph ?-
302+48:10 name b
303+49:9 INDENT
304+49:9 lit %.y
305+49:13 glyph ~[
306+49:15 tight glyph ]
307+50:9 NEWLINE
308+50:9 lit %.n
309+50:13 glyph [
310+50:14 tight str "hi"
311+50:19 lit ~
312+50:20 tight glyph ]
313+51:1 DEDENT
314+51:1 DEDENT
315+51:1 DEDENT
316+51:1 DEDENT
317+51:1 NEWLINE
318+51:1 glyph ++
319+51:4 name pending-null
320+51:17 glyph |=
321+51:20 name b
322+51:21 tight glyph =
323+51:22 tight glyph ?
324+52:3 INDENT
325+52:3 glyph ~&
326+52:6 lit ~
327+53:5 INDENT
328+53:5 glyph ^-
329+53:8 glyph (
330+53:9 tight name list
331+53:14 aura @t
332+53:16 tight glyph )
333+54:7 INDENT
334+54:7 glyph ?-
335+54:10 name b
336+55:9 INDENT
337+55:9 lit %.y
338+55:13 glyph ~[
339+55:15 tight glyph ]
340+56:9 NEWLINE
341+56:9 lit %.n
342+56:13 glyph [
343+56:14 tight str "hi"
344+56:19 lit ~
345+56:20 tight glyph ]
346+57:1 DEDENT
347+57:1 DEDENT
348+57:1 DEDENT
349+57:1 DEDENT
350+57:1 NEWLINE
351+57:1 glyph ++
352+57:4 name incomplete
353+57:15 glyph |=
354+57:18 name xs
355+57:20 tight glyph =
356+57:21 tight glyph (
357+57:22 tight name list
358+57:27 aura @t
359+57:29 tight glyph )
360+58:3 INDENT
361+58:3 glyph ^-
362+58:6 glyph (
363+58:7 tight name list
364+58:12 aura @t
365+58:14 tight glyph )
366+59:5 INDENT
367+59:5 glyph ?-
368+59:8 name xs
369+60:7 INDENT
370+60:7 lit ~
371+60:9 glyph ~[
372+60:11 tight glyph ]
373+61:1 DEDENT
374+61:1 DEDENT
375+61:1 DEDENT
376+61:1 NEWLINE
377+61:1 glyph ++
378+61:4 name duplicate
379+61:14 glyph |=
380+61:17 name xs
381+61:19 tight glyph =
382+61:20 tight glyph (
383+61:21 tight name list
384+61:26 aura @t
385+61:28 tight glyph )
386+62:3 INDENT
387+62:3 glyph ^-
388+62:6 glyph (
389+62:7 tight name list
390+62:12 aura @t
391+62:14 tight glyph )
392+63:5 INDENT
393+63:5 glyph ?-
394+63:8 name xs
395+64:7 INDENT
396+64:7 lit ~
397+64:9 glyph ~[
398+64:11 tight glyph ]
399+65:7 NEWLINE
400+65:7 lit ~
401+65:9 glyph ~[
402+65:11 tight glyph ]
403+66:7 NEWLINE
404+66:7 glyph [
405+66:8 tight name item
406+66:13 name rest
407+66:17 tight glyph ]
408+66:19 glyph [
409+66:20 tight name item
410+66:25 lit ~
411+66:26 tight glyph ]
412+67:1 DEDENT
413+67:1 DEDENT
414+67:1 DEDENT
415+67:1 NEWLINE
416+67:1 glyph ++
417+67:4 name opposite
418+67:13 glyph |=
419+67:16 name b
420+67:17 tight glyph =
421+67:18 tight glyph ?
422+68:3 INDENT
423+68:3 glyph ^-
424+68:6 glyph (
425+68:7 tight name list
426+68:12 aura @t
427+68:14 tight glyph )
428+69:5 INDENT
429+69:5 glyph ?-
430+69:8 name b
431+70:7 INDENT
432+70:7 lit %.y
433+70:11 glyph [
434+70:12 tight lit ~zod
435+70:17 lit ~
436+70:18 tight glyph ]
437+71:7 NEWLINE
438+71:7 lit %.n
439+71:11 glyph [
440+71:12 tight str "hi"
441+71:17 lit ~
442+71:18 tight glyph ]
443+72:1 DEDENT
444+72:1 DEDENT
445+72:1 DEDENT
446+72:1 NEWLINE
447+72:1 glyph ++
448+72:4 name escape
449+72:11 glyph |=
450+72:14 name xs
451+72:16 tight glyph =
452+72:17 tight glyph (
453+72:18 tight name list
454+72:23 aura @t
455+72:25 tight glyph )
456+73:3 INDENT
457+73:3 glyph ^-
458+73:6 glyph (
459+73:7 tight name list
460+73:12 aura @t
461+73:14 tight glyph )
462+74:5 INDENT
463+74:5 glyph ?-
464+74:8 name xs
465+75:7 INDENT
466+75:7 lit ~
467+75:9 glyph [
468+75:10 tight name item
469+75:15 lit ~
470+75:16 tight glyph ]
471+76:7 NEWLINE
472+76:7 glyph [
473+76:8 tight name item
474+76:13 name rest
475+76:17 tight glyph ]
476+76:19 glyph [
477+76:20 tight name item
478+76:25 lit ~
479+76:26 tight glyph ]
480+77:1 DEDENT
481+77:1 DEDENT
482+77:1 DEDENT
483+77:1 NEWLINE
484+77:1 glyph ++
485+77:4 name bad-recursive
486+77:18 glyph |=
487+77:21 name xs
488+77:23 tight glyph =
489+77:24 tight glyph (
490+77:25 tight name list
491+77:30 aura @t
492+77:32 tight glyph )
493+78:3 INDENT
494+78:3 glyph ^-
495+78:6 glyph (
496+78:7 tight name list
497+78:12 aura @t
498+78:14 tight glyph )
499+79:5 INDENT
500+79:5 glyph ?-
501+79:8 name xs
502+80:7 INDENT
503+80:7 lit ~
504+80:9 glyph ~[
505+80:11 tight glyph ]
506+81:7 NEWLINE
507+81:7 glyph [
508+81:8 tight name item
509+81:13 name rest
510+81:17 tight glyph ]
511+81:19 glyph [
512+81:20 tight name item
513+81:25 glyph (
514+81:26 tight name bad-recursive
515+81:40 lit ~zod
516+81:44 tight glyph )
517+81:45 tight glyph ]
518+81:46 DEDENT
519+81:46 DEDENT
520+81:46 DEDENT
521+81:46 NEWLINE
tests/golden/types-list-branch/tree.txtnew file+237
@@ -0,0 +1,237 @@
1+(module
2+ (value 1:1 copy
3+ (gate 1:9
4+ (face 1:12 xs
5+ (apply 1:15 list (aura 1:21 @t)))
6+ (body 2:3
7+ (cast 2:3
8+ (apply 2:6 list (aura 2:12 @t))
9+ (body 3:5
10+ (branch 3:5
11+ (wing 3:8 xs)
12+ (arm 4:7 (lit 4:7 ~) (lit 4:9 ~))
13+ (arm 5:7
14+ (cell 5:7 (bind 5:8 item) (bind 5:13 rest))
15+ (tuple 5:19
16+ (wing 5:20 item)
17+ (group 5:25
18+ (call 5:26 (wing 5:26 copy) (wing 5:31 rest)))))))))))
19+ (value 6:1 copy-reverse
20+ (gate 6:17
21+ (face 6:20 xs
22+ (apply 6:23 list (aura 6:29 @t)))
23+ (body 7:3
24+ (cast 7:3
25+ (apply 7:6 list (aura 7:12 @t))
26+ (body 8:5
27+ (branch 8:5
28+ (wing 8:8 xs)
29+ (arm 9:7
30+ (cell 9:7 (bind 9:8 item) (bind 9:13 rest))
31+ (tuple 9:19
32+ (wing 9:20 item)
33+ (group 9:25
34+ (call 9:26 (wing 9:26 copy-reverse) (wing 9:39 rest)))))
35+ (arm 10:7 (lit 10:7 ~) (lit 10:9 ~))))))))
36+ (value 11:1 boolean
37+ (gate 11:12
38+ (face 11:15 b (flag 11:17))
39+ (body 12:3
40+ (cast 12:3
41+ (apply 12:6 list (aura 12:12 @t))
42+ (body 13:5
43+ (branch 13:5
44+ (wing 13:8 b)
45+ (arm 14:7 (lit 14:7 %.y) (list 14:11))
46+ (arm 15:7
47+ (lit 15:7 %.n)
48+ (tuple 15:11 (str 15:12 "hi") (lit 15:17 ~)))))))))
49+ (value 16:1 unit-branch
50+ (gate 16:16
51+ (face 16:19 x
52+ (apply 16:21 unit (aura 16:27 @t)))
53+ (body 17:3
54+ (cast 17:3
55+ (apply 17:6 list (aura 17:12 @t))
56+ (body 18:5
57+ (branch 18:5
58+ (wing 18:8 x)
59+ (arm 19:7 (lit 19:7 ~) (list 19:9))
60+ (arm 20:7
61+ (cell 20:7 (lit 20:8 ~) (bind 20:10 item))
62+ (tuple 20:16 (wing 20:17 item) (lit 20:22 ~)))))))))
63+ (value 21:1 nested
64+ (gate 21:11
65+ (face 21:14 xs
66+ (apply 21:17 list (aura 21:23 @t)))
67+ (body 22:3
68+ (cast 22:3
69+ (apply 22:6 list (aura 22:12 @t))
70+ (body 23:5
71+ (branch 23:5
72+ (wing 23:8 xs)
73+ (arm 24:7
74+ (lit 24:7 ~)
75+ (body 25:9
76+ (branch 25:9
77+ (lit 25:12 %.y)
78+ (arm 26:11 (lit 26:11 %.y) (list 26:15))
79+ (arm 27:11
80+ (lit 27:11 %.n)
81+ (tuple 27:15 (str 27:16 "x") (lit 27:20 ~))))))
82+ (arm 28:7
83+ (cell 28:7 (bind 28:8 item) (bind 28:13 rest))
84+ (tuple 28:19
85+ (wing 28:20 item)
86+ (group 28:25
87+ (call 28:26 (wing 28:26 copy) (wing 28:31 rest)))))))))))
88+ (value 29:1 consume
89+ (gate 29:12
90+ (face 29:15 xs
91+ (apply 29:18 list (aura 29:24 @t)))
92+ (wing 29:28 xs)))
93+ (value 30:1 call
94+ (gate 30:9
95+ (face 30:12 b (flag 30:14))
96+ (body 31:3
97+ (group 31:3
98+ (call 31:4
99+ (wing 31:4 consume)
100+ (branch 32:5
101+ (wing 32:8 b)
102+ (arm 33:7 (lit 33:7 %.y) (list 33:11))
103+ (arm 34:7
104+ (lit 34:7 %.n)
105+ (tuple 34:11 (str 34:12 "hi") (lit 34:17 ~)))))))))
106+ (value 35:1 bad-head
107+ (gate 35:13
108+ (face 35:16 b (flag 35:18))
109+ (body 36:3
110+ (cast 36:3
111+ (apply 36:6 list (aura 36:12 @t))
112+ (body 37:5
113+ (branch 37:5
114+ (wing 37:8 b)
115+ (arm 38:7 (lit 38:7 %.y) (list 38:11))
116+ (arm 39:7
117+ (lit 39:7 %.n)
118+ (tuple 39:11 (lit 39:12 ~zod) (lit 39:17 ~)))))))))
119+ (value 40:1 bad-tail
120+ (gate 40:13
121+ (face 40:16 b (flag 40:18))
122+ (body 41:3
123+ (cast 41:3
124+ (apply 41:6 list (aura 41:12 @t))
125+ (body 42:5
126+ (branch 42:5
127+ (wing 42:8 b)
128+ (arm 43:7
129+ (lit 43:7 %.y)
130+ (tuple 43:11 (str 43:12 "hi") (lit 43:17 ~zod)))
131+ (arm 44:7 (lit 44:7 %.n) (list 44:11))))))))
132+ (value 45:1 pending
133+ (gate 45:12
134+ (face 45:15 b (flag 45:17))
135+ (body 46:3
136+ (trace 46:3
137+ (lit 46:6 %unknown)
138+ (body 47:5
139+ (cast 47:5
140+ (apply 47:8 list (aura 47:14 @t))
141+ (body 48:7
142+ (branch 48:7
143+ (wing 48:10 b)
144+ (arm 49:9 (lit 49:9 %.y) (list 49:13))
145+ (arm 50:9
146+ (lit 50:9 %.n)
147+ (tuple 50:13 (str 50:14 "hi") (lit 50:19 ~)))))))))))
148+ (value 51:1 pending-null
149+ (gate 51:17
150+ (face 51:20 b (flag 51:22))
151+ (body 52:3
152+ (trace 52:3
153+ (lit 52:6 ~)
154+ (body 53:5
155+ (cast 53:5
156+ (apply 53:8 list (aura 53:14 @t))
157+ (body 54:7
158+ (branch 54:7
159+ (wing 54:10 b)
160+ (arm 55:9 (lit 55:9 %.y) (list 55:13))
161+ (arm 56:9
162+ (lit 56:9 %.n)
163+ (tuple 56:13 (str 56:14 "hi") (lit 56:19 ~)))))))))))
164+ (value 57:1 incomplete
165+ (gate 57:15
166+ (face 57:18 xs
167+ (apply 57:21 list (aura 57:27 @t)))
168+ (body 58:3
169+ (cast 58:3
170+ (apply 58:6 list (aura 58:12 @t))
171+ (body 59:5
172+ (branch 59:5
173+ (wing 59:8 xs)
174+ (arm 60:7 (lit 60:7 ~) (list 60:9))))))))
175+ (value 61:1 duplicate
176+ (gate 61:14
177+ (face 61:17 xs
178+ (apply 61:20 list (aura 61:26 @t)))
179+ (body 62:3
180+ (cast 62:3
181+ (apply 62:6 list (aura 62:12 @t))
182+ (body 63:5
183+ (branch 63:5
184+ (wing 63:8 xs)
185+ (arm 64:7 (lit 64:7 ~) (list 64:9))
186+ (arm 65:7 (lit 65:7 ~) (list 65:9))
187+ (arm 66:7
188+ (cell 66:7 (bind 66:8 item) (bind 66:13 rest))
189+ (tuple 66:19 (wing 66:20 item) (lit 66:25 ~)))))))))
190+ (value 67:1 opposite
191+ (gate 67:13
192+ (face 67:16 b (flag 67:18))
193+ (body 68:3
194+ (cast 68:3
195+ (apply 68:6 list (aura 68:12 @t))
196+ (body 69:5
197+ (branch 69:5
198+ (wing 69:8 b)
199+ (arm 70:7
200+ (lit 70:7 %.y)
201+ (tuple 70:11 (lit 70:12 ~zod) (lit 70:17 ~)))
202+ (arm 71:7
203+ (lit 71:7 %.n)
204+ (tuple 71:11 (str 71:12 "hi") (lit 71:17 ~)))))))))
205+ (value 72:1 escape
206+ (gate 72:11
207+ (face 72:14 xs
208+ (apply 72:17 list (aura 72:23 @t)))
209+ (body 73:3
210+ (cast 73:3
211+ (apply 73:6 list (aura 73:12 @t))
212+ (body 74:5
213+ (branch 74:5
214+ (wing 74:8 xs)
215+ (arm 75:7
216+ (lit 75:7 ~)
217+ (tuple 75:9 (wing 75:10 item) (lit 75:15 ~)))
218+ (arm 76:7
219+ (cell 76:7 (bind 76:8 item) (bind 76:13 rest))
220+ (tuple 76:19 (wing 76:20 item) (lit 76:25 ~)))))))))
221+ (value 77:1 bad-recursive
222+ (gate 77:18
223+ (face 77:21 xs
224+ (apply 77:24 list (aura 77:30 @t)))
225+ (body 78:3
226+ (cast 78:3
227+ (apply 78:6 list (aura 78:12 @t))
228+ (body 79:5
229+ (branch 79:5
230+ (wing 79:8 xs)
231+ (arm 80:7 (lit 80:7 ~) (list 80:9))
232+ (arm 81:7
233+ (cell 81:7 (bind 81:8 item) (bind 81:13 rest))
234+ (tuple 81:19
235+ (wing 81:20 item)
236+ (group 81:25
237+ (call 81:26 (wing 81:26 bad-recursive) (lit 81:40 ~zod))))))))))))
tests/golden/types-list-branch/types.txtnew file+35
@@ -0,0 +1,35 @@
1+partial inference; module not checked
2+++ copy: $-((list @t) (list @t))
3+++ copy-reverse: $-((list @t) (list @t))
4+++ boolean: $-(? (list @t))
5+++ unit-branch: $-((unit @t) (list @t))
6+++ nested: $-((list @t) (list @t))
7+++ consume: $-((list @t) (list @t))
8+++ call: $-(? (list @t))
9+++ bad-head: list item does not fit its expected type
10+/tests/golden/types-list-branch/source.jibb:36:6: expected item has type @t
11+ ^- (list @t)
12+ ^
13+/tests/golden/types-list-branch/source.jibb:39:12: list item has type @p
14+ %.n [~zod ~]
15+ ^
16+++ bad-tail: list tail does not fit its expected type
17+/tests/golden/types-list-branch/source.jibb:41:6: expected list has type (list @t)
18+ ^- (list @t)
19+ ^
20+/tests/golden/types-list-branch/source.jibb:43:17: list tail has type @p
21+ %.y ["hi" ~zod]
22+ ^
23+++ pending: tag needs context in partial inference
24+++ pending-null: `~` needs context in partial inference
25+++ incomplete: branch pattern is not supported by partial inference
26+++ duplicate: branch is not supported by partial inference
27+++ opposite: list item does not fit its expected type
28+/tests/golden/types-list-branch/source.jibb:68:6: expected item has type @t
29+ ^- (list @t)
30+ ^
31+/tests/golden/types-list-branch/source.jibb:70:12: list item has type @p
32+ %.y [~zod ~]
33+ ^
34+++ escape: name is not available to partial inference
35+++ bad-recursive: recursive gate constraint is not supported by partial inference
tests/golden/types-list-imported/about.txt+1−1
@@ -1,4 +1,4 @@
1source: Overview, Importing Hoon types: "`/-` and `/%` translate each mold a module uses from `/sur` files and marks"; Grammar, Molds: containers include `(list A)`.
1source: Overview, Importing Hoon types: "`/-` and `/%` translate each mold a module uses from `/sur` files and marks"; Grammar, Molds: containers include `(list A)`.
2−tests: A real Hoon list import and the prelude list type agree in both directions, list literals, null and cons cells fit imported contexts, and incompatible element types report both sites.
2+tests: A real Hoon list import and the prelude list type agree in both directions, list literals, null, cons cells and branch results fit imported contexts, and incompatible element types report both sites.
3expect: parses
3expect: parses
4expect-types: a partial inference report
4expect-types: a partial inference report
tests/golden/types-list-imported/source.jibb+5
@@ -7,3 +7,8 @@
7++ cons (take ["hi" ~])
7++ cons (take ["hi" ~])
8++ empty ^- texts.fixture ~
8++ empty ^- texts.fixture ~
9++ bad-cons ^- texts.fixture [~zod ~]
9++ bad-cons ^- texts.fixture [~zod ~]
10+++ branch |= b=?
11+ ^- texts.fixture
12+ ?- b
13+ %.y ~[]
14+ %.n ["hi" ~]
tests/golden/types-list-imported/tokens.txt+27−1
@@ -80,4 +80,30 @@
809:31 tight lit ~zod
809:31 tight lit ~zod
819:36 lit ~
819:36 lit ~
829:37 tight glyph ]
829:37 tight glyph ]
83+10:1 NEWLINE
84+10:1 glyph ++
85+10:4 name branch
86+10:11 glyph |=
87+10:14 name b
88+10:15 tight glyph =
89+10:16 tight glyph ?
90+11:3 INDENT
91+11:3 glyph ^-
92+11:6 wing texts.fixture
93+12:5 INDENT
94+12:5 glyph ?-
95+12:8 name b
96+13:7 INDENT
97+13:7 lit %.y
98+13:11 glyph ~[
99+13:13 tight glyph ]
100+14:7 NEWLINE
101+14:7 lit %.n
102+14:11 glyph [
103+14:12 tight str "hi"
104+14:17 lit ~
105+14:18 tight glyph ]
106+14:19 DEDENT
107+14:19 DEDENT
108+14:19 DEDENT
83−9:38 NEWLINE
109+14:19 NEWLINE
tests/golden/types-list-imported/tree.txt+14−1
@@ -36,4 +36,17 @@
36 (value 9:1 bad-cons
36 (value 9:1 bad-cons
37 (cast 9:13
37 (cast 9:13
38 (ref 9:16 texts.fixture)
38 (ref 9:16 texts.fixture)
39− (tuple 9:30 (lit 9:31 ~zod) (lit 9:36 ~)))))
39+ (tuple 9:30 (lit 9:31 ~zod) (lit 9:36 ~))))
40+ (value 10:1 branch
41+ (gate 10:11
42+ (face 10:14 b (flag 10:16))
43+ (body 11:3
44+ (cast 11:3
45+ (ref 11:6 texts.fixture)
46+ (body 12:5
47+ (branch 12:5
48+ (wing 12:8 b)
49+ (arm 13:7 (lit 13:7 %.y) (list 13:11))
50+ (arm 14:7
51+ (lit 14:7 %.n)
52+ (tuple 14:11 (str 14:12 "hi") (lit 14:17 ~))))))))))
tests/golden/types-list-imported/types.txt+1
@@ -19,3 +19,4 @@ partial inference; module not checked
19/tests/golden/types-list-imported/source.jibb:9:31: list item has type @p
19/tests/golden/types-list-imported/source.jibb:9:31: list item has type @p
20++ bad-cons ^- texts.fixture [~zod ~]
20++ bad-cons ^- texts.fixture [~zod ~]
21 ^
21 ^
22+++ branch: $-(? (list @t))
tests/lib/jibb-module-scope.hoon+1−1
@@ -54,7 +54,7 @@
54::
54::
55++ list-guard
55++ list-guard
56 ^- @t
56 ^- @t
57− =/ source=@t (crip "/- fixture\0a++ imported |= x=texts.fixture x\0a++ imported-cons ^- texts.fixture [\"hi\" ~]\0a++ imported-empty ^- texts.fixture ~\0a++ imported-pattern |= xs=texts.fixture\0a ?- xs\0a ~ !!\0a [item rest] item\0a++ imported-literal ^- texts.fixture ~[\"hi\"]\0a++ literal ^- (list @t) ~[\"hi\"]\0a++ bridge |= x=texts.fixture ^- (list @t) x\0a")
57+ =/ source=@t (crip "/- fixture\0a++ imported |= x=texts.fixture x\0a++ imported-branch |= b=?\0a ^- texts.fixture\0a ?- b\0a %.y ~[]\0a %.n [\"hi\" ~]\0a++ imported-cons ^- texts.fixture [\"hi\" ~]\0a++ imported-empty ^- texts.fixture ~\0a++ imported-pattern |= xs=texts.fixture\0a ?- xs\0a ~ !!\0a [item rest] item\0a++ imported-literal ^- texts.fixture ~[\"hi\"]\0a++ literal ^- (list @t) ~[\"hi\"]\0a++ bridge |= x=texts.fixture ^- (list @t) x\0a")
58 =/ ext=(list [module=term name=term result=*])
58 =/ ext=(list [module=term name=term result=*])
59 ~[[%fixture %texts [%& [%apply %list ~[[%atom %t ~]]]]]]
59 ~[[%fixture %texts [%& [%apply %list ~[[%atom %t ~]]]]]]
60 =/ omitted=@t (crip "++ same |=(x x)\0a")
60 =/ omitted=@t (crip "++ same |=(x x)\0a")
tests/lib/jibb.hoon+587−559
@@ -1315,464 +1315,484 @@
1315/* tok-403 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1315/* tok-403 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1316/* tre-403 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1316/* tre-403 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1317/* typ-403 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1317/* typ-403 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1318−/* src-404 %jibb /tests/golden/types-generic-arity/source/jibb
1318+/* src-404 %jibb /tests/golden/types-capital-distinct/source/jibb
1319−/* tok-404 %txt /tests/golden/types-generic-arity/tokens/txt
1319+/* tok-404 %txt /tests/golden/types-capital-distinct/tokens/txt
1320−/* tre-404 %txt /tests/golden/types-generic-arity/tree/txt
1320+/* tre-404 %txt /tests/golden/types-capital-distinct/tree/txt
1321−/* typ-404 %txt /tests/golden/types-generic-arity/types/txt
1321+/* typ-404 %txt /tests/golden/types-capital-distinct/types/txt
1322−/* src-405 %jibb /tests/golden/types-generic-face-inference/source/jibb
1322+/* src-405 %jibb /tests/golden/types-generic-arity/source/jibb
1323−/* tok-405 %txt /tests/golden/types-generic-face-inference/tokens/txt
1323+/* tok-405 %txt /tests/golden/types-generic-arity/tokens/txt
1324−/* tre-405 %txt /tests/golden/types-generic-face-inference/tree/txt
1324+/* tre-405 %txt /tests/golden/types-generic-arity/tree/txt
1325−/* typ-405 %txt /tests/golden/types-generic-face-inference/types/txt
1325+/* typ-405 %txt /tests/golden/types-generic-arity/types/txt
1326−/* src-406 %jibb /tests/golden/types-generic-gates/source/jibb
1326+/* src-406 %jibb /tests/golden/types-generic-face-inference/source/jibb
1327−/* tok-406 %txt /tests/golden/types-generic-gates/tokens/txt
1327+/* tok-406 %txt /tests/golden/types-generic-face-inference/tokens/txt
1328−/* tre-406 %txt /tests/golden/types-generic-gates/tree/txt
1328+/* tre-406 %txt /tests/golden/types-generic-face-inference/tree/txt
1329−/* typ-406 %txt /tests/golden/types-generic-gates/types/txt
1329+/* typ-406 %txt /tests/golden/types-generic-face-inference/types/txt
1330−/* src-407 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1330+/* src-407 %jibb /tests/golden/types-generic-gates/source/jibb
1331−/* tok-407 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1331+/* tok-407 %txt /tests/golden/types-generic-gates/tokens/txt
1332−/* tre-407 %txt /tests/golden/types-generic-import-reverse/tree/txt
1332+/* tre-407 %txt /tests/golden/types-generic-gates/tree/txt
1333−/* mod-407-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1333+/* typ-407 %txt /tests/golden/types-generic-gates/types/txt
1334−/* typ-407 %txt /tests/golden/types-generic-import-reverse/types/txt
1334+/* src-408 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1335−/* mtre-407 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1335+/* tok-408 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1336−/* src-408 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1336+/* tre-408 %txt /tests/golden/types-generic-import-reverse/tree/txt
1337−/* tok-408 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1337+/* mod-408-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1338−/* tre-408 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1338+/* typ-408 %txt /tests/golden/types-generic-import-reverse/types/txt
1339−/* typ-408 %txt /tests/golden/types-generic-lexical-alias/types/txt
1339+/* mtre-408 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1340−/* src-409 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1340+/* src-409 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1341−/* tok-409 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1341+/* tok-409 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1342−/* tre-409 %txt /tests/golden/types-generic-local-parameter/tree/txt
1342+/* tre-409 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1343−/* typ-409 %txt /tests/golden/types-generic-local-parameter/types/txt
1343+/* typ-409 %txt /tests/golden/types-generic-lexical-alias/types/txt
1344−/* src-410 %jibb /tests/golden/types-generic-local-scope/source/jibb
1344+/* src-410 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1345−/* tok-410 %txt /tests/golden/types-generic-local-scope/tokens/txt
1345+/* tok-410 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1346−/* tre-410 %txt /tests/golden/types-generic-local-scope/tree/txt
1346+/* tre-410 %txt /tests/golden/types-generic-local-parameter/tree/txt
1347−/* typ-410 %txt /tests/golden/types-generic-local-scope/types/txt
1347+/* typ-410 %txt /tests/golden/types-generic-local-parameter/types/txt
1348−/* src-411 %jibb /tests/golden/types-generic-module/source/jibb
1348+/* src-411 %jibb /tests/golden/types-generic-local-scope/source/jibb
1349−/* tok-411 %txt /tests/golden/types-generic-module/tokens/txt
1349+/* tok-411 %txt /tests/golden/types-generic-local-scope/tokens/txt
1350−/* tre-411 %txt /tests/golden/types-generic-module/tree/txt
1350+/* tre-411 %txt /tests/golden/types-generic-local-scope/tree/txt
1351−/* mod-411-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1351+/* typ-411 %txt /tests/golden/types-generic-local-scope/types/txt
1352−/* typ-411 %txt /tests/golden/types-generic-module/types/txt
1352+/* src-412 %jibb /tests/golden/types-generic-module/source/jibb
1353−/* mtre-411 %txt /tests/golden/types-generic-module/module-trees/txt
1353+/* tok-412 %txt /tests/golden/types-generic-module/tokens/txt
1354−/* src-412 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1354+/* tre-412 %txt /tests/golden/types-generic-module/tree/txt
1355−/* tok-412 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1355+/* mod-412-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1356−/* tre-412 %txt /tests/golden/types-generic-nested-scope/tree/txt
1356+/* typ-412 %txt /tests/golden/types-generic-module/types/txt
1357−/* typ-412 %txt /tests/golden/types-generic-nested-scope/types/txt
1357+/* mtre-412 %txt /tests/golden/types-generic-module/module-trees/txt
1358−/* src-413 %jibb /tests/golden/types-generic-parameters/source/jibb
1358+/* src-413 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1359−/* tok-413 %txt /tests/golden/types-generic-parameters/tokens/txt
1359+/* tok-413 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1360−/* tre-413 %txt /tests/golden/types-generic-parameters/tree/txt
1360+/* tre-413 %txt /tests/golden/types-generic-nested-scope/tree/txt
1361−/* typ-413 %txt /tests/golden/types-generic-parameters/types/txt
1361+/* typ-413 %txt /tests/golden/types-generic-nested-scope/types/txt
1362−/* src-414 %jibb /tests/golden/types-generic-record/source/jibb
1362+/* src-414 %jibb /tests/golden/types-generic-parameters/source/jibb
1363−/* tok-414 %txt /tests/golden/types-generic-record/tokens/txt
1363+/* tok-414 %txt /tests/golden/types-generic-parameters/tokens/txt
1364−/* tre-414 %txt /tests/golden/types-generic-record/tree/txt
1364+/* tre-414 %txt /tests/golden/types-generic-parameters/tree/txt
1365−/* typ-414 %txt /tests/golden/types-generic-record/types/txt
1365+/* typ-414 %txt /tests/golden/types-generic-parameters/types/txt
1366−/* src-415 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1366+/* src-415 %jibb /tests/golden/types-generic-record/source/jibb
1367−/* tok-415 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1367+/* tok-415 %txt /tests/golden/types-generic-record/tokens/txt
1368−/* tre-415 %txt /tests/golden/types-generic-recursive-union/tree/txt
1368+/* tre-415 %txt /tests/golden/types-generic-record/tree/txt
1369−/* typ-415 %txt /tests/golden/types-generic-recursive-union/types/txt
1369+/* typ-415 %txt /tests/golden/types-generic-record/types/txt
1370−/* src-416 %jibb /tests/golden/types-generic-repeated/source/jibb
1370+/* src-416 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1371−/* tok-416 %txt /tests/golden/types-generic-repeated/tokens/txt
1371+/* tok-416 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1372−/* tre-416 %txt /tests/golden/types-generic-repeated/tree/txt
1372+/* tre-416 %txt /tests/golden/types-generic-recursive-union/tree/txt
1373−/* typ-416 %txt /tests/golden/types-generic-repeated/types/txt
1373+/* typ-416 %txt /tests/golden/types-generic-recursive-union/types/txt
1374−/* src-417 %jibb /tests/golden/types-generic-union-alias/source/jibb
1374+/* src-417 %jibb /tests/golden/types-generic-repeated/source/jibb
1375−/* tok-417 %txt /tests/golden/types-generic-union-alias/tokens/txt
1375+/* tok-417 %txt /tests/golden/types-generic-repeated/tokens/txt
1376−/* tre-417 %txt /tests/golden/types-generic-union-alias/tree/txt
1376+/* tre-417 %txt /tests/golden/types-generic-repeated/tree/txt
1377−/* typ-417 %txt /tests/golden/types-generic-union-alias/types/txt
1377+/* typ-417 %txt /tests/golden/types-generic-repeated/types/txt
1378−/* src-418 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1378+/* src-418 %jibb /tests/golden/types-generic-union-alias/source/jibb
1379−/* tok-418 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1379+/* tok-418 %txt /tests/golden/types-generic-union-alias/tokens/txt
1380−/* tre-418 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1380+/* tre-418 %txt /tests/golden/types-generic-union-alias/tree/txt
1381−/* mod-418-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1381+/* typ-418 %txt /tests/golden/types-generic-union-alias/types/txt
1382−/* typ-418 %txt /tests/golden/types-generic-union-alias-face/types/txt
1382+/* src-419 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1383−/* mtre-418 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1383+/* tok-419 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1384−/* src-419 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1384+/* tre-419 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1385−/* tok-419 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1385+/* mod-419-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1386−/* tre-419 %txt /tests/golden/types-generic-union-capitals/tree/txt
1386+/* typ-419 %txt /tests/golden/types-generic-union-alias-face/types/txt
1387−/* typ-419 %txt /tests/golden/types-generic-union-capitals/types/txt
1387+/* mtre-419 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1388−/* src-420 %jibb /tests/golden/types-generic-union-errors/source/jibb
1388+/* src-420 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1389−/* tok-420 %txt /tests/golden/types-generic-union-errors/tokens/txt
1389+/* tok-420 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1390−/* tre-420 %txt /tests/golden/types-generic-union-errors/tree/txt
1390+/* tre-420 %txt /tests/golden/types-generic-union-capitals/tree/txt
1391−/* typ-420 %txt /tests/golden/types-generic-union-errors/types/txt
1391+/* typ-420 %txt /tests/golden/types-generic-union-capitals/types/txt
1392−/* src-421 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1392+/* src-421 %jibb /tests/golden/types-generic-union-errors/source/jibb
1393−/* tok-421 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1393+/* tok-421 %txt /tests/golden/types-generic-union-errors/tokens/txt
1394−/* tre-421 %txt /tests/golden/types-generic-union-escaping/tree/txt
1394+/* tre-421 %txt /tests/golden/types-generic-union-errors/tree/txt
1395−/* mod-421-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1395+/* typ-421 %txt /tests/golden/types-generic-union-errors/types/txt
1396−/* mod-421-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1396+/* src-422 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1397−/* typ-421 %txt /tests/golden/types-generic-union-escaping/types/txt
1397+/* tok-422 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1398−/* mtre-421 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1398+/* tre-422 %txt /tests/golden/types-generic-union-escaping/tree/txt
1399−/* src-422 %jibb /tests/golden/types-generic-union-import/source/jibb
1399+/* mod-422-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1400−/* tok-422 %txt /tests/golden/types-generic-union-import/tokens/txt
1400+/* mod-422-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1401−/* tre-422 %txt /tests/golden/types-generic-union-import/tree/txt
1401+/* typ-422 %txt /tests/golden/types-generic-union-escaping/types/txt
1402−/* mod-422-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1402+/* mtre-422 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1403−/* mod-422-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1403+/* src-423 %jibb /tests/golden/types-generic-union-import/source/jibb
1404−/* typ-422 %txt /tests/golden/types-generic-union-import/types/txt
1404+/* tok-423 %txt /tests/golden/types-generic-union-import/tokens/txt
1405−/* mtre-422 %txt /tests/golden/types-generic-union-import/module-trees/txt
1405+/* tre-423 %txt /tests/golden/types-generic-union-import/tree/txt
1406−/* src-423 %jibb /tests/golden/types-generic-union-local/source/jibb
1406+/* mod-423-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1407−/* tok-423 %txt /tests/golden/types-generic-union-local/tokens/txt
1407+/* mod-423-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1408−/* tre-423 %txt /tests/golden/types-generic-union-local/tree/txt
1408+/* typ-423 %txt /tests/golden/types-generic-union-import/types/txt
1409−/* typ-423 %txt /tests/golden/types-generic-union-local/types/txt
1409+/* mtre-423 %txt /tests/golden/types-generic-union-import/module-trees/txt
1410−/* src-424 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1410+/* src-424 %jibb /tests/golden/types-generic-union-local/source/jibb
1411−/* tok-424 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1411+/* tok-424 %txt /tests/golden/types-generic-union-local/tokens/txt
1412−/* tre-424 %txt /tests/golden/types-generic-union-transitive/tree/txt
1412+/* tre-424 %txt /tests/golden/types-generic-union-local/tree/txt
1413−/* mod-424-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1413+/* typ-424 %txt /tests/golden/types-generic-union-local/types/txt
1414−/* mod-424-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1414+/* src-425 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1415−/* typ-424 %txt /tests/golden/types-generic-union-transitive/types/txt
1415+/* tok-425 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1416−/* mtre-424 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1416+/* tre-425 %txt /tests/golden/types-generic-union-transitive/tree/txt
1417−/* src-425 %jibb /tests/golden/types-import-mark/source/jibb
1417+/* mod-425-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1418−/* tok-425 %txt /tests/golden/types-import-mark/tokens/txt
1418+/* mod-425-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1419−/* tre-425 %txt /tests/golden/types-import-mark/tree/txt
1419+/* typ-425 %txt /tests/golden/types-generic-union-transitive/types/txt
1420−/* typ-425 %txt /tests/golden/types-import-mark/types/txt
1420+/* mtre-425 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1421−/* imp-425-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1421+/* src-426 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1422−/* mark-425-1 %txt /tests/golden/types-import-mark/mar/label/txt
1422+/* tok-426 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1423−/* src-426 %jibb /tests/golden/types-import-mark-record/source/jibb
1423+/* tre-426 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1424−/* tok-426 %txt /tests/golden/types-import-mark-record/tokens/txt
1424+/* typ-426 %txt /tests/golden/types-import-duplicate-mark/types/txt
1425−/* tre-426 %txt /tests/golden/types-import-mark-record/tree/txt
1425+/* mark-426-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1426−/* typ-426 %txt /tests/golden/types-import-mark-record/types/txt
1426+/* src-427 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1427−/* mark-426-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1427+/* tok-427 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1428−/* mark-426-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1428+/* tre-427 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1429−/* src-427 %jibb /tests/golden/types-import-missing-mold/source/jibb
1429+/* typ-427 %txt /tests/golden/types-import-duplicate-sur/types/txt
1430−/* tok-427 %txt /tests/golden/types-import-missing-mold/tokens/txt
1430+/* imp-427-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1431−/* tre-427 %txt /tests/golden/types-import-missing-mold/tree/txt
1431+/* imp-427-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1432−/* typ-427 %txt /tests/golden/types-import-missing-mold/types/txt
1432+/* imp-427-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1433−/* imp-427-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1433+/* src-428 %jibb /tests/golden/types-import-mark/source/jibb
1434−/* src-428 %jibb /tests/golden/types-import-sur/source/jibb
1434+/* tok-428 %txt /tests/golden/types-import-mark/tokens/txt
1435−/* tok-428 %txt /tests/golden/types-import-sur/tokens/txt
1435+/* tre-428 %txt /tests/golden/types-import-mark/tree/txt
1436−/* tre-428 %txt /tests/golden/types-import-sur/tree/txt
1436+/* typ-428 %txt /tests/golden/types-import-mark/types/txt
1437−/* typ-428 %txt /tests/golden/types-import-sur/types/txt
1437+/* imp-428-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1438−/* imp-428-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1438+/* mark-428-1 %txt /tests/golden/types-import-mark/mar/label/txt
1439−/* imp-428-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1439+/* src-429 %jibb /tests/golden/types-import-mark-record/source/jibb
1440−/* src-429 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1440+/* tok-429 %txt /tests/golden/types-import-mark-record/tokens/txt
1441−/* tok-429 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1441+/* tre-429 %txt /tests/golden/types-import-mark-record/tree/txt
1442−/* tre-429 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1442+/* typ-429 %txt /tests/golden/types-import-mark-record/types/txt
1443−/* mod-429-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1443+/* mark-429-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1444−/* typ-429 %txt /tests/golden/types-import-sur-record-graph/types/txt
1444+/* mark-429-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1445−/* imp-429-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1445+/* src-430 %jibb /tests/golden/types-import-missing-mold/source/jibb
1446−/* mtre-429 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1446+/* tok-430 %txt /tests/golden/types-import-missing-mold/tokens/txt
1447−/* src-430 %jibb /tests/golden/types-list-cons/source/jibb
1447+/* tre-430 %txt /tests/golden/types-import-missing-mold/tree/txt
1448−/* tok-430 %txt /tests/golden/types-list-cons/tokens/txt
1448+/* typ-430 %txt /tests/golden/types-import-missing-mold/types/txt
1449−/* tre-430 %txt /tests/golden/types-list-cons/tree/txt
1449+/* imp-430-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1450−/* typ-430 %txt /tests/golden/types-list-cons/types/txt
1450+/* src-431 %jibb /tests/golden/types-import-sur/source/jibb
1451−/* src-431 %jibb /tests/golden/types-list-context/source/jibb
1451+/* tok-431 %txt /tests/golden/types-import-sur/tokens/txt
1452−/* tok-431 %txt /tests/golden/types-list-context/tokens/txt
1452+/* tre-431 %txt /tests/golden/types-import-sur/tree/txt
1453−/* tre-431 %txt /tests/golden/types-list-context/tree/txt
1453+/* typ-431 %txt /tests/golden/types-import-sur/types/txt
1454−/* typ-431 %txt /tests/golden/types-list-context/types/txt
1454+/* imp-431-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1455−/* src-432 %jibb /tests/golden/types-list-imported/source/jibb
1455+/* imp-431-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1456−/* tok-432 %txt /tests/golden/types-list-imported/tokens/txt
1456+/* src-432 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1457−/* tre-432 %txt /tests/golden/types-list-imported/tree/txt
1457+/* tok-432 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1458−/* typ-432 %txt /tests/golden/types-list-imported/types/txt
1458+/* tre-432 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1459−/* imp-432-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1459+/* mod-432-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1460−/* imp-432-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1460+/* typ-432 %txt /tests/golden/types-import-sur-record-graph/types/txt
1461−/* src-433 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1461+/* imp-432-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1462−/* tok-433 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1462+/* mtre-432 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1463−/* tre-433 %txt /tests/golden/types-list-pattern-imported/tree/txt
1463+/* src-433 %jibb /tests/golden/types-list-branch/source/jibb
1464−/* typ-433 %txt /tests/golden/types-list-pattern-imported/types/txt
1464+/* tok-433 %txt /tests/golden/types-list-branch/tokens/txt
1465−/* imp-433-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1465+/* tre-433 %txt /tests/golden/types-list-branch/tree/txt
1466−/* imp-433-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1466+/* typ-433 %txt /tests/golden/types-list-branch/types/txt
1467−/* src-434 %jibb /tests/golden/types-list-patterns/source/jibb
1467+/* src-434 %jibb /tests/golden/types-list-cons/source/jibb
1468−/* tok-434 %txt /tests/golden/types-list-patterns/tokens/txt
1468+/* tok-434 %txt /tests/golden/types-list-cons/tokens/txt
1469−/* tre-434 %txt /tests/golden/types-list-patterns/tree/txt
1469+/* tre-434 %txt /tests/golden/types-list-cons/tree/txt
1470−/* typ-434 %txt /tests/golden/types-list-patterns/types/txt
1470+/* typ-434 %txt /tests/golden/types-list-cons/types/txt
1471−/* src-435 %jibb /tests/golden/types-module-fixtures/source/jibb
1471+/* src-435 %jibb /tests/golden/types-list-context/source/jibb
1472−/* tok-435 %txt /tests/golden/types-module-fixtures/tokens/txt
1472+/* tok-435 %txt /tests/golden/types-list-context/tokens/txt
1473−/* tre-435 %txt /tests/golden/types-module-fixtures/tree/txt
1473+/* tre-435 %txt /tests/golden/types-list-context/tree/txt
1474−/* mod-435-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1474+/* typ-435 %txt /tests/golden/types-list-context/types/txt
1475−/* mod-435-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1475+/* src-436 %jibb /tests/golden/types-list-imported/source/jibb
1476−/* typ-435 %txt /tests/golden/types-module-fixtures/types/txt
1476+/* tok-436 %txt /tests/golden/types-list-imported/tokens/txt
1477−/* mtre-435 %txt /tests/golden/types-module-fixtures/module-trees/txt
1477+/* tre-436 %txt /tests/golden/types-list-imported/tree/txt
1478−/* src-436 %jibb /tests/golden/types-module-mixed/source/jibb
1478+/* typ-436 %txt /tests/golden/types-list-imported/types/txt
1479−/* tok-436 %txt /tests/golden/types-module-mixed/tokens/txt
1479+/* imp-436-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1480−/* tre-436 %txt /tests/golden/types-module-mixed/tree/txt
1480+/* imp-436-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1481−/* mod-436-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1481+/* src-437 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1482−/* typ-436 %txt /tests/golden/types-module-mixed/types/txt
1482+/* tok-437 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1483−/* imp-436-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1483+/* tre-437 %txt /tests/golden/types-list-pattern-imported/tree/txt
1484−/* mark-436-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1484+/* typ-437 %txt /tests/golden/types-list-pattern-imported/types/txt
1485−/* mtre-436 %txt /tests/golden/types-module-mixed/module-trees/txt
1485+/* imp-437-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1486−/* src-437 %jibb /tests/golden/types-null-context/source/jibb
1486+/* imp-437-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1487−/* tok-437 %txt /tests/golden/types-null-context/tokens/txt
1487+/* src-438 %jibb /tests/golden/types-list-patterns/source/jibb
1488−/* tre-437 %txt /tests/golden/types-null-context/tree/txt
1488+/* tok-438 %txt /tests/golden/types-list-patterns/tokens/txt
1489−/* typ-437 %txt /tests/golden/types-null-context/types/txt
1489+/* tre-438 %txt /tests/golden/types-list-patterns/tree/txt
1490−/* src-438 %jibb /tests/golden/types-null-overlap/source/jibb
1490+/* typ-438 %txt /tests/golden/types-list-patterns/types/txt
1491−/* tok-438 %txt /tests/golden/types-null-overlap/tokens/txt
1491+/* src-439 %jibb /tests/golden/types-module-fixtures/source/jibb
1492−/* tre-438 %txt /tests/golden/types-null-overlap/tree/txt
1492+/* tok-439 %txt /tests/golden/types-module-fixtures/tokens/txt
1493−/* typ-438 %txt /tests/golden/types-null-overlap/types/txt
1493+/* tre-439 %txt /tests/golden/types-module-fixtures/tree/txt
1494−/* src-439 %jibb /tests/golden/types-null-unresolved/source/jibb
1494+/* mod-439-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1495−/* tok-439 %txt /tests/golden/types-null-unresolved/tokens/txt
1495+/* mod-439-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1496−/* tre-439 %txt /tests/golden/types-null-unresolved/tree/txt
1496+/* typ-439 %txt /tests/golden/types-module-fixtures/types/txt
1497−/* typ-439 %txt /tests/golden/types-null-unresolved/types/txt
1497+/* mtre-439 %txt /tests/golden/types-module-fixtures/module-trees/txt
1498−/* src-440 %jibb /tests/golden/types-partial-apply/source/jibb
1498+/* src-440 %jibb /tests/golden/types-module-mixed/source/jibb
1499−/* tok-440 %txt /tests/golden/types-partial-apply/tokens/txt
1499+/* tok-440 %txt /tests/golden/types-module-mixed/tokens/txt
1500−/* tre-440 %txt /tests/golden/types-partial-apply/tree/txt
1500+/* tre-440 %txt /tests/golden/types-module-mixed/tree/txt
1501−/* typ-440 %txt /tests/golden/types-partial-apply/types/txt
1501+/* mod-440-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1502−/* src-441 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1502+/* typ-440 %txt /tests/golden/types-module-mixed/types/txt
1503−/* tok-441 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1503+/* imp-440-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1504−/* tre-441 %txt /tests/golden/types-partial-atom-alias/tree/txt
1504+/* mark-440-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1505−/* typ-441 %txt /tests/golden/types-partial-atom-alias/types/txt
1505+/* mtre-440 %txt /tests/golden/types-module-mixed/module-trees/txt
1506−/* src-442 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1506+/* src-441 %jibb /tests/golden/types-null-context/source/jibb
1507−/* tok-442 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1507+/* tok-441 %txt /tests/golden/types-null-context/tokens/txt
1508−/* tre-442 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1508+/* tre-441 %txt /tests/golden/types-null-context/tree/txt
1509−/* typ-442 %txt /tests/golden/types-partial-atom-constraint/types/txt
1509+/* typ-441 %txt /tests/golden/types-null-context/types/txt
1510−/* src-443 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1510+/* src-442 %jibb /tests/golden/types-null-overlap/source/jibb
1511−/* tok-443 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1511+/* tok-442 %txt /tests/golden/types-null-overlap/tokens/txt
1512−/* tre-443 %txt /tests/golden/types-partial-atom-widening/tree/txt
1512+/* tre-442 %txt /tests/golden/types-null-overlap/tree/txt
1513−/* typ-443 %txt /tests/golden/types-partial-atom-widening/types/txt
1513+/* typ-442 %txt /tests/golden/types-null-overlap/types/txt
1514−/* src-444 %jibb /tests/golden/types-partial-aura/source/jibb
1514+/* src-443 %jibb /tests/golden/types-null-unresolved/source/jibb
1515−/* tok-444 %txt /tests/golden/types-partial-aura/tokens/txt
1515+/* tok-443 %txt /tests/golden/types-null-unresolved/tokens/txt
1516−/* tre-444 %txt /tests/golden/types-partial-aura/tree/txt
1516+/* tre-443 %txt /tests/golden/types-null-unresolved/tree/txt
1517−/* typ-444 %txt /tests/golden/types-partial-aura/types/txt
1517+/* typ-443 %txt /tests/golden/types-null-unresolved/types/txt
1518−/* src-445 %jibb /tests/golden/types-partial-aura-family/source/jibb
1518+/* src-444 %jibb /tests/golden/types-partial-apply/source/jibb
1519−/* tok-445 %txt /tests/golden/types-partial-aura-family/tokens/txt
1519+/* tok-444 %txt /tests/golden/types-partial-apply/tokens/txt
1520−/* tre-445 %txt /tests/golden/types-partial-aura-family/tree/txt
1520+/* tre-444 %txt /tests/golden/types-partial-apply/tree/txt
1521−/* typ-445 %txt /tests/golden/types-partial-aura-family/types/txt
1521+/* typ-444 %txt /tests/golden/types-partial-apply/types/txt
1522−/* src-446 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1522+/* src-445 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1523−/* tok-446 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1523+/* tok-445 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1524−/* tre-446 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1524+/* tre-445 %txt /tests/golden/types-partial-atom-alias/tree/txt
1525−/* typ-446 %txt /tests/golden/types-partial-aura-generalization/types/txt
1525+/* typ-445 %txt /tests/golden/types-partial-atom-alias/types/txt
1526−/* src-447 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1526+/* src-446 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1527−/* tok-447 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1527+/* tok-446 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1528−/* tre-447 %txt /tests/golden/types-partial-bare-atom/tree/txt
1528+/* tre-446 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1529−/* typ-447 %txt /tests/golden/types-partial-bare-atom/types/txt
1529+/* typ-446 %txt /tests/golden/types-partial-atom-constraint/types/txt
1530−/* src-448 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1530+/* src-447 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1531−/* tok-448 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1531+/* tok-447 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1532−/* tre-448 %txt /tests/golden/types-partial-branch-widening/tree/txt
1532+/* tre-447 %txt /tests/golden/types-partial-atom-widening/tree/txt
1533−/* typ-448 %txt /tests/golden/types-partial-branch-widening/types/txt
1533+/* typ-447 %txt /tests/golden/types-partial-atom-widening/types/txt
1534−/* src-449 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1534+/* src-448 %jibb /tests/golden/types-partial-aura/source/jibb
1535−/* tok-449 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1535+/* tok-448 %txt /tests/golden/types-partial-aura/tokens/txt
1536−/* tre-449 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1536+/* tre-448 %txt /tests/golden/types-partial-aura/tree/txt
1537−/* typ-449 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1537+/* typ-448 %txt /tests/golden/types-partial-aura/types/txt
1538−/* src-450 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1538+/* src-449 %jibb /tests/golden/types-partial-aura-family/source/jibb
1539−/* tok-450 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1539+/* tok-449 %txt /tests/golden/types-partial-aura-family/tokens/txt
1540−/* tre-450 %txt /tests/golden/types-partial-decimal-default/tree/txt
1540+/* tre-449 %txt /tests/golden/types-partial-aura-family/tree/txt
1541−/* typ-450 %txt /tests/golden/types-partial-decimal-default/types/txt
1541+/* typ-449 %txt /tests/golden/types-partial-aura-family/types/txt
1542−/* src-451 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1542+/* src-450 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1543−/* tok-451 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1543+/* tok-450 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1544−/* tre-451 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1544+/* tre-450 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1545−/* typ-451 %txt /tests/golden/types-partial-dependency-chain/types/txt
1545+/* typ-450 %txt /tests/golden/types-partial-aura-generalization/types/txt
1546−/* src-452 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1546+/* src-451 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1547−/* tok-452 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1547+/* tok-451 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1548−/* tre-452 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1548+/* tre-451 %txt /tests/golden/types-partial-bare-atom/tree/txt
1549−/* typ-452 %txt /tests/golden/types-partial-explicit-capital/types/txt
1549+/* typ-451 %txt /tests/golden/types-partial-bare-atom/types/txt
1550−/* src-453 %jibb /tests/golden/types-partial-forward/source/jibb
1550+/* src-452 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1551−/* tok-453 %txt /tests/golden/types-partial-forward/tokens/txt
1551+/* tok-452 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1552−/* tre-453 %txt /tests/golden/types-partial-forward/tree/txt
1552+/* tre-452 %txt /tests/golden/types-partial-branch-widening/tree/txt
1553−/* typ-453 %txt /tests/golden/types-partial-forward/types/txt
1553+/* typ-452 %txt /tests/golden/types-partial-branch-widening/types/txt
1554−/* src-454 %jibb /tests/golden/types-partial-generalization/source/jibb
1554+/* src-453 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1555−/* tok-454 %txt /tests/golden/types-partial-generalization/tokens/txt
1555+/* tok-453 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1556−/* tre-454 %txt /tests/golden/types-partial-generalization/tree/txt
1556+/* tre-453 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1557−/* typ-454 %txt /tests/golden/types-partial-generalization/types/txt
1557+/* typ-453 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1558−/* src-455 %jibb /tests/golden/types-partial-identity/source/jibb
1558+/* src-454 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1559−/* tok-455 %txt /tests/golden/types-partial-identity/tokens/txt
1559+/* tok-454 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1560−/* tre-455 %txt /tests/golden/types-partial-identity/tree/txt
1560+/* tre-454 %txt /tests/golden/types-partial-decimal-default/tree/txt
1561−/* typ-455 %txt /tests/golden/types-partial-identity/types/txt
1561+/* typ-454 %txt /tests/golden/types-partial-decimal-default/types/txt
1562−/* src-456 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1562+/* src-455 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1563−/* tok-456 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1563+/* tok-455 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1564−/* tre-456 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1564+/* tre-455 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1565−/* typ-456 %txt /tests/golden/types-partial-independent-atoms/types/txt
1565+/* typ-455 %txt /tests/golden/types-partial-dependency-chain/types/txt
1566−/* src-457 %jibb /tests/golden/types-partial-local-molds/source/jibb
1566+/* src-456 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1567−/* tok-457 %txt /tests/golden/types-partial-local-molds/tokens/txt
1567+/* tok-456 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1568−/* tre-457 %txt /tests/golden/types-partial-local-molds/tree/txt
1568+/* tre-456 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1569−/* typ-457 %txt /tests/golden/types-partial-local-molds/types/txt
1569+/* typ-456 %txt /tests/golden/types-partial-explicit-capital/types/txt
1570−/* src-458 %jibb /tests/golden/types-partial-locals/source/jibb
1570+/* src-457 %jibb /tests/golden/types-partial-forward/source/jibb
1571−/* tok-458 %txt /tests/golden/types-partial-locals/tokens/txt
1571+/* tok-457 %txt /tests/golden/types-partial-forward/tokens/txt
1572−/* tre-458 %txt /tests/golden/types-partial-locals/tree/txt
1572+/* tre-457 %txt /tests/golden/types-partial-forward/tree/txt
1573−/* typ-458 %txt /tests/golden/types-partial-locals/types/txt
1573+/* typ-457 %txt /tests/golden/types-partial-forward/types/txt
1574−/* src-459 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1574+/* src-458 %jibb /tests/golden/types-partial-generalization/source/jibb
1575−/* tok-459 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1575+/* tok-458 %txt /tests/golden/types-partial-generalization/tokens/txt
1576−/* tre-459 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1576+/* tre-458 %txt /tests/golden/types-partial-generalization/tree/txt
1577−/* typ-459 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1577+/* typ-458 %txt /tests/golden/types-partial-generalization/types/txt
1578−/* src-460 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1578+/* src-459 %jibb /tests/golden/types-partial-identity/source/jibb
1579−/* tok-460 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1579+/* tok-459 %txt /tests/golden/types-partial-identity/tokens/txt
1580−/* tre-460 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1580+/* tre-459 %txt /tests/golden/types-partial-identity/tree/txt
1581−/* typ-460 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1581+/* typ-459 %txt /tests/golden/types-partial-identity/types/txt
1582−/* src-461 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1582+/* src-460 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1583−/* tok-461 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1583+/* tok-460 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1584−/* tre-461 %txt /tests/golden/types-partial-mold-composite/tree/txt
1584+/* tre-460 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1585−/* typ-461 %txt /tests/golden/types-partial-mold-composite/types/txt
1585+/* typ-460 %txt /tests/golden/types-partial-independent-atoms/types/txt
1586−/* src-462 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1586+/* src-461 %jibb /tests/golden/types-partial-local-molds/source/jibb
1587−/* tok-462 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1587+/* tok-461 %txt /tests/golden/types-partial-local-molds/tokens/txt
1588−/* tre-462 %txt /tests/golden/types-partial-mold-forward/tree/txt
1588+/* tre-461 %txt /tests/golden/types-partial-local-molds/tree/txt
1589−/* typ-462 %txt /tests/golden/types-partial-mold-forward/types/txt
1589+/* typ-461 %txt /tests/golden/types-partial-local-molds/types/txt
1590−/* src-463 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1590+/* src-462 %jibb /tests/golden/types-partial-locals/source/jibb
1591−/* tok-463 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1591+/* tok-462 %txt /tests/golden/types-partial-locals/tokens/txt
1592−/* tre-463 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1592+/* tre-462 %txt /tests/golden/types-partial-locals/tree/txt
1593−/* typ-463 %txt /tests/golden/types-partial-mold-recursive/types/txt
1593+/* typ-462 %txt /tests/golden/types-partial-locals/types/txt
1594−/* src-464 %jibb /tests/golden/types-partial-occurs/source/jibb
1594+/* src-463 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1595−/* tok-464 %txt /tests/golden/types-partial-occurs/tokens/txt
1595+/* tok-463 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1596−/* tre-464 %txt /tests/golden/types-partial-occurs/tree/txt
1596+/* tre-463 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1597−/* typ-464 %txt /tests/golden/types-partial-occurs/types/txt
1597+/* typ-463 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1598−/* src-465 %jibb /tests/golden/types-partial-projection/source/jibb
1598+/* src-464 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1599−/* tok-465 %txt /tests/golden/types-partial-projection/tokens/txt
1599+/* tok-464 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1600−/* tre-465 %txt /tests/golden/types-partial-projection/tree/txt
1600+/* tre-464 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1601−/* typ-465 %txt /tests/golden/types-partial-projection/types/txt
1601+/* typ-464 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1602−/* src-466 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1602+/* src-465 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1603−/* tok-466 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1603+/* tok-465 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1604−/* tre-466 %txt /tests/golden/types-partial-shadow-global/tree/txt
1604+/* tre-465 %txt /tests/golden/types-partial-mold-composite/tree/txt
1605−/* typ-466 %txt /tests/golden/types-partial-shadow-global/types/txt
1605+/* typ-465 %txt /tests/golden/types-partial-mold-composite/types/txt
1606−/* src-467 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1606+/* src-466 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1607−/* tok-467 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1607+/* tok-466 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1608−/* tre-467 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1608+/* tre-466 %txt /tests/golden/types-partial-mold-forward/tree/txt
1609−/* typ-467 %txt /tests/golden/types-partial-shared-tvar/types/txt
1609+/* typ-466 %txt /tests/golden/types-partial-mold-forward/types/txt
1610−/* src-468 %jibb /tests/golden/types-partial-union-cases/source/jibb
1610+/* src-467 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1611−/* tok-468 %txt /tests/golden/types-partial-union-cases/tokens/txt
1611+/* tok-467 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1612−/* tre-468 %txt /tests/golden/types-partial-union-cases/tree/txt
1612+/* tre-467 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1613−/* typ-468 %txt /tests/golden/types-partial-union-cases/types/txt
1613+/* typ-467 %txt /tests/golden/types-partial-mold-recursive/types/txt
1614−/* src-469 %jibb /tests/golden/types-partial-union-edges/source/jibb
1614+/* src-468 %jibb /tests/golden/types-partial-occurs/source/jibb
1615−/* tok-469 %txt /tests/golden/types-partial-union-edges/tokens/txt
1615+/* tok-468 %txt /tests/golden/types-partial-occurs/tokens/txt
1616−/* tre-469 %txt /tests/golden/types-partial-union-edges/tree/txt
1616+/* tre-468 %txt /tests/golden/types-partial-occurs/tree/txt
1617−/* typ-469 %txt /tests/golden/types-partial-union-edges/types/txt
1617+/* typ-468 %txt /tests/golden/types-partial-occurs/types/txt
1618−/* src-470 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1618+/* src-469 %jibb /tests/golden/types-partial-projection/source/jibb
1619−/* tok-470 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1619+/* tok-469 %txt /tests/golden/types-partial-projection/tokens/txt
1620−/* tre-470 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1620+/* tre-469 %txt /tests/golden/types-partial-projection/tree/txt
1621−/* typ-470 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1621+/* typ-469 %txt /tests/golden/types-partial-projection/types/txt
1622−/* src-471 %jibb /tests/golden/types-prelude-direct/source/jibb
1622+/* src-470 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1623−/* tok-471 %txt /tests/golden/types-prelude-direct/tokens/txt
1623+/* tok-470 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1624−/* tre-471 %txt /tests/golden/types-prelude-direct/tree/txt
1624+/* tre-470 %txt /tests/golden/types-partial-shadow-global/tree/txt
1625−/* typ-471 %txt /tests/golden/types-prelude-direct/types/txt
1625+/* typ-470 %txt /tests/golden/types-partial-shadow-global/types/txt
1626−/* src-472 %jibb /tests/golden/types-prelude-interface/source/jibb
1626+/* src-471 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1627−/* tok-472 %txt /tests/golden/types-prelude-interface/tokens/txt
1627+/* tok-471 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1628−/* tre-472 %txt /tests/golden/types-prelude-interface/tree/txt
1628+/* tre-471 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1629−/* mod-472-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1629+/* typ-471 %txt /tests/golden/types-partial-shared-tvar/types/txt
1630−/* mod-472-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1630+/* src-472 %jibb /tests/golden/types-partial-union-cases/source/jibb
1631−/* typ-472 %txt /tests/golden/types-prelude-interface/types/txt
1631+/* tok-472 %txt /tests/golden/types-partial-union-cases/tokens/txt
1632−/* mtre-472 %txt /tests/golden/types-prelude-interface/module-trees/txt
1632+/* tre-472 %txt /tests/golden/types-partial-union-cases/tree/txt
1633−/* src-473 %jibb /tests/golden/types-record-bound-variable/source/jibb
1633+/* typ-472 %txt /tests/golden/types-partial-union-cases/types/txt
1634−/* tok-473 %txt /tests/golden/types-record-bound-variable/tokens/txt
1634+/* src-473 %jibb /tests/golden/types-partial-union-edges/source/jibb
1635−/* tre-473 %txt /tests/golden/types-record-bound-variable/tree/txt
1635+/* tok-473 %txt /tests/golden/types-partial-union-edges/tokens/txt
1636−/* typ-473 %txt /tests/golden/types-record-bound-variable/types/txt
1636+/* tre-473 %txt /tests/golden/types-partial-union-edges/tree/txt
1637−/* src-474 %jibb /tests/golden/types-record-faces/source/jibb
1637+/* typ-473 %txt /tests/golden/types-partial-union-edges/types/txt
1638−/* tok-474 %txt /tests/golden/types-record-faces/tokens/txt
1638+/* src-474 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1639−/* tre-474 %txt /tests/golden/types-record-faces/tree/txt
1639+/* tok-474 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1640−/* typ-474 %txt /tests/golden/types-record-faces/types/txt
1640+/* tre-474 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1641−/* src-475 %jibb /tests/golden/types-record-import/source/jibb
1641+/* typ-474 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1642−/* tok-475 %txt /tests/golden/types-record-import/tokens/txt
1642+/* src-475 %jibb /tests/golden/types-prelude-direct/source/jibb
1643−/* tre-475 %txt /tests/golden/types-record-import/tree/txt
1643+/* tok-475 %txt /tests/golden/types-prelude-direct/tokens/txt
1644−/* mod-475-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1644+/* tre-475 %txt /tests/golden/types-prelude-direct/tree/txt
1645−/* typ-475 %txt /tests/golden/types-record-import/types/txt
1645+/* typ-475 %txt /tests/golden/types-prelude-direct/types/txt
1646−/* mtre-475 %txt /tests/golden/types-record-import/module-trees/txt
1646+/* src-476 %jibb /tests/golden/types-prelude-interface/source/jibb
1647−/* src-476 %jibb /tests/golden/types-record-local-scheme/source/jibb
1647+/* tok-476 %txt /tests/golden/types-prelude-interface/tokens/txt
1648−/* tok-476 %txt /tests/golden/types-record-local-scheme/tokens/txt
1648+/* tre-476 %txt /tests/golden/types-prelude-interface/tree/txt
1649−/* tre-476 %txt /tests/golden/types-record-local-scheme/tree/txt
1649+/* mod-476-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1650−/* typ-476 %txt /tests/golden/types-record-local-scheme/types/txt
1650+/* mod-476-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1651−/* src-477 %jibb /tests/golden/types-record-nested/source/jibb
1651+/* typ-476 %txt /tests/golden/types-prelude-interface/types/txt
1652−/* tok-477 %txt /tests/golden/types-record-nested/tokens/txt
1652+/* mtre-476 %txt /tests/golden/types-prelude-interface/module-trees/txt
1653−/* tre-477 %txt /tests/golden/types-record-nested/tree/txt
1653+/* src-477 %jibb /tests/golden/types-record-bound-variable/source/jibb
1654−/* typ-477 %txt /tests/golden/types-record-nested/types/txt
1654+/* tok-477 %txt /tests/golden/types-record-bound-variable/tokens/txt
1655−/* src-478 %jibb /tests/golden/types-record-to-tuple/source/jibb
1655+/* tre-477 %txt /tests/golden/types-record-bound-variable/tree/txt
1656−/* tok-478 %txt /tests/golden/types-record-to-tuple/tokens/txt
1656+/* typ-477 %txt /tests/golden/types-record-bound-variable/types/txt
1657−/* tre-478 %txt /tests/golden/types-record-to-tuple/tree/txt
1657+/* src-478 %jibb /tests/golden/types-record-faces/source/jibb
1658−/* typ-478 %txt /tests/golden/types-record-to-tuple/types/txt
1658+/* tok-478 %txt /tests/golden/types-record-faces/tokens/txt
1659−/* src-479 %jibb /tests/golden/types-recursive-branch/source/jibb
1659+/* tre-478 %txt /tests/golden/types-record-faces/tree/txt
1660−/* tok-479 %txt /tests/golden/types-recursive-branch/tokens/txt
1660+/* typ-478 %txt /tests/golden/types-record-faces/types/txt
1661−/* tre-479 %txt /tests/golden/types-recursive-branch/tree/txt
1661+/* src-479 %jibb /tests/golden/types-record-import/source/jibb
1662−/* typ-479 %txt /tests/golden/types-recursive-branch/types/txt
1662+/* tok-479 %txt /tests/golden/types-record-import/tokens/txt
1663−/* src-480 %jibb /tests/golden/types-recursive-gate/source/jibb
1663+/* tre-479 %txt /tests/golden/types-record-import/tree/txt
1664−/* tok-480 %txt /tests/golden/types-recursive-gate/tokens/txt
1664+/* mod-479-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1665−/* tre-480 %txt /tests/golden/types-recursive-gate/tree/txt
1665+/* typ-479 %txt /tests/golden/types-record-import/types/txt
1666−/* typ-480 %txt /tests/golden/types-recursive-gate/types/txt
1666+/* mtre-479 %txt /tests/golden/types-record-import/module-trees/txt
1667−/* src-481 %jibb /tests/golden/types-union-alias/source/jibb
1667+/* src-480 %jibb /tests/golden/types-record-local-scheme/source/jibb
1668−/* tok-481 %txt /tests/golden/types-union-alias/tokens/txt
1668+/* tok-480 %txt /tests/golden/types-record-local-scheme/tokens/txt
1669−/* tre-481 %txt /tests/golden/types-union-alias/tree/txt
1669+/* tre-480 %txt /tests/golden/types-record-local-scheme/tree/txt
1670−/* typ-481 %txt /tests/golden/types-union-alias/types/txt
1670+/* typ-480 %txt /tests/golden/types-record-local-scheme/types/txt
1671−/* src-482 %jibb /tests/golden/types-union-branch-context/source/jibb
1671+/* src-481 %jibb /tests/golden/types-record-nested/source/jibb
1672−/* tok-482 %txt /tests/golden/types-union-branch-context/tokens/txt
1672+/* tok-481 %txt /tests/golden/types-record-nested/tokens/txt
1673−/* tre-482 %txt /tests/golden/types-union-branch-context/tree/txt
1673+/* tre-481 %txt /tests/golden/types-record-nested/tree/txt
1674−/* typ-482 %txt /tests/golden/types-union-branch-context/types/txt
1674+/* typ-481 %txt /tests/golden/types-record-nested/types/txt
1675−/* src-483 %jibb /tests/golden/types-union-branch-pending/source/jibb
1675+/* src-482 %jibb /tests/golden/types-record-to-tuple/source/jibb
1676−/* tok-483 %txt /tests/golden/types-union-branch-pending/tokens/txt
1676+/* tok-482 %txt /tests/golden/types-record-to-tuple/tokens/txt
1677−/* tre-483 %txt /tests/golden/types-union-branch-pending/tree/txt
1677+/* tre-482 %txt /tests/golden/types-record-to-tuple/tree/txt
1678−/* typ-483 %txt /tests/golden/types-union-branch-pending/types/txt
1678+/* typ-482 %txt /tests/golden/types-record-to-tuple/types/txt
1679−/* src-484 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1679+/* src-483 %jibb /tests/golden/types-recursive-branch/source/jibb
1680−/* tok-484 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1680+/* tok-483 %txt /tests/golden/types-recursive-branch/tokens/txt
1681−/* tre-484 %txt /tests/golden/types-union-constructor-shape/tree/txt
1681+/* tre-483 %txt /tests/golden/types-recursive-branch/tree/txt
1682−/* typ-484 %txt /tests/golden/types-union-constructor-shape/types/txt
1682+/* typ-483 %txt /tests/golden/types-recursive-branch/types/txt
1683−/* src-485 %jibb /tests/golden/types-union-context-flow/source/jibb
1683+/* src-484 %jibb /tests/golden/types-recursive-gate/source/jibb
1684−/* tok-485 %txt /tests/golden/types-union-context-flow/tokens/txt
1684+/* tok-484 %txt /tests/golden/types-recursive-gate/tokens/txt
1685−/* tre-485 %txt /tests/golden/types-union-context-flow/tree/txt
1685+/* tre-484 %txt /tests/golden/types-recursive-gate/tree/txt
1686−/* typ-485 %txt /tests/golden/types-union-context-flow/types/txt
1686+/* typ-484 %txt /tests/golden/types-recursive-gate/types/txt
1687−/* src-486 %jibb /tests/golden/types-union-import/source/jibb
1687+/* src-485 %jibb /tests/golden/types-union-alias/source/jibb
1688−/* tok-486 %txt /tests/golden/types-union-import/tokens/txt
1688+/* tok-485 %txt /tests/golden/types-union-alias/tokens/txt
1689−/* tre-486 %txt /tests/golden/types-union-import/tree/txt
1689+/* tre-485 %txt /tests/golden/types-union-alias/tree/txt
1690−/* mod-486-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1690+/* typ-485 %txt /tests/golden/types-union-alias/types/txt
1691−/* typ-486 %txt /tests/golden/types-union-import/types/txt
1691+/* src-486 %jibb /tests/golden/types-union-branch-context/source/jibb
1692−/* mtre-486 %txt /tests/golden/types-union-import/module-trees/txt
1692+/* tok-486 %txt /tests/golden/types-union-branch-context/tokens/txt
1693−/* src-487 %jibb /tests/golden/types-union-local-pending/source/jibb
1693+/* tre-486 %txt /tests/golden/types-union-branch-context/tree/txt
1694−/* tok-487 %txt /tests/golden/types-union-local-pending/tokens/txt
1694+/* typ-486 %txt /tests/golden/types-union-branch-context/types/txt
1695−/* tre-487 %txt /tests/golden/types-union-local-pending/tree/txt
1695+/* src-487 %jibb /tests/golden/types-union-branch-pending/source/jibb
1696−/* typ-487 %txt /tests/golden/types-union-local-pending/types/txt
1696+/* tok-487 %txt /tests/golden/types-union-branch-pending/tokens/txt
1697−/* src-488 %jibb /tests/golden/types-union-overlap/source/jibb
1697+/* tre-487 %txt /tests/golden/types-union-branch-pending/tree/txt
1698−/* tok-488 %txt /tests/golden/types-union-overlap/tokens/txt
1698+/* typ-487 %txt /tests/golden/types-union-branch-pending/types/txt
1699−/* tre-488 %txt /tests/golden/types-union-overlap/tree/txt
1699+/* src-488 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1700−/* typ-488 %txt /tests/golden/types-union-overlap/types/txt
1700+/* tok-488 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1701−/* src-489 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1701+/* tre-488 %txt /tests/golden/types-union-constructor-shape/tree/txt
1702−/* tok-489 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1702+/* typ-488 %txt /tests/golden/types-union-constructor-shape/types/txt
1703−/* tre-489 %txt /tests/golden/types-union-overlap-nested/tree/txt
1703+/* src-489 %jibb /tests/golden/types-union-context-flow/source/jibb
1704−/* typ-489 %txt /tests/golden/types-union-overlap-nested/types/txt
1704+/* tok-489 %txt /tests/golden/types-union-context-flow/tokens/txt
1705−/* src-490 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1705+/* tre-489 %txt /tests/golden/types-union-context-flow/tree/txt
1706−/* tok-490 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1706+/* typ-489 %txt /tests/golden/types-union-context-flow/types/txt
1707−/* tre-490 %txt /tests/golden/types-union-phantom-generic/tree/txt
1707+/* src-490 %jibb /tests/golden/types-union-import/source/jibb
1708−/* typ-490 %txt /tests/golden/types-union-phantom-generic/types/txt
1708+/* tok-490 %txt /tests/golden/types-union-import/tokens/txt
1709−/* src-491 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1709+/* tre-490 %txt /tests/golden/types-union-import/tree/txt
1710−/* tok-491 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1710+/* mod-490-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1711−/* tre-491 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1711+/* typ-490 %txt /tests/golden/types-union-import/types/txt
1712−/* mod-491-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1712+/* mtre-490 %txt /tests/golden/types-union-import/module-trees/txt
1713−/* typ-491 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1713+/* src-491 %jibb /tests/golden/types-union-local-pending/source/jibb
1714−/* mtre-491 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1714+/* tok-491 %txt /tests/golden/types-union-local-pending/tokens/txt
1715−/* src-492 %jibb /tests/golden/types-union-print-distinct/source/jibb
1715+/* tre-491 %txt /tests/golden/types-union-local-pending/tree/txt
1716−/* tok-492 %txt /tests/golden/types-union-print-distinct/tokens/txt
1716+/* typ-491 %txt /tests/golden/types-union-local-pending/types/txt
1717−/* tre-492 %txt /tests/golden/types-union-print-distinct/tree/txt
1717+/* src-492 %jibb /tests/golden/types-union-overlap/source/jibb
1718−/* mod-492-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1718+/* tok-492 %txt /tests/golden/types-union-overlap/tokens/txt
1719−/* mod-492-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1719+/* tre-492 %txt /tests/golden/types-union-overlap/tree/txt
1720−/* mod-492-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1720+/* typ-492 %txt /tests/golden/types-union-overlap/types/txt
1721−/* typ-492 %txt /tests/golden/types-union-print-distinct/types/txt
1721+/* src-493 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1722−/* mtre-492 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1722+/* tok-493 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1723−/* src-493 %jibb /tests/golden/types-union-print-escape/source/jibb
1723+/* tre-493 %txt /tests/golden/types-union-overlap-nested/tree/txt
1724−/* tok-493 %txt /tests/golden/types-union-print-escape/tokens/txt
1724+/* typ-493 %txt /tests/golden/types-union-overlap-nested/types/txt
1725−/* tre-493 %txt /tests/golden/types-union-print-escape/tree/txt
1725+/* src-494 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1726−/* typ-493 %txt /tests/golden/types-union-print-escape/types/txt
1726+/* tok-494 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1727−/* src-494 %jibb /tests/golden/types-union-print-local/source/jibb
1727+/* tre-494 %txt /tests/golden/types-union-phantom-generic/tree/txt
1728−/* tok-494 %txt /tests/golden/types-union-print-local/tokens/txt
1728+/* typ-494 %txt /tests/golden/types-union-phantom-generic/types/txt
1729−/* tre-494 %txt /tests/golden/types-union-print-local/tree/txt
1729+/* src-495 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1730−/* typ-494 %txt /tests/golden/types-union-print-local/types/txt
1730+/* tok-495 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1731−/* src-495 %jibb /tests/golden/types-union-print-nested/source/jibb
1731+/* tre-495 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1732−/* tok-495 %txt /tests/golden/types-union-print-nested/tokens/txt
1732+/* mod-495-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1733−/* tre-495 %txt /tests/golden/types-union-print-nested/tree/txt
1733+/* typ-495 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1734−/* typ-495 %txt /tests/golden/types-union-print-nested/types/txt
1734+/* mtre-495 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1735−/* src-496 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1735+/* src-496 %jibb /tests/golden/types-union-print-distinct/source/jibb
1736−/* tok-496 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1736+/* tok-496 %txt /tests/golden/types-union-print-distinct/tokens/txt
1737−/* tre-496 %txt /tests/golden/types-union-print-same-origin/tree/txt
1737+/* tre-496 %txt /tests/golden/types-union-print-distinct/tree/txt
1738−/* mod-496-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1738+/* mod-496-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1739−/* typ-496 %txt /tests/golden/types-union-print-same-origin/types/txt
1739+/* mod-496-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1740−/* mtre-496 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1740+/* mod-496-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1741−/* src-497 %jibb /tests/golden/types-union-print-transitive/source/jibb
1741+/* typ-496 %txt /tests/golden/types-union-print-distinct/types/txt
1742−/* tok-497 %txt /tests/golden/types-union-print-transitive/tokens/txt
1742+/* mtre-496 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1743−/* tre-497 %txt /tests/golden/types-union-print-transitive/tree/txt
1743+/* src-497 %jibb /tests/golden/types-union-print-escape/source/jibb
1744−/* mod-497-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1744+/* tok-497 %txt /tests/golden/types-union-print-escape/tokens/txt
1745−/* mod-497-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1745+/* tre-497 %txt /tests/golden/types-union-print-escape/tree/txt
1746−/* typ-497 %txt /tests/golden/types-union-print-transitive/types/txt
1746+/* typ-497 %txt /tests/golden/types-union-print-escape/types/txt
1747−/* mtre-497 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1747+/* src-498 %jibb /tests/golden/types-union-print-local/source/jibb
1748−/* src-498 %jibb /tests/golden/types-union-singleton/source/jibb
1748+/* tok-498 %txt /tests/golden/types-union-print-local/tokens/txt
1749−/* tok-498 %txt /tests/golden/types-union-singleton/tokens/txt
1749+/* tre-498 %txt /tests/golden/types-union-print-local/tree/txt
1750−/* tre-498 %txt /tests/golden/types-union-singleton/tree/txt
1750+/* typ-498 %txt /tests/golden/types-union-print-local/types/txt
1751−/* typ-498 %txt /tests/golden/types-union-singleton/types/txt
1751+/* src-499 %jibb /tests/golden/types-union-print-nested/source/jibb
1752−/* src-499 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1752+/* tok-499 %txt /tests/golden/types-union-print-nested/tokens/txt
1753−/* tok-499 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1753+/* tre-499 %txt /tests/golden/types-union-print-nested/tree/txt
1754−/* tre-499 %txt /tests/golden/types-union-tag-atoms/tree/txt
1754+/* typ-499 %txt /tests/golden/types-union-print-nested/types/txt
1755−/* typ-499 %txt /tests/golden/types-union-tag-atoms/types/txt
1755+/* src-500 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1756−/* src-500 %jibb /tests/golden/types-union-tags/source/jibb
1756+/* tok-500 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1757−/* tok-500 %txt /tests/golden/types-union-tags/tokens/txt
1757+/* tre-500 %txt /tests/golden/types-union-print-same-origin/tree/txt
1758−/* tre-500 %txt /tests/golden/types-union-tags/tree/txt
1758+/* mod-500-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1759−/* typ-500 %txt /tests/golden/types-union-tags/types/txt
1759+/* typ-500 %txt /tests/golden/types-union-print-same-origin/types/txt
1760−/* src-501 %jibb /tests/golden/types-union-unresolved/source/jibb
1760+/* mtre-500 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1761−/* tok-501 %txt /tests/golden/types-union-unresolved/tokens/txt
1761+/* src-501 %jibb /tests/golden/types-union-print-transitive/source/jibb
1762−/* tre-501 %txt /tests/golden/types-union-unresolved/tree/txt
1762+/* tok-501 %txt /tests/golden/types-union-print-transitive/tokens/txt
1763−/* typ-501 %txt /tests/golden/types-union-unresolved/types/txt
1763+/* tre-501 %txt /tests/golden/types-union-print-transitive/tree/txt
1764−/* src-502 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1764+/* mod-501-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1765−/* tok-502 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1765+/* mod-501-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1766−/* tre-502 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1766+/* typ-501 %txt /tests/golden/types-union-print-transitive/types/txt
1767−/* typ-502 %txt /tests/golden/types-union-unresolved-flow/types/txt
1767+/* mtre-501 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1768−/* src-503 %jibb /tests/golden/types-unit-context/source/jibb
1768+/* src-502 %jibb /tests/golden/types-union-singleton/source/jibb
1769−/* tok-503 %txt /tests/golden/types-unit-context/tokens/txt
1769+/* tok-502 %txt /tests/golden/types-union-singleton/tokens/txt
1770−/* tre-503 %txt /tests/golden/types-unit-context/tree/txt
1770+/* tre-502 %txt /tests/golden/types-union-singleton/tree/txt
1771−/* typ-503 %txt /tests/golden/types-unit-context/types/txt
1771+/* typ-502 %txt /tests/golden/types-union-singleton/types/txt
1772−/* src-504 %jibb /tests/golden/types-unit-patterns/source/jibb
1772+/* src-503 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1773−/* tok-504 %txt /tests/golden/types-unit-patterns/tokens/txt
1773+/* tok-503 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1774−/* tre-504 %txt /tests/golden/types-unit-patterns/tree/txt
1774+/* tre-503 %txt /tests/golden/types-union-tag-atoms/tree/txt
1775−/* typ-504 %txt /tests/golden/types-unit-patterns/types/txt
1775+/* typ-503 %txt /tests/golden/types-union-tag-atoms/types/txt
1776+/* src-504 %jibb /tests/golden/types-union-tags/source/jibb
1777+/* tok-504 %txt /tests/golden/types-union-tags/tokens/txt
1778+/* tre-504 %txt /tests/golden/types-union-tags/tree/txt
1779+/* typ-504 %txt /tests/golden/types-union-tags/types/txt
1780+/* src-505 %jibb /tests/golden/types-union-unresolved/source/jibb
1781+/* tok-505 %txt /tests/golden/types-union-unresolved/tokens/txt
1782+/* tre-505 %txt /tests/golden/types-union-unresolved/tree/txt
1783+/* typ-505 %txt /tests/golden/types-union-unresolved/types/txt
1784+/* src-506 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1785+/* tok-506 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1786+/* tre-506 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1787+/* typ-506 %txt /tests/golden/types-union-unresolved-flow/types/txt
1788+/* src-507 %jibb /tests/golden/types-unit-context/source/jibb
1789+/* tok-507 %txt /tests/golden/types-unit-context/tokens/txt
1790+/* tre-507 %txt /tests/golden/types-unit-context/tree/txt
1791+/* typ-507 %txt /tests/golden/types-unit-context/types/txt
1792+/* src-508 %jibb /tests/golden/types-unit-patterns/source/jibb
1793+/* tok-508 %txt /tests/golden/types-unit-patterns/tokens/txt
1794+/* tre-508 %txt /tests/golden/types-unit-patterns/tree/txt
1795+/* typ-508 %txt /tests/golden/types-unit-patterns/types/txt
1776=/ prepared-prelude (prepare-prelude:jibb prelude-source)
1796=/ prepared-prelude (prepare-prelude:jibb prelude-source)
1777|%
1797|%
1778:: one arm per case
1798:: one arm per case
@@ -2583,208 +2603,216 @@
2583 (weld (check ~.prelude-list-unit src-402 `tok-402 `tre-402) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-402 `typ-402))
2603 (weld (check ~.prelude-list-unit src-402 `tok-402 `tre-402) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-402 `typ-402))
2584++ test-prelude-unit-list-transforms
2604++ test-prelude-unit-list-transforms
2585 (weld (check ~.prelude-unit-list-transforms src-403 `tok-403 `tre-403) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-403 `typ-403))
2605 (weld (check ~.prelude-unit-list-transforms src-403 `tok-403 `tre-403) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-403 `typ-403))
2606+++ test-types-capital-distinct
2607+ (weld (check ~.types-capital-distinct src-404 `tok-404 `tre-404) (check-types ~.types-capital-distinct ~[%tests %golden ~.types-capital-distinct %source %jibb] src-404 `typ-404))
2586++ test-types-generic-arity
2608++ test-types-generic-arity
2587− (weld (check ~.types-generic-arity src-404 `tok-404 `tre-404) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-404 `typ-404))
2609+ (weld (check ~.types-generic-arity src-405 `tok-405 `tre-405) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-405 `typ-405))
2588++ test-types-generic-face-inference
2610++ test-types-generic-face-inference
2589− (weld (check ~.types-generic-face-inference src-405 `tok-405 `tre-405) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-405 `typ-405))
2611+ (weld (check ~.types-generic-face-inference src-406 `tok-406 `tre-406) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-406 `typ-406))
2590++ test-types-generic-gates
2612++ test-types-generic-gates
2591− (weld (check ~.types-generic-gates src-406 `tok-406 `tre-406) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-406 `typ-406))
2613+ (weld (check ~.types-generic-gates src-407 `tok-407 `tre-407) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-407 `typ-407))
2592++ test-types-generic-import-reverse
2614++ test-types-generic-import-reverse
2593− (weld (weld (check ~.types-generic-import-reverse src-407 `tok-407 `tre-407) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-407 `typ-407 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-407-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-407 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-407-1]]))
2615+ (weld (weld (check ~.types-generic-import-reverse src-408 `tok-408 `tre-408) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-408 `typ-408 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-408-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-408 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-408-1]]))
2594++ test-types-generic-lexical-alias
2616++ test-types-generic-lexical-alias
2595− (weld (check ~.types-generic-lexical-alias src-408 `tok-408 `tre-408) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-408 `typ-408))
2617+ (weld (check ~.types-generic-lexical-alias src-409 `tok-409 `tre-409) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-409 `typ-409))
2596++ test-types-generic-local-parameter
2618++ test-types-generic-local-parameter
2597− (weld (check ~.types-generic-local-parameter src-409 `tok-409 `tre-409) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-409 `typ-409))
2619+ (weld (check ~.types-generic-local-parameter src-410 `tok-410 `tre-410) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-410 `typ-410))
2598++ test-types-generic-local-scope
2620++ test-types-generic-local-scope
2599− (weld (check ~.types-generic-local-scope src-410 `tok-410 `tre-410) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-410 `typ-410))
2621+ (weld (check ~.types-generic-local-scope src-411 `tok-411 `tre-411) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-411 `typ-411))
2600++ test-types-generic-module
2622++ test-types-generic-module
2601− (weld (weld (check ~.types-generic-module src-411 `tok-411 `tre-411) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-411 `typ-411 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-411-1]])) (check-module-trees ~.types-generic-module `mtre-411 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-411-1]]))
2623+ (weld (weld (check ~.types-generic-module src-412 `tok-412 `tre-412) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-412 `typ-412 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-412-1]])) (check-module-trees ~.types-generic-module `mtre-412 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-412-1]]))
2602++ test-types-generic-nested-scope
2624++ test-types-generic-nested-scope
2603− (weld (check ~.types-generic-nested-scope src-412 `tok-412 `tre-412) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-412 `typ-412))
2625+ (weld (check ~.types-generic-nested-scope src-413 `tok-413 `tre-413) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-413 `typ-413))
2604++ test-types-generic-parameters
2626++ test-types-generic-parameters
2605− (weld (check ~.types-generic-parameters src-413 `tok-413 `tre-413) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-413 `typ-413))
2627+ (weld (check ~.types-generic-parameters src-414 `tok-414 `tre-414) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-414 `typ-414))
2606++ test-types-generic-record
2628++ test-types-generic-record
2607− (weld (check ~.types-generic-record src-414 `tok-414 `tre-414) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-414 `typ-414))
2629+ (weld (check ~.types-generic-record src-415 `tok-415 `tre-415) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-415 `typ-415))
2608++ test-types-generic-recursive-union
2630++ test-types-generic-recursive-union
2609− (weld (check ~.types-generic-recursive-union src-415 `tok-415 `tre-415) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-415 `typ-415))
2631+ (weld (check ~.types-generic-recursive-union src-416 `tok-416 `tre-416) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-416 `typ-416))
2610++ test-types-generic-repeated
2632++ test-types-generic-repeated
2611− (weld (check ~.types-generic-repeated src-416 `tok-416 `tre-416) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-416 `typ-416))
2633+ (weld (check ~.types-generic-repeated src-417 `tok-417 `tre-417) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-417 `typ-417))
2612++ test-types-generic-union-alias
2634++ test-types-generic-union-alias
2613− (weld (check ~.types-generic-union-alias src-417 `tok-417 `tre-417) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-417 `typ-417))
2635+ (weld (check ~.types-generic-union-alias src-418 `tok-418 `tre-418) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-418 `typ-418))
2614++ test-types-generic-union-alias-face
2636++ test-types-generic-union-alias-face
2615− (weld (weld (check ~.types-generic-union-alias-face src-418 `tok-418 `tre-418) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-418 `typ-418 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-418-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-418 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-418-1]]))
2637+ (weld (weld (check ~.types-generic-union-alias-face src-419 `tok-419 `tre-419) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-419 `typ-419 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-419-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-419 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-419-1]]))
2616++ test-types-generic-union-capitals
2638++ test-types-generic-union-capitals
2617− (weld (check ~.types-generic-union-capitals src-419 `tok-419 `tre-419) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-419 `typ-419))
2639+ (weld (check ~.types-generic-union-capitals src-420 `tok-420 `tre-420) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-420 `typ-420))
2618++ test-types-generic-union-errors
2640++ test-types-generic-union-errors
2619− (weld (check ~.types-generic-union-errors src-420 `tok-420 `tre-420) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-420 `typ-420))
2641+ (weld (check ~.types-generic-union-errors src-421 `tok-421 `tre-421) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-421 `typ-421))
2620++ test-types-generic-union-escaping
2642++ test-types-generic-union-escaping
2621− (weld (weld (check ~.types-generic-union-escaping src-421 `tok-421 `tre-421) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-421 `typ-421 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-421-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-421-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-421 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-421-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-421-2]]))
2643+ (weld (weld (check ~.types-generic-union-escaping src-422 `tok-422 `tre-422) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-422 `typ-422 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-422-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-422-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-422 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-422-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-422-2]]))
2622++ test-types-generic-union-import
2644++ test-types-generic-union-import
2623− (weld (weld (check ~.types-generic-union-import src-422 `tok-422 `tre-422) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-422 `typ-422 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-422-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-422-2]])) (check-module-trees ~.types-generic-union-import `mtre-422 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-422-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-422-2]]))
2645+ (weld (weld (check ~.types-generic-union-import src-423 `tok-423 `tre-423) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-423 `typ-423 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-423-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-423-2]])) (check-module-trees ~.types-generic-union-import `mtre-423 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-423-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-423-2]]))
2624++ test-types-generic-union-local
2646++ test-types-generic-union-local
2625− (weld (check ~.types-generic-union-local src-423 `tok-423 `tre-423) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-423 `typ-423))
2647+ (weld (check ~.types-generic-union-local src-424 `tok-424 `tre-424) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-424 `typ-424))
2626++ test-types-generic-union-transitive
2648++ test-types-generic-union-transitive
2627− (weld (weld (check ~.types-generic-union-transitive src-424 `tok-424 `tre-424) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-424 `typ-424 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-424-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-424-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-424 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-424-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-424-2]]))
2649+ (weld (weld (check ~.types-generic-union-transitive src-425 `tok-425 `tre-425) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-425 `typ-425 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-425-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-425-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-425 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-425-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-425-2]]))
2650+++ test-types-import-duplicate-mark
2651+ (weld (check ~.types-import-duplicate-mark src-426 `tok-426 `tre-426) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-426 `typ-426 ~ ~[[%duplicate mark-426-1]]))
2652+++ test-types-import-duplicate-sur
2653+ (weld (check ~.types-import-duplicate-sur src-427 `tok-427 `tre-427) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-427 `typ-427 ~[[%fixture %direct imp-427-1] [%fixture %nested imp-427-2] [%fixture %valid imp-427-3]]))
2628++ test-types-import-mark
2654++ test-types-import-mark
2629− (weld (check ~.types-import-mark src-425 `tok-425 `tre-425) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-425 `typ-425 ~[[%fixture %title imp-425-1]] ~[[%label mark-425-1]]))
2655+ (weld (check ~.types-import-mark src-428 `tok-428 `tre-428) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-428 `typ-428 ~[[%fixture %title imp-428-1]] ~[[%label mark-428-1]]))
2630++ test-types-import-mark-record
2656++ test-types-import-mark-record
2631− (weld (check ~.types-import-mark-record src-426 `tok-426 `tre-426) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-426 `typ-426 ~ ~[[%note mark-426-1] [%choice mark-426-2]]))
2657+ (weld (check ~.types-import-mark-record src-429 `tok-429 `tre-429) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-429 `typ-429 ~ ~[[%note mark-429-1] [%choice mark-429-2]]))
2632++ test-types-import-missing-mold
2658++ test-types-import-missing-mold
2633− (weld (check ~.types-import-missing-mold src-427 `tok-427 `tre-427) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-427 `typ-427 ~[[%fixture %missing imp-427-1]]))
2659+ (weld (check ~.types-import-missing-mold src-430 `tok-430 `tre-430) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-430 `typ-430 ~[[%fixture %missing imp-430-1]]))
2634++ test-types-import-sur
2660++ test-types-import-sur
2635− (weld (check ~.types-import-sur src-428 `tok-428 `tre-428) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-428 `typ-428 ~[[%fixture %title imp-428-1] [%fixture %pair imp-428-2]]))
2661+ (weld (check ~.types-import-sur src-431 `tok-431 `tre-431) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-431 `typ-431 ~[[%fixture %title imp-431-1] [%fixture %pair imp-431-2]]))
2636++ test-types-import-sur-record-graph
2662++ test-types-import-sur-record-graph
2637− (weld (weld (check ~.types-import-sur-record-graph src-429 `tok-429 `tre-429) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-429 `typ-429 ~[[%fixture %entry imp-429-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-429-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-429 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-429-1]]))
2663+ (weld (weld (check ~.types-import-sur-record-graph src-432 `tok-432 `tre-432) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-432 `typ-432 ~[[%fixture %entry imp-432-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-432-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-432 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-432-1]]))
2664+++ test-types-list-branch
2665+ (weld (check ~.types-list-branch src-433 `tok-433 `tre-433) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-433 `typ-433 ~ ~ ~))
2638++ test-types-list-cons
2666++ test-types-list-cons
2639− (weld (check ~.types-list-cons src-430 `tok-430 `tre-430) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-430 `typ-430 ~ ~ ~))
2667+ (weld (check ~.types-list-cons src-434 `tok-434 `tre-434) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-434 `typ-434 ~ ~ ~))
2640++ test-types-list-context
2668++ test-types-list-context
2641− (weld (check ~.types-list-context src-431 `tok-431 `tre-431) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-431 `typ-431 ~ ~ ~))
2669+ (weld (check ~.types-list-context src-435 `tok-435 `tre-435) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-435 `typ-435 ~ ~ ~))
2642++ test-types-list-imported
2670++ test-types-list-imported
2643− (weld (check ~.types-list-imported src-432 `tok-432 `tre-432) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-432 `typ-432 ~[[%fixture %texts imp-432-1] [%fixture %ships imp-432-2]] ~ ~))
2671+ (weld (check ~.types-list-imported src-436 `tok-436 `tre-436) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-436 `typ-436 ~[[%fixture %texts imp-436-1] [%fixture %ships imp-436-2]] ~ ~))
2644++ test-types-list-pattern-imported
2672++ test-types-list-pattern-imported
2645− (weld (check ~.types-list-pattern-imported src-433 `tok-433 `tre-433) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-433 `typ-433 ~[[%fixture %texts imp-433-1] [%fixture %text-set imp-433-2]] ~ ~))
2673+ (weld (check ~.types-list-pattern-imported src-437 `tok-437 `tre-437) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-437 `typ-437 ~[[%fixture %texts imp-437-1] [%fixture %text-set imp-437-2]] ~ ~))
2646++ test-types-list-patterns
2674++ test-types-list-patterns
2647− (weld (check ~.types-list-patterns src-434 `tok-434 `tre-434) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-434 `typ-434 ~ ~ ~))
2675+ (weld (check ~.types-list-patterns src-438 `tok-438 `tre-438) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-438 `typ-438 ~ ~ ~))
2648++ test-types-module-fixtures
2676++ test-types-module-fixtures
2649− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-435 `tok-435 `tre-435) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-435 `typ-435 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-435-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-435-2]])) (check-module-trees ~.types-module-fixtures `mtre-435 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-435-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-435-2]]))
2677+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-439 `tok-439 `tre-439) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-439 `typ-439 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-439-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-439-2]])) (check-module-trees ~.types-module-fixtures `mtre-439 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-439-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-439-2]]))
2650++ test-types-module-mixed
2678++ test-types-module-mixed
2651− (weld (weld (check ~.types-module-mixed src-436 `tok-436 `tre-436) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-436 `typ-436 ~[[%fixture %title imp-436-1]] ~[[%label mark-436-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-436-1]])) (check-module-trees ~.types-module-mixed `mtre-436 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-436-1]]))
2679+ (weld (weld (check ~.types-module-mixed src-440 `tok-440 `tre-440) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-440 `typ-440 ~[[%fixture %title imp-440-1]] ~[[%label mark-440-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-440-1]])) (check-module-trees ~.types-module-mixed `mtre-440 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-440-1]]))
2652++ test-types-null-context
2680++ test-types-null-context
2653− (weld (check ~.types-null-context src-437 `tok-437 `tre-437) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-437 `typ-437))
2681+ (weld (check ~.types-null-context src-441 `tok-441 `tre-441) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-441 `typ-441))
2654++ test-types-null-overlap
2682++ test-types-null-overlap
2655− (weld (check ~.types-null-overlap src-438 `tok-438 `tre-438) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-438 `typ-438))
2683+ (weld (check ~.types-null-overlap src-442 `tok-442 `tre-442) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-442 `typ-442))
2656++ test-types-null-unresolved
2684++ test-types-null-unresolved
2657− (weld (check ~.types-null-unresolved src-439 `tok-439 `tre-439) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-439 `typ-439))
2685+ (weld (check ~.types-null-unresolved src-443 `tok-443 `tre-443) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-443 `typ-443))
2658++ test-types-partial-apply
2686++ test-types-partial-apply
2659− (weld (check ~.types-partial-apply src-440 `tok-440 `tre-440) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-440 `typ-440))
2687+ (weld (check ~.types-partial-apply src-444 `tok-444 `tre-444) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-444 `typ-444))
2660++ test-types-partial-atom-alias
2688++ test-types-partial-atom-alias
2661− (weld (check ~.types-partial-atom-alias src-441 `tok-441 `tre-441) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-441 `typ-441))
2689+ (weld (check ~.types-partial-atom-alias src-445 `tok-445 `tre-445) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-445 `typ-445))
2662++ test-types-partial-atom-constraint
2690++ test-types-partial-atom-constraint
2663− (weld (check ~.types-partial-atom-constraint src-442 `tok-442 `tre-442) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-442 `typ-442))
2691+ (weld (check ~.types-partial-atom-constraint src-446 `tok-446 `tre-446) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-446 `typ-446))
2664++ test-types-partial-atom-widening
2692++ test-types-partial-atom-widening
2665− (weld (check ~.types-partial-atom-widening src-443 `tok-443 `tre-443) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-443 `typ-443))
2693+ (weld (check ~.types-partial-atom-widening src-447 `tok-447 `tre-447) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-447 `typ-447))
2666++ test-types-partial-aura
2694++ test-types-partial-aura
2667− (weld (check ~.types-partial-aura src-444 `tok-444 `tre-444) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-444 `typ-444))
2695+ (weld (check ~.types-partial-aura src-448 `tok-448 `tre-448) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-448 `typ-448))
2668++ test-types-partial-aura-family
2696++ test-types-partial-aura-family
2669− (weld (check ~.types-partial-aura-family src-445 `tok-445 `tre-445) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-445 `typ-445))
2697+ (weld (check ~.types-partial-aura-family src-449 `tok-449 `tre-449) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-449 `typ-449))
2670++ test-types-partial-aura-generalization
2698++ test-types-partial-aura-generalization
2671− (weld (check ~.types-partial-aura-generalization src-446 `tok-446 `tre-446) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-446 `typ-446))
2699+ (weld (check ~.types-partial-aura-generalization src-450 `tok-450 `tre-450) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-450 `typ-450))
2672++ test-types-partial-bare-atom
2700++ test-types-partial-bare-atom
2673− (weld (check ~.types-partial-bare-atom src-447 `tok-447 `tre-447) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-447 `typ-447))
2701+ (weld (check ~.types-partial-bare-atom src-451 `tok-451 `tre-451) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-451 `typ-451))
2674++ test-types-partial-branch-widening
2702++ test-types-partial-branch-widening
2675− (weld (check ~.types-partial-branch-widening src-448 `tok-448 `tre-448) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-448 `typ-448))
2703+ (weld (check ~.types-partial-branch-widening src-452 `tok-452 `tre-452) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-452 `typ-452))
2676++ test-types-partial-conflicting-sites
2704++ test-types-partial-conflicting-sites
2677− (weld (check ~.types-partial-conflicting-sites src-449 `tok-449 `tre-449) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-449 `typ-449))
2705+ (weld (check ~.types-partial-conflicting-sites src-453 `tok-453 `tre-453) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-453 `typ-453))
2678++ test-types-partial-decimal-default
2706++ test-types-partial-decimal-default
2679− (weld (check ~.types-partial-decimal-default src-450 `tok-450 `tre-450) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-450 `typ-450))
2707+ (weld (check ~.types-partial-decimal-default src-454 `tok-454 `tre-454) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-454 `typ-454))
2680++ test-types-partial-dependency-chain
2708++ test-types-partial-dependency-chain
2681− (weld (check ~.types-partial-dependency-chain src-451 `tok-451 `tre-451) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-451 `typ-451))
2709+ (weld (check ~.types-partial-dependency-chain src-455 `tok-455 `tre-455) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-455 `typ-455))
2682++ test-types-partial-explicit-capital
2710++ test-types-partial-explicit-capital
2683− (weld (check ~.types-partial-explicit-capital src-452 `tok-452 `tre-452) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-452 `typ-452))
2711+ (weld (check ~.types-partial-explicit-capital src-456 `tok-456 `tre-456) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-456 `typ-456))
2684++ test-types-partial-forward
2712++ test-types-partial-forward
2685− (weld (check ~.types-partial-forward src-453 `tok-453 `tre-453) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-453 `typ-453))
2713+ (weld (check ~.types-partial-forward src-457 `tok-457 `tre-457) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-457 `typ-457))
2686++ test-types-partial-generalization
2714++ test-types-partial-generalization
2687− (weld (check ~.types-partial-generalization src-454 `tok-454 `tre-454) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-454 `typ-454))
2715+ (weld (check ~.types-partial-generalization src-458 `tok-458 `tre-458) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-458 `typ-458))
2688++ test-types-partial-identity
2716++ test-types-partial-identity
2689− (weld (check ~.types-partial-identity src-455 `tok-455 `tre-455) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-455 `typ-455))
2717+ (weld (check ~.types-partial-identity src-459 `tok-459 `tre-459) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-459 `typ-459))
2690++ test-types-partial-independent-atoms
2718++ test-types-partial-independent-atoms
2691− (weld (check ~.types-partial-independent-atoms src-456 `tok-456 `tre-456) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-456 `typ-456))
2719+ (weld (check ~.types-partial-independent-atoms src-460 `tok-460 `tre-460) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-460 `typ-460))
2692++ test-types-partial-local-molds
2720++ test-types-partial-local-molds
2693− (weld (check ~.types-partial-local-molds src-457 `tok-457 `tre-457) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-457 `typ-457))
2721+ (weld (check ~.types-partial-local-molds src-461 `tok-461 `tre-461) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-461 `typ-461))
2694++ test-types-partial-locals
2722++ test-types-partial-locals
2695− (weld (check ~.types-partial-locals src-458 `tok-458 `tre-458) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-458 `typ-458))
2723+ (weld (check ~.types-partial-locals src-462 `tok-462 `tre-462) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-462 `typ-462))
2696++ test-types-partial-many-atom-constraints
2724++ test-types-partial-many-atom-constraints
2697− (weld (check ~.types-partial-many-atom-constraints src-459 `tok-459 `tre-459) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-459 `typ-459))
2725+ (weld (check ~.types-partial-many-atom-constraints src-463 `tok-463 `tre-463) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-463 `typ-463))
2698++ test-types-partial-mold-bare-aura
2726++ test-types-partial-mold-bare-aura
2699− (weld (check ~.types-partial-mold-bare-aura src-460 `tok-460 `tre-460) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-460 `typ-460))
2727+ (weld (check ~.types-partial-mold-bare-aura src-464 `tok-464 `tre-464) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-464 `typ-464))
2700++ test-types-partial-mold-composite
2728++ test-types-partial-mold-composite
2701− (weld (check ~.types-partial-mold-composite src-461 `tok-461 `tre-461) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-461 `typ-461))
2729+ (weld (check ~.types-partial-mold-composite src-465 `tok-465 `tre-465) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-465 `typ-465))
2702++ test-types-partial-mold-forward
2730++ test-types-partial-mold-forward
2703− (weld (check ~.types-partial-mold-forward src-462 `tok-462 `tre-462) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-462 `typ-462))
2731+ (weld (check ~.types-partial-mold-forward src-466 `tok-466 `tre-466) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-466 `typ-466))
2704++ test-types-partial-mold-recursive
2732++ test-types-partial-mold-recursive
2705− (weld (check ~.types-partial-mold-recursive src-463 `tok-463 `tre-463) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-463 `typ-463))
2733+ (weld (check ~.types-partial-mold-recursive src-467 `tok-467 `tre-467) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-467 `typ-467))
2706++ test-types-partial-occurs
2734++ test-types-partial-occurs
2707− (weld (check ~.types-partial-occurs src-464 `tok-464 `tre-464) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-464 `typ-464))
2735+ (weld (check ~.types-partial-occurs src-468 `tok-468 `tre-468) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-468 `typ-468))
2708++ test-types-partial-projection
2736++ test-types-partial-projection
2709− (weld (check ~.types-partial-projection src-465 `tok-465 `tre-465) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-465 `typ-465))
2737+ (weld (check ~.types-partial-projection src-469 `tok-469 `tre-469) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-469 `typ-469))
2710++ test-types-partial-shadow-global
2738++ test-types-partial-shadow-global
2711− (weld (check ~.types-partial-shadow-global src-466 `tok-466 `tre-466) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-466 `typ-466))
2739+ (weld (check ~.types-partial-shadow-global src-470 `tok-470 `tre-470) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-470 `typ-470))
2712++ test-types-partial-shared-tvar
2740++ test-types-partial-shared-tvar
2713− (weld (check ~.types-partial-shared-tvar src-467 `tok-467 `tre-467) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-467 `typ-467))
2741+ (weld (check ~.types-partial-shared-tvar src-471 `tok-471 `tre-471) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-471 `typ-471))
2714++ test-types-partial-union-cases
2742++ test-types-partial-union-cases
2715− (weld (check ~.types-partial-union-cases src-468 `tok-468 `tre-468) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-468 `typ-468))
2743+ (weld (check ~.types-partial-union-cases src-472 `tok-472 `tre-472) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-472 `typ-472))
2716++ test-types-partial-union-edges
2744++ test-types-partial-union-edges
2717− (weld (check ~.types-partial-union-edges src-469 `tok-469 `tre-469) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-469 `typ-469))
2745+ (weld (check ~.types-partial-union-edges src-473 `tok-473 `tre-473) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-473 `typ-473))
2718++ test-types-partial-unresolved-tag
2746++ test-types-partial-unresolved-tag
2719− (weld (check ~.types-partial-unresolved-tag src-470 `tok-470 `tre-470) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-470 `typ-470))
2747+ (weld (check ~.types-partial-unresolved-tag src-474 `tok-474 `tre-474) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-474 `typ-474))
2720++ test-types-prelude-direct
2748++ test-types-prelude-direct
2721− (weld (check ~.types-prelude-direct src-471 `tok-471 `tre-471) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-471 `typ-471 ~ ~ ~))
2749+ (weld (check ~.types-prelude-direct src-475 `tok-475 `tre-475) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-475 `typ-475 ~ ~ ~))
2722++ test-types-prelude-interface
2750++ test-types-prelude-interface
2723− (weld (weld (check ~.types-prelude-interface src-472 `tok-472 `tre-472) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-472 `typ-472 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-472-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-472-2]])) (check-module-trees ~.types-prelude-interface `mtre-472 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-472-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-472-2]]))
2751+ (weld (weld (check ~.types-prelude-interface src-476 `tok-476 `tre-476) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-476 `typ-476 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-476-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-476-2]])) (check-module-trees ~.types-prelude-interface `mtre-476 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-476-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-476-2]]))
2724++ test-types-record-bound-variable
2752++ test-types-record-bound-variable
2725− (weld (check ~.types-record-bound-variable src-473 `tok-473 `tre-473) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-473 `typ-473))
2753+ (weld (check ~.types-record-bound-variable src-477 `tok-477 `tre-477) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-477 `typ-477))
2726++ test-types-record-faces
2754++ test-types-record-faces
2727− (weld (check ~.types-record-faces src-474 `tok-474 `tre-474) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-474 `typ-474))
2755+ (weld (check ~.types-record-faces src-478 `tok-478 `tre-478) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-478 `typ-478))
2728++ test-types-record-import
2756++ test-types-record-import
2729− (weld (weld (check ~.types-record-import src-475 `tok-475 `tre-475) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-475 `typ-475 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-475-1]])) (check-module-trees ~.types-record-import `mtre-475 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-475-1]]))
2757+ (weld (weld (check ~.types-record-import src-479 `tok-479 `tre-479) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-479 `typ-479 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-479-1]])) (check-module-trees ~.types-record-import `mtre-479 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-479-1]]))
2730++ test-types-record-local-scheme
2758++ test-types-record-local-scheme
2731− (weld (check ~.types-record-local-scheme src-476 `tok-476 `tre-476) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-476 `typ-476))
2759+ (weld (check ~.types-record-local-scheme src-480 `tok-480 `tre-480) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-480 `typ-480))
2732++ test-types-record-nested
2760++ test-types-record-nested
2733− (weld (check ~.types-record-nested src-477 `tok-477 `tre-477) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-477 `typ-477))
2761+ (weld (check ~.types-record-nested src-481 `tok-481 `tre-481) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-481 `typ-481))
2734++ test-types-record-to-tuple
2762++ test-types-record-to-tuple
2735− (weld (check ~.types-record-to-tuple src-478 `tok-478 `tre-478) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-478 `typ-478))
2763+ (weld (check ~.types-record-to-tuple src-482 `tok-482 `tre-482) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-482 `typ-482))
2736++ test-types-recursive-branch
2764++ test-types-recursive-branch
2737− (weld (check ~.types-recursive-branch src-479 `tok-479 `tre-479) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-479 `typ-479 ~ ~ ~))
2765+ (weld (check ~.types-recursive-branch src-483 `tok-483 `tre-483) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-483 `typ-483 ~ ~ ~))
2738++ test-types-recursive-gate
2766++ test-types-recursive-gate
2739− (weld (check ~.types-recursive-gate src-480 `tok-480 `tre-480) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-480 `typ-480))
2767+ (weld (check ~.types-recursive-gate src-484 `tok-484 `tre-484) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-484 `typ-484))
2740++ test-types-union-alias
2768++ test-types-union-alias
2741− (weld (check ~.types-union-alias src-481 `tok-481 `tre-481) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-481 `typ-481))
2769+ (weld (check ~.types-union-alias src-485 `tok-485 `tre-485) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-485 `typ-485))
2742++ test-types-union-branch-context
2770++ test-types-union-branch-context
2743− (weld (check ~.types-union-branch-context src-482 `tok-482 `tre-482) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-482 `typ-482))
2771+ (weld (check ~.types-union-branch-context src-486 `tok-486 `tre-486) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-486 `typ-486))
2744++ test-types-union-branch-pending
2772++ test-types-union-branch-pending
2745− (weld (check ~.types-union-branch-pending src-483 `tok-483 `tre-483) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-483 `typ-483))
2773+ (weld (check ~.types-union-branch-pending src-487 `tok-487 `tre-487) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-487 `typ-487))
2746++ test-types-union-constructor-shape
2774++ test-types-union-constructor-shape
2747− (weld (check ~.types-union-constructor-shape src-484 `tok-484 `tre-484) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-484 `typ-484))
2775+ (weld (check ~.types-union-constructor-shape src-488 `tok-488 `tre-488) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-488 `typ-488))
2748++ test-types-union-context-flow
2776++ test-types-union-context-flow
2749− (weld (check ~.types-union-context-flow src-485 `tok-485 `tre-485) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-485 `typ-485))
2777+ (weld (check ~.types-union-context-flow src-489 `tok-489 `tre-489) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-489 `typ-489))
2750++ test-types-union-import
2778++ test-types-union-import
2751− (weld (weld (check ~.types-union-import src-486 `tok-486 `tre-486) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-486 `typ-486 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]])) (check-module-trees ~.types-union-import `mtre-486 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]]))
2779+ (weld (weld (check ~.types-union-import src-490 `tok-490 `tre-490) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-490 `typ-490 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-490-1]])) (check-module-trees ~.types-union-import `mtre-490 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-490-1]]))
2752++ test-types-union-local-pending
2780++ test-types-union-local-pending
2753− (weld (check ~.types-union-local-pending src-487 `tok-487 `tre-487) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-487 `typ-487))
2781+ (weld (check ~.types-union-local-pending src-491 `tok-491 `tre-491) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-491 `typ-491))
2754++ test-types-union-overlap
2782++ test-types-union-overlap
2755− (weld (check ~.types-union-overlap src-488 `tok-488 `tre-488) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-488 `typ-488))
2783+ (weld (check ~.types-union-overlap src-492 `tok-492 `tre-492) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-492 `typ-492))
2756++ test-types-union-overlap-nested
2784++ test-types-union-overlap-nested
2757− (weld (check ~.types-union-overlap-nested src-489 `tok-489 `tre-489) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-489 `typ-489))
2785+ (weld (check ~.types-union-overlap-nested src-493 `tok-493 `tre-493) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-493 `typ-493))
2758++ test-types-union-phantom-generic
2786++ test-types-union-phantom-generic
2759− (weld (check ~.types-union-phantom-generic src-490 `tok-490 `tre-490) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-490 `typ-490))
2787+ (weld (check ~.types-union-phantom-generic src-494 `tok-494 `tre-494) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-494 `typ-494))
2760++ test-types-union-print-cross-namespace
2788++ test-types-union-print-cross-namespace
2761− (weld (weld (check ~.types-union-print-cross-namespace src-491 `tok-491 `tre-491) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-491 `typ-491 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-491-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-491 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-491-1]]))
2789+ (weld (weld (check ~.types-union-print-cross-namespace src-495 `tok-495 `tre-495) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-495 `typ-495 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-495-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-495 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-495-1]]))
2762++ test-types-union-print-distinct
2790++ test-types-union-print-distinct
2763− (weld (weld (check ~.types-union-print-distinct src-492 `tok-492 `tre-492) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-492 `typ-492 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-492-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-492-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-492-3]])) (check-module-trees ~.types-union-print-distinct `mtre-492 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-492-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-492-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-492-3]]))
2791+ (weld (weld (check ~.types-union-print-distinct src-496 `tok-496 `tre-496) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-496 `typ-496 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-496-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-496-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-496-3]])) (check-module-trees ~.types-union-print-distinct `mtre-496 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-496-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-496-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-496-3]]))
2764++ test-types-union-print-escape
2792++ test-types-union-print-escape
2765− (weld (check ~.types-union-print-escape src-493 `tok-493 `tre-493) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-493 `typ-493))
2793+ (weld (check ~.types-union-print-escape src-497 `tok-497 `tre-497) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-497 `typ-497))
2766++ test-types-union-print-local
2794++ test-types-union-print-local
2767− (weld (check ~.types-union-print-local src-494 `tok-494 `tre-494) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-494 `typ-494))
2795+ (weld (check ~.types-union-print-local src-498 `tok-498 `tre-498) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-498 `typ-498))
2768++ test-types-union-print-nested
2796++ test-types-union-print-nested
2769− (weld (check ~.types-union-print-nested src-495 `tok-495 `tre-495) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-495 `typ-495))
2797+ (weld (check ~.types-union-print-nested src-499 `tok-499 `tre-499) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-499 `typ-499))
2770++ test-types-union-print-same-origin
2798++ test-types-union-print-same-origin
2771− (weld (weld (check ~.types-union-print-same-origin src-496 `tok-496 `tre-496) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-496 `typ-496 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-496-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-496 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-496-1]]))
2799+ (weld (weld (check ~.types-union-print-same-origin src-500 `tok-500 `tre-500) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-500 `typ-500 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-500-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-500 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-500-1]]))
2772++ test-types-union-print-transitive
2800++ test-types-union-print-transitive
2773− (weld (weld (check ~.types-union-print-transitive src-497 `tok-497 `tre-497) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-497 `typ-497 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-497-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-497-2]])) (check-module-trees ~.types-union-print-transitive `mtre-497 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-497-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-497-2]]))
2801+ (weld (weld (check ~.types-union-print-transitive src-501 `tok-501 `tre-501) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-501 `typ-501 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-501-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-501-2]])) (check-module-trees ~.types-union-print-transitive `mtre-501 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-501-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-501-2]]))
2774++ test-types-union-singleton
2802++ test-types-union-singleton
2775− (weld (check ~.types-union-singleton src-498 `tok-498 `tre-498) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-498 `typ-498))
2803+ (weld (check ~.types-union-singleton src-502 `tok-502 `tre-502) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-502 `typ-502))
2776++ test-types-union-tag-atoms
2804++ test-types-union-tag-atoms
2777− (weld (check ~.types-union-tag-atoms src-499 `tok-499 `tre-499) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-499 `typ-499))
2805+ (weld (check ~.types-union-tag-atoms src-503 `tok-503 `tre-503) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-503 `typ-503))
2778++ test-types-union-tags
2806++ test-types-union-tags
2779− (weld (check ~.types-union-tags src-500 `tok-500 `tre-500) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-500 `typ-500))
2807+ (weld (check ~.types-union-tags src-504 `tok-504 `tre-504) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-504 `typ-504))
2780++ test-types-union-unresolved
2808++ test-types-union-unresolved
2781− (weld (check ~.types-union-unresolved src-501 `tok-501 `tre-501) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-501 `typ-501))
2809+ (weld (check ~.types-union-unresolved src-505 `tok-505 `tre-505) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-505 `typ-505))
2782++ test-types-union-unresolved-flow
2810++ test-types-union-unresolved-flow
2783− (weld (check ~.types-union-unresolved-flow src-502 `tok-502 `tre-502) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-502 `typ-502))
2811+ (weld (check ~.types-union-unresolved-flow src-506 `tok-506 `tre-506) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-506 `typ-506))
2784++ test-types-unit-context
2812++ test-types-unit-context
2785− (weld (check ~.types-unit-context src-503 `tok-503 `tre-503) (check-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-503 `typ-503))
2813+ (weld (check ~.types-unit-context src-507 `tok-507 `tre-507) (check-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-507 `typ-507))
2786++ test-types-unit-patterns
2814++ test-types-unit-patterns
2787− (weld (check ~.types-unit-patterns src-504 `tok-504 `tre-504) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-504 `typ-504))
2815+ (weld (check ~.types-unit-patterns src-508 `tok-508 `tre-508) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-508 `typ-508))
2788::
2816::
2789:: +check: run golden:jibb on a case and compare both outputs
2817:: +check: run golden:jibb on a case and compare both outputs
2790::
2818::
tests/type-module-scope/about.txt+1−1
@@ -10,4 +10,4 @@ The real vendored prelude and the existing two-module prelude golden check
10that source-wrapper and prepared-interface outputs agree with each other and
10that source-wrapper and prepared-interface outputs agree with each other and
11with the golden report under eval and on the ship.
11with the golden report under eval and on the ship.
12An imported list stays representable with an omitted or altered prelude
12An imported list stays representable with an omitted or altered prelude
13−list, but its list literals, cons, null and list patterns fail closed; a malformed prelude is rejected.
13+list, but its list literals, cons, null and list patterns, including literals in branches, fail closed; a malformed prelude is rejected.
tests/type-module-scope/expected.txt+2
@@ -18,6 +18,7 @@ duplicate module sources: /ui/dup/jibb
18real prelude prepared/wrapper and golden match
18real prelude prepared/wrapper and golden match
19partial inference; module not checked
19partial inference; module not checked
20++ imported: $-((list @t) (list @t))
20++ imported: $-((list @t) (list @t))
21+++ imported-branch: list literal needs the standard prelude in partial inference
21++ imported-cons: list literal needs the standard prelude in partial inference
22++ imported-cons: list literal needs the standard prelude in partial inference
22++ imported-empty: list literal needs the standard prelude in partial inference
23++ imported-empty: list literal needs the standard prelude in partial inference
23++ imported-pattern: list pattern needs the standard prelude in partial inference
24++ imported-pattern: list pattern needs the standard prelude in partial inference
@@ -26,6 +27,7 @@ partial inference; module not checked
26++ bridge: cast mold is not supported by partial inference
27++ bridge: cast mold is not supported by partial inference
27partial inference; module not checked
28partial inference; module not checked
28++ imported: $-((list @t) (list @t))
29++ imported: $-((list @t) (list @t))
30+++ imported-branch: list literal needs the standard prelude in partial inference
29++ imported-cons: list literal needs the standard prelude in partial inference
31++ imported-cons: list literal needs the standard prelude in partial inference
30++ imported-empty: list literal needs the standard prelude in partial inference
32++ imported-empty: list literal needs the standard prelude in partial inference
31++ imported-pattern: list pattern needs the standard prelude in partial inference
33++ imported-pattern: list pattern needs the standard prelude in partial inference